c6909d8d07239e7e4970f2ed62fac5afb3dc342e
[sdc.git] /
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     return zusammenAdaptor.listItems(createSessionContext()).stream()
49         .filter(item -> "VendorSoftwareProduct".equals(item.getInfo().getProperty("item_type")))
50         .map(new ElementToVSPGeneralConvertor()::convert)
51         .collect(Collectors.toList());
52   }
53
54   @Override
55   public void create(VspDetails vspDetails) {
56     ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
57
58     SessionContext context = createSessionContext();
59     ElementContext elementContext =
60         new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
61     zusammenAdaptor.saveElement(context, elementContext, generalElement,
62         "Create VSP General Info Element");
63
64     createVspStructure(context, elementContext);
65   }
66
67   private void createVspStructure(SessionContext context, ElementContext elementContext) {
68     createOrchestrationTemplateCandidateStructure(context, elementContext);
69     createVspModelStructure(context, elementContext);
70
71     zusammenAdaptor.saveElement(context, elementContext,
72         buildStructuralElement(ElementType.DeploymentFlavors, Action.CREATE),
73         "Create VSP Deployment Flavors Element");
74
75     zusammenAdaptor.saveElement(context, elementContext,
76         buildStructuralElement(ElementType.Processes, Action.CREATE),
77         "Create VSP Processes Element");
78   }
79
80   private void createOrchestrationTemplateCandidateStructure(SessionContext context,
81                                                              ElementContext elementContext) {
82     ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
83
84     ZusammenElement candidateContentElement =
85         buildStructuralElement(ElementType.OrchestrationTemplateCandidateContent, Action.CREATE);
86     candidateContentElement.setData(emptyData);
87
88     ZusammenElement candidateElement =
89         buildStructuralElement(ElementType.OrchestrationTemplateCandidate, Action.CREATE);
90     candidateElement.setData(emptyData);
91     candidateElement.addSubElement(candidateContentElement);
92
93     zusammenAdaptor.saveElement(context, elementContext, candidateElement,
94         "Create Orchestration Template Candidate Elements");
95   }
96
97   private void createVspModelStructure(SessionContext context, ElementContext elementContext) {
98     ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.CREATE);
99     vspModel.addSubElement(buildOrchestrationTemplateStructure());
100     vspModel.addSubElement(buildStructuralElement(ElementType.Networks, Action.CREATE));
101     vspModel.addSubElement(buildStructuralElement(ElementType.Components, Action.CREATE));
102     vspModel
103         .addSubElement(buildStructuralElement(ElementType.ComponentDependencies, Action.CREATE));
104
105     ZusammenElement templates = buildStructuralElement(ElementType.Templates, Action.CREATE);
106     ZusammenElement artifacts = buildStructuralElement(ElementType.Artifacts, Action.CREATE);
107     vspModel.addSubElement(
108         buildServiceModelStructure(ElementType.ServiceModel, templates, artifacts));
109     vspModel.addSubElement(
110         buildServiceModelStructure(ElementType.EnrichedServiceModel, templates, artifacts));
111
112     zusammenAdaptor.saveElement(context, elementContext, vspModel, "Create VSP Model Elements");
113   }
114
115   private ZusammenElement buildOrchestrationTemplateStructure() {
116     ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
117
118     ZusammenElement validationData =
119         buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.CREATE);
120     validationData.setData(emptyData);
121
122     ZusammenElement orchestrationTemplate =
123         buildStructuralElement(ElementType.OrchestrationTemplate, Action.CREATE);
124     orchestrationTemplate.setData(emptyData);
125     orchestrationTemplate.addSubElement(validationData);
126
127     return orchestrationTemplate;
128   }
129
130   private ZusammenElement buildServiceModelStructure(ElementType serviceModelElementType,
131                                                      ZusammenElement templates,
132                                                      ZusammenElement artifacts) {
133     ZusammenElement serviceModel = buildStructuralElement(serviceModelElementType, Action.CREATE);
134     serviceModel.addSubElement(templates);
135     serviceModel.addSubElement(artifacts);
136     return serviceModel;
137   }
138
139   @Override
140   public void update(VspDetails vspDetails) {
141     ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
142
143     SessionContext context = createSessionContext();
144     zusammenAdaptor.saveElement(context,
145         new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId()), generalElement,
146         "Update VSP General Info Element");
147   }
148
149   @Override
150   public VspDetails get(VspDetails vspDetails) {
151     SessionContext context = createSessionContext();
152     ElementContext elementContext =
153         new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
154     VspDetails vsp = zusammenAdaptor.getElementInfoByName(context, elementContext, null,
155         ElementType.VendorSoftwareProduct.name())
156         .map(new ElementToVSPGeneralConvertor()::convert)
157         .orElse(null);
158     vsp.setId(vspDetails.getId());
159     vsp.setVersion(vspDetails.getVersion());
160     return vsp;
161   }
162
163   @Override
164   public void delete(VspDetails vspDetails) {
165     SessionContext context = createSessionContext();
166     ElementContext elementContext =
167         new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
168
169     zusammenAdaptor.saveElement(context, elementContext,
170         buildStructuralElement(ElementType.VspModel, Action.DELETE),
171         "Delete VSP Model Elements");
172
173     createVspModelStructure(context, elementContext);
174   }
175
176   @Override
177   public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
178     SessionContext context = createSessionContext();
179
180     ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
181     zusammenAdaptor.saveElement(context, new ElementContext(vspId, version.getId()),
182         questionnaireElement, "Update VSP Questionnaire");
183   }
184
185   @Override
186   public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
187
188     SessionContext context = createSessionContext();
189     ElementToVSPQuestionnaireConvertor convertor = new ElementToVSPQuestionnaireConvertor();
190     VspQuestionnaireEntity entity = convertor.convert(zusammenAdaptor
191         .getElementByName(context, new ElementContext(vspId, version.getId()), null,
192             ElementType.VSPQuestionnaire.name()).map(element -> element).orElse(null));
193     entity.setId(vspId);
194     entity.setVersion(version);
195     return entity;
196   }
197
198   @Override
199   public boolean isManual(String vspId, Version version) {
200     final VspDetails vspDetails = get(new VspDetails(vspId, version));
201     if (vspDetails != null && "Manual".equals(vspDetails.getOnboardingMethod())) {
202         return true;
203     }
204     return false;
205   }
206
207   private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
208     ZusammenElement generalElement =
209         buildStructuralElement(ElementType.VendorSoftwareProduct, action);
210     addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
211     return generalElement;
212   }
213
214   private ZusammenElement mapQuestionnaireToZusammenElement(String questionnaireData) {
215     ZusammenElement questionnaireElement =
216         buildStructuralElement(ElementType.VSPQuestionnaire, Action.UPDATE);
217     questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
218     return questionnaireElement;
219   }
220
221   private void addVspDetailsToInfo(Info info, VspDetails vspDetails) {
222     info.addProperty(InfoPropertyName.NAME.getValue(), vspDetails.getName());
223     info.addProperty(InfoPropertyName.DESCRIPTION.getValue(), vspDetails.getDescription());
224     info.addProperty(InfoPropertyName.ICON.getValue(), vspDetails.getIcon());
225     info.addProperty(InfoPropertyName.CATEGORY.getValue(), vspDetails.getCategory());
226     info.addProperty(InfoPropertyName.SUB_CATEGORY.getValue(), vspDetails.getSubCategory());
227     info.addProperty(InfoPropertyName.VENDOR_ID.getValue(), vspDetails.getVendorId());
228     info.addProperty(InfoPropertyName.VENDOR_NAME.getValue(), vspDetails.getVendorName());
229     if (vspDetails.getVlmVersion() != null) {
230       info.addProperty(InfoPropertyName.VENDOR_VERSION.getValue(), vspDetails.getVlmVersion().getId());
231     }
232     info.addProperty(InfoPropertyName.LICENSE_AGREEMENT.getValue(), vspDetails.getLicenseAgreement());
233     info.addProperty(InfoPropertyName.FEATURE_GROUPS.getValue(), vspDetails.getFeatureGroups());
234     info.addProperty(InfoPropertyName.ON_BOARDING_METHOD.getValue(), vspDetails.getOnboardingMethod());
235   }
236
237   public enum InfoPropertyName {
238     NAME("name"),
239     DESCRIPTION("description"),
240     ICON("icon"),
241     CATEGORY("category"),
242     SUB_CATEGORY("subCategory"),
243     VENDOR_ID("vendorId"),
244     VENDOR_NAME("vendorName"),
245     VENDOR_VERSION("vendorVersion"),
246     LICENSE_AGREEMENT("licenseAgreement"),
247     FEATURE_GROUPS("featureGroups"),
248     ON_BOARDING_METHOD("onboardingMethod");
249
250     private String value;
251     InfoPropertyName(String value){
252       this.value=value;
253     }
254
255     public String getValue(){
256       return value;
257     }
258   }
259
260 }