8d9a8eed93960d49783d749d2abb72ee954bc346
[sdc.git] /
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
17
18 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
19 import com.amdocs.zusammen.datatypes.SessionContext;
20 import com.amdocs.zusammen.datatypes.item.Action;
21 import com.amdocs.zusammen.datatypes.item.ElementContext;
22 import com.amdocs.zusammen.datatypes.item.Info;
23 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
24 import org.openecomp.sdc.datatypes.model.ElementType;
25 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
26 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToVSPGeneralConvertor;
27 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToVSPQuestionnaireConvertor;
28 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
29 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
30 import org.openecomp.sdc.versioning.VersioningManagerFactory;
31 import org.openecomp.sdc.versioning.dao.types.Version;
32 import org.openecomp.sdc.versioning.types.VersionableEntityMetadata;
33 import org.openecomp.sdc.versioning.types.VersionableEntityStoreType;
34
35 import java.io.ByteArrayInputStream;
36 import java.util.Collection;
37 import java.util.stream.Collectors;
38
39 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
40 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
41
42 public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareProductInfoDao {
43   private static final String EMPTY_DATA = "{}";
44
45   private ZusammenAdaptor zusammenAdaptor;
46
47   public VendorSoftwareProductInfoDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
48     this.zusammenAdaptor = zusammenAdaptor;
49   }
50
51   @Override
52   public void registerVersioning(String versionableEntityType) {
53     VersionableEntityMetadata metadata =
54         new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "VendorSoftwareProduct",
55             null, null);
56
57     VersioningManagerFactory.getInstance().createInterface()
58         .register(versionableEntityType, metadata);
59   }
60
61   @Override
62   public Collection<VspDetails> list(VspDetails entity) {
63     return zusammenAdaptor.listItems(createSessionContext()).stream()
64         .filter(item -> "VendorSoftwareProduct".equals(item.getInfo().getProperty("item_type")))
65         .map(new ElementToVSPGeneralConvertor()::convert)
66         .collect(Collectors.toList());
67   }
68
69   @Override
70   public void create(VspDetails vspDetails) {
71     ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
72
73     SessionContext context = createSessionContext();
74     ElementContext elementContext =
75         new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
76     zusammenAdaptor.saveElement(context, elementContext, generalElement,
77         "Create VSP General Info Element");
78
79     createVspStructure(context, elementContext);
80   }
81
82   private void createVspStructure(SessionContext context, ElementContext elementContext) {
83     createOrchestrationTemplateCandidateStructure(context, elementContext);
84     createVspModelStructure(context, elementContext);
85
86     zusammenAdaptor.saveElement(context, elementContext,
87         buildStructuralElement(ElementType.DeploymentFlavors, Action.CREATE),
88         "Create VSP Deployment Flavors Element");
89
90     zusammenAdaptor.saveElement(context, elementContext,
91         buildStructuralElement(ElementType.Processes, Action.CREATE),
92         "Create VSP Processes Element");
93   }
94
95   private void createOrchestrationTemplateCandidateStructure(SessionContext context,
96                                                              ElementContext elementContext) {
97     ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
98
99     ZusammenElement candidateContentElement =
100         buildStructuralElement(ElementType.OrchestrationTemplateCandidateContent, Action.CREATE);
101     candidateContentElement.setData(emptyData);
102     ZusammenElement validationData = buildStructuralElement(ElementType
103         .OrchestrationTemplateCandidateValidationData, Action.CREATE);
104     ZusammenElement candidateElement =
105         buildStructuralElement(ElementType.OrchestrationTemplateCandidate, Action.CREATE);
106     candidateElement.setData(emptyData);
107     candidateElement.addSubElement(candidateContentElement);
108     candidateElement.addSubElement(validationData);
109     zusammenAdaptor.saveElement(context, elementContext, candidateElement,
110         "Create Orchestration Template Candidate Elements");
111   }
112
113   private void createVspModelStructure(SessionContext context, ElementContext elementContext) {
114     ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.CREATE);
115     vspModel.addSubElement(buildOrchestrationTemplateStructure());
116     vspModel.addSubElement(buildStructuralElement(ElementType.Networks, Action.CREATE));
117     vspModel.addSubElement(buildStructuralElement(ElementType.Components, Action.CREATE));
118     vspModel
119         .addSubElement(buildStructuralElement(ElementType.ComponentDependencies, Action.CREATE));
120
121     ZusammenElement templates = buildStructuralElement(ElementType.Templates, Action.CREATE);
122     ZusammenElement artifacts = buildStructuralElement(ElementType.Artifacts, Action.CREATE);
123     vspModel.addSubElement(
124         buildServiceModelStructure(ElementType.ServiceModel, templates, artifacts));
125     vspModel.addSubElement(
126         buildServiceModelStructure(ElementType.EnrichedServiceModel, templates, artifacts));
127
128     zusammenAdaptor.saveElement(context, elementContext, vspModel, "Create VSP Model Elements");
129   }
130
131   private ZusammenElement buildOrchestrationTemplateStructure() {
132     ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
133
134     ZusammenElement validationData =
135         buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.CREATE);
136     validationData.setData(emptyData);
137
138     ZusammenElement orchestrationTemplateStructure = buildStructuralElement(ElementType
139         .OrchestrationTemplateStructure, Action.CREATE);
140     validationData.setData(emptyData);
141
142     ZusammenElement orchestrationTemplate =
143         buildStructuralElement(ElementType.OrchestrationTemplate, Action.CREATE);
144     orchestrationTemplate.setData(emptyData);
145     orchestrationTemplate.addSubElement(validationData);
146     orchestrationTemplate.addSubElement(orchestrationTemplateStructure);
147
148     return orchestrationTemplate;
149   }
150
151   private ZusammenElement buildServiceModelStructure(ElementType serviceModelElementType,
152                                                      ZusammenElement templates,
153                                                      ZusammenElement artifacts) {
154     ZusammenElement serviceModel = buildStructuralElement(serviceModelElementType, Action.CREATE);
155     serviceModel.addSubElement(templates);
156     serviceModel.addSubElement(artifacts);
157     return serviceModel;
158   }
159
160   @Override
161   public void update(VspDetails vspDetails) {
162     ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
163
164     SessionContext context = createSessionContext();
165     zusammenAdaptor.saveElement(context,
166         new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId()), generalElement,
167         "Update VSP General Info Element");
168   }
169
170   @Override
171   public VspDetails get(VspDetails vspDetails) {
172     SessionContext context = createSessionContext();
173     ElementContext elementContext =
174         new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
175     VspDetails vsp = zusammenAdaptor.getElementInfoByName(context, elementContext, null,
176         ElementType.VendorSoftwareProduct.name())
177         .map(new ElementToVSPGeneralConvertor()::convert)
178         .orElse(null);
179     vsp.setId(vspDetails.getId());
180     vsp.setVersion(vspDetails.getVersion());
181     return vsp;
182   }
183
184   @Override
185   public void delete(VspDetails vspDetails) {
186     SessionContext context = createSessionContext();
187     ElementContext elementContext =
188         new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
189
190     zusammenAdaptor.saveElement(context, elementContext,
191         buildStructuralElement(ElementType.VspModel, Action.DELETE),
192         "Delete VSP Model Elements");
193
194     createVspModelStructure(context, elementContext);
195   }
196
197   @Override
198   public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
199     SessionContext context = createSessionContext();
200
201     ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
202     zusammenAdaptor.saveElement(context, new ElementContext(vspId, version.getId()),
203         questionnaireElement, "Update VSP Questionnaire");
204   }
205
206   @Override
207   public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
208
209     SessionContext context = createSessionContext();
210     ElementToVSPQuestionnaireConvertor convertor = new ElementToVSPQuestionnaireConvertor();
211     VspQuestionnaireEntity entity = convertor.convert(zusammenAdaptor
212         .getElementByName(context, new ElementContext(vspId, version.getId()), null,
213             ElementType.VSPQuestionnaire.name()).map(element -> element).orElse(null));
214     entity.setId(vspId);
215     entity.setVersion(version);
216     return entity;
217   }
218
219   @Override
220   public boolean isManual(String vspId, Version version) {
221     final VspDetails vspDetails = get(new VspDetails(vspId, version));
222     if (vspDetails != null && "Manual".equals(vspDetails.getOnboardingMethod())) {
223       return true;
224     }
225     return false;
226   }
227
228   private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
229     ZusammenElement generalElement =
230         buildStructuralElement(ElementType.VendorSoftwareProduct, action);
231     addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
232     return generalElement;
233   }
234
235   private ZusammenElement mapQuestionnaireToZusammenElement(String questionnaireData) {
236     ZusammenElement questionnaireElement =
237         buildStructuralElement(ElementType.VSPQuestionnaire, Action.UPDATE);
238     questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
239     return questionnaireElement;
240   }
241
242   private void addVspDetailsToInfo(Info info, VspDetails vspDetails) {
243     info.addProperty(InfoPropertyName.NAME.getValue(), vspDetails.getName());
244     info.addProperty(InfoPropertyName.DESCRIPTION.getValue(), vspDetails.getDescription());
245     info.addProperty(InfoPropertyName.ICON.getValue(), vspDetails.getIcon());
246     info.addProperty(InfoPropertyName.CATEGORY.getValue(), vspDetails.getCategory());
247     info.addProperty(InfoPropertyName.SUB_CATEGORY.getValue(), vspDetails.getSubCategory());
248     info.addProperty(InfoPropertyName.VENDOR_ID.getValue(), vspDetails.getVendorId());
249     info.addProperty(InfoPropertyName.VENDOR_NAME.getValue(), vspDetails.getVendorName());
250     if (vspDetails.getVlmVersion() != null) {
251       info.addProperty(InfoPropertyName.VENDOR_VERSION.getValue(), vspDetails.getVlmVersion().getId());
252     }
253     info.addProperty(InfoPropertyName.LICENSE_AGREEMENT.getValue(), vspDetails.getLicenseAgreement());
254     info.addProperty(InfoPropertyName.FEATURE_GROUPS.getValue(), vspDetails.getFeatureGroups());
255     info.addProperty(InfoPropertyName.ON_BOARDING_METHOD.getValue(), vspDetails.getOnboardingMethod());
256   }
257
258   public enum InfoPropertyName {
259     NAME("name"),
260     DESCRIPTION("description"),
261     ICON("icon"),
262     CATEGORY("category"),
263     SUB_CATEGORY("subCategory"),
264     VENDOR_ID("vendorId"),
265     VENDOR_NAME("vendorName"),
266     VENDOR_VERSION("vendorVersion"),
267     LICENSE_AGREEMENT("licenseAgreement"),
268     FEATURE_GROUPS("featureGroups"),
269     ON_BOARDING_METHOD("onboardingMethod");
270
271     private String value;
272
273     InfoPropertyName(String value){
274       this.value=value;
275     }
276
277     public String getValue(){
278       return value;
279     }
280   }
281
282 }