1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
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;
20 import java.io.ByteArrayInputStream;
21 import java.util.Collection;
22 import java.util.stream.Collectors;
24 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
25 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
27 public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareProductInfoDao {
28 private static final String EMPTY_DATA = "{}";
30 private ZusammenAdaptor zusammenAdaptor;
32 public VendorSoftwareProductInfoDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
33 this.zusammenAdaptor = zusammenAdaptor;
37 public void registerVersioning(String versionableEntityType) {
38 VersionableEntityMetadata metadata =
39 new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "VendorSoftwareProduct",
42 VersioningManagerFactory.getInstance().createInterface()
43 .register(versionableEntityType, metadata);
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());
55 public void create(VspDetails vspDetails) {
56 ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
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");
64 createVspStructure(context, elementContext);
67 private void createVspStructure(SessionContext context, ElementContext elementContext) {
68 createOrchestrationTemplateCandidateStructure(context, elementContext);
69 createVspModelStructure(context, elementContext);
71 zusammenAdaptor.saveElement(context, elementContext,
72 buildStructuralElement(ElementType.DeploymentFlavors, Action.CREATE),
73 "Create VSP Deployment Flavors Element");
75 zusammenAdaptor.saveElement(context, elementContext,
76 buildStructuralElement(ElementType.Processes, Action.CREATE),
77 "Create VSP Processes Element");
80 private void createOrchestrationTemplateCandidateStructure(SessionContext context,
81 ElementContext elementContext) {
82 ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
84 ZusammenElement candidateContentElement =
85 buildStructuralElement(ElementType.OrchestrationTemplateCandidateContent, Action.CREATE);
86 candidateContentElement.setData(emptyData);
88 ZusammenElement candidateElement =
89 buildStructuralElement(ElementType.OrchestrationTemplateCandidate, Action.CREATE);
90 candidateElement.setData(emptyData);
91 candidateElement.addSubElement(candidateContentElement);
93 zusammenAdaptor.saveElement(context, elementContext, candidateElement,
94 "Create Orchestration Template Candidate Elements");
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));
103 .addSubElement(buildStructuralElement(ElementType.ComponentDependencies, Action.CREATE));
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));
112 zusammenAdaptor.saveElement(context, elementContext, vspModel, "Create VSP Model Elements");
115 private ZusammenElement buildOrchestrationTemplateStructure() {
116 ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
118 ZusammenElement validationData =
119 buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.CREATE);
120 validationData.setData(emptyData);
122 ZusammenElement orchestrationTemplate =
123 buildStructuralElement(ElementType.OrchestrationTemplate, Action.CREATE);
124 orchestrationTemplate.setData(emptyData);
125 orchestrationTemplate.addSubElement(validationData);
127 return orchestrationTemplate;
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);
140 public void update(VspDetails vspDetails) {
141 ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
143 SessionContext context = createSessionContext();
144 zusammenAdaptor.saveElement(context,
145 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId()), generalElement,
146 "Update VSP General Info Element");
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)
158 vsp.setId(vspDetails.getId());
159 vsp.setVersion(vspDetails.getVersion());
164 public void delete(VspDetails vspDetails) {
165 SessionContext context = createSessionContext();
166 ElementContext elementContext =
167 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
169 zusammenAdaptor.saveElement(context, elementContext,
170 buildStructuralElement(ElementType.VspModel, Action.DELETE),
171 "Delete VSP Model Elements");
173 createVspModelStructure(context, elementContext);
177 public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
178 SessionContext context = createSessionContext();
180 ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
181 zusammenAdaptor.saveElement(context, new ElementContext(vspId, version.getId()),
182 questionnaireElement, "Update VSP Questionnaire");
186 public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
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));
194 entity.setVersion(version);
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())) {
207 private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
208 ZusammenElement generalElement =
209 buildStructuralElement(ElementType.VendorSoftwareProduct, action);
210 addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
211 return generalElement;
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;
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());
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());
237 public enum InfoPropertyName {
239 DESCRIPTION("description"),
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");
250 private String value;
251 InfoPropertyName(String value){
255 public String getValue(){