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.datatypes.Id;
7 import com.amdocs.zusammen.datatypes.SessionContext;
8 import com.amdocs.zusammen.datatypes.item.Action;
9 import com.amdocs.zusammen.datatypes.item.ElementContext;
10 import com.amdocs.zusammen.datatypes.item.Info;
11 import com.amdocs.zusammen.datatypes.item.Item;
12 import com.amdocs.zusammen.datatypes.item.ItemVersion;
13 import com.amdocs.zusammen.datatypes.item.ItemVersionData;
14 import com.amdocs.zusammen.datatypes.itemversion.Tag;
15 import com.amdocs.zusammen.datatypes.response.Response;
16 import com.amdocs.zusammen.datatypes.response.ReturnCode;
17 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
18 import org.openecomp.core.zusammen.db.ZusammenConnector;
19 import org.openecomp.sdc.datatypes.error.ErrorLevel;
20 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
21 import org.openecomp.sdc.logging.types.LoggerConstants;
22 import org.openecomp.sdc.logging.types.LoggerErrorCode;
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.List;
27 import java.util.Optional;
28 import java.util.function.Predicate;
29 import java.util.stream.Collectors;
31 public class ZusammenAdaptorImpl implements ZusammenAdaptor {
33 private ZusammenConnector connector;
35 public ZusammenAdaptorImpl(ZusammenConnector connector) {
36 this.connector = connector;
40 public Optional<ItemVersion> getFirstVersion(SessionContext context, Id itemId) {
41 Collection<ItemVersion> versions = connector.listVersions(context, itemId);
42 if(versions == null || versions.size()==0) {
43 return Optional.empty();
45 List<ItemVersion> itemVersions = new ArrayList<>(versions);
46 sortItemVersionListByModificationTimeDescOrder(itemVersions);
47 ItemVersion itemVersion = itemVersions.iterator().next();
49 return Optional.ofNullable(itemVersion);
53 public Optional<ElementInfo> getElementInfo(SessionContext context, ElementContext elementContext,
55 Response<ElementInfo> response = connector.getElementInfo(context, elementContext, elementId);
56 return response.isSuccessful() ? Optional.ofNullable(response.getValue()) : Optional.empty();
60 public Optional<Element> getElement(SessionContext context, ElementContext elementContext,
62 Response<Element> response = connector.getElement(context, elementContext, new Id(elementId));
63 return response.isSuccessful() ? Optional.ofNullable(response.getValue()) : Optional.empty();
67 public Optional<Element> getElementByName(
68 SessionContext context, ElementContext elementContext, Id parentElementId,
70 Collection<ElementInfo> elementInfos =
71 connector.listElements(context, elementContext, parentElementId);
72 Predicate<ElementInfo> elementInfoPredicate = elementInfo -> elementInfo.getInfo() != null
73 && elementName.equals(elementInfo.getInfo().getName());
74 return getFirstElementInfo(elementInfos, elementInfoPredicate)
75 .map(elementInfo -> getElement(context, elementContext, elementInfo.getId().getValue()))
76 .orElse(Optional.empty());
80 public Collection<ElementInfo> listElements(SessionContext context, ElementContext elementContext,
82 return connector.listElements(context, elementContext, parentElementId);
86 public Collection<Element> listElementData(SessionContext context,
87 ElementContext elementContext,
90 Collection<ElementInfo> elementInfoList = connector.listElements(context, elementContext,
92 if (elementInfoList != null) {
93 return elementInfoList.stream().map(elementInfo -> connector.getElement(context,
94 elementContext, elementInfo.getId()).getValue()).collect(Collectors.toList());
97 return new ArrayList<>();
103 public Collection<ElementInfo> listElementsByName(
104 SessionContext context, ElementContext elementContext, Id parentElementId,
105 String elementName) {
106 Optional<ElementInfo> elementInfoByName =
107 getElementInfoByName(context, elementContext, parentElementId, elementName);
109 return elementInfoByName.isPresent()
110 ? connector.listElements(context, elementContext, elementInfoByName.get().getId())
115 public Optional<ElementInfo> getElementInfoByName(
116 SessionContext context, ElementContext elementContext, Id parentElementId,
117 String elementName) {
118 Collection<ElementInfo> elementInfos =
119 connector.listElements(context, elementContext, parentElementId);
120 return getFirstElementInfo(elementInfos,
121 elementInfo -> elementInfo.getInfo() != null &&
122 elementName.equals(elementInfo.getInfo().getName()));
126 public Optional<Element> saveElement(SessionContext context, ElementContext elementContext,
127 ZusammenElement element, String message) {
128 enrichElementHierarchyRec(context, elementContext, null, element);
129 return connector.saveElement(context, elementContext, element, message);
132 private void enrichElementHierarchyRec(SessionContext context, ElementContext
133 elementContext, Id parentElementId, ZusammenElement element) {
134 if (element.getAction() == Action.CREATE) {
137 locateElementAndUpdateAction(context, elementContext, parentElementId, element);
138 element.getSubElements().forEach(subElement -> enrichElementHierarchyRec(
139 context, elementContext, element.getElementId(), (ZusammenElement) subElement));
142 // should be applied only for structural elements
143 private void locateElementAndUpdateAction(SessionContext context, ElementContext elementContext,
144 Id parentElementId, ZusammenElement element) {
145 if (element.getElementId() != null) {
148 Optional<ElementInfo> elementInfo =
149 getElementInfoByName(context, elementContext, parentElementId, element.getInfo().getName());
150 if (elementInfo.isPresent()) {
151 element.setElementId(elementInfo.get().getId());
152 if (element.getAction() == null) {
153 element.setAction(Action.IGNORE);
156 element.setAction(Action.CREATE);
160 private Optional<ElementInfo> getFirstElementInfo(Collection<ElementInfo> elementInfos,
161 Predicate<ElementInfo> elementInfoPredicate) {
162 return elementInfos.stream()
163 .filter(elementInfoPredicate)
167 private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName
168 itemElementLoggerTargetServiceName,
169 ReturnCode returnCode) {
170 logErrorMessageToMdc(itemElementLoggerTargetServiceName, returnCode.toString());
173 private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName
174 itemElementLoggerTargetServiceName,
176 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
177 itemElementLoggerTargetServiceName.getDescription(),
178 ErrorLevel.ERROR.name(),
179 LoggerErrorCode.BUSINESS_PROCESS_ERROR.getErrorCode(),
184 public Id createItem(SessionContext context, Info info) {
185 return connector.createItem(context, info);
189 public Id createVersion(SessionContext context, Id itemId, Id baseVersionId, ItemVersionData
191 return connector.createVersion(context, itemId, baseVersionId, itemVersionData);
196 public Collection<Item> listItems(SessionContext context) {
197 return connector.listItems(context);
201 public void updateVersion(SessionContext context, Id itemId, Id versionId,
202 ItemVersionData itemVersionData) {
203 connector.updateVersion(context, itemId, versionId, itemVersionData);
207 public void tagVersion(SessionContext context, Id itemId, Id versionId, Tag tag) {
208 connector.tagVersion(context, itemId, versionId, tag);
212 public void resetVersionHistory(SessionContext context, Id itemId, Id versionId,
214 connector.resetVersionHistory(context, itemId, versionId, changeRef);
218 public void updateItem(SessionContext context, Id itemId, Info info) {
219 connector.updateItem(context, itemId, info);
222 private static void sortItemVersionListByModificationTimeDescOrder(
223 List<ItemVersion> itemVersions) {
224 itemVersions.sort((o1, o2) -> ((Integer)o2.getId().getValue().length())
225 .compareTo( (o1.getId().getValue().length())));