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