Add collaboration feature
[sdc.git] / openecomp-be / lib / openecomp-sdc-vendor-software-product-lib / openecomp-sdc-vendor-software-product-core / src / main / java / org / openecomp / sdc / vendorsoftwareproduct / dao / impl / zusammen / OrchestrationTemplateDaoZusammenImpl.java
1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
2
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;
16
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;
23
24 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
25 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
26
27 public class OrchestrationTemplateDaoZusammenImpl implements OrchestrationTemplateDao {
28
29   private ZusammenAdaptor zusammenAdaptor;
30
31   public OrchestrationTemplateDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
32     this.zusammenAdaptor = zusammenAdaptor;
33   }
34
35   @Override
36   public void registerVersioning(String versionableEntityType) {
37
38   }
39
40   @Override
41   public OrchestrationTemplateEntity getInfo(String vspId, Version version) {
42     SessionContext context = createSessionContext();
43     ElementContext elementContext = new ElementContext(vspId, version.getId());
44
45     Optional<ElementInfo> vspModel = zusammenAdaptor
46         .getElementInfoByName(context, elementContext, null, ElementType.VspModel.name());
47     if (!vspModel.isPresent()) {
48       return null;
49     }
50
51     Optional<ElementInfo> elementInfo = zusammenAdaptor
52         .getElementInfoByName(context, elementContext, vspModel.get().getId(),
53             ElementType.OrchestrationTemplate.name());
54     if (!elementInfo.isPresent()) {
55       return null;
56     }
57
58     Optional<Element> element =
59         zusammenAdaptor.getElementByName(context, elementContext, elementInfo.get().getId(),
60             ElementType.OrchestrationTemplateValidationData.name());
61
62     OrchestrationTemplateEntity orchestrationTemplate = new OrchestrationTemplateEntity();
63     if (!element.isPresent()) {
64       return orchestrationTemplate;
65     }
66     orchestrationTemplate
67         .setFileSuffix(element.get().getInfo().getProperty(InfoPropertyName.fileSuffix.name()));
68     orchestrationTemplate
69         .setFileName(element.get().getInfo().getProperty(InfoPropertyName.fileName.name()));
70     if (!hasEmptyData(element.get().getData())) {
71       orchestrationTemplate
72           .setValidationData(new String(FileUtils.toByteArray(element.get().getData())));
73     }
74     return orchestrationTemplate;
75   }
76
77   @Override
78   public OrchestrationTemplateEntity get(String vspId, Version version) {
79     SessionContext context = createSessionContext();
80     ElementContext elementContext = new ElementContext(vspId, version.getId());
81
82     OrchestrationTemplateEntity orchestrationTemplate = new OrchestrationTemplateEntity();
83
84     Optional<ElementInfo> vspModel = zusammenAdaptor
85         .getElementInfoByName(context, elementContext, null, ElementType.VspModel.name());
86     if (!vspModel.isPresent()) {
87       return orchestrationTemplate;
88     }
89
90     Optional<Element> orchestrationTemplateElement = zusammenAdaptor
91         .getElementByName(context, elementContext, vspModel.get().getId(),
92             ElementType.OrchestrationTemplate.name());
93     if (!orchestrationTemplateElement.isPresent()) {
94       return orchestrationTemplate;
95     }
96
97     if (!hasEmptyData(orchestrationTemplateElement.get().getData())) {
98       orchestrationTemplate.setContentData(
99           ByteBuffer.wrap(FileUtils.toByteArray(orchestrationTemplateElement.get().getData())));
100     }
101
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())));
114       }
115     }
116     return orchestrationTemplate;
117   }
118
119   @Override
120   public void update(String vspId, Version version,
121                      OrchestrationTemplateEntity orchestrationTemplate) {
122     SessionContext context = createSessionContext();
123     ElementContext elementContext = new ElementContext(vspId, version.getId());
124
125     ZusammenElement validationData =
126         buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.UPDATE);
127     validationData
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());
133
134     ZusammenElement orchestrationTemplateElement =
135         buildStructuralElement(ElementType.OrchestrationTemplate, Action.UPDATE);
136     orchestrationTemplateElement
137         .setData(new ByteArrayInputStream(orchestrationTemplate.getContentData().array()));
138     orchestrationTemplateElement.addSubElement(validationData);
139
140     ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.IGNORE);
141     vspModel.addSubElement(orchestrationTemplateElement);
142
143     zusammenAdaptor.saveElement(context, elementContext, vspModel, "Update Orchestration Template");
144   }
145
146   private boolean hasEmptyData(InputStream elementData) {
147     String emptyData = "{}";
148     byte[] byteElementData;
149     try {
150       byteElementData = IOUtils.toByteArray(elementData);
151     } catch (IOException ex) {
152       ex.printStackTrace();
153       return false;
154     }
155     if (Arrays.equals(emptyData.getBytes(), byteElementData)) {
156       return true;
157     }
158     return false;
159   }
160
161   private enum InfoPropertyName {
162     fileSuffix,
163     fileName
164   }
165 }