1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
3 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
4 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
5 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
6 import com.amdocs.zusammen.datatypes.SessionContext;
7 import com.amdocs.zusammen.datatypes.item.Action;
8 import com.amdocs.zusammen.datatypes.item.ElementContext;
9 import com.amdocs.zusammen.utils.fileutils.FileUtils;
10 import org.apache.commons.io.IOUtils;
11 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
12 import org.openecomp.sdc.datatypes.model.ElementType;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.OrchestrationTemplateDao;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.OrchestrationTemplateEntity;
15 import org.openecomp.sdc.versioning.dao.types.Version;
17 import java.io.ByteArrayInputStream;
18 import java.io.IOException;
19 import java.io.InputStream;
20 import java.nio.ByteBuffer;
21 import java.util.Arrays;
22 import java.util.Optional;
24 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
25 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
27 public class OrchestrationTemplateDaoZusammenImpl implements OrchestrationTemplateDao {
29 private ZusammenAdaptor zusammenAdaptor;
31 public OrchestrationTemplateDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
32 this.zusammenAdaptor = zusammenAdaptor;
36 public void registerVersioning(String versionableEntityType) {
41 public OrchestrationTemplateEntity getInfo(String vspId, Version version) {
42 SessionContext context = createSessionContext();
43 ElementContext elementContext = new ElementContext(vspId, version.getId());
45 Optional<ElementInfo> vspModel = zusammenAdaptor
46 .getElementInfoByName(context, elementContext, null, ElementType.VspModel.name());
47 if (!vspModel.isPresent()) {
51 Optional<ElementInfo> elementInfo = zusammenAdaptor
52 .getElementInfoByName(context, elementContext, vspModel.get().getId(),
53 ElementType.OrchestrationTemplate.name());
54 if (!elementInfo.isPresent()) {
58 Optional<Element> element =
59 zusammenAdaptor.getElementByName(context, elementContext, elementInfo.get().getId(),
60 ElementType.OrchestrationTemplateValidationData.name());
62 OrchestrationTemplateEntity orchestrationTemplate = new OrchestrationTemplateEntity();
63 if (!element.isPresent()) {
64 return orchestrationTemplate;
67 .setFileSuffix(element.get().getInfo().getProperty(InfoPropertyName.fileSuffix.name()));
69 .setFileName(element.get().getInfo().getProperty(InfoPropertyName.fileName.name()));
70 if (!hasEmptyData(element.get().getData())) {
72 .setValidationData(new String(FileUtils.toByteArray(element.get().getData())));
74 return orchestrationTemplate;
78 public OrchestrationTemplateEntity get(String vspId, Version version) {
79 SessionContext context = createSessionContext();
80 ElementContext elementContext = new ElementContext(vspId, version.getId());
82 OrchestrationTemplateEntity orchestrationTemplate = new OrchestrationTemplateEntity();
84 Optional<ElementInfo> vspModel = zusammenAdaptor
85 .getElementInfoByName(context, elementContext, null, ElementType.VspModel.name());
86 if (!vspModel.isPresent()) {
87 return orchestrationTemplate;
90 Optional<Element> orchestrationTemplateElement = zusammenAdaptor
91 .getElementByName(context, elementContext, vspModel.get().getId(),
92 ElementType.OrchestrationTemplate.name());
93 if (!orchestrationTemplateElement.isPresent()) {
94 return orchestrationTemplate;
97 if (!hasEmptyData(orchestrationTemplateElement.get().getData())) {
98 orchestrationTemplate.setContentData(
99 ByteBuffer.wrap(FileUtils.toByteArray(orchestrationTemplateElement.get().getData())));
102 Optional<Element> validationDataElement =
103 zusammenAdaptor.getElementByName(context, elementContext,
104 orchestrationTemplateElement.get().getElementId(),
105 ElementType.OrchestrationTemplateValidationData.name());
106 if (validationDataElement.isPresent()) {
107 orchestrationTemplate.setFileSuffix(validationDataElement.get().getInfo()
108 .getProperty(InfoPropertyName.fileSuffix.name()));
109 orchestrationTemplate.setFileName(validationDataElement.get().getInfo()
110 .getProperty(InfoPropertyName.fileName.name()));
111 if (!hasEmptyData(validationDataElement.get().getData())) {
112 orchestrationTemplate.setValidationData(
113 new String(FileUtils.toByteArray(validationDataElement.get().getData())));
116 return orchestrationTemplate;
120 public void update(String vspId, Version version,
121 OrchestrationTemplateEntity orchestrationTemplate) {
122 SessionContext context = createSessionContext();
123 ElementContext elementContext = new ElementContext(vspId, version.getId());
125 ZusammenElement validationData =
126 buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.UPDATE);
128 .setData(new ByteArrayInputStream(orchestrationTemplate.getValidationData().getBytes()));
129 validationData.getInfo()
130 .addProperty(InfoPropertyName.fileSuffix.name(), orchestrationTemplate.getFileSuffix());
131 validationData.getInfo()
132 .addProperty(InfoPropertyName.fileName.name(), orchestrationTemplate.getFileName());
134 ZusammenElement orchestrationTemplateElement =
135 buildStructuralElement(ElementType.OrchestrationTemplate, Action.UPDATE);
136 orchestrationTemplateElement
137 .setData(new ByteArrayInputStream(orchestrationTemplate.getContentData().array()));
138 orchestrationTemplateElement.addSubElement(validationData);
140 ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.IGNORE);
141 vspModel.addSubElement(orchestrationTemplateElement);
143 zusammenAdaptor.saveElement(context, elementContext, vspModel, "Update Orchestration Template");
146 private boolean hasEmptyData(InputStream elementData) {
147 String emptyData = "{}";
148 byte[] byteElementData;
150 byteElementData = IOUtils.toByteArray(elementData);
151 } catch (IOException ex) {
152 ex.printStackTrace();
155 if (Arrays.equals(emptyData.getBytes(), byteElementData)) {
161 private enum InfoPropertyName {