2 * Copyright © 2016-2018 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
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;
34 import java.io.ByteArrayInputStream;
35 import java.nio.ByteBuffer;
36 import java.util.Collection;
37 import java.util.Optional;
39 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
40 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
42 public class OrchestrationTemplateDaoZusammenImpl implements OrchestrationTemplateDao {
44 private static final Logger LOGGER = LoggerFactory.getLogger(
45 OrchestrationTemplateDaoZusammenImpl.class);
46 private ZusammenAdaptor zusammenAdaptor;
48 public OrchestrationTemplateDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
49 this.zusammenAdaptor = zusammenAdaptor;
53 public void registerVersioning(String versionableEntityType) {
54 // registerVersioning not implemented for OrchestrationTemplateDaoZusammenImpl
58 public OrchestrationTemplateEntity getInfo(String vspId, Version version) {
59 SessionContext context = createSessionContext();
60 ElementContext elementContext = new ElementContext(vspId, version.getId());
62 Optional<ElementInfo> vspModel = zusammenAdaptor
63 .getElementInfoByName(context, elementContext, null, ElementType.VspModel.name());
64 if (!vspModel.isPresent()) {
68 Optional<ElementInfo> elementInfo = zusammenAdaptor
69 .getElementInfoByName(context, elementContext, vspModel.get().getId(),
70 ElementType.OrchestrationTemplate.name());
71 if (!elementInfo.isPresent()) {
75 Optional<Element> element =
76 zusammenAdaptor.getElementByName(context, elementContext, elementInfo.get().getId(),
77 ElementType.OrchestrationTemplateValidationData.name());
79 OrchestrationTemplateEntity orchestrationTemplate = new OrchestrationTemplateEntity();
80 if (!element.isPresent()) {
81 return orchestrationTemplate;
84 .setFileSuffix(element.get().getInfo().getProperty(InfoPropertyName.FILE_SUFFIX.getVal()));
86 .setFileName(element.get().getInfo().getProperty(InfoPropertyName.FILE_NAME.getVal()));
87 if (!VspZusammenUtil.hasEmptyData(element.get().getData())) {
89 .setValidationData(new String(FileUtils.toByteArray(element.get().getData())));
91 return orchestrationTemplate;
95 public OrchestrationTemplateEntity get(String vspId, Version version) {
96 SessionContext context = createSessionContext();
97 ElementContext elementContext = new ElementContext(vspId, version.getId());
99 OrchestrationTemplateEntity orchestrationTemplate = new OrchestrationTemplateEntity();
101 Optional<ElementInfo> vspModel = zusammenAdaptor
102 .getElementInfoByName(context, elementContext, null, ElementType.VspModel.name());
103 if (!vspModel.isPresent()) {
104 return orchestrationTemplate;
107 Optional<Element> orchestrationTemplateElementOpt = zusammenAdaptor
108 .getElementByName(context, elementContext, vspModel.get().getId(),
109 ElementType.OrchestrationTemplate.name());
111 if (! orchestrationTemplateElementOpt.isPresent()) {
112 return orchestrationTemplate;
114 Element orchestrationTemplateElement = orchestrationTemplateElementOpt.get();
116 if (VspZusammenUtil.hasEmptyData(orchestrationTemplateElement.getData())) {
117 return orchestrationTemplate;
120 orchestrationTemplate.setContentData(
121 ByteBuffer.wrap(FileUtils.toByteArray(orchestrationTemplateElement.getData())));
123 Collection<Element> subElements = orchestrationTemplateElement.getSubElements();
124 if (subElements.isEmpty()) {
125 return orchestrationTemplate;
128 for (Element element : subElements) {
129 Optional<Element> subElementOpt = zusammenAdaptor.getElement(context,
130 elementContext, element.getElementId().toString());
132 subElementOpt.ifPresent(subElement -> {
133 if (subElement.getInfo().getName().equals(ElementType
134 .OrchestrationTemplateValidationData.name())) {
136 orchestrationTemplate.setFileSuffix(subElement.getInfo()
137 .getProperty(InfoPropertyName.FILE_SUFFIX.getVal()));
138 orchestrationTemplate.setFileName(subElement.getInfo()
139 .getProperty(InfoPropertyName.FILE_NAME.getVal()));
141 if (!VspZusammenUtil.hasEmptyData(subElement.getData())) {
142 orchestrationTemplate.setValidationData(
143 new String(FileUtils.toByteArray(subElement.getData())));
145 } else if (subElement.getInfo().getName().equals(ElementType
146 .OrchestrationTemplateStructure.name())) {
147 orchestrationTemplate.setFilesDataStructure(new String(FileUtils.toByteArray(subElement
153 return orchestrationTemplate;
157 public void update(String vspId, Version version,
158 OrchestrationTemplateEntity orchestrationTemplate) {
159 SessionContext context = createSessionContext();
160 ElementContext elementContext = new ElementContext(vspId, version.getId());
162 ZusammenElement validationData =
163 buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.UPDATE);
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()
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);
184 zusammenAdaptor.saveElement(context, elementContext, vspModel, "Update Orchestration Template");
188 public Optional<String> getOrchestrationTemplateStructure(String vspId, Version version) {
189 LOGGER.info("Getting orchestration template structure for VendorSoftwareProduct id" +
190 " " + "-> " + vspId);
192 SessionContext context = createSessionContext();
193 ElementContext elementContext = new ElementContext(vspId, version.getId());
195 Optional<ElementInfo> vspModel = zusammenAdaptor.getElementInfoByName(context, elementContext,
196 null, ElementType.VspModel.name());
197 if (!vspModel.isPresent()) {
198 return Optional.empty();
200 Optional<Element> orchestrationTemplateElement = zusammenAdaptor.getElementByName(context,
201 elementContext, vspModel.get().getId(), ElementType.OrchestrationTemplate.name());
202 if (!orchestrationTemplateElement.isPresent()) {
203 return Optional.empty();
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())));
215 LOGGER.info("Finished getting orchestration template structure for VendorSoftwareProduct " +
218 return Optional.empty();
221 private enum InfoPropertyName {
222 FILE_SUFFIX("fileSuffix"),
223 FILE_NAME("fileName");
227 InfoPropertyName(String val){
231 public String getVal() {