8aa8e129df40705473eb7c85387e9c704b99ac96
[sdc.git] / openecomp-be / lib / openecomp-core-lib / openecomp-zusammen-lib / openecomp-zusammen-core / src / main / java / org / openecomp / core / zusammen / db / impl / ZusammenConnectorImpl.java
1 package org.openecomp.core.zusammen.db.impl;
2
3 import com.amdocs.zusammen.adaptor.inbound.api.item.ElementAdaptorFactory;
4 import com.amdocs.zusammen.adaptor.inbound.api.item.ItemAdaptorFactory;
5 import com.amdocs.zusammen.adaptor.inbound.api.item.ItemVersionAdaptorFactory;
6 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
7 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
8 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
9 import com.amdocs.zusammen.datatypes.Id;
10 import com.amdocs.zusammen.datatypes.SessionContext;
11 import com.amdocs.zusammen.datatypes.Space;
12 import com.amdocs.zusammen.datatypes.item.ElementContext;
13 import com.amdocs.zusammen.datatypes.item.Info;
14 import com.amdocs.zusammen.datatypes.item.Item;
15 import com.amdocs.zusammen.datatypes.item.ItemVersion;
16 import com.amdocs.zusammen.datatypes.item.ItemVersionData;
17 import com.amdocs.zusammen.datatypes.itemversion.Tag;
18 import com.amdocs.zusammen.datatypes.response.Response;
19 import com.amdocs.zusammen.datatypes.response.ReturnCode;
20 import org.openecomp.core.zusammen.db.ZusammenConnector;
21 import org.openecomp.core.zusammen.impl.CassandraConnectionInitializer;
22 import org.openecomp.core.zusammen.impl.ItemElementLoggerTargetServiceName;
23 import org.openecomp.sdc.datatypes.error.ErrorLevel;
24 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
25 import org.openecomp.sdc.logging.types.LoggerConstants;
26 import org.openecomp.sdc.logging.types.LoggerErrorCode;
27
28 import java.util.Collection;
29 import java.util.Optional;
30
31 public class ZusammenConnectorImpl implements ZusammenConnector {
32
33   private ItemAdaptorFactory itemAdaptorFactory;
34   private ItemVersionAdaptorFactory versionAdaptorFactory;
35   private ElementAdaptorFactory elementAdaptorFactory;
36
37   public ZusammenConnectorImpl(
38       ItemAdaptorFactory itemAdaptorFactory,
39       ItemVersionAdaptorFactory versionAdaptorFactory,
40       ElementAdaptorFactory elementAdaptorFactory) {
41     this.itemAdaptorFactory = itemAdaptorFactory;
42     this.versionAdaptorFactory = versionAdaptorFactory;
43     this.elementAdaptorFactory = elementAdaptorFactory;
44     CassandraConnectionInitializer.setCassandraConnectionPropertiesToSystem();
45   }
46
47   @Override
48   public Collection<Item> listItems(SessionContext context) {
49     Response<Collection<Item>> response =
50         itemAdaptorFactory.createInterface(context).list(context);
51     if (response.isSuccessful()) {
52       return response.getValue();
53     } else {
54       return null;
55     }
56   }
57
58   @Override
59   public Id createItem(SessionContext context, Info info) {
60     Response<Id> response = itemAdaptorFactory.createInterface(context).create(context, info);
61     if (response.isSuccessful()) {
62       return response.getValue();
63     } else {
64       throw new RuntimeException(
65           "failed to create Item. message:" + response.getReturnCode().getMessage());
66     }
67   }
68
69   @Override
70   public void updateItem(SessionContext context, Id itemId, Info info) {
71     Response<Void> response =
72         itemAdaptorFactory.createInterface(context).update(context, itemId, info);
73
74     if (!response.isSuccessful()) {
75       throw new RuntimeException("failed to update Item . ItemId:" + itemId + "" +
76           " message:" + response.getReturnCode().getMessage());
77     }
78   }
79
80   @Override
81   public Collection<ItemVersion> listVersions(SessionContext context, Id itemId) {
82     Response<Collection<ItemVersion>> versions =
83         versionAdaptorFactory.createInterface(context).list(context, Space.PRIVATE, itemId);
84     if (!versions.isSuccessful()) {
85       logErrorMessageToMdc(ItemElementLoggerTargetServiceName.ITEM_VERSION_RETRIEVAL, versions
86           .getReturnCode());
87       throw new RuntimeException(versions.getReturnCode().getMessage()); // TODO: 3/26/2017
88     }
89     return versions.getValue();
90   }
91
92   @Override
93   public Id createVersion(SessionContext context, Id itemId, Id baseVersionId,
94                           ItemVersionData itemVersionData) {
95     Response<Id> response = versionAdaptorFactory.createInterface(context).create(context, itemId,
96         baseVersionId, itemVersionData);
97     if (response.isSuccessful()) {
98       return response.getValue();
99     } else {
100       throw new RuntimeException("failed to create Item Version. ItemId:" + itemId + " based " +
101           "on:" + baseVersionId +
102           " message:" + response
103           .getReturnCode().getMessage());
104     }
105   }
106
107   @Override
108   public void updateVersion(SessionContext context, Id itemId, Id versionId,
109                             ItemVersionData itemVersionData) {
110     Response<Void> response = versionAdaptorFactory.createInterface(context)
111         .update(context, itemId, versionId, itemVersionData);
112     if (!response.isSuccessful()) {
113       throw new RuntimeException(
114           String.format("failed to create Item Version. ItemId: %s, versionId: %s, message: %s",
115               itemId.getValue(), versionId.getValue(), response.getReturnCode().getMessage()));
116     }
117   }
118
119   @Override
120   public void tagVersion(SessionContext context, Id itemId, Id versionId, Tag tag) {
121     Response<Void> response = versionAdaptorFactory.createInterface(context)
122         .tag(context, itemId, versionId, null, tag);
123     if (!response.isSuccessful()) {
124       throw new RuntimeException(String.format(
125           "failed to tag Item Version with tag %s. ItemId: %s, versionId: %s, message: %s",
126           tag.getName(), itemId.getValue(), versionId.getValue(), response.getReturnCode()
127               .getMessage()));
128     }
129   }
130
131   @Override
132   public void resetVersionHistory(SessionContext context, Id itemId, Id versionId,
133                                   String changeRef) {
134     Response<Void> response = versionAdaptorFactory.createInterface(context)
135         .resetHistory(context, itemId, versionId, changeRef);
136     if (!response.isSuccessful()) {
137       throw new RuntimeException(String.format(
138           "failed to reset Item Version back to %s. ItemId: %s, versionId: %s, message: %s",
139           changeRef, itemId.getValue(), versionId.getValue(),
140           response.getReturnCode().getMessage()));
141     }
142   }
143
144   @Override
145   public Collection<ElementInfo> listElements(SessionContext context,
146                                               ElementContext elementContext,
147                                               Id parentElementId) {
148     Response<Collection<ElementInfo>> elementInfosResponse = elementAdaptorFactory
149         .createInterface(context).list(context, elementContext, parentElementId);
150     if (elementInfosResponse.isSuccessful()) {
151       return elementInfosResponse.getValue();
152     } else {
153       logErrorMessageToMdc(ItemElementLoggerTargetServiceName.ELEMENT_GET_BY_PROPERTY,
154           elementInfosResponse.getReturnCode());
155       throw new RuntimeException(elementInfosResponse.getReturnCode().getMessage());
156     }
157   }
158
159   @Override
160   public Response<ElementInfo> getElementInfo(SessionContext context, ElementContext elementContext,
161                                               Id elementId) {
162     return elementAdaptorFactory.createInterface(context)
163         .getInfo(context, elementContext, elementId);
164   }
165
166
167   @Override
168   public Response<Element> getElement(SessionContext context, ElementContext elementContext,
169                                       Id elementId) {
170     return elementAdaptorFactory.createInterface(context).get(context, elementContext, elementId);
171   }
172
173   @Override
174   public Optional<Element> saveElement(SessionContext context, ElementContext elementContext,
175                                        ZusammenElement element, String message) {
176     Response<Element> saveResponse = elementAdaptorFactory.createInterface(context)
177         .save(context, elementContext, element, message);
178     return saveResponse.isSuccessful()
179         ? Optional.of(saveResponse.getValue())
180         : Optional.empty(); // TODO: 3/21/2017 error?
181   }
182
183   private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName
184                                         itemElementLoggerTargetServiceName,
185                                     ReturnCode returnCode) {
186     logErrorMessageToMdc(itemElementLoggerTargetServiceName, returnCode.toString());
187   }
188
189   private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName
190                                         itemElementLoggerTargetServiceName,
191                                     String message) {
192     MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
193         itemElementLoggerTargetServiceName.getDescription(),
194         ErrorLevel.ERROR.name(),
195         LoggerErrorCode.BUSINESS_PROCESS_ERROR.getErrorCode(),
196         message);
197   }
198
199
200 }