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 ElementToVSPGeneralConvertor convertor = new ElementToVSPGeneralConvertor();
51 return zusammenAdaptor.listItems(createSessionContext()).stream()
52 .filter(item -> "VendorSoftwareProduct".equals(item.getInfo().getProperty("item_type")))
53 .map(item -> convertor.convert(item))
54 .collect(Collectors.toList());
59 public void create(VspDetails vspDetails) {
60 ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
62 SessionContext context = createSessionContext();
63 ElementContext elementContext =
64 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
65 zusammenAdaptor.saveElement(context, elementContext, generalElement,
66 "Create VSP General Info Element");
68 createVspStructure(context, elementContext);
71 private void createVspStructure(SessionContext context, ElementContext elementContext) {
72 createOrchestrationTemplateCandidateStructure(context, elementContext);
73 createVspModelStructure(context, elementContext);
75 zusammenAdaptor.saveElement(context, elementContext,
76 buildStructuralElement(ElementType.DeploymentFlavors, Action.CREATE),
77 "Create VSP Deployment Flavors Element");
79 zusammenAdaptor.saveElement(context, elementContext,
80 buildStructuralElement(ElementType.Processes, Action.CREATE),
81 "Create VSP Processes Element");
84 private void createOrchestrationTemplateCandidateStructure(SessionContext context,
85 ElementContext elementContext) {
86 ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
88 ZusammenElement candidateContentElement =
89 buildStructuralElement(ElementType.OrchestrationTemplateCandidateContent, Action.CREATE);
90 candidateContentElement.setData(emptyData);
92 ZusammenElement candidateElement =
93 buildStructuralElement(ElementType.OrchestrationTemplateCandidate, Action.CREATE);
94 candidateElement.setData(emptyData);
95 candidateElement.addSubElement(candidateContentElement);
97 zusammenAdaptor.saveElement(context, elementContext, candidateElement,
98 "Create Orchestration Template Candidate Elements");
101 private void createVspModelStructure(SessionContext context, ElementContext elementContext) {
102 ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.CREATE);
103 vspModel.addSubElement(buildOrchestrationTemplateStructure());
104 vspModel.addSubElement(buildStructuralElement(ElementType.Networks, Action.CREATE));
105 vspModel.addSubElement(buildStructuralElement(ElementType.Components, Action.CREATE));
107 .addSubElement(buildStructuralElement(ElementType.ComponentDependencies, Action.CREATE));
109 ZusammenElement templates = buildStructuralElement(ElementType.Templates, Action.CREATE);
110 ZusammenElement artifacts = buildStructuralElement(ElementType.Artifacts, Action.CREATE);
111 vspModel.addSubElement(
112 buildServiceModelStructure(ElementType.ServiceModel, templates, artifacts));
113 vspModel.addSubElement(
114 buildServiceModelStructure(ElementType.EnrichedServiceModel, templates, artifacts));
116 zusammenAdaptor.saveElement(context, elementContext, vspModel, "Create VSP Model Elements");
119 private ZusammenElement buildOrchestrationTemplateStructure() {
120 ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
122 ZusammenElement validationData =
123 buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.CREATE);
124 validationData.setData(emptyData);
126 ZusammenElement orchestrationTemplate =
127 buildStructuralElement(ElementType.OrchestrationTemplate, Action.CREATE);
128 orchestrationTemplate.setData(emptyData);
129 orchestrationTemplate.addSubElement(validationData);
131 return orchestrationTemplate;
134 private ZusammenElement buildServiceModelStructure(ElementType serviceModelElementType,
135 ZusammenElement templates,
136 ZusammenElement artifacts) {
137 ZusammenElement serviceModel = buildStructuralElement(serviceModelElementType, Action.CREATE);
138 serviceModel.addSubElement(templates);
139 serviceModel.addSubElement(artifacts);
144 public void update(VspDetails vspDetails) {
145 ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
147 SessionContext context = createSessionContext();
148 zusammenAdaptor.saveElement(context,
149 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId()), generalElement,
150 "Update VSP General Info Element");
154 public VspDetails get(VspDetails vspDetails) {
155 SessionContext context = createSessionContext();
156 ElementContext elementContext =
157 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
158 VspDetails vsp = zusammenAdaptor.getElementInfoByName(context, elementContext, null,
159 ElementType.VendorSoftwareProduct.name())
160 .map(new ElementToVSPGeneralConvertor()::convert)
162 vsp.setId(vspDetails.getId());
163 vsp.setVersion(vspDetails.getVersion());
168 public void delete(VspDetails vspDetails) {
169 SessionContext context = createSessionContext();
170 ElementContext elementContext =
171 new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
173 zusammenAdaptor.saveElement(context, elementContext,
174 buildStructuralElement(ElementType.VspModel, Action.DELETE),
175 "Delete VSP Model Elements");
177 createVspModelStructure(context, elementContext);
181 public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
182 SessionContext context = createSessionContext();
184 ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
185 zusammenAdaptor.saveElement(context, new ElementContext(vspId, version.getId()),
186 questionnaireElement, "Update VSP Questionnaire");
191 public String getQuestionnaireData(String vspId, Version version) {
192 SessionContext context = createSessionContext();
194 return zusammenAdaptor
195 .getElementByName(context, new ElementContext(vspId, version.getId()), null,
196 ElementType.Questionnaire.name())
197 .map(questionnaireElement ->
198 new String(FileUtils.toByteArray(questionnaireElement.getData())))
203 public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
205 SessionContext context = createSessionContext();
206 ElementToVSPQuestionnaireConvertor convertor = new ElementToVSPQuestionnaireConvertor();
207 VspQuestionnaireEntity entity = convertor.convert(zusammenAdaptor
208 .getElementByName(context, new ElementContext(vspId, version.getId()), null,
209 ElementType.VSPQuestionnaire.name()).map(element -> element).orElse(null));
211 entity.setVersion(version);
216 public boolean isManual(String vspId, Version version) {
217 final VspDetails vspDetails = get(new VspDetails(vspId, version));
218 if (vspDetails != null) {
219 if ("Manual".equals(vspDetails.getOnboardingMethod())) {
226 private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
227 ZusammenElement generalElement =
228 buildStructuralElement(ElementType.VendorSoftwareProduct, action);
229 addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
230 return generalElement;
233 private ZusammenElement mapQuestionnaireToZusammenElement(String questionnaireData) {
234 ZusammenElement questionnaireElement =
235 buildStructuralElement(ElementType.VSPQuestionnaire, Action.UPDATE);
236 questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
237 return questionnaireElement;
240 private ZusammenElement mapTestElementToZusammenElement(String elementData) {
241 ZusammenElement testElement =
242 buildStructuralElement(ElementType.test, Action.UPDATE);
243 testElement.setData(new ByteArrayInputStream(elementData.getBytes()));
247 private void addVspDetailsToInfo(Info info, VspDetails vspDetails) {
248 info.addProperty(InfoPropertyName.name.name(), vspDetails.getName());
249 info.addProperty(InfoPropertyName.description.name(), vspDetails.getDescription());
250 info.addProperty(InfoPropertyName.icon.name(), vspDetails.getIcon());
251 info.addProperty(InfoPropertyName.category.name(), vspDetails.getCategory());
252 info.addProperty(InfoPropertyName.subCategory.name(), vspDetails.getSubCategory());
253 info.addProperty(InfoPropertyName.vendorId.name(), vspDetails.getVendorId());
254 info.addProperty(InfoPropertyName.vendorName.name(), vspDetails.getVendorName());
255 if (vspDetails.getVlmVersion() != null) {
256 info.addProperty(InfoPropertyName.vendorVersion.name(), vspDetails.getVlmVersion().getId());
258 info.addProperty(InfoPropertyName.licenseAgreement.name(), vspDetails.getLicenseAgreement());
259 info.addProperty(InfoPropertyName.featureGroups.name(), vspDetails.getFeatureGroups());
260 info.addProperty(InfoPropertyName.onboardingMethod.name(), vspDetails.getOnboardingMethod());
263 public enum InfoPropertyName {