2 * Copyright © 2016-2018 European Support Limited
3 * Modifications Copyright (C) 2021 Nordix Foundation.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
19 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
20 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
21 import static org.openecomp.sdc.versioning.dao.impl.zusammen.ItemZusammenDaoImpl.ItemInfoProperty.ITEM_TYPE;
23 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
24 import com.amdocs.zusammen.datatypes.SessionContext;
25 import com.amdocs.zusammen.datatypes.item.Action;
26 import com.amdocs.zusammen.datatypes.item.ElementContext;
27 import com.amdocs.zusammen.datatypes.item.Info;
28 import java.io.ByteArrayInputStream;
29 import java.util.Collection;
30 import java.util.stream.Collectors;
31 import lombok.AllArgsConstructor;
33 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
34 import org.openecomp.sdc.datatypes.model.ElementType;
35 import org.openecomp.sdc.datatypes.model.ItemType;
36 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
37 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToVSPGeneralConvertor;
38 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToVSPQuestionnaireConvertor;
39 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.OnboardingMethod;
40 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
41 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
42 import org.openecomp.sdc.versioning.ActionVersioningManagerFactory;
43 import org.openecomp.sdc.versioning.dao.types.Version;
44 import org.openecomp.sdc.versioning.types.VersionableEntityMetadata;
45 import org.openecomp.sdc.versioning.types.VersionableEntityStoreType;
47 public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareProductInfoDao {
49 private static final String EMPTY_DATA = "{}";
50 private ZusammenAdaptor zusammenAdaptor;
52 public VendorSoftwareProductInfoDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
53 this.zusammenAdaptor = zusammenAdaptor;
57 public void registerVersioning(String versionableEntityType) {
58 VersionableEntityMetadata metadata = new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "VendorSoftwareProduct", null, null);
59 ActionVersioningManagerFactory.getInstance().createInterface().register(versionableEntityType, metadata);
63 public Collection<VspDetails> list(VspDetails entity) {
64 return zusammenAdaptor.listItems(createSessionContext()).stream()
65 .filter(item -> ItemType.vsp.getName().equals(item.getInfo().getProperty(ITEM_TYPE.getName())))
66 .map(new ElementToVSPGeneralConvertor()::convert)
67 .collect(Collectors.toList());
71 public void create(VspDetails vspDetails) {
72 ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
73 SessionContext context = createSessionContext();
74 ElementContext elementContext = new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
75 zusammenAdaptor.saveElement(context, elementContext, generalElement, "Create VSP General Info Element");
76 createVspStructure(context, elementContext);
79 private void createVspStructure(SessionContext context, ElementContext elementContext) {
80 createOrchestrationTemplateCandidateStructure(context, elementContext);
81 createVspModelStructure(context, elementContext);
82 zusammenAdaptor.saveElement(context, elementContext, buildStructuralElement(ElementType.DeploymentFlavors, Action.CREATE),
83 "Create VSP Deployment Flavors Element");
85 .saveElement(context, elementContext, buildStructuralElement(ElementType.Processes, Action.CREATE), "Create VSP Processes Element");
88 private void createOrchestrationTemplateCandidateStructure(SessionContext context, ElementContext elementContext) {
89 ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
90 ZusammenElement candidateContentElement = buildStructuralElement(ElementType.OrchestrationTemplateCandidateContent, Action.CREATE);
91 candidateContentElement.setData(emptyData);
92 ZusammenElement validationData = buildStructuralElement(ElementType.OrchestrationTemplateCandidateValidationData, Action.CREATE);
93 ZusammenElement candidateElement = buildStructuralElement(ElementType.OrchestrationTemplateCandidate, Action.CREATE);
94 candidateElement.setData(emptyData);
95 candidateElement.addSubElement(candidateContentElement);
96 candidateElement.addSubElement(validationData);
97 zusammenAdaptor.saveElement(context, elementContext, candidateElement, "Create Orchestration Template Candidate Elements");
100 private void createVspModelStructure(SessionContext context, ElementContext elementContext) {
101 ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.CREATE);
102 vspModel.addSubElement(buildOrchestrationTemplateStructure());
103 vspModel.addSubElement(buildStructuralElement(ElementType.Networks, Action.CREATE));
104 vspModel.addSubElement(buildStructuralElement(ElementType.Components, Action.CREATE));
105 vspModel.addSubElement(buildStructuralElement(ElementType.ComponentDependencies, Action.CREATE));
106 ZusammenElement templates = buildStructuralElement(ElementType.Templates, Action.CREATE);
107 ZusammenElement artifacts = buildStructuralElement(ElementType.Artifacts, Action.CREATE);
108 vspModel.addSubElement(buildServiceModelStructure(ElementType.ServiceModel, templates, artifacts));
109 vspModel.addSubElement(buildServiceModelStructure(ElementType.EnrichedServiceModel, templates, artifacts));
110 zusammenAdaptor.saveElement(context, elementContext, vspModel, "Create VSP Model Elements");
113 private ZusammenElement buildOrchestrationTemplateStructure() {
114 ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
115 ZusammenElement validationData = buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.CREATE);
116 validationData.setData(emptyData);
117 ZusammenElement orchestrationTemplateStructure = buildStructuralElement(ElementType.OrchestrationTemplateStructure, Action.CREATE);
118 validationData.setData(emptyData);
119 ZusammenElement orchestrationTemplate = buildStructuralElement(ElementType.OrchestrationTemplate, Action.CREATE);
120 orchestrationTemplate.setData(emptyData);
121 orchestrationTemplate.addSubElement(validationData);
122 orchestrationTemplate.addSubElement(orchestrationTemplateStructure);
123 return orchestrationTemplate;
126 private ZusammenElement buildServiceModelStructure(ElementType serviceModelElementType, ZusammenElement templates, ZusammenElement artifacts) {
127 ZusammenElement serviceModel = buildStructuralElement(serviceModelElementType, Action.CREATE);
128 serviceModel.addSubElement(templates);
129 serviceModel.addSubElement(artifacts);
134 public void update(VspDetails vspDetails) {
135 ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
136 SessionContext context = createSessionContext();
137 zusammenAdaptor.saveElement(context, new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId()), generalElement,
138 "Update VSP General Info Element");
142 public VspDetails get(VspDetails vspDetails) {
143 SessionContext context = createSessionContext();
144 ElementContext elementContext = new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
145 return zusammenAdaptor.getElementInfoByName(context, elementContext, null, ElementType.VendorSoftwareProduct.name())
146 .map(new ElementToVSPGeneralConvertor()::convert).map(vsp -> {
147 vsp.setId(vspDetails.getId());
148 vsp.setVersion(vspDetails.getVersion());
154 public void delete(VspDetails vspDetails) {
155 SessionContext context = createSessionContext();
156 ElementContext elementContext = new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
158 .saveElement(context, elementContext, buildStructuralElement(ElementType.VspModel, Action.DELETE), "Delete VSP Model Elements");
159 createVspModelStructure(context, elementContext);
163 public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
164 SessionContext context = createSessionContext();
165 ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
166 zusammenAdaptor.saveElement(context, new ElementContext(vspId, version.getId()), questionnaireElement, "Update VSP Questionnaire");
170 public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
171 SessionContext context = createSessionContext();
172 VspQuestionnaireEntity entity = new ElementToVSPQuestionnaireConvertor().convert(
173 zusammenAdaptor.getElementByName(context, new ElementContext(vspId, version.getId()), null, ElementType.VSPQuestionnaire.name())
176 entity.setVersion(version);
181 public boolean isManual(String vspId, Version version) {
182 final VspDetails vspDetails = get(new VspDetails(vspId, version));
183 return vspDetails != null && OnboardingMethod.Manual.name().equals(vspDetails.getOnboardingMethod());
186 private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
187 ZusammenElement generalElement = buildStructuralElement(ElementType.VendorSoftwareProduct, action);
188 addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
189 return generalElement;
192 private ZusammenElement mapQuestionnaireToZusammenElement(String questionnaireData) {
193 ZusammenElement questionnaireElement = buildStructuralElement(ElementType.VSPQuestionnaire, Action.UPDATE);
194 questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
195 return questionnaireElement;
198 private void addVspDetailsToInfo(final Info info, final VspDetails vspDetails) {
199 info.addProperty(InfoPropertyName.NAME.getValue(), vspDetails.getName());
200 info.addProperty(InfoPropertyName.DESCRIPTION.getValue(), vspDetails.getDescription());
201 info.addProperty(InfoPropertyName.ICON.getValue(), vspDetails.getIcon());
202 info.addProperty(InfoPropertyName.CATEGORY.getValue(), vspDetails.getCategory());
203 info.addProperty(InfoPropertyName.SUB_CATEGORY.getValue(), vspDetails.getSubCategory());
204 info.addProperty(InfoPropertyName.VENDOR_ID.getValue(), vspDetails.getVendorId());
205 info.addProperty(InfoPropertyName.VENDOR_NAME.getValue(), vspDetails.getVendorName());
206 if (vspDetails.getVlmVersion() != null) {
207 info.addProperty(InfoPropertyName.VENDOR_VERSION.getValue(), vspDetails.getVlmVersion().getId());
209 info.addProperty(InfoPropertyName.LICENSE_TYPE.getValue(), vspDetails.getLicenseType());
210 info.addProperty(InfoPropertyName.LICENSE_AGREEMENT.getValue(), vspDetails.getLicenseAgreement());
211 info.addProperty(InfoPropertyName.FEATURE_GROUPS.getValue(), vspDetails.getFeatureGroups());
212 info.addProperty(InfoPropertyName.ON_BOARDING_METHOD.getValue(), vspDetails.getOnboardingMethod());
213 if (!vspDetails.getModelIdList().isEmpty()) {
214 info.addProperty(InfoPropertyName.MODELS.getValue(), vspDetails.getModelIdList());
220 public enum InfoPropertyName {
223 DESCRIPTION("description"),
225 CATEGORY("category"),
226 SUB_CATEGORY("subCategory"),
227 VENDOR_ID("vendorId"),
228 VENDOR_NAME("vendorName"),
229 VENDOR_VERSION("vendorVersion"),
230 LICENSE_TYPE("licenseType"),
231 LICENSE_AGREEMENT("licenseAgreement"),
232 FEATURE_GROUPS("featureGroups"),
233 ON_BOARDING_METHOD("onboardingMethod"),
237 private final String value;