1 package org.openecomp.core.zusammen.impl;
3 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
4 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
5 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
6 import com.amdocs.zusammen.commons.health.data.HealthInfo;
7 import com.amdocs.zusammen.datatypes.Id;
8 import com.amdocs.zusammen.datatypes.SessionContext;
9 import com.amdocs.zusammen.datatypes.item.*;
10 import com.amdocs.zusammen.datatypes.itemversion.Tag;
11 import com.amdocs.zusammen.datatypes.response.Response;
12 import com.amdocs.zusammen.datatypes.response.ReturnCode;
13 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
14 import org.openecomp.core.zusammen.db.ZusammenConnector;
15 import org.openecomp.sdc.datatypes.error.ErrorLevel;
16 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
17 import org.openecomp.sdc.logging.types.LoggerConstants;
18 import org.openecomp.sdc.logging.types.LoggerErrorCode;
20 import java.util.ArrayList;
21 import java.util.Collection;
22 import java.util.List;
23 import java.util.Optional;
24 import java.util.function.Predicate;
25 import java.util.stream.Collectors;
27 public class ZusammenAdaptorImpl implements ZusammenAdaptor {
29 private ZusammenConnector connector;
31 public ZusammenAdaptorImpl(ZusammenConnector connector) {
32 this.connector = connector;
36 public Optional<ItemVersion> getFirstVersion(SessionContext context, Id itemId) {
37 Collection<ItemVersion> versions = connector.listVersions(context, itemId);
38 if(versions == null || versions.size()==0) {
39 return Optional.empty();
41 List<ItemVersion> itemVersions = new ArrayList<>(versions);
42 sortItemVersionListByModificationTimeDescOrder(itemVersions);
43 ItemVersion itemVersion = itemVersions.iterator().next();
45 return Optional.ofNullable(itemVersion);
49 public Optional<ElementInfo> getElementInfo(SessionContext context, ElementContext elementContext,
51 Response<ElementInfo> response = connector.getElementInfo(context, elementContext, elementId);
52 return response.isSuccessful() ? Optional.ofNullable(response.getValue()) : Optional.empty();
56 public Optional<Element> getElement(SessionContext context, ElementContext elementContext,
58 Response<Element> response = connector.getElement(context, elementContext, new Id(elementId));
59 return response.isSuccessful() ? Optional.ofNullable(response.getValue()) : Optional.empty();
63 public Optional<Element> getElementByName(
64 SessionContext context, ElementContext elementContext, Id parentElementId,
66 Collection<ElementInfo> elementInfos =
67 connector.listElements(context, elementContext, parentElementId);
68 Predicate<ElementInfo> elementInfoPredicate = elementInfo -> elementInfo.getInfo() != null
69 && elementName.equals(elementInfo.getInfo().getName());
70 return getFirstElementInfo(elementInfos, elementInfoPredicate)
71 .map(elementInfo -> getElement(context, elementContext, elementInfo.getId().getValue()))
72 .orElse(Optional.empty());
76 public Collection<ElementInfo> listElements(SessionContext context, ElementContext elementContext,
78 return connector.listElements(context, elementContext, parentElementId);
82 public Collection<Element> listElementData(SessionContext context,
83 ElementContext elementContext,
86 Collection<ElementInfo> elementInfoList = connector.listElements(context, elementContext,
88 if (elementInfoList != null) {
89 return elementInfoList.stream().map(elementInfo -> connector.getElement(context,
90 elementContext, elementInfo.getId()).getValue()).collect(Collectors.toList());
93 return new ArrayList<>();
99 public Collection<ElementInfo> listElementsByName(
100 SessionContext context, ElementContext elementContext, Id parentElementId,
101 String elementName) {
102 Optional<ElementInfo> elementInfoByName =
103 getElementInfoByName(context, elementContext, parentElementId, elementName);
105 return elementInfoByName.isPresent()
106 ? connector.listElements(context, elementContext, elementInfoByName.get().getId())
111 public Optional<ElementInfo> getElementInfoByName(
112 SessionContext context, ElementContext elementContext, Id parentElementId,
113 String elementName) {
114 Collection<ElementInfo> elementInfos =
115 connector.listElements(context, elementContext, parentElementId);
116 return getFirstElementInfo(elementInfos,
117 elementInfo -> elementInfo.getInfo() != null &&
118 elementName.equals(elementInfo.getInfo().getName()));
122 public Optional<Element> saveElement(SessionContext context, ElementContext elementContext,
123 ZusammenElement element, String message) {
124 enrichElementHierarchyRec(context, elementContext, null, element);
125 return connector.saveElement(context, elementContext, element, message);
128 private void enrichElementHierarchyRec(SessionContext context, ElementContext
129 elementContext, Id parentElementId, ZusammenElement element) {
130 if (element.getAction() == Action.CREATE) {
133 locateElementAndUpdateAction(context, elementContext, parentElementId, element);
134 element.getSubElements().forEach(subElement -> enrichElementHierarchyRec(
135 context, elementContext, element.getElementId(), (ZusammenElement) subElement));
138 // should be applied only for structural elements
139 private void locateElementAndUpdateAction(SessionContext context, ElementContext elementContext,
140 Id parentElementId, ZusammenElement element) {
141 if (element.getElementId() != null) {
144 Optional<ElementInfo> elementInfo =
145 getElementInfoByName(context, elementContext, parentElementId, element.getInfo().getName());
146 if (elementInfo.isPresent()) {
147 element.setElementId(elementInfo.get().getId());
148 if (element.getAction() == null) {
149 element.setAction(Action.IGNORE);
152 element.setAction(Action.CREATE);
156 private Optional<ElementInfo> getFirstElementInfo(Collection<ElementInfo> elementInfos,
157 Predicate<ElementInfo> elementInfoPredicate) {
158 return elementInfos.stream()
159 .filter(elementInfoPredicate)
163 private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName
164 itemElementLoggerTargetServiceName,
165 ReturnCode returnCode) {
166 logErrorMessageToMdc(itemElementLoggerTargetServiceName, returnCode.toString());
169 private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName
170 itemElementLoggerTargetServiceName,
172 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
173 itemElementLoggerTargetServiceName.getDescription(),
174 ErrorLevel.ERROR.name(),
175 LoggerErrorCode.BUSINESS_PROCESS_ERROR.getErrorCode(),
180 public Id createItem(SessionContext context, Info info) {
181 return connector.createItem(context, info);
185 public Id createVersion(SessionContext context, Id itemId, Id baseVersionId, ItemVersionData
187 return connector.createVersion(context, itemId, baseVersionId, itemVersionData);
192 public Collection<Item> listItems(SessionContext context) {
193 return connector.listItems(context);
197 public void updateVersion(SessionContext context, Id itemId, Id versionId,
198 ItemVersionData itemVersionData) {
199 connector.updateVersion(context, itemId, versionId, itemVersionData);
203 public void tagVersion(SessionContext context, Id itemId, Id versionId, Tag tag) {
204 connector.tagVersion(context, itemId, versionId, tag);
208 public void resetVersionHistory(SessionContext context, Id itemId, Id versionId,
210 connector.resetVersionHistory(context, itemId, versionId, changeRef);
214 public void updateItem(SessionContext context, Id itemId, Info info) {
215 connector.updateItem(context, itemId, info);
220 public Collection<HealthInfo> checkHealth(SessionContext context) {
221 return connector.checkHealth(context);
224 private static void sortItemVersionListByModificationTimeDescOrder(
225 List<ItemVersion> itemVersions) {
226 itemVersions.sort((o1, o2) -> ((Integer)o2.getId().getValue().length())
227 .compareTo( (o1.getId().getValue().length())));
231 public String getVersion(SessionContext sessionContext) {
232 return connector.getVersion(sessionContext);