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