re base code
[sdc.git] / openecomp-be / lib / openecomp-conflict-lib / openecomp-conflict-core / src / main / java / org / openecomp / conflicts / dao / impl / zusammen / ConflictsDaoImpl.java
1 package org.openecomp.conflicts.dao.impl.zusammen;
2
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.datatypes.Id;
7 import com.amdocs.zusammen.datatypes.SessionContext;
8 import com.amdocs.zusammen.datatypes.item.ElementContext;
9 import com.amdocs.zusammen.datatypes.item.Item;
10 import com.amdocs.zusammen.datatypes.item.ItemVersion;
11 import com.amdocs.zusammen.datatypes.item.Resolution;
12 import org.openecomp.conflicts.dao.ConflictsDao;
13 import org.openecomp.conflicts.types.Conflict;
14 import org.openecomp.conflicts.types.ConflictResolution;
15 import org.openecomp.conflicts.types.ItemVersionConflict;
16 import org.openecomp.convertor.ElementConvertor;
17 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
18 import org.openecomp.sdc.datatypes.model.ElementType;
19 import org.openecomp.sdc.vendorlicense.dao.impl.zusammen.convertor.*;
20 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.*;
21 import org.openecomp.sdc.versioning.dao.types.Version;
22
23 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildElement;
24 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
25
26 public class ConflictsDaoImpl implements ConflictsDao {
27   private final ZusammenAdaptor zusammenAdaptor;
28
29   public ConflictsDaoImpl(ZusammenAdaptor zusammenAdaptor) {
30     this.zusammenAdaptor = zusammenAdaptor;
31   }
32
33   @Override
34   public boolean isConflicted(String itemId, Version version) {
35     com.amdocs.zusammen.adaptor.inbound.api.types.item.ItemVersionConflict itemVersionConflict =
36         zusammenAdaptor
37             .getVersionConflict(createSessionContext(), new Id(itemId), new Id(version.getId()));
38     return !(itemVersionConflict == null
39         || (itemVersionConflict.getVersionDataConflict() == null
40         && itemVersionConflict.getElementConflictInfos().isEmpty()));
41   }
42
43   @Override
44   public ItemVersionConflict getConflict(String itemId, Version version) {
45     return new ItemVersionConflictConvertorFromZusammen().convert(itemId, version,
46         zusammenAdaptor
47             .getVersionConflict(createSessionContext(), new Id(itemId), new Id(version.getId())));
48   }
49
50   @Override
51   public Conflict getConflict(String itemId, Version version, String conflictId) {
52     return zusammenAdaptor.getElementConflict(createSessionContext(),
53         new ElementContext(new Id(itemId), new Id(version.getId())), new Id(conflictId))
54         .map(elementConflict -> convertElementConflict(conflictId, elementConflict))
55         .orElse(null);
56   }
57
58   @Override
59   public void resolveConflict(String itemId, Version version, String conflictId,
60                               ConflictResolution conflictResolution) {
61     SessionContext context = createSessionContext();
62     ElementContext elementContext = new ElementContext(new Id(itemId), new Id(version.getId()));
63
64     // TODO: 7/31/2017 when 'OTHER' resolution will be supported - populate zusammen element with it
65     zusammenAdaptor.resolveElementConflict(context, elementContext,
66         buildElement(new Id(conflictId), null),
67         Resolution.valueOf(conflictResolution.getResolution().name()));
68   }
69
70   private Conflict convertElementConflict(String conflictId, ElementConflict elementConflict) {
71     Element element = elementConflict.getLocalElement() == null
72         ? elementConflict.getRemoteElement()
73         : elementConflict.getLocalElement();
74     ElementType elementType = ElementConvertor.getElementType(element);
75
76     Conflict conflict =
77         new Conflict(conflictId, elementType, ElementConvertor.getElementName(element));
78     ElementConvertor convertor = getConvertor(elementType);
79     if (elementConflict.getLocalElement() != null) {
80       conflict.setYours(convertor.convert(elementConflict.getLocalElement()));
81     }
82     if (elementConflict.getRemoteElement() != null) {
83       conflict.setTheirs(convertor.convert(elementConflict.getRemoteElement()));
84     }
85     return conflict;
86   }
87
88   private ElementConvertor getConvertor(ElementType type) {
89     switch (type) {
90       case VendorSoftwareProduct:
91         return new ElementToVSPGeneralConvertor();
92       case Process:
93         return new ElementToProcessConvertor();
94       case Nic:
95         return new ElementToNicConvertor();
96       case Network:
97         return new ElementToNetworkConvertor();
98       case SNMP_POLL:
99       case SNMP_TRAP:
100       case VES_EVENTS:
101         return new ElementToMonitoringUploadMapConvertor();
102       case Image:
103         return new ElementToImageConvertor();
104       case Compute:
105         return new ElementToComputeConvertor();
106       case Component:
107         return new ElementToComponentConvertor();
108       case ComponentDependencies:
109         return new ElementToComponentDependencyModelConvertor();
110       case VendorLicenseModel:
111         return new ElementToVLMGeneralConvertor();
112       case LicenseAgreement:
113         return new ElementToLicenseAgreementConvertor();
114       case FeatureGroup:
115         return new ElementToFeatureGroupConvertor();
116       case LicenseKeyGroup:
117         return new ElementToLicenseKeyGroupConvertor();
118       case EntitlementPool:
119         return new ElementToEntitlementPoolConvertor();
120       case Limit:
121         return new ElementToLimitConvertor();
122       case OrchestrationTemplateCandidate:
123         return new ElementToOrchestrationTemplateCandidateMapConvertor();
124       case ServiceModel:
125         return new ElementToServiceModelMapConvertor();
126       case VSPQuestionnaire:
127       case ImageQuestionnaire:
128       case ComponentQuestionnaire:
129       case ComputeQuestionnaire:
130       case NicQuestionnaire:
131         return new ElementToCompositionEntityConvertor();
132       default:
133         return new EchoConvertor();
134     }
135   }
136
137   public static class EchoConvertor extends ElementConvertor {
138
139     @Override
140     public Object convert(Element element) {
141       return element;
142     }
143
144     @Override
145     public Object convert(Item item) {
146       return item;
147     }
148
149     @Override
150     public Object convert(ElementInfo elementInfo) {
151       return elementInfo;
152     }
153
154     @Override
155     public Object convert(ItemVersion itemVersion) {
156       return null;
157     }
158   }
159 }