deb5ffde3567cdb5f8f47fe2cb39b6ef83439ed4
[sdc.git] /
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 = itemAdaptorFactory.createInterface(context).list(context);
64     if (!response.isSuccessful()) {
65       throw new RuntimeException(
66           "Failed to list Items. message:" + response.getReturnCode().toString());
67     }
68     return response.getValue();
69   }
70
71   @Override
72   public Id createItem(SessionContext context, Info info) {
73     Response<Id> response = itemAdaptorFactory.createInterface(context).create(context, info);
74     if (response.isSuccessful()) {
75       return response.getValue();
76     } else {
77       throw new RuntimeException(
78           "failed to create Item. message:" + response.getReturnCode().toString());
79     }
80   }
81
82   @Override
83   public void updateItem(SessionContext context, Id itemId, Info info) {
84     Response<Void> response =
85         itemAdaptorFactory.createInterface(context).update(context, itemId, info);
86
87     if (!response.isSuccessful()) {
88       throw new RuntimeException("failed to update Item . ItemId:" + itemId + "" +
89           " message:" + response.getReturnCode().toString());
90     }
91   }
92
93   @Override
94   public Collection<ItemVersion> listVersions(SessionContext context, Id itemId) {
95     Response<Collection<ItemVersion>> versions =
96         versionAdaptorFactory.createInterface(context).list(context, Space.PRIVATE, itemId);
97     if (!versions.isSuccessful()) {
98       logErrorMessageToMdc(ItemElementLoggerTargetServiceName.ITEM_VERSION_RETRIEVAL, versions
99           .getReturnCode());
100       throw new RuntimeException(versions.getReturnCode().toString()); // TODO: 3/26/2017
101     }
102     return versions.getValue();
103   }
104
105   @Override
106   public Id createVersion(SessionContext context, Id itemId, Id baseVersionId,
107                           ItemVersionData itemVersionData) {
108     Response<Id> response = versionAdaptorFactory.createInterface(context).create(context, itemId,
109         baseVersionId, itemVersionData);
110     if (response.isSuccessful()) {
111       return response.getValue();
112     } else {
113       throw new RuntimeException("failed to create Item Version. ItemId:" + itemId + " based " +
114           "on:" + baseVersionId +
115           " message:" + response
116           .getReturnCode().toString());
117     }
118   }
119
120   @Override
121   public void updateVersion(SessionContext context, Id itemId, Id versionId,
122                             ItemVersionData itemVersionData) {
123     Response<Void> response = versionAdaptorFactory.createInterface(context)
124         .update(context, itemId, versionId, itemVersionData);
125     if (!response.isSuccessful()) {
126       throw new RuntimeException(
127           String.format("failed to create Item Version. ItemId: %s, versionId: %s, message: %s",
128               itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
129     }
130   }
131
132   @Override
133   public void tagVersion(SessionContext context, Id itemId, Id versionId, Tag tag) {
134     Response<Void> response = versionAdaptorFactory.createInterface(context)
135         .tag(context, itemId, versionId, null, tag);
136     if (!response.isSuccessful()) {
137       throw new RuntimeException(String.format(
138           "failed to tag Item Version with tag %s. ItemId: %s, versionId: %s, message: %s",
139           tag.getName(), itemId.getValue(), versionId.getValue(), response.getReturnCode()
140               .getMessage()));
141     }
142   }
143
144   @Override
145   public void resetVersionHistory(SessionContext context, Id itemId, Id versionId,
146                                   String changeRef) {
147     Response<Void> response = versionAdaptorFactory.createInterface(context)
148         .resetHistory(context, itemId, versionId, changeRef);
149     if (!response.isSuccessful()) {
150       throw new RuntimeException(String.format(
151           "failed to reset Item Version back to %s. ItemId: %s, versionId: %s, message: %s",
152           changeRef, itemId.getValue(), versionId.getValue(),
153           response.getReturnCode().toString()));
154     }
155   }
156
157   @Override
158   public Collection<ElementInfo> listElements(SessionContext context,
159                                               ElementContext elementContext,
160                                               Id parentElementId) {
161     Response<Collection<ElementInfo>> elementInfosResponse = elementAdaptorFactory
162         .createInterface(context).list(context, elementContext, parentElementId);
163     if (elementInfosResponse.isSuccessful()) {
164       return elementInfosResponse.getValue();
165     } else {
166       logErrorMessageToMdc(ItemElementLoggerTargetServiceName.ELEMENT_GET_BY_PROPERTY,
167           elementInfosResponse.getReturnCode());
168       throw new RuntimeException(elementInfosResponse.getReturnCode().toString());
169     }
170   }
171
172   @Override
173   public Response<ElementInfo> getElementInfo(SessionContext context, ElementContext elementContext,
174                                               Id elementId) {
175     return elementAdaptorFactory.createInterface(context)
176         .getInfo(context, elementContext, elementId);
177   }
178
179
180   @Override
181   public Response<Element> getElement(SessionContext context, ElementContext elementContext,
182                                       Id elementId) {
183     return elementAdaptorFactory.createInterface(context).get(context, elementContext, elementId);
184   }
185
186   @Override
187   public Optional<Element> saveElement(SessionContext context, ElementContext elementContext,
188                                        ZusammenElement element, String message) {
189     Response<Element> response = elementAdaptorFactory.createInterface(context)
190         .save(context, elementContext, element, message);
191     if (!response.isSuccessful()) {
192       throw new RuntimeException(String
193           .format("Failed to save element %s. ItemId: %s, versionId: %s, message: %s",
194               element.getElementId().getValue(), elementContext.getItemId().getValue(),
195               elementContext.getVersionId().getValue(), response.getReturnCode().toString()));
196     }
197     return Optional.of(response.getValue());
198   }
199
200   private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName
201                                         itemElementLoggerTargetServiceName,
202                                     ReturnCode returnCode) {
203     logErrorMessageToMdc(itemElementLoggerTargetServiceName, returnCode.toString());
204   }
205
206   private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName
207                                         itemElementLoggerTargetServiceName,
208                                     String message) {
209     MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
210         itemElementLoggerTargetServiceName.getDescription(),
211         ErrorLevel.ERROR.name(),
212         LoggerErrorCode.BUSINESS_PROCESS_ERROR.getErrorCode(),
213         message);
214   }
215
216
217 }