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