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