bc186e76290f12d03701000bf4d70e1653aa28b6
[sdc.git] /
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
18
19 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
20 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
21 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
22 import com.amdocs.zusammen.datatypes.SessionContext;
23 import com.amdocs.zusammen.datatypes.item.Action;
24 import com.amdocs.zusammen.datatypes.item.ElementContext;
25 import com.amdocs.zusammen.utils.fileutils.FileUtils;
26 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
27 import org.openecomp.sdc.datatypes.model.ElementType;
28 import org.openecomp.sdc.logging.api.Logger;
29 import org.openecomp.sdc.logging.api.LoggerFactory;
30 import org.openecomp.sdc.vendorsoftwareproduct.dao.OrchestrationTemplateDao;
31 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.OrchestrationTemplateEntity;
32 import org.openecomp.sdc.versioning.dao.types.Version;
33
34 import java.io.ByteArrayInputStream;
35 import java.nio.ByteBuffer;
36 import java.util.Collection;
37 import java.util.Optional;
38
39 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
40 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
41
42 public class OrchestrationTemplateDaoZusammenImpl implements OrchestrationTemplateDao {
43
44   private static final Logger LOGGER = LoggerFactory.getLogger(
45       OrchestrationTemplateDaoZusammenImpl.class);
46   private ZusammenAdaptor zusammenAdaptor;
47
48   public OrchestrationTemplateDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
49     this.zusammenAdaptor = zusammenAdaptor;
50   }
51
52   @Override
53   public void registerVersioning(String versionableEntityType) {
54     // registerVersioning not implemented for OrchestrationTemplateDaoZusammenImpl
55   }
56
57   @Override
58   public OrchestrationTemplateEntity getInfo(String vspId, Version version) {
59     SessionContext context = createSessionContext();
60     ElementContext elementContext = new ElementContext(vspId, version.getId());
61
62     Optional<ElementInfo> vspModel = zusammenAdaptor
63         .getElementInfoByName(context, elementContext, null, ElementType.VspModel.name());
64     if (!vspModel.isPresent()) {
65       return null;
66     }
67
68     Optional<ElementInfo> elementInfo = zusammenAdaptor
69         .getElementInfoByName(context, elementContext, vspModel.get().getId(),
70             ElementType.OrchestrationTemplate.name());
71     if (!elementInfo.isPresent()) {
72       return null;
73     }
74
75     Optional<Element> element =
76         zusammenAdaptor.getElementByName(context, elementContext, elementInfo.get().getId(),
77             ElementType.OrchestrationTemplateValidationData.name());
78
79     OrchestrationTemplateEntity orchestrationTemplate = new OrchestrationTemplateEntity();
80     if (!element.isPresent()) {
81       return orchestrationTemplate;
82     }
83     orchestrationTemplate
84         .setFileSuffix(element.get().getInfo().getProperty(InfoPropertyName.FILE_SUFFIX.getVal()));
85     orchestrationTemplate
86         .setFileName(element.get().getInfo().getProperty(InfoPropertyName.FILE_NAME.getVal()));
87     if (!VspZusammenUtil.hasEmptyData(element.get().getData())) {
88       orchestrationTemplate
89           .setValidationData(new String(FileUtils.toByteArray(element.get().getData())));
90     }
91     return orchestrationTemplate;
92   }
93
94   @Override
95   public OrchestrationTemplateEntity get(String vspId, Version version) {
96     SessionContext context = createSessionContext();
97     ElementContext elementContext = new ElementContext(vspId, version.getId());
98
99     OrchestrationTemplateEntity orchestrationTemplate = new OrchestrationTemplateEntity();
100
101     Optional<ElementInfo> vspModel = zusammenAdaptor
102         .getElementInfoByName(context, elementContext, null, ElementType.VspModel.name());
103     if (!vspModel.isPresent()) {
104       return orchestrationTemplate;
105     }
106
107     Optional<Element> orchestrationTemplateElementOpt = zusammenAdaptor
108         .getElementByName(context, elementContext, vspModel.get().getId(),
109             ElementType.OrchestrationTemplate.name());
110
111     if (! orchestrationTemplateElementOpt.isPresent()) {
112       return orchestrationTemplate;
113     } else {
114       Element orchestrationTemplateElement = orchestrationTemplateElementOpt.get();
115
116       if (VspZusammenUtil.hasEmptyData(orchestrationTemplateElement.getData())) {
117         return orchestrationTemplate;
118       }
119
120       orchestrationTemplate.setContentData(
121           ByteBuffer.wrap(FileUtils.toByteArray(orchestrationTemplateElement.getData())));
122
123       Collection<Element> subElements = orchestrationTemplateElement.getSubElements();
124       if (subElements.isEmpty()) {
125         return orchestrationTemplate;
126       }
127
128       for (Element element : subElements) {
129         Optional<Element> subElementOpt = zusammenAdaptor.getElement(context,
130             elementContext, element.getElementId().toString());
131
132         subElementOpt.ifPresent(subElement -> {
133           if (subElement.getInfo().getName().equals(ElementType
134               .OrchestrationTemplateValidationData.name())) {
135
136             orchestrationTemplate.setFileSuffix(subElement.getInfo()
137                 .getProperty(InfoPropertyName.FILE_SUFFIX.getVal()));
138             orchestrationTemplate.setFileName(subElement.getInfo()
139                 .getProperty(InfoPropertyName.FILE_NAME.getVal()));
140
141             if (!VspZusammenUtil.hasEmptyData(subElement.getData())) {
142               orchestrationTemplate.setValidationData(
143                   new String(FileUtils.toByteArray(subElement.getData())));
144             }
145           } else if (subElement.getInfo().getName().equals(ElementType
146               .OrchestrationTemplateStructure.name())) {
147             orchestrationTemplate.setFilesDataStructure(new String(FileUtils.toByteArray(subElement
148                 .getData())));
149           }
150         });
151       }
152     }
153     return orchestrationTemplate;
154   }
155
156   @Override
157   public void update(String vspId, Version version,
158                      OrchestrationTemplateEntity orchestrationTemplate) {
159     SessionContext context = createSessionContext();
160     ElementContext elementContext = new ElementContext(vspId, version.getId());
161
162     ZusammenElement validationData =
163         buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.UPDATE);
164     validationData
165         .setData(new ByteArrayInputStream(orchestrationTemplate.getValidationData().getBytes()));
166     validationData.getInfo()
167         .addProperty(InfoPropertyName.FILE_SUFFIX.getVal(), orchestrationTemplate.getFileSuffix());
168     validationData.getInfo()
169         .addProperty(InfoPropertyName.FILE_NAME.getVal(), orchestrationTemplate.getFileName());
170     ZusammenElement orchestrationTemplateStructure = buildStructuralElement(ElementType
171         .OrchestrationTemplateStructure, Action.UPDATE);
172     orchestrationTemplateStructure
173         .setData(new ByteArrayInputStream(orchestrationTemplate.getFilesDataStructure()
174             .getBytes()));
175     ZusammenElement orchestrationTemplateElement =
176         buildStructuralElement(ElementType.OrchestrationTemplate, Action.UPDATE);
177     orchestrationTemplateElement
178         .setData(new ByteArrayInputStream(orchestrationTemplate.getContentData().array()));
179     orchestrationTemplateElement.addSubElement(validationData);
180     orchestrationTemplateElement.addSubElement(orchestrationTemplateStructure);
181     ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.IGNORE);
182     vspModel.addSubElement(orchestrationTemplateElement);
183
184     zusammenAdaptor.saveElement(context, elementContext, vspModel, "Update Orchestration Template");
185   }
186
187   @Override
188   public Optional<String> getOrchestrationTemplateStructure(String vspId, Version version) {
189     LOGGER.info("Getting orchestration template structure for VendorSoftwareProduct id" +
190         " " + "-> " + vspId);
191
192     SessionContext context = createSessionContext();
193     ElementContext elementContext = new ElementContext(vspId, version.getId());
194
195     Optional<ElementInfo> vspModel = zusammenAdaptor.getElementInfoByName(context, elementContext,
196         null, ElementType.VspModel.name());
197     if (!vspModel.isPresent()) {
198       return Optional.empty();
199     }
200     Optional<Element> orchestrationTemplateElement = zusammenAdaptor.getElementByName(context,
201         elementContext, vspModel.get().getId(), ElementType.OrchestrationTemplate.name());
202     if (!orchestrationTemplateElement.isPresent()) {
203       return Optional.empty();
204     }
205
206     Optional<Element> orchestrationTemplateStructureElement = zusammenAdaptor
207         .getElementByName(context, elementContext,
208             orchestrationTemplateElement.get().getElementId(),
209             ElementType.OrchestrationTemplateStructure.name());
210     if (orchestrationTemplateStructureElement.isPresent() &&
211         !VspZusammenUtil.hasEmptyData(orchestrationTemplateStructureElement.get().getData())) {
212       return Optional.of(new String(
213           FileUtils.toByteArray(orchestrationTemplateStructureElement.get().getData())));
214     }
215     LOGGER.info("Finished getting orchestration template structure for VendorSoftwareProduct " +
216         "id -> " + vspId);
217
218     return Optional.empty();
219   }
220
221   private enum InfoPropertyName {
222     FILE_SUFFIX("fileSuffix"),
223     FILE_NAME("fileName");
224
225     private String val;
226
227     InfoPropertyName(String val){
228       this.val=val;
229     }
230
231     public String getVal() {
232       return val;
233     }
234   }
235 }