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.ElementConflict;
5 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
6 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ItemVersionConflict;
7 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
8 import com.amdocs.zusammen.commons.health.data.HealthInfo;
9 import com.amdocs.zusammen.datatypes.Id;
10 import com.amdocs.zusammen.datatypes.SessionContext;
11 import com.amdocs.zusammen.datatypes.item.Action;
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.item.ItemVersionStatus;
18 import com.amdocs.zusammen.datatypes.item.Resolution;
19 import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions;
20 import com.amdocs.zusammen.datatypes.itemversion.Tag;
21 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
22 import org.openecomp.core.zusammen.db.ZusammenConnector;
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<ElementInfo> getElementInfo(SessionContext context, ElementContext elementContext,
42 return Optional.ofNullable(connector.getElementInfo(context, elementContext, elementId));
46 public Optional<Element> getElement(SessionContext context, ElementContext elementContext,
48 return Optional.ofNullable(connector.getElement(context, elementContext, new Id(elementId)));
52 public Optional<Element> getElementByName(
53 SessionContext context, ElementContext elementContext, Id parentElementId,
55 Collection<ElementInfo> elementInfos =
56 connector.listElements(context, elementContext, parentElementId);
57 Predicate<ElementInfo> elementInfoPredicate = elementInfo -> elementInfo.getInfo() != null
58 && elementName.equals(elementInfo.getInfo().getName());
59 return getFirstElementInfo(elementInfos, elementInfoPredicate)
60 .map(elementInfo -> getElement(context, elementContext, elementInfo.getId().getValue()))
61 .orElse(Optional.empty());
65 public Collection<ElementInfo> listElements(SessionContext context, ElementContext elementContext,
67 return connector.listElements(context, elementContext, parentElementId);
71 public Collection<Element> listElementData(SessionContext context,
72 ElementContext elementContext,
74 Collection<ElementInfo> elementInfoList = connector.listElements(context, elementContext,
77 return elementInfoList == null
79 : elementInfoList.stream()
80 .map(elementInfo -> connector.getElement(context, elementContext, elementInfo.getId()))
81 .collect(Collectors.toList());
86 public Collection<ElementInfo> listElementsByName(
87 SessionContext context, ElementContext elementContext, Id parentElementId,
89 Optional<ElementInfo> elementInfoByName =
90 getElementInfoByName(context, elementContext, parentElementId, elementName);
92 return elementInfoByName.isPresent()
93 ? connector.listElements(context, elementContext, elementInfoByName.get().getId())
98 public Optional<ElementInfo> getElementInfoByName(
99 SessionContext context, ElementContext elementContext, Id parentElementId,
100 String elementName) {
101 Collection<ElementInfo> elementInfos =
102 connector.listElements(context, elementContext, parentElementId);
103 return getFirstElementInfo(elementInfos,
104 elementInfo -> elementInfo.getInfo() != null &&
105 elementName.equals(elementInfo.getInfo().getName()));
109 public Optional<ElementConflict> getElementConflict(SessionContext context,
110 ElementContext elementContext,
112 return Optional.ofNullable(connector.getElementConflict(context, elementContext, elementId));
116 public Element saveElement(SessionContext context, ElementContext elementContext,
117 ZusammenElement element, String message) {
118 enrichElementHierarchyRec(context, elementContext, null, element);
119 return connector.saveElement(context, elementContext, element, message);
123 public void resolveElementConflict(SessionContext context, ElementContext elementContext,
124 ZusammenElement element, Resolution resolution) {
125 connector.resolveElementConflict(context, elementContext, element, resolution);
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)
164 public Collection<Item> listItems(SessionContext context) {
165 return connector.listItems(context);
169 public Item getItem(SessionContext context, Id itemId) {
170 return connector.getItem(context, itemId);
174 public Id createItem(SessionContext context, Info info) {
175 return connector.createItem(context, info);
179 public void updateItem(SessionContext context, Id itemId, Info info) {
180 connector.updateItem(context, itemId, info);
184 public Optional<ItemVersion> getFirstVersion(SessionContext context, Id itemId) {
185 Collection<ItemVersion> versions = connector.listPublicVersions(context, itemId);
186 if (versions == null || versions.isEmpty()) {
187 return Optional.empty();
189 List<ItemVersion> itemVersions = new ArrayList<>(versions);
190 sortItemVersionListByModificationTimeDescOrder(itemVersions);
191 ItemVersion itemVersion = itemVersions.iterator().next();
193 return Optional.ofNullable(itemVersion);
197 public Collection<ItemVersion> listPublicVersions(SessionContext context, Id itemId) {
198 return connector.listPublicVersions(context, itemId);
202 public ItemVersion getPublicVersion(SessionContext context, Id itemId, Id versionId) {
203 return connector.getPublicVersion(context, itemId, versionId);
207 public ItemVersion getVersion(SessionContext context, Id itemId, Id versionId) {
208 return connector.getVersion(context, itemId, versionId);
212 public ItemVersionStatus getVersionStatus(SessionContext context, Id itemId, Id versionId) {
213 return connector.getVersionStatus(context, itemId, versionId);
217 public ItemVersionConflict getVersionConflict(SessionContext context, Id itemId, Id versionId) {
218 return connector.getVersionConflict(context, itemId, versionId);
222 public Id createVersion(SessionContext context, Id itemId, Id baseVersionId, ItemVersionData
224 return connector.createVersion(context, itemId, baseVersionId, itemVersionData);
228 public void updateVersion(SessionContext context, Id itemId, Id versionId,
229 ItemVersionData itemVersionData) {
230 connector.updateVersion(context, itemId, versionId, itemVersionData);
234 public void tagVersion(SessionContext context, Id itemId, Id versionId, Tag tag) {
235 connector.tagVersion(context, itemId, versionId, tag);
239 public void resetVersionHistory(SessionContext context, Id itemId, Id versionId,
241 connector.resetVersionHistory(context, itemId, versionId, changeRef);
245 public void publishVersion(SessionContext context, Id itemId, Id versionId, String message) {
246 connector.publishVersion(context, itemId, versionId, message);
250 public void syncVersion(SessionContext context, Id itemId, Id versionId) {
251 connector.syncVersion(context, itemId, versionId);
255 public void forceSyncVersion(SessionContext context, Id itemId, Id versionId) {
256 connector.forceSyncVersion(context, itemId, versionId);
260 public void revert(SessionContext context, Id itemId, Id versionId, Id revisionId) {
261 connector.revertVersionRevision(context, itemId, versionId, revisionId);
265 public ItemVersionRevisions listRevisions(SessionContext context, Id itemId, Id versionId) {
266 return connector.listVersionRevisions(context, itemId, versionId);
270 public Collection<HealthInfo> checkHealth(SessionContext context) {
271 return connector.checkHealth(context);
275 public String getVersion(SessionContext context) {
276 return connector.getVersion(context);
279 private static void sortItemVersionListByModificationTimeDescOrder(
280 List<ItemVersion> itemVersions) {
281 itemVersions.sort((o1, o2) -> ((Integer) o2.getId().getValue().length())
282 .compareTo((o1.getId().getValue().length())));