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 / VendorSoftwareProductInfoDaoZusammenImpl.java
index 517a01e..aa192ed 100644 (file)
@@ -1,16 +1,15 @@
 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
 
 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
-import com.amdocs.zusammen.datatypes.Id;
 import com.amdocs.zusammen.datatypes.SessionContext;
 import com.amdocs.zusammen.datatypes.item.Action;
 import com.amdocs.zusammen.datatypes.item.ElementContext;
 import com.amdocs.zusammen.datatypes.item.Info;
-import com.amdocs.zusammen.datatypes.item.ItemVersion;
-import com.amdocs.zusammen.utils.fileutils.FileUtils;
 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
-import org.openecomp.core.zusammen.api.ZusammenUtil;
+import org.openecomp.sdc.datatypes.model.ElementType;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToVSPGeneralConvertor;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToVSPQuestionnaireConvertor;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
 import org.openecomp.sdc.versioning.VersioningManagerFactory;
@@ -20,10 +19,14 @@ import org.openecomp.sdc.versioning.types.VersionableEntityStoreType;
 
 import java.io.ByteArrayInputStream;
 import java.util.Collection;
-import java.util.Date;
 import java.util.stream.Collectors;
 
+import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
+import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
+
 public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareProductInfoDao {
+  private static final String EMPTY_DATA = "{}";
+
   private ZusammenAdaptor zusammenAdaptor;
 
   public VendorSoftwareProductInfoDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
@@ -33,7 +36,8 @@ public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareP
   @Override
   public void registerVersioning(String versionableEntityType) {
     VersionableEntityMetadata metadata =
-        new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "vsp", null, null);
+        new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "VendorSoftwareProduct",
+            null, null);
 
     VersioningManagerFactory.getInstance().createInterface()
         .register(versionableEntityType, metadata);
@@ -41,113 +45,173 @@ public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareP
 
   @Override
   public Collection<VspDetails> list(VspDetails entity) {
-    return zusammenAdaptor.listItems(ZusammenUtil.createSessionContext()).stream().filter
-        (vspEntity-> "vsp".equals(vspEntity.getInfo().getProperty("type")))
-        .map(item -> mapInfoToVspDetails(
-            item.getId().getValue(), null, item.getInfo(),
-            item.getModificationTime(), item.getCreationTime()))
+    ElementToVSPGeneralConvertor convertor = new ElementToVSPGeneralConvertor();
+
+
+    return zusammenAdaptor.listItems(createSessionContext()).stream()
+        .filter(item -> "VendorSoftwareProduct".equals(item.getInfo().getProperty("item_type")))
+        .map(item -> convertor.convert(item))
         .collect(Collectors.toList());
   }
 
+
   @Override
   public void create(VspDetails vspDetails) {
-    SessionContext context = ZusammenUtil.createSessionContext();
+    ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
 
-    Id itemId = zusammenAdaptor.createItem(context, mapVspDetailsToZusammenItemInfo(vspDetails));
-    Id versionId =
-        zusammenAdaptor.createVersion(context, itemId, null, ZusammenUtil.createFirstVersionData());
+    SessionContext context = createSessionContext();
+    ElementContext elementContext =
+        new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
+    zusammenAdaptor.saveElement(context, elementContext, generalElement,
+        "Create VSP General Info Element");
 
-    ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
-    zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId),
-        generalElement, "Create VSP General Info Element");
+    createVspStructure(context, elementContext);
+  }
+
+  private void createVspStructure(SessionContext context, ElementContext elementContext) {
+    createOrchestrationTemplateCandidateStructure(context, elementContext);
+    createVspModelStructure(context, elementContext);
 
-    vspDetails.setId(itemId.getValue());//set id for caller
+    zusammenAdaptor.saveElement(context, elementContext,
+        buildStructuralElement(ElementType.DeploymentFlavors, Action.CREATE),
+        "Create VSP Deployment Flavors Element");
+
+    zusammenAdaptor.saveElement(context, elementContext,
+        buildStructuralElement(ElementType.Processes, Action.CREATE),
+        "Create VSP Processes Element");
   }
 
-  @Override
-  public void update(VspDetails vspDetails) {
-    SessionContext context = ZusammenUtil.createSessionContext();
-    Id itemId = new Id(vspDetails.getId());
-    Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor);
+  private void createOrchestrationTemplateCandidateStructure(SessionContext context,
+                                                             ElementContext elementContext) {
+    ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
 
-    zusammenAdaptor.updateItem(context, itemId, mapVspDetailsToZusammenItemInfo(vspDetails));
+    ZusammenElement candidateContentElement =
+        buildStructuralElement(ElementType.OrchestrationTemplateCandidateContent, Action.CREATE);
+    candidateContentElement.setData(emptyData);
 
-    ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
-    zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId),
-        generalElement, "Update VSP General Info Element");
+    ZusammenElement candidateElement =
+        buildStructuralElement(ElementType.OrchestrationTemplateCandidate, Action.CREATE);
+    candidateElement.setData(emptyData);
+    candidateElement.addSubElement(candidateContentElement);
+
+    zusammenAdaptor.saveElement(context, elementContext, candidateElement,
+        "Create Orchestration Template Candidate Elements");
   }
 
-  @Override
-  public VspDetails get(VspDetails vspDetails) {
-    SessionContext context = ZusammenUtil.createSessionContext();
-    Id itemId = new Id(vspDetails.getId());
-    ItemVersion itemVersion = VspZusammenUtil.getFirstVersion(context, itemId, zusammenAdaptor);
-    ElementContext elementContext = new ElementContext(itemId, itemVersion.getId(),
-        VspZusammenUtil.getVersionTag(vspDetails.getVersion()));
+  private void createVspModelStructure(SessionContext context, ElementContext elementContext) {
+    ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.CREATE);
+    vspModel.addSubElement(buildOrchestrationTemplateStructure());
+    vspModel.addSubElement(buildStructuralElement(ElementType.Networks, Action.CREATE));
+    vspModel.addSubElement(buildStructuralElement(ElementType.Components, Action.CREATE));
+    vspModel
+        .addSubElement(buildStructuralElement(ElementType.ComponentDependencies, Action.CREATE));
+
+    ZusammenElement templates = buildStructuralElement(ElementType.Templates, Action.CREATE);
+    ZusammenElement artifacts = buildStructuralElement(ElementType.Artifacts, Action.CREATE);
+    vspModel.addSubElement(
+        buildServiceModelStructure(ElementType.ServiceModel, templates, artifacts));
+    vspModel.addSubElement(
+        buildServiceModelStructure(ElementType.EnrichedServiceModel, templates, artifacts));
+
+    zusammenAdaptor.saveElement(context, elementContext, vspModel, "Create VSP Model Elements");
+  }
 
-    return zusammenAdaptor
-        .getElementInfoByName(context, elementContext, null, StructureElement.General.name())
-        .map(generalElementInfo -> mapInfoToVspDetails(
-            vspDetails.getId(), vspDetails.getVersion(), generalElementInfo.getInfo(),
-            itemVersion.getModificationTime(), itemVersion.getCreationTime()))
-        .orElse(null);
+  private ZusammenElement buildOrchestrationTemplateStructure() {
+    ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
+
+    ZusammenElement validationData =
+        buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.CREATE);
+    validationData.setData(emptyData);
+
+    ZusammenElement orchestrationTemplate =
+        buildStructuralElement(ElementType.OrchestrationTemplate, Action.CREATE);
+    orchestrationTemplate.setData(emptyData);
+    orchestrationTemplate.addSubElement(validationData);
+
+    return orchestrationTemplate;
   }
 
+  private ZusammenElement buildServiceModelStructure(ElementType serviceModelElementType,
+                                                     ZusammenElement templates,
+                                                     ZusammenElement artifacts) {
+    ZusammenElement serviceModel = buildStructuralElement(serviceModelElementType, Action.CREATE);
+    serviceModel.addSubElement(templates);
+    serviceModel.addSubElement(artifacts);
+    return serviceModel;
+  }
 
   @Override
-  public void delete(VspDetails entity) {
+  public void update(VspDetails vspDetails) {
+    ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
 
+    SessionContext context = createSessionContext();
+    zusammenAdaptor.saveElement(context,
+        new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId()), generalElement,
+        "Update VSP General Info Element");
   }
 
   @Override
-  public void updateOldVersionIndication(VspDetails vspDetails) {
-    VspDetails retrieved = get(vspDetails);
-    if (retrieved != null) {
-      retrieved.setOldVersion(vspDetails.getOldVersion());
-      update(retrieved);
-    }
+  public VspDetails get(VspDetails vspDetails) {
+    SessionContext context = createSessionContext();
+    ElementContext elementContext =
+        new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
+    VspDetails vsp = zusammenAdaptor.getElementInfoByName(context, elementContext, null,
+        ElementType.VendorSoftwareProduct.name())
+        .map(new ElementToVSPGeneralConvertor()::convert)
+        .orElse(null);
+    vsp.setId(vspDetails.getId());
+    vsp.setVersion(vspDetails.getVersion());
+    return vsp;
+  }
+
+  @Override
+  public void delete(VspDetails vspDetails) {
+    SessionContext context = createSessionContext();
+    ElementContext elementContext =
+        new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
+
+    zusammenAdaptor.saveElement(context, elementContext,
+        buildStructuralElement(ElementType.VspModel, Action.DELETE),
+        "Delete VSP Model Elements");
+
+    createVspModelStructure(context, elementContext);
   }
 
   @Override
   public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
-    SessionContext context = ZusammenUtil.createSessionContext();
-    Id itemId = new Id(vspId);
-    Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor);
+    SessionContext context = createSessionContext();
 
     ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
-    zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId),
+    zusammenAdaptor.saveElement(context, new ElementContext(vspId, version.getId()),
         questionnaireElement, "Update VSP Questionnaire");
   }
 
 
-  @Override
/* @Override
   public String getQuestionnaireData(String vspId, Version version) {
-    SessionContext context = ZusammenUtil.createSessionContext();
-    Id itemId = new Id(vspId);
-    Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor);
+    SessionContext context = createSessionContext();
 
-    return zusammenAdaptor.getElementByName(context,
-        new ElementContext(itemId, versionId, VspZusammenUtil.getVersionTag(version)), null,
-        StructureElement.Questionnaire.name())
+    return zusammenAdaptor
+        .getElementByName(context, new ElementContext(vspId, version.getId()), null,
+            ElementType.Questionnaire.name())
         .map(questionnaireElement ->
             new String(FileUtils.toByteArray(questionnaireElement.getData())))
         .orElse(null);
-  }
+  }*/
 
   @Override
   public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
-    VspQuestionnaireEntity entity = new VspQuestionnaireEntity();
+
+    SessionContext context = createSessionContext();
+    ElementToVSPQuestionnaireConvertor convertor = new ElementToVSPQuestionnaireConvertor();
+    VspQuestionnaireEntity entity = convertor.convert(zusammenAdaptor
+        .getElementByName(context, new ElementContext(vspId, version.getId()), null,
+            ElementType.VSPQuestionnaire.name()).map(element -> element).orElse(null));
     entity.setId(vspId);
     entity.setVersion(version);
-    entity.setQuestionnaireData(getQuestionnaireData(vspId, version));
     return entity;
   }
 
-  @Override
-  public void deleteAll(String vspId, Version version) {
-
-  }
-
   @Override
   public boolean isManual(String vspId, Version version) {
     final VspDetails vspDetails = get(new VspDetails(vspId, version));
@@ -159,29 +223,27 @@ public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareP
     return false;
   }
 
-  private Info mapVspDetailsToZusammenItemInfo(VspDetails vspDetails) {
-    Info info = new Info();
-    info.setName(vspDetails.getName());
-    info.setDescription(vspDetails.getDescription());
-    info.addProperty("type", "vsp");
-    addVspDetailsToInfo(info, vspDetails);
-    return info;
-  }
-
   private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
     ZusammenElement generalElement =
-        VspZusammenUtil.buildStructuralElement(StructureElement.General, action);
+        buildStructuralElement(ElementType.VendorSoftwareProduct, action);
     addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
     return generalElement;
   }
 
   private ZusammenElement mapQuestionnaireToZusammenElement(String questionnaireData) {
     ZusammenElement questionnaireElement =
-        VspZusammenUtil.buildStructuralElement(StructureElement.Questionnaire, Action.UPDATE);
+        buildStructuralElement(ElementType.VSPQuestionnaire, Action.UPDATE);
     questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
     return questionnaireElement;
   }
 
+  private ZusammenElement mapTestElementToZusammenElement(String elementData) {
+    ZusammenElement testElement =
+        buildStructuralElement(ElementType.test, Action.UPDATE);
+    testElement.setData(new ByteArrayInputStream(elementData.getBytes()));
+    return testElement;
+  }
+
   private void addVspDetailsToInfo(Info info, VspDetails vspDetails) {
     info.addProperty(InfoPropertyName.name.name(), vspDetails.getName());
     info.addProperty(InfoPropertyName.description.name(), vspDetails.getDescription());
@@ -191,45 +253,14 @@ public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareP
     info.addProperty(InfoPropertyName.vendorId.name(), vspDetails.getVendorId());
     info.addProperty(InfoPropertyName.vendorName.name(), vspDetails.getVendorName());
     if (vspDetails.getVlmVersion() != null) {
-      info.addProperty(
-          InfoPropertyName.vendorVersion.name(), vspDetails.getVlmVersion().toString());
+      info.addProperty(InfoPropertyName.vendorVersion.name(), vspDetails.getVlmVersion().getId());
     }
     info.addProperty(InfoPropertyName.licenseAgreement.name(), vspDetails.getLicenseAgreement());
     info.addProperty(InfoPropertyName.featureGroups.name(), vspDetails.getFeatureGroups());
-    info.addProperty(InfoPropertyName.oldVersion.name(), vspDetails.getOldVersion());
     info.addProperty(InfoPropertyName.onboardingMethod.name(), vspDetails.getOnboardingMethod());
-    info.addProperty(InfoPropertyName.obBoardingOrigin.name(), vspDetails.getOnboardingOrigin());
-    info.addProperty(InfoPropertyName.networkPackageName.name(), vspDetails.getNetworkPackageName());
-  }
-
-  private VspDetails mapInfoToVspDetails(String vspId, Version version, Info info,
-                                         Date modificationTime, Date creationTime) {
-    VspDetails vspDetails = new VspDetails(vspId, version);
-    vspDetails.setName(info.getProperty(InfoPropertyName.name.name()));
-    vspDetails.setDescription(info.getProperty(InfoPropertyName.description.name()));
-    vspDetails.setCategory(info.getProperty(InfoPropertyName.category.name()));
-    vspDetails.setSubCategory(info.getProperty(InfoPropertyName.subCategory.name()));
-    vspDetails.setVendorId(info.getProperty(InfoPropertyName.vendorId.name()));
-    vspDetails.setVendorName(info.getProperty(InfoPropertyName.vendorName.name()));
-    vspDetails.setVlmVersion(
-        Version.valueOf(info.getProperty(InfoPropertyName.vendorVersion.name())));
-    vspDetails.setLicenseAgreement(info.getProperty(InfoPropertyName.licenseAgreement.name()));
-    vspDetails.setFeatureGroups(info.getProperty(InfoPropertyName.featureGroups.name()));
-
-    vspDetails.setWritetimeMicroSeconds(
-        modificationTime == null ? creationTime.getTime() : modificationTime.getTime());
-    vspDetails.setVersion(version);
-    String oldVersion = info.getProperty(InfoPropertyName.oldVersion.name());
-
-    //Boolean oldVersion = ind == null || "true".equals( ind.toLowerCase());
-    vspDetails.setOldVersion(oldVersion);
-    vspDetails.setOnboardingMethod(info.getProperty(InfoPropertyName.onboardingMethod.name()));
-    vspDetails.setOnboardingOrigin(info.getProperty(InfoPropertyName.obBoardingOrigin.name()));
-    vspDetails.setNetworkPackageName(info.getProperty(InfoPropertyName.networkPackageName.name()));
-    return vspDetails;
-  }
-
-  private enum InfoPropertyName {
+  }
+
+  public enum InfoPropertyName {
     name,
     description,
     icon,
@@ -240,10 +271,7 @@ public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareP
     vendorVersion,
     licenseAgreement,
     featureGroups,
-    oldVersion,
-    onboardingMethod,
-    obBoardingOrigin,
-    networkPackageName
+    onboardingMethod
   }
 
 }