Added oparent to sdc main
[sdc.git] / openecomp-be / lib / openecomp-conflict-lib / openecomp-conflict-core / src / main / java / org / openecomp / conflicts / dao / impl / zusammen / ConflictsDaoImpl.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.conflicts.dao.impl.zusammen;
22
23 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
24 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementConflict;
25 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
26 import com.amdocs.zusammen.datatypes.Id;
27 import com.amdocs.zusammen.datatypes.SessionContext;
28 import com.amdocs.zusammen.datatypes.item.ElementContext;
29 import com.amdocs.zusammen.datatypes.item.Item;
30 import com.amdocs.zusammen.datatypes.item.ItemVersion;
31 import com.amdocs.zusammen.datatypes.item.Resolution;
32 import org.openecomp.conflicts.dao.ConflictsDao;
33 import org.openecomp.conflicts.types.Conflict;
34 import org.openecomp.conflicts.types.ConflictResolution;
35 import org.openecomp.conflicts.types.ItemVersionConflict;
36 import org.openecomp.convertor.ElementConvertor;
37 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
38 import org.openecomp.sdc.datatypes.model.ElementType;
39 import org.openecomp.sdc.vendorlicense.dao.impl.zusammen.convertor.*;
40 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.*;
41 import org.openecomp.sdc.versioning.dao.types.Version;
42
43 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildElement;
44 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
45
46 public class ConflictsDaoImpl implements ConflictsDao {
47   private final ZusammenAdaptor zusammenAdaptor;
48
49   public ConflictsDaoImpl(ZusammenAdaptor zusammenAdaptor) {
50     this.zusammenAdaptor = zusammenAdaptor;
51   }
52
53   @Override
54   public boolean isConflicted(String itemId, Version version) {
55     com.amdocs.zusammen.adaptor.inbound.api.types.item.ItemVersionConflict itemVersionConflict =
56         zusammenAdaptor
57             .getVersionConflict(createSessionContext(), new Id(itemId), new Id(version.getId()));
58     return !(itemVersionConflict == null
59         || (itemVersionConflict.getVersionDataConflict() == null
60         && itemVersionConflict.getElementConflictInfos().isEmpty()));
61   }
62
63   @Override
64   public ItemVersionConflict getConflict(String itemId, Version version) {
65     return new ItemVersionConflictConvertorFromZusammen().convert(itemId, version,
66         zusammenAdaptor
67             .getVersionConflict(createSessionContext(), new Id(itemId), new Id(version.getId())));
68   }
69
70   @Override
71   public Conflict getConflict(String itemId, Version version, String conflictId) {
72     return zusammenAdaptor.getElementConflict(createSessionContext(),
73         new ElementContext(new Id(itemId), new Id(version.getId())), new Id(conflictId))
74         .map(elementConflict -> convertElementConflict(conflictId, elementConflict))
75         .orElse(null);
76   }
77
78   @Override
79   public void resolveConflict(String itemId, Version version, String conflictId,
80                               ConflictResolution conflictResolution) {
81     SessionContext context = createSessionContext();
82     ElementContext elementContext = new ElementContext(new Id(itemId), new Id(version.getId()));
83
84     // TODO: 7/31/2017 when 'OTHER' resolution will be supported - populate zusammen element with it
85     zusammenAdaptor.resolveElementConflict(context, elementContext,
86         buildElement(new Id(conflictId), null),
87         Resolution.valueOf(conflictResolution.getResolution().name()));
88   }
89
90   private Conflict convertElementConflict(String conflictId, ElementConflict elementConflict) {
91     Element element = elementConflict.getLocalElement() == null
92         ? elementConflict.getRemoteElement()
93         : elementConflict.getLocalElement();
94     ElementType elementType = ElementConvertor.getElementType(element);
95
96     Conflict conflict =
97         new Conflict(conflictId, elementType, ElementConvertor.getElementName(element));
98     ElementConvertor convertor = getConvertor(elementType);
99     if (elementConflict.getLocalElement() != null) {
100       conflict.setYours(convertor.convert(elementConflict.getLocalElement()));
101     }
102     if (elementConflict.getRemoteElement() != null) {
103       conflict.setTheirs(convertor.convert(elementConflict.getRemoteElement()));
104     }
105     return conflict;
106   }
107
108   private ElementConvertor getConvertor(ElementType type) {
109     switch (type) {
110       case VendorSoftwareProduct:
111         return new ElementToVSPGeneralConvertor();
112       case Process:
113         return new ElementToProcessConvertor();
114       case Nic:
115         return new ElementToNicConvertor();
116       case Network:
117         return new ElementToNetworkConvertor();
118       case SNMP_POLL:
119       case SNMP_TRAP:
120       case VES_EVENTS:
121         return new ElementToMonitoringUploadMapConvertor();
122       case Image:
123         return new ElementToImageConvertor();
124       case Compute:
125         return new ElementToComputeConvertor();
126       case Component:
127         return new ElementToComponentConvertor();
128       case ComponentDependencies:
129         return new ElementToComponentDependencyModelConvertor();
130       case VendorLicenseModel:
131         return new ElementToVLMGeneralConvertor();
132       case LicenseAgreement:
133         return new ElementToLicenseAgreementConvertor();
134       case FeatureGroup:
135         return new ElementToFeatureGroupConvertor();
136       case LicenseKeyGroup:
137         return new ElementToLicenseKeyGroupConvertor();
138       case EntitlementPool:
139         return new ElementToEntitlementPoolConvertor();
140       case Limit:
141         return new ElementToLimitConvertor();
142       case OrchestrationTemplateCandidate:
143         return new ElementToOrchestrationTemplateCandidateMapConvertor();
144       case ServiceModel:
145         return new ElementToServiceModelMapConvertor();
146       case VSPQuestionnaire:
147       case ImageQuestionnaire:
148       case ComponentQuestionnaire:
149       case ComputeQuestionnaire:
150       case NicQuestionnaire:
151         return new ElementToCompositionEntityConvertor();
152       default:
153         return new EchoConvertor();
154     }
155   }
156
157   public static class EchoConvertor extends ElementConvertor {
158
159     @Override
160     public Object convert(Element element) {
161       return element;
162     }
163
164     @Override
165     public Object convert(Item item) {
166       return item;
167     }
168
169     @Override
170     public Object convert(ElementInfo elementInfo) {
171       return elementInfo;
172     }
173
174     @Override
175     public Object convert(ItemVersion itemVersion) {
176       return null;
177     }
178   }
179 }