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 com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
19 import com.amdocs.zusammen.datatypes.SessionContext;
20 import com.amdocs.zusammen.datatypes.item.Action;
21 import com.amdocs.zusammen.datatypes.item.ElementContext;
22 import com.amdocs.zusammen.datatypes.item.Info;
23 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
24 import org.openecomp.sdc.datatypes.model.ElementType;
25 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
26 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToVSPGeneralConvertor;
27 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToVSPQuestionnaireConvertor;
28 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.OnboardingMethod;
29 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
30 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
31 import org.openecomp.sdc.versioning.ActionVersioningManagerFactory;
32 import org.openecomp.sdc.versioning.dao.types.Version;
33 import org.openecomp.sdc.versioning.types.VersionableEntityMetadata;
34 import org.openecomp.sdc.versioning.types.VersionableEntityStoreType;
36 import java.io.ByteArrayInputStream;
37 import java.util.Collection;
38 import java.util.stream.Collectors;
40 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
41 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
43 public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareProductInfoDao {
44 private static final String EMPTY_DATA = "{}";
46 private ZusammenAdaptor zusammenAdaptor;
48 public VendorSoftwareProductInfoDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
49 this.zusammenAdaptor = zusammenAdaptor;
53 public void registerVersioning(String versionableEntityType) {
54 VersionableEntityMetadata metadata =
55 new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "VendorSoftwareProduct",
58 ActionVersioningManagerFactory.getInstance().createInterface()
59 .register(versionableEntityType, metadata);
63 public Collection<VspDetails> list(VspDetails entity) {
64 return zusammenAdaptor.listItems(createSessionContext()).stream()
65 .filter(item -> "VendorSoftwareProduct".equals(item.getInfo().getProperty("item_type")))
66 .map(new ElementToVSPGeneralConvertor()::convert)
67 .collect(Collectors.toList());
71 public void create(VspDetails vspDetails) {
72 ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
74 SessionContext context = createSessionContext();
75 ElementContext elementContext =
76 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
77 zusammenAdaptor.saveElement(context, elementContext, generalElement,
78 "Create VSP General Info Element");
80 createVspStructure(context, elementContext);
83 private void createVspStructure(SessionContext context, ElementContext elementContext) {
84 createOrchestrationTemplateCandidateStructure(context, elementContext);
85 createVspModelStructure(context, elementContext);
87 zusammenAdaptor.saveElement(context, elementContext,
88 buildStructuralElement(ElementType.DeploymentFlavors, Action.CREATE),
89 "Create VSP Deployment Flavors Element");
91 zusammenAdaptor.saveElement(context, elementContext,
92 buildStructuralElement(ElementType.Processes, Action.CREATE),
93 "Create VSP Processes Element");
96 private void createOrchestrationTemplateCandidateStructure(SessionContext context,
97 ElementContext elementContext) {
98 ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
100 ZusammenElement candidateContentElement =
101 buildStructuralElement(ElementType.OrchestrationTemplateCandidateContent, Action.CREATE);
102 candidateContentElement.setData(emptyData);
103 ZusammenElement validationData = buildStructuralElement(ElementType
104 .OrchestrationTemplateCandidateValidationData, Action.CREATE);
105 ZusammenElement candidateElement =
106 buildStructuralElement(ElementType.OrchestrationTemplateCandidate, Action.CREATE);
107 candidateElement.setData(emptyData);
108 candidateElement.addSubElement(candidateContentElement);
109 candidateElement.addSubElement(validationData);
110 zusammenAdaptor.saveElement(context, elementContext, candidateElement,
111 "Create Orchestration Template Candidate Elements");
114 private void createVspModelStructure(SessionContext context, ElementContext elementContext) {
115 ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.CREATE);
116 vspModel.addSubElement(buildOrchestrationTemplateStructure());
117 vspModel.addSubElement(buildStructuralElement(ElementType.Networks, Action.CREATE));
118 vspModel.addSubElement(buildStructuralElement(ElementType.Components, Action.CREATE));
120 .addSubElement(buildStructuralElement(ElementType.ComponentDependencies, Action.CREATE));
122 ZusammenElement templates = buildStructuralElement(ElementType.Templates, Action.CREATE);
123 ZusammenElement artifacts = buildStructuralElement(ElementType.Artifacts, Action.CREATE);
124 vspModel.addSubElement(
125 buildServiceModelStructure(ElementType.ServiceModel, templates, artifacts));
126 vspModel.addSubElement(
127 buildServiceModelStructure(ElementType.EnrichedServiceModel, templates, artifacts));
129 zusammenAdaptor.saveElement(context, elementContext, vspModel, "Create VSP Model Elements");
132 private ZusammenElement buildOrchestrationTemplateStructure() {
133 ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
135 ZusammenElement validationData =
136 buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.CREATE);
137 validationData.setData(emptyData);
139 ZusammenElement orchestrationTemplateStructure = buildStructuralElement(ElementType
140 .OrchestrationTemplateStructure, Action.CREATE);
141 validationData.setData(emptyData);
143 ZusammenElement orchestrationTemplate =
144 buildStructuralElement(ElementType.OrchestrationTemplate, Action.CREATE);
145 orchestrationTemplate.setData(emptyData);
146 orchestrationTemplate.addSubElement(validationData);
147 orchestrationTemplate.addSubElement(orchestrationTemplateStructure);
149 return orchestrationTemplate;
152 private ZusammenElement buildServiceModelStructure(ElementType serviceModelElementType,
153 ZusammenElement templates,
154 ZusammenElement artifacts) {
155 ZusammenElement serviceModel = buildStructuralElement(serviceModelElementType, Action.CREATE);
156 serviceModel.addSubElement(templates);
157 serviceModel.addSubElement(artifacts);
162 public void update(VspDetails vspDetails) {
163 ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
165 SessionContext context = createSessionContext();
166 zusammenAdaptor.saveElement(context,
167 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId()), generalElement,
168 "Update VSP General Info Element");
172 public VspDetails get(VspDetails vspDetails) {
173 SessionContext context = createSessionContext();
174 ElementContext elementContext =
175 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
176 return zusammenAdaptor.getElementInfoByName(context, elementContext, null,
177 ElementType.VendorSoftwareProduct.name())
178 .map(new ElementToVSPGeneralConvertor()::convert)
180 vsp.setId(vspDetails.getId());
181 vsp.setVersion(vspDetails.getVersion());
188 public void delete(VspDetails vspDetails) {
189 SessionContext context = createSessionContext();
190 ElementContext elementContext =
191 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
193 zusammenAdaptor.saveElement(context, elementContext,
194 buildStructuralElement(ElementType.VspModel, Action.DELETE),
195 "Delete VSP Model Elements");
197 createVspModelStructure(context, elementContext);
201 public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
202 SessionContext context = createSessionContext();
204 ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
205 zusammenAdaptor.saveElement(context, new ElementContext(vspId, version.getId()),
206 questionnaireElement, "Update VSP Questionnaire");
210 public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
211 SessionContext context = createSessionContext();
212 VspQuestionnaireEntity entity = new ElementToVSPQuestionnaireConvertor().convert(zusammenAdaptor
213 .getElementByName(context, new ElementContext(vspId, version.getId()), null,
214 ElementType.VSPQuestionnaire.name())
217 entity.setVersion(version);
222 public boolean isManual(String vspId, Version version) {
223 final VspDetails vspDetails = get(new VspDetails(vspId, version));
224 return vspDetails != null &&
225 OnboardingMethod.Manual.name().equals(vspDetails.getOnboardingMethod());
228 private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
229 ZusammenElement generalElement =
230 buildStructuralElement(ElementType.VendorSoftwareProduct, action);
231 addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
232 return generalElement;
235 private ZusammenElement mapQuestionnaireToZusammenElement(String questionnaireData) {
236 ZusammenElement questionnaireElement =
237 buildStructuralElement(ElementType.VSPQuestionnaire, Action.UPDATE);
238 questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
239 return questionnaireElement;
242 private void addVspDetailsToInfo(Info info, VspDetails vspDetails) {
243 info.addProperty(InfoPropertyName.NAME.getValue(), vspDetails.getName());
244 info.addProperty(InfoPropertyName.DESCRIPTION.getValue(), vspDetails.getDescription());
245 info.addProperty(InfoPropertyName.ICON.getValue(), vspDetails.getIcon());
246 info.addProperty(InfoPropertyName.CATEGORY.getValue(), vspDetails.getCategory());
247 info.addProperty(InfoPropertyName.SUB_CATEGORY.getValue(), vspDetails.getSubCategory());
248 info.addProperty(InfoPropertyName.VENDOR_ID.getValue(), vspDetails.getVendorId());
249 info.addProperty(InfoPropertyName.VENDOR_NAME.getValue(), vspDetails.getVendorName());
250 if (vspDetails.getVlmVersion() != null) {
251 info.addProperty(InfoPropertyName.VENDOR_VERSION.getValue(),
252 vspDetails.getVlmVersion().getId());
254 info.addProperty(InfoPropertyName.LICENSE_AGREEMENT.getValue(),
255 vspDetails.getLicenseAgreement());
256 info.addProperty(InfoPropertyName.FEATURE_GROUPS.getValue(), vspDetails.getFeatureGroups());
257 info.addProperty(InfoPropertyName.ON_BOARDING_METHOD.getValue(),
258 vspDetails.getOnboardingMethod());
261 public enum InfoPropertyName {
263 DESCRIPTION("description"),
265 CATEGORY("category"),
266 SUB_CATEGORY("subCategory"),
267 VENDOR_ID("vendorId"),
268 VENDOR_NAME("vendorName"),
269 VENDOR_VERSION("vendorVersion"),
270 LICENSE_AGREEMENT("licenseAgreement"),
271 FEATURE_GROUPS("featureGroups"),
272 ON_BOARDING_METHOD("onboardingMethod");
274 private String value;
276 InfoPropertyName(String value) {
280 public String getValue() {