2 * Copyright © 2016-2018 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
18 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
19 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
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;
41 public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareProductInfoDao {
42 private static final String EMPTY_DATA = "{}";
44 private ZusammenAdaptor zusammenAdaptor;
46 public VendorSoftwareProductInfoDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
47 this.zusammenAdaptor = zusammenAdaptor;
51 public void registerVersioning(String versionableEntityType) {
52 VersionableEntityMetadata metadata =
53 new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "VendorSoftwareProduct",
56 ActionVersioningManagerFactory.getInstance().createInterface()
57 .register(versionableEntityType, metadata);
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());
69 public void create(VspDetails vspDetails) {
70 ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
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");
78 createVspStructure(context, elementContext);
81 private void createVspStructure(SessionContext context, ElementContext elementContext) {
82 createOrchestrationTemplateCandidateStructure(context, elementContext);
83 createVspModelStructure(context, elementContext);
85 zusammenAdaptor.saveElement(context, elementContext,
86 buildStructuralElement(ElementType.DeploymentFlavors, Action.CREATE),
87 "Create VSP Deployment Flavors Element");
89 zusammenAdaptor.saveElement(context, elementContext,
90 buildStructuralElement(ElementType.Processes, Action.CREATE),
91 "Create VSP Processes Element");
94 private void createOrchestrationTemplateCandidateStructure(SessionContext context,
95 ElementContext elementContext) {
96 ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
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");
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));
118 .addSubElement(buildStructuralElement(ElementType.ComponentDependencies, Action.CREATE));
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));
127 zusammenAdaptor.saveElement(context, elementContext, vspModel, "Create VSP Model Elements");
130 private ZusammenElement buildOrchestrationTemplateStructure() {
131 ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
133 ZusammenElement validationData =
134 buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.CREATE);
135 validationData.setData(emptyData);
137 ZusammenElement orchestrationTemplateStructure = buildStructuralElement(ElementType
138 .OrchestrationTemplateStructure, Action.CREATE);
139 validationData.setData(emptyData);
141 ZusammenElement orchestrationTemplate =
142 buildStructuralElement(ElementType.OrchestrationTemplate, Action.CREATE);
143 orchestrationTemplate.setData(emptyData);
144 orchestrationTemplate.addSubElement(validationData);
145 orchestrationTemplate.addSubElement(orchestrationTemplateStructure);
147 return orchestrationTemplate;
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);
160 public void update(VspDetails vspDetails) {
161 ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
163 SessionContext context = createSessionContext();
164 zusammenAdaptor.saveElement(context,
165 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId()), generalElement,
166 "Update VSP General Info Element");
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)
178 vsp.setId(vspDetails.getId());
179 vsp.setVersion(vspDetails.getVersion());
184 public void delete(VspDetails vspDetails) {
185 SessionContext context = createSessionContext();
186 ElementContext elementContext =
187 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
189 zusammenAdaptor.saveElement(context, elementContext,
190 buildStructuralElement(ElementType.VspModel, Action.DELETE),
191 "Delete VSP Model Elements");
193 createVspModelStructure(context, elementContext);
197 public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
198 SessionContext context = createSessionContext();
200 ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
201 zusammenAdaptor.saveElement(context, new ElementContext(vspId, version.getId()),
202 questionnaireElement, "Update VSP Questionnaire");
206 public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
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));
214 entity.setVersion(version);
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())) {
227 private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
228 ZusammenElement generalElement =
229 buildStructuralElement(ElementType.VendorSoftwareProduct, action);
230 addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
231 return generalElement;
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;
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());
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());
257 public enum InfoPropertyName {
259 DESCRIPTION("description"),
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");
270 private String value;
272 InfoPropertyName(String value){
276 public String getValue(){