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 {