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