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