diff options
Diffstat (limited to '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')
13 files changed, 1821 insertions, 0 deletions
diff --git a/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/ComponentDaoZusammenImpl.java b/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/ComponentDaoZusammenImpl.java new file mode 100644 index 0000000000..8ef09ada7b --- /dev/null +++ b/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/ComponentDaoZusammenImpl.java @@ -0,0 +1,244 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +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 org.openecomp.core.utilities.file.FileUtils; +import org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.core.zusammen.api.ZusammenUtil; +import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity; +import org.openecomp.sdc.versioning.dao.types.Version; + +import java.io.ByteArrayInputStream; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Optional; +import java.util.stream.Collectors; + +public class ComponentDaoZusammenImpl implements ComponentDao { + + private ZusammenAdaptor zusammenAdaptor; + + public ComponentDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) { + this.zusammenAdaptor = zusammenAdaptor; + } + + @Override + public void registerVersioning(String versionableEntityType) { + } + + @Override + public Collection<ComponentEntity> list(ComponentEntity component) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(component.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(component.getVersion())); + + return listComponents(zusammenAdaptor, context, elementContext, component.getVspId(), + component.getVersion()); + } + + static Collection<ComponentEntity> listComponents(ZusammenAdaptor zusammenAdaptor, + SessionContext context, + ElementContext elementContext, + String vspId, Version version) { + return zusammenAdaptor + .listElementsByName(context, elementContext, null, StructureElement.Components.name()) + .stream().map(elementInfo -> mapElementInfoToComponent(vspId, version, elementInfo)) + .collect(Collectors.toList()); + } + + private static ComponentEntity mapElementInfoToComponent(String vspId, Version version, + ElementInfo elementInfo) { + ComponentEntity componentEntity = + new ComponentEntity(vspId, version, elementInfo.getId().getValue()); + componentEntity.setCompositionData( + elementInfo.getInfo().getProperty(ElementPropertyName.compositionData.name())); + return componentEntity; + } + + @Override + public void create(ComponentEntity component) { + ZusammenElement componentElement = componentToZusammen(component, Action.CREATE); + ZusammenElement componentsElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Components, null); + componentsElement.getSubElements().add(componentElement); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(component.getVspId()); + Optional<Element> savedElement = zusammenAdaptor.saveElement(context, + new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)), + componentsElement, "Create component"); + savedElement.ifPresent(element -> + component.setId(element.getSubElements().iterator().next().getElementId().getValue())); + } + + @Override + public void update(ComponentEntity component) { + ZusammenElement componentElement = componentToZusammen(component, Action.UPDATE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(component.getVspId()); + zusammenAdaptor.saveElement(context, + new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)), + componentElement, String.format("Update component with id %s", component.getId())); + } + + @Override + public ComponentEntity get(ComponentEntity component) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(component.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(component.getVersion())); + + Optional<Element> element = + zusammenAdaptor.getElement(context, elementContext, component.getId()); + + if (element.isPresent()) { + component.setCompositionData(new String(FileUtils.toByteArray(element.get().getData()))); + return component; + } + return null; + } + + @Override + public void delete(ComponentEntity component) { + ZusammenElement componentElement = new ZusammenElement(); + componentElement.setElementId(new Id(component.getId())); + componentElement.setAction(Action.DELETE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(component.getVspId()); + zusammenAdaptor.saveElement(context, + new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)), + componentElement, String.format("Delete component with id %s", component.getId())); + } + + @Override + public ComponentEntity getQuestionnaireData(String vspId, Version version, String componentId) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(version)); + + return getQuestionnaire(context, elementContext, + new ComponentEntity(vspId, version, componentId)); + } + + private ComponentEntity getQuestionnaire(SessionContext context, ElementContext elementContext, + ComponentEntity component) { + Optional<Element> questionnaireElement = zusammenAdaptor + .getElementByName(context, elementContext, new Id(component.getId()), + StructureElement.Questionnaire.name()); + return questionnaireElement.map( + element -> element.getData() == null + ? null + : new String(FileUtils.toByteArray(element.getData()))) + .map(questionnaireData -> { + component.setQuestionnaireData(questionnaireData); + return component; + }) + .orElse(null); + } + + @Override + public void updateQuestionnaireData(String vspId, Version version, String componentId, + String questionnaireData) { + ZusammenElement questionnaireElement = + componentQuestionnaireToZusammen(questionnaireData, Action.UPDATE); + + ZusammenElement componentElement = new ZusammenElement(); + componentElement.setAction(Action.IGNORE); + componentElement.setElementId(new Id(componentId)); + componentElement.setSubElements(Collections.singletonList(questionnaireElement)); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + zusammenAdaptor.saveElement(context, + new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)), + componentElement, "Update component questionnaire"); + } + + @Override + public Collection<ComponentEntity> listQuestionnaires(String vspId, Version version) { + return listCompositionAndQuestionnaire(vspId, version); + } + + @Override + public Collection<ComponentEntity> listCompositionAndQuestionnaire(String vspId, + Version version) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(version)); + + Collection<ComponentEntity> components = + listComponents(zusammenAdaptor, context, elementContext, vspId, version); + + components.forEach(component -> getQuestionnaire(context, elementContext, component)); + return components; + } + + @Override + public void deleteAll(String vspId, Version version) { + ZusammenElement componentsElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Components, Action.DELETE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + zusammenAdaptor.saveElement(context, + new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)), + componentsElement, "Delete all components"); + } + + private ZusammenElement componentToZusammen(ComponentEntity component, Action action) { + ZusammenElement componentElement = buildComponentElement(component, action); + if (action == Action.CREATE) { + componentElement + .setSubElements(Arrays.asList( + componentQuestionnaireToZusammen(component.getQuestionnaireData(), Action.CREATE), + VspZusammenUtil.buildStructuralElement(StructureElement.Nics, Action.CREATE), + VspZusammenUtil.buildStructuralElement(StructureElement.Processes, Action.CREATE), + VspZusammenUtil.buildStructuralElement(StructureElement.Mibs, Action.CREATE))); + } + return componentElement; + } + + private ZusammenElement componentQuestionnaireToZusammen(String questionnaireData, + Action action) { + ZusammenElement questionnaireElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Questionnaire, action); + questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes())); + return questionnaireElement; + } + + private ZusammenElement buildComponentElement(ComponentEntity component, Action action) { + ZusammenElement componentElement = new ZusammenElement(); + componentElement.setAction(action); + if (component.getId() != null) { + componentElement.setElementId(new Id(component.getId())); + } + Info info = new Info(); + info.addProperty(ElementPropertyName.type.name(), ElementType.Component); + info.addProperty(ElementPropertyName.compositionData.name(), component.getCompositionData()); + componentElement.setInfo(info); + componentElement.setData(new ByteArrayInputStream(component.getCompositionData().getBytes())); + return componentElement; + } +} diff --git a/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/ComponentDependencyModelDaoZusammenImpl.java b/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/ComponentDependencyModelDaoZusammenImpl.java new file mode 100644 index 0000000000..e36b6c7743 --- /dev/null +++ b/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/ComponentDependencyModelDaoZusammenImpl.java @@ -0,0 +1,201 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +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 org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.core.zusammen.api.ZusammenUtil; +import org.openecomp.sdc.logging.api.Logger; +import org.openecomp.sdc.logging.api.LoggerFactory; +import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDependencyModelDao; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentDependencyModelEntity; +import org.openecomp.sdc.versioning.dao.types.Version; + +import java.util.Collection; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * Created by ayalaben on 5/16/2017. + */ +public class ComponentDependencyModelDaoZusammenImpl implements ComponentDependencyModelDao { + + private static final Logger logger = + LoggerFactory.getLogger(OrchestrationTemplateCandidateDaoZusammenImpl.class); + + private ZusammenAdaptor zusammenAdaptor; + + public ComponentDependencyModelDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) { + this.zusammenAdaptor = zusammenAdaptor; + } + + @Override + public ComponentDependencyModelEntity get(ComponentDependencyModelEntity entity) { + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(entity.getVspId()); // entity.getId()? + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(entity.getVersion())); + + Optional<ElementInfo> componentDependencyElement = + zusammenAdaptor.getElementInfo(context, elementContext, new Id(entity.getId())); + + if (componentDependencyElement.isPresent()) { + addComponentDependencyData(entity, componentDependencyElement.get()); + return entity; + } + + return null; + } + + @Override + public void create(ComponentDependencyModelEntity entity) { + + ZusammenElement componentDependencies = + VspZusammenUtil.buildStructuralElement(StructureElement.ComponentDependencies, null); + + ZusammenElement componentDependency = buildComponentDependencyElement(entity); + componentDependency.setAction(Action.CREATE); + + Id itemId = new Id(entity.getVspId()); + SessionContext context = ZusammenUtil.createSessionContext(); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + Optional<Element> savedElement = zusammenAdaptor.saveElement(context, elementContext, + VspZusammenUtil.aggregateElements(componentDependencies, componentDependency), + "Create component dependency model"); + + savedElement.ifPresent(element -> + entity.setId(element.getSubElements().iterator().next().getElementId().getValue())); + } + + @Override + public void update(ComponentDependencyModelEntity entity) { + ZusammenElement componentDependencyElement = buildComponentDependencyElement(entity); + componentDependencyElement.setAction(Action.UPDATE); + + Id itemId = new Id(entity.getVspId()); + SessionContext context = ZusammenUtil.createSessionContext(); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + zusammenAdaptor.saveElement(context, elementContext, + componentDependencyElement, + String.format("Update component dependency model with id %s", entity.getId())); + } + + @Override + public void delete(ComponentDependencyModelEntity entity) { + ZusammenElement componentDependencyElement = new ZusammenElement(); + componentDependencyElement.setElementId(new Id(entity.getId())); + componentDependencyElement.setAction(Action.DELETE); + + Id itemId = new Id(entity.getVspId()); + SessionContext context = ZusammenUtil.createSessionContext(); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + + zusammenAdaptor.saveElement(context, elementContext, + componentDependencyElement, + String.format("Delete component dependency model with id %s", entity.getId())); + } + + @Override + public void deleteAll(String vspId, Version version) { + ZusammenElement componentDependenciesElement = + VspZusammenUtil + .buildStructuralElement(StructureElement.ComponentDependencies, Action.DELETE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + zusammenAdaptor.saveElement(context, new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)), + componentDependenciesElement, "Delete all component dependencies"); + } + + @Override + public void registerVersioning(String versionableEntityType) { + //not implemented? + } + + @Override + public Collection<ComponentDependencyModelEntity> list(ComponentDependencyModelEntity entity) { + + Id itemId = new Id(entity.getVspId()); + SessionContext context = ZusammenUtil.createSessionContext(); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(entity.getVersion())); + + return zusammenAdaptor.listElementsByName(context, elementContext, + null, StructureElement.ComponentDependencies.name()) + .stream().map(elementInfo -> mapElementInfoToComponentDependencyModel(entity.getVspId(), + entity.getVersion(), elementInfo)) + .collect(Collectors.toList()); + } + + private static ComponentDependencyModelEntity mapElementInfoToComponentDependencyModel( + String vspId, Version version, + ElementInfo elementInfo) { + ComponentDependencyModelEntity componentDependencyModelEntity = + new ComponentDependencyModelEntity(vspId, version, elementInfo.getId().getValue()); + componentDependencyModelEntity.setSourceComponentId(elementInfo.getInfo() + .getProperty(ComponentDependencyModelPropertyName.sourcecomponent_id.name())); + componentDependencyModelEntity.setTargetComponentId(elementInfo.getInfo() + .getProperty(ComponentDependencyModelPropertyName.targetcomponent_id.name())); + componentDependencyModelEntity.setRelation(elementInfo.getInfo() + .getProperty(ComponentDependencyModelPropertyName.relation.name())); + + return componentDependencyModelEntity; + } + + + private ZusammenElement buildComponentDependencyElement(ComponentDependencyModelEntity entity) { + ZusammenElement componentDependencyElement = new ZusammenElement(); + + if (entity.getId() != null) { + componentDependencyElement.setElementId(new Id(entity.getId())); + } + + Info info = new Info(); + info.addProperty(ComponentDependencyModelPropertyName.id.name(), entity.getId()); + info.addProperty(ComponentDependencyModelPropertyName.relation.name(), entity.getRelation()); + info.addProperty(ComponentDependencyModelPropertyName.sourcecomponent_id.name(), + entity.getSourceComponentId()); + info.addProperty(ComponentDependencyModelPropertyName.targetcomponent_id.name(), + entity.getTargetComponentId()); + + componentDependencyElement.setInfo(info); + + return componentDependencyElement; + } + + private void addComponentDependencyData(ComponentDependencyModelEntity componentDependency, + ElementInfo componentDependencyElement) { + componentDependency.setId(componentDependencyElement.getInfo() + .getProperty(ComponentDependencyModelPropertyName.id.name())); + componentDependency.setRelation(componentDependencyElement.getInfo() + .getProperty(ComponentDependencyModelPropertyName.id.name())); + componentDependency.setSourceComponentId(componentDependencyElement.getInfo() + .getProperty(ComponentDependencyModelPropertyName.sourcecomponent_id.name())); + componentDependency.setTargetComponentId(componentDependencyElement.getInfo() + .getProperty(ComponentDependencyModelPropertyName.targetcomponent_id.name())); + } + + + private enum ComponentDependencyModelPropertyName { + id, + relation, + sourcecomponent_id, + targetcomponent_id, + } + +} diff --git a/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/ElementPropertyName.java b/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/ElementPropertyName.java new file mode 100644 index 0000000000..9ca0bf721a --- /dev/null +++ b/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/ElementPropertyName.java @@ -0,0 +1,6 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +public enum ElementPropertyName { + type, + compositionData +} diff --git a/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/ElementType.java b/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/ElementType.java new file mode 100644 index 0000000000..b0313f5b14 --- /dev/null +++ b/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/ElementType.java @@ -0,0 +1,9 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +public enum ElementType { + Network, + Component, + Nic, + Process, + LKG +} diff --git a/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/MibDaoZusammenImpl.java b/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/MibDaoZusammenImpl.java new file mode 100644 index 0000000000..10cdfbd9da --- /dev/null +++ b/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/MibDaoZusammenImpl.java @@ -0,0 +1,171 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +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 org.openecomp.core.enrichment.types.ArtifactType; +import org.openecomp.core.utilities.file.FileUtils; +import org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.core.zusammen.api.ZusammenUtil; +import org.openecomp.sdc.vendorsoftwareproduct.dao.MibDao; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.MibEntity; +import org.openecomp.sdc.versioning.dao.types.Version; + +import java.io.ByteArrayInputStream; +import java.nio.ByteBuffer; +import java.util.Collection; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * @author Avrahamg. + * @since March 21, 2017 + */ +public class MibDaoZusammenImpl implements MibDao { + + private static final String ARTIFACT_NAME = "name"; + + private ZusammenAdaptor zusammenAdaptor; + + public MibDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) { + this.zusammenAdaptor = zusammenAdaptor; + } + + @Override + public void registerVersioning(String versionableEntityType) { + + } + + @Override + public Optional<MibEntity> getByType(MibEntity mibEntity) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(mibEntity.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(mibEntity.getVersion())); + + Optional<Element> mibsElement = + zusammenAdaptor.getElementByName(context, elementContext, new Id(mibEntity + .getComponentId()), StructureElement.Mibs.toString()); + if (mibsElement.isPresent()) { + Optional<Element> mibElement = zusammenAdaptor + .getElementByName(context, elementContext, mibsElement.get().getElementId(), + getMibStructuralElement(mibEntity.getType()).toString()); + if (mibElement.isPresent()) { + mibEntity.setId(mibElement.get().getElementId().getValue()); + mibEntity.setArtifactName((String) mibElement.get().getInfo().getProperties().get(ARTIFACT_NAME)); + mibEntity.setArtifact(ByteBuffer.wrap(FileUtils.toByteArray(mibElement.get().getData()))); + return Optional.of(mibEntity); + } + } + + return Optional.empty(); + } + + @Override + public void create(MibEntity mibEntity) { + ZusammenElement mibElement = buildMibElement(mibEntity); + + ZusammenElement mibsElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Mibs, null); + + ZusammenElement componentElement = buildComponentElement(mibEntity); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(mibEntity.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + Optional<Element> savedElement = zusammenAdaptor.saveElement(context, elementContext, + VspZusammenUtil.aggregateElements(componentElement, mibsElement, mibElement), + "Create mib"); + savedElement.ifPresent(element -> + mibEntity.setId(element.getSubElements().iterator().next() + .getSubElements().iterator().next().getElementId().getValue())); + } + + @Override + public void delete(MibEntity mibEntity) { + ZusammenElement mibElement = new ZusammenElement(); + mibElement.setElementId(new Id(mibEntity.getId())); + mibElement.setAction(Action.DELETE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(mibEntity.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + zusammenAdaptor.saveElement(context, elementContext, mibElement, + String.format("Delete mib with id %s", mibEntity.getId())); + } + + @Override + public Collection<MibEntity> list(MibEntity mib) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(mib.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(mib.getVersion())); + + return zusammenAdaptor.listElementsByName(context, elementContext, new Id(mib.getComponentId()), + StructureElement.Mibs.toString()).stream() + .map(elementInfo -> + mapElementInfoToMib(mib.getVspId(), mib.getVersion(), mib.getComponentId(), + elementInfo)) + .collect(Collectors.toList()); + } + + @Override + public void deleteAll(MibEntity mibEntity) { + ZusammenElement mibsElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Mibs, Action.DELETE); + + ZusammenElement componentElement = buildComponentElement(mibEntity); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(mibEntity.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + zusammenAdaptor.saveElement(context, elementContext, + VspZusammenUtil.aggregateElements(componentElement, mibsElement), "Delete mibs"); + } + + private ZusammenElement buildComponentElement(MibEntity mibEntity) { + ZusammenElement componentElement = new ZusammenElement(); + componentElement.setElementId(new Id(mibEntity.getComponentId())); + componentElement.setAction(Action.IGNORE); + return componentElement; + } + + private ZusammenElement buildMibElement(MibEntity mib) { + ZusammenElement mibElement = VspZusammenUtil + .buildStructuralElement(getMibStructuralElement(mib.getType()), Action.UPDATE); + mibElement.getInfo().getProperties().put(ARTIFACT_NAME, mib.getArtifactName()); + mibElement.setData(new ByteArrayInputStream(mib.getArtifact().array())); + return mibElement; + } + + private MibEntity mapElementInfoToMib(String vspId, Version version, String componentId, + ElementInfo elementInfo) { + MibEntity mib = new MibEntity(vspId, version, componentId, elementInfo.getId().getValue()); + mib.setArtifactName((String) elementInfo.getInfo().getProperties().get(ARTIFACT_NAME)); + mib.setType(ArtifactType.valueOf(elementInfo.getInfo().getName())); + return mib; + } + + private StructureElement getMibStructuralElement(ArtifactType type) { + switch (type) { + case SNMP_POLL: + return StructureElement.SNMP_POLL; + case SNMP_TRAP: + return StructureElement.SNMP_TRAP; + default: + throw new IllegalArgumentException(); + } + } +} diff --git a/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/NetworkDaoZusammenImpl.java b/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/NetworkDaoZusammenImpl.java new file mode 100644 index 0000000000..898ee434e8 --- /dev/null +++ b/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/NetworkDaoZusammenImpl.java @@ -0,0 +1,150 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +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 org.openecomp.core.utilities.file.FileUtils; +import org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.core.zusammen.api.ZusammenUtil; +import org.openecomp.sdc.vendorsoftwareproduct.dao.NetworkDao; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity; +import org.openecomp.sdc.versioning.dao.types.Version; +import org.openecomp.sdc.versioning.dao.types.VersionStatus; + +import java.io.ByteArrayInputStream; +import java.util.Collection; +import java.util.Collections; +import java.util.Optional; +import java.util.stream.Collectors; + +public class NetworkDaoZusammenImpl implements NetworkDao { + + private ZusammenAdaptor zusammenAdaptor; + + public NetworkDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) { + this.zusammenAdaptor = zusammenAdaptor; + } + + @Override + public void registerVersioning(String versionableEntityType) { + + } + + @Override + public Collection<NetworkEntity> list(NetworkEntity network) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(network.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(network.getVersion())); + + return zusammenAdaptor + .listElementsByName(context, elementContext, null, StructureElement.Networks.name()) + .stream().map(elementInfo -> + mapElementInfoToNetwork(network.getVspId(), network.getVersion(), elementInfo)) + .collect(Collectors.toList()); + } + + private NetworkEntity mapElementInfoToNetwork(String vspId, Version version, + ElementInfo elementInfo) { + NetworkEntity networkEntity = + new NetworkEntity(vspId, version, elementInfo.getId().getValue()); + networkEntity.setCompositionData( + elementInfo.getInfo().getProperty(ElementPropertyName.compositionData.name())); + return networkEntity; + } + + @Override + public void create(NetworkEntity network) { + ZusammenElement networkElement = buildNetworkElement(network, Action.CREATE); + ZusammenElement networksElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Networks, null); + networksElement.setSubElements(Collections.singletonList(networkElement)); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(network.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + Optional<Element> savedElement = + zusammenAdaptor.saveElement(context, elementContext, networksElement, "Create network"); + savedElement.ifPresent(element -> + network.setId(element.getSubElements().iterator().next().getElementId().getValue())); + } + + @Override + public void update(NetworkEntity network) { + ZusammenElement networkElement = buildNetworkElement(network, Action.UPDATE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(network.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + zusammenAdaptor.saveElement(context, elementContext, networkElement, + String.format("Update network with id %s", network.getId())); + } + + @Override + public NetworkEntity get(NetworkEntity network) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(network.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(network.getVersion())); + + Optional<Element> element = + zusammenAdaptor.getElement(context, elementContext, network.getId()); + + if (element.isPresent()) { + network.setCompositionData(new String(FileUtils.toByteArray(element.get().getData()))); + return network; + } else { + return null; + } + } + + @Override + public void delete(NetworkEntity network) { + ZusammenElement networkElement = new ZusammenElement(); + networkElement.setElementId(new Id(network.getId())); + networkElement.setAction(Action.DELETE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(network.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + zusammenAdaptor.saveElement(context, elementContext, + networkElement, String.format("Delete network with id %s", network.getId())); + } + + + @Override + public void deleteAll(String vspId, Version version) { + ZusammenElement networksElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Networks, Action.DELETE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + zusammenAdaptor.saveElement(context, elementContext, networksElement, "Delete all networks"); + } + + private ZusammenElement buildNetworkElement(NetworkEntity network, Action action) { + ZusammenElement networkElement = new ZusammenElement(); + networkElement.setAction(action); + if (network.getId() != null) { + networkElement.setElementId(new Id(network.getId())); + } + Info info = new Info(); + info.addProperty(ElementPropertyName.type.name(), ElementType.Network); + info.addProperty(ElementPropertyName.compositionData.name(), network.getCompositionData()); + networkElement.setInfo(info); + networkElement.setData(new ByteArrayInputStream(network.getCompositionData().getBytes())); + return networkElement; + } +} diff --git a/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/NicDaoZusammenImpl.java b/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/NicDaoZusammenImpl.java new file mode 100644 index 0000000000..e597068d87 --- /dev/null +++ b/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/NicDaoZusammenImpl.java @@ -0,0 +1,257 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +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 org.openecomp.core.utilities.file.FileUtils; +import org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.core.zusammen.api.ZusammenUtil; +import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity; +import org.openecomp.sdc.versioning.dao.types.Version; + +import java.io.ByteArrayInputStream; +import java.util.Collection; +import java.util.Collections; +import java.util.Optional; +import java.util.stream.Collectors; + +public class NicDaoZusammenImpl implements NicDao { + + private ZusammenAdaptor zusammenAdaptor; + + public NicDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) { + this.zusammenAdaptor = zusammenAdaptor; + } + + @Override + public void registerVersioning(String versionableEntityType) { + + } + + @Override + public Collection<NicEntity> list(NicEntity nic) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(nic.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(nic.getVersion())); + + return listNics(context, elementContext, nic); + } + + private Collection<NicEntity> listNics(SessionContext context, ElementContext elementContext, + NicEntity nic) { + return zusammenAdaptor + .listElementsByName(context, elementContext, new Id(nic.getComponentId()), + StructureElement.Nics.name()) + .stream().map(elementInfo -> mapElementInfoToNic( + nic.getVspId(), nic.getVersion(), nic.getComponentId(), elementInfo)) + .collect(Collectors.toList()); + } + + private NicEntity mapElementInfoToNic(String vspId, Version version, + String componentId, ElementInfo elementInfo) { + NicEntity nicEntity = + new NicEntity(vspId, version, componentId, elementInfo.getId().getValue()); + nicEntity.setCompositionData( + elementInfo.getInfo().getProperty(ElementPropertyName.compositionData.name())); + return nicEntity; + } + + @Override + public void create(NicEntity nic) { + ZusammenElement nicElement = nicToZusammen(nic, Action.CREATE); + + ZusammenElement nicsElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Nics, null); + nicsElement.setSubElements(Collections.singletonList(nicElement)); + + ZusammenElement componentElement = + buildZusammenElement(new Id(nic.getComponentId()), Action.IGNORE); + componentElement.setSubElements(Collections.singletonList(nicsElement)); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(nic.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + Optional<Element> savedElement = + zusammenAdaptor.saveElement(context, elementContext, componentElement, "Create nic"); + savedElement.ifPresent(element -> + nic.setId(element.getSubElements().iterator().next() + .getSubElements().iterator().next().getElementId().getValue())); + } + + @Override + public void update(NicEntity nic) { + ZusammenElement nicElement = nicToZusammen(nic, Action.UPDATE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(nic.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + zusammenAdaptor.saveElement(context, elementContext, nicElement, + String.format("Update nic with id %s", nic.getId())); + } + + @Override + public NicEntity get(NicEntity nic) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(nic.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(nic.getVersion())); + Optional<Element> element = zusammenAdaptor.getElement(context, elementContext, nic.getId()); + + if (element.isPresent()) { + nic.setCompositionData(new String(FileUtils.toByteArray(element.get().getData()))); + return nic; + } else { + return null; + } + } + + @Override + public void delete(NicEntity nic) { + ZusammenElement nicElement = buildZusammenElement(new Id(nic.getId()), Action.DELETE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(nic.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + zusammenAdaptor.saveElement(context, elementContext, nicElement, + String.format("Delete nic with id %s", nic.getId())); + } + + @Override + public NicEntity getQuestionnaireData(String vspId, Version version, String componentId, + String nicId) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(version)); + + return getQuestionnaire(context, elementContext, + new NicEntity(vspId, version, componentId, nicId)); + } + + private NicEntity getQuestionnaire(SessionContext context, ElementContext elementContext, + NicEntity nic) { + Optional<Element> questionnaireElement = zusammenAdaptor + .getElementByName(context, elementContext, new Id(nic.getId()), + StructureElement.Questionnaire.name()); + return questionnaireElement.map( + element -> element.getData() == null + ? null + : new String(FileUtils.toByteArray(element.getData()))) + .map(questionnaireData -> { + nic.setQuestionnaireData(questionnaireData); + return nic; + }) + .orElse(null); + } + + @Override + public void updateQuestionnaireData(String vspId, Version version, String componentId, + String nicId, String questionnaireData) { + ZusammenElement questionnaireElement = + nicQuestionnaireToZusammen(questionnaireData, Action.UPDATE); + + ZusammenElement nicElement = new ZusammenElement(); + nicElement.setAction(Action.IGNORE); + nicElement.setElementId(new Id(nicId)); + nicElement.setSubElements(Collections.singletonList(questionnaireElement)); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + zusammenAdaptor.saveElement(context, elementContext, nicElement, "Update nic questionnaire"); + } + + @Override + public Collection<NicEntity> listByVsp(String vspId, Version version) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(version)); + + Collection<ComponentEntity> components = ComponentDaoZusammenImpl + .listComponents(zusammenAdaptor, context, elementContext, vspId, version); + + return components.stream() + .map(component -> + listNics(context, elementContext, + new NicEntity(vspId, version, component.getId(), null)).stream() + .map(nic -> getQuestionnaire(context, elementContext, nic)) + .collect(Collectors.toList())) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + + @Override + public void deleteByComponentId(String vspId, Version version, String componentId) { + ZusammenElement componentElement = buildZusammenElement(new Id(componentId), Action.IGNORE); + componentElement.setSubElements(Collections.singletonList( + VspZusammenUtil.buildStructuralElement(StructureElement.Nics, Action.DELETE))); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + zusammenAdaptor.saveElement(context, elementContext, componentElement, + String.format("Delete all nics of component %s", componentId)); + } + + @Override + public void deleteByVspId(String vspId, Version version) { + + } + + private ZusammenElement nicToZusammen(NicEntity nic, Action action) { + ZusammenElement nicElement = buildNicElement(nic, action); + if (action == Action.CREATE) { + nicElement.setSubElements(Collections.singletonList( + nicQuestionnaireToZusammen(nic.getQuestionnaireData(), Action.CREATE))); + } + return nicElement; + } + + private ZusammenElement nicQuestionnaireToZusammen(String questionnaireData, + Action action) { + ZusammenElement questionnaireElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Questionnaire, action); + questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes())); + return questionnaireElement; + } + + private ZusammenElement buildZusammenElement(Id elementId, Action action) { + ZusammenElement element = new ZusammenElement(); + element.setElementId(elementId); + element.setAction(action); + return element; + } + + private ZusammenElement buildNicElement(NicEntity nic, Action action) { + ZusammenElement nicElement = new ZusammenElement(); + nicElement.setAction(action); + if (nic.getId() != null) { + nicElement.setElementId(new Id(nic.getId())); + } + Info info = new Info(); + info.addProperty(ElementPropertyName.type.name(), ElementType.Nic); + info.addProperty(ElementPropertyName.compositionData.name(), nic.getCompositionData()); + nicElement.setInfo(info); + nicElement.setData(new ByteArrayInputStream(nic.getCompositionData().getBytes())); + return nicElement; + } +} diff --git a/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/OrchestrationTemplateCandidateDaoZusammenImpl.java b/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/OrchestrationTemplateCandidateDaoZusammenImpl.java new file mode 100644 index 0000000000..c101955292 --- /dev/null +++ b/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/OrchestrationTemplateCandidateDaoZusammenImpl.java @@ -0,0 +1,134 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +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.utils.fileutils.FileUtils; +import org.openecomp.core.utilities.json.JsonUtil; +import org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.core.zusammen.api.ZusammenUtil; +import org.openecomp.sdc.logging.api.Logger; +import org.openecomp.sdc.logging.api.LoggerFactory; +import org.openecomp.sdc.vendorsoftwareproduct.dao.OrchestrationTemplateCandidateDao; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.OrchestrationTemplateCandidateData; +import org.openecomp.sdc.vendorsoftwareproduct.types.candidateheat.FilesDataStructure; +import org.openecomp.sdc.versioning.dao.types.Version; +import org.openecomp.sdc.versioning.dao.types.VersionStatus; + +import java.io.ByteArrayInputStream; +import java.nio.ByteBuffer; +import java.util.Optional; + +public class OrchestrationTemplateCandidateDaoZusammenImpl + implements OrchestrationTemplateCandidateDao { + private static final Logger logger = + LoggerFactory.getLogger(OrchestrationTemplateCandidateDaoZusammenImpl.class); + + private ZusammenAdaptor zusammenAdaptor; + + public OrchestrationTemplateCandidateDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) { + this.zusammenAdaptor = zusammenAdaptor; + } + + @Override + public void registerVersioning(String versionableEntityType) { + + } + + @Override + public OrchestrationTemplateCandidateData get(String vspId, Version version) { + logger.info("Getting orchestration template for vsp id -> " + vspId); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor); + ElementContext elementContext = new ElementContext(itemId, versionId, + VspZusammenUtil.getVersionTag(version)); + + Optional<Element> candidateElement = + zusammenAdaptor.getElementByName(context, elementContext, null, + StructureElement.OrchestrationTemplateCandidate.name()); + if (candidateElement.isPresent()) { + OrchestrationTemplateCandidateData candidateData = new OrchestrationTemplateCandidateData(); + candidateData.setFilesDataStructure( + new String(FileUtils.toByteArray(candidateElement.get().getData()))); + + zusammenAdaptor + .getElementByName(context, elementContext, candidateElement.get().getElementId(), + StructureElement.OrchestrationTemplateCandidateContent.name()) + .ifPresent(candidateContentElement -> candidateData.setContentData( + ByteBuffer.wrap(FileUtils.toByteArray(candidateContentElement.getData())))); + logger.info("Finished getting orchestration template for vsp id -> " + vspId); + return candidateData; + } + logger.info(String.format("Orchestration template for vsp id %s does not exist", vspId)); + return null; + } + + @Override + public void update(String vspId, OrchestrationTemplateCandidateData candidateData) { + logger.info("Uploading candidate data entity for vsp id -> " + vspId); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor); + ElementContext elementContext = new ElementContext(itemId, versionId); + + ZusammenElement candidateElement = VspZusammenUtil + .buildStructuralElement(StructureElement.OrchestrationTemplateCandidate, Action.UPDATE); + candidateElement + .setData(new ByteArrayInputStream(candidateData.getFilesDataStructure().getBytes())); + ZusammenElement candidateContentElement = VspZusammenUtil + .buildStructuralElement(StructureElement.OrchestrationTemplateCandidateContent, Action.UPDATE); + candidateContentElement + .setData(new ByteArrayInputStream(candidateData.getContentData().array())); + candidateElement.addSubElement(candidateContentElement); + + zusammenAdaptor.saveElement(context, elementContext, candidateElement, + "Update Orchestration Template Candidate"); + logger.info("Finished uploading candidate data entity for vsp id -> " + vspId); + } + + @Override + public void updateStructure(String vspId, Version version, FilesDataStructure fileDataStructure) { + logger.info("Updating orchestration template for VSP id -> " + vspId); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor); + ElementContext elementContext = new ElementContext(itemId, versionId); + + ZusammenElement candidateElement = VspZusammenUtil + .buildStructuralElement(StructureElement.OrchestrationTemplateCandidate, Action.UPDATE); + candidateElement + .setData(new ByteArrayInputStream(JsonUtil.object2Json(fileDataStructure).getBytes())); + zusammenAdaptor.saveElement(context, elementContext, candidateElement, + "Update Orchestration Template Candidate structure"); + logger.info("Finished uploading candidate data entity for vsp id -> " + vspId); + } + + + @Override + public Optional<String> getStructure(String vspId, Version version) { + logger.info("Getting orchestration template structure for vsp id -> " + vspId); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor); + ElementContext elementContext = new ElementContext(itemId, versionId, + VspZusammenUtil.getVersionTag(version)); + + logger.info("Finished getting orchestration template structure for vsp id -> " + vspId); + Optional<Element> element = zusammenAdaptor.getElementByName(context, elementContext, null, + StructureElement.OrchestrationTemplateCandidate.name()); + if (element.isPresent()) { + return Optional.of(new String(FileUtils.toByteArray(element.get().getData()))); + } else { + return Optional.empty(); + } + + } +} diff --git a/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 b/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 new file mode 100644 index 0000000000..83a78bc705 --- /dev/null +++ b/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 @@ -0,0 +1,111 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +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.ElementContext; +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.vendorsoftwareproduct.dao.OrchestrationTemplateDao; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadData; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadDataEntity; +import org.openecomp.sdc.versioning.dao.types.Version; +import org.openecomp.sdc.versioning.dao.types.VersionStatus; + +import java.io.ByteArrayInputStream; +import java.nio.ByteBuffer; +import java.util.Optional; + +public class OrchestrationTemplateDaoZusammenImpl implements OrchestrationTemplateDao { + + private ZusammenAdaptor zusammenAdaptor; + + public OrchestrationTemplateDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) { + this.zusammenAdaptor = zusammenAdaptor; + } + + @Override + public void registerVersioning(String versionableEntityType) { + + } + + @Override + public String getValidationData(String vspId, Version version) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(version)); + + Optional<ElementInfo> elementInfo = zusammenAdaptor + .getElementInfoByName(context, elementContext, null, + StructureElement.OrchestrationTemplate.name()); + if (elementInfo.isPresent()) { + Optional<Element> element = + zusammenAdaptor.getElementByName(context, elementContext, elementInfo.get().getId(), + StructureElement.OrchestrationTemplateValidationData.name()); + if (element.isPresent()) { + return new String(FileUtils.toByteArray(element.get().getData())); + } + } + + return null; + } + + @Override + public UploadDataEntity getOrchestrationTemplate(String vspId, Version version) { + + UploadDataEntity uploadData = new UploadDataEntity(); + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(version)); + + Optional<ElementInfo> elementInfo = zusammenAdaptor + .getElementInfoByName(context, elementContext, null, + StructureElement.OrchestrationTemplate.name()); + if (elementInfo.isPresent()) { + Optional<Element> element = + zusammenAdaptor.getElementByName(context, elementContext, elementInfo.get().getId(), + StructureElement.OrchestrationTemplateValidationData.name()); + element.ifPresent(element1 -> uploadData + .setValidationData(new String(FileUtils.toByteArray(element1.getData())))); + element = + zusammenAdaptor.getElementByName(context, elementContext, elementInfo.get().getId(), + StructureElement.OrchestrationTemplateContent.name()); + element.ifPresent(element1 -> uploadData + .setContentData(ByteBuffer.wrap(FileUtils.toByteArray(element1.getData())))); + } + return uploadData; + } + + @Override + public void updateOrchestrationTemplateData(String vspId, UploadData uploadData) { + ZusammenElement orchestrationTemplateElement = + VspZusammenUtil.buildStructuralElement(StructureElement.OrchestrationTemplate, null); + ZusammenElement orchestrationTemplateValidationDataElement = + VspZusammenUtil + .buildStructuralElement(StructureElement.OrchestrationTemplateValidationData, null); + orchestrationTemplateValidationDataElement.setData(new ByteArrayInputStream(uploadData + .getValidationData().getBytes())); + ZusammenElement orchestrationTemplateContent = + VspZusammenUtil.buildStructuralElement(StructureElement.OrchestrationTemplateContent, null); + orchestrationTemplateContent + .setData(new ByteArrayInputStream(uploadData.getContentData().array())); + orchestrationTemplateElement.addSubElement(orchestrationTemplateValidationDataElement); + orchestrationTemplateElement.addSubElement(orchestrationTemplateContent); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + zusammenAdaptor.saveElement(context, elementContext, orchestrationTemplateElement, "Update " + + "Orchestration Template"); + } + +} diff --git a/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/ProcessDaoZusammenImpl.java b/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/ProcessDaoZusammenImpl.java new file mode 100644 index 0000000000..ffc9cb2901 --- /dev/null +++ b/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/ProcessDaoZusammenImpl.java @@ -0,0 +1,229 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +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 org.openecomp.core.utilities.file.FileUtils; +import org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.core.zusammen.api.ZusammenUtil; +import org.openecomp.sdc.vendorsoftwareproduct.dao.ProcessDao; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessType; +import org.openecomp.sdc.versioning.dao.types.Version; + +import java.io.ByteArrayInputStream; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * @author Avrahamg. + * @since March 23, 2017 + */ +public class ProcessDaoZusammenImpl implements ProcessDao { + + private static final String NAME = "name"; + private static final String ELEMENT_TYPE = "type"; + private static final String ARTIFACT_NAME = "artifactName"; + private static final String DESCRIPTION = "description"; + private static final String PROCESS_TYPE = "processType"; + + private ZusammenAdaptor zusammenAdaptor; + + public ProcessDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) { + this.zusammenAdaptor = zusammenAdaptor; + } + + @Override + public void registerVersioning(String versionableEntityType) { + + } + + @Override + public void create(ProcessEntity processEntity) { + ZusammenElement processElement = buildProcessElement(processEntity, Action.CREATE); + + ZusammenElement processesElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Processes, null); + ZusammenElement aggregatedElement = VspZusammenUtil.aggregateElements(processesElement, + processElement); + ZusammenElement componentElement; + if (processEntity.getComponentId() != null) { + componentElement = createParentElement(processEntity); + aggregatedElement = + VspZusammenUtil.aggregateElements(componentElement, aggregatedElement); + } + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(processEntity.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + Optional<Element> savedElement = + zusammenAdaptor.saveElement(context, elementContext, aggregatedElement, "Create process"); + savedElement.ifPresent(element -> { + if (processEntity.getComponentId() == null) { + processEntity.setId(element.getSubElements().iterator().next() + .getElementId().getValue()); + } else { + processEntity.setId(element.getSubElements().iterator().next() + .getSubElements().iterator().next().getElementId().getValue()); + } + }); + } + + @Override + public ProcessEntity get(ProcessEntity process) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(process.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(process.getVersion())); + + Optional<Element> elementOptional = + zusammenAdaptor.getElement(context, elementContext, process.getId()); + + if (elementOptional.isPresent()) { + Element element = elementOptional.get(); + process.setName(element.getInfo().getProperty(NAME)); + process.setArtifactName(element.getInfo().getProperty(ARTIFACT_NAME)); + process.setDescription(element.getInfo().getProperty(DESCRIPTION)); + process.setType(element.getInfo().getProperty + (PROCESS_TYPE) != null ? ProcessType.valueOf(element.getInfo().getProperty + (PROCESS_TYPE)) : null); + + process.setArtifact(ByteBuffer.wrap(FileUtils.toByteArray(element.getData()))); + return process; + } else { + return null; + } + } + + @Override + public void update(ProcessEntity processEntity) { + ZusammenElement processElement = buildProcessElement(processEntity, Action.UPDATE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(processEntity.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + Optional<Element> element = + zusammenAdaptor.saveElement(context, elementContext, processElement, "Create process"); + System.out.println(element.get().getElementId()); + } + + @Override + public void delete(ProcessEntity processEntity) { + ZusammenElement processElement = new ZusammenElement(); + processElement.setElementId(new Id(processEntity.getId())); + processElement.setAction(Action.DELETE); + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(processEntity.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + + zusammenAdaptor.saveElement(context, elementContext, processElement, + String.format("Delete process with id %s", processEntity.getId())); + } + + @Override + public void deleteAll(ProcessEntity processEntity) { + ZusammenElement aggregatedElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Processes, Action.DELETE); + + if (processEntity.getComponentId() != null) { + ZusammenElement componentElement = createParentElement(processEntity); + aggregatedElement = VspZusammenUtil.aggregateElements(componentElement, + aggregatedElement); + } + + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(processEntity.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)); + zusammenAdaptor.saveElement(context, elementContext, aggregatedElement, "Delete All processes"); + } + + @Override + public void deleteVspAll(String vspId, Version version) { + ProcessEntity processEntity = new ProcessEntity(); + processEntity.setVersion(version); + processEntity.setVspId(vspId); + deleteAll(processEntity); + } + + @Override + public Collection<ProcessEntity> list(ProcessEntity process) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(process.getVspId()); + ElementContext elementContext = new ElementContext(itemId, + VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor), + VspZusammenUtil.getVersionTag(process.getVersion())); + + Optional<ElementInfo> processesOptional = + zusammenAdaptor.getElementInfoByName(context, elementContext, + extractParentElementId(process), StructureElement.Processes.name()); + if (!processesOptional.isPresent()) { + return new ArrayList<>(); + } + return zusammenAdaptor.listElements(context, elementContext, processesOptional.get().getId()) + .stream() + .map(elementInfo -> mapElementInfoToProcess( + process.getVspId(), process.getVersion(), process.getComponentId(), + elementInfo)) + .collect(Collectors.toList()); + } + + private Id extractParentElementId(ProcessEntity processEntity) { + return processEntity.getComponentId() == null ? null : new Id(processEntity.getComponentId()); + } + + private ProcessEntity mapElementInfoToProcess(String vspId, Version version, + String componentId, + ElementInfo elementInfo) { + ProcessEntity processEntity = new ProcessEntity(vspId, version, componentId, elementInfo + .getId().getValue()); + processEntity.setName((String) elementInfo.getInfo().getProperties().get(NAME)); + processEntity + .setArtifactName((String) elementInfo.getInfo().getProperties().get(ARTIFACT_NAME)); + processEntity.setDescription((String) elementInfo.getInfo().getProperties().get(DESCRIPTION)); + return processEntity; + } + + private ZusammenElement buildProcessElement(ProcessEntity process, Action action) { + + Info info = new Info(); + info.setName(process.getName()); + info.addProperty(NAME, process.getName()); + info.addProperty(ELEMENT_TYPE, ElementType.Process); + info.addProperty(ARTIFACT_NAME, process.getArtifactName()); + info.addProperty(DESCRIPTION, process.getDescription()); + info.addProperty(PROCESS_TYPE, process.getType() != null ? process.getType().name() : null); + + ZusammenElement processElement = new ZusammenElement(); + processElement.setElementId(new Id(process.getId())); + processElement.setAction(action); + processElement.setInfo(info); + if (Objects.nonNull(process.getArtifact())) { + processElement.setData(new ByteArrayInputStream(process.getArtifact().array())); + } + return processElement; + } + + private ZusammenElement createParentElement(ProcessEntity entity) { + ZusammenElement componentElement = new ZusammenElement(); + componentElement.setElementId(new Id(entity.getComponentId())); + componentElement.setAction(Action.IGNORE); + return componentElement; + } +} diff --git a/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/StructureElement.java b/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/StructureElement.java new file mode 100644 index 0000000000..5d53741ebf --- /dev/null +++ b/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/StructureElement.java @@ -0,0 +1,20 @@ +package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen; + +public enum StructureElement { + General, + OrchestrationTemplateCandidate, + OrchestrationTemplate, + OrchestrationTemplateValidationData, + OrchestrationTemplateContent, + OrchestrationTemplateCandidateValidationData, + OrchestrationTemplateCandidateContent, + Networks, + Components, + Nics, + Processes, + Mibs, + SNMP_TRAP, + SNMP_POLL, + Questionnaire, + ComponentDependencies, +} diff --git a/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 b/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 new file mode 100644 index 0000000000..65a41330a7 --- /dev/null +++ b/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 @@ -0,0 +1,228 @@ +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.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity; +import org.openecomp.sdc.versioning.VersioningManagerFactory; +import org.openecomp.sdc.versioning.dao.types.Version; +import org.openecomp.sdc.versioning.types.VersionableEntityMetadata; +import org.openecomp.sdc.versioning.types.VersionableEntityStoreType; + +import java.io.ByteArrayInputStream; +import java.util.Collection; +import java.util.Date; +import java.util.stream.Collectors; + +public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareProductInfoDao { + private ZusammenAdaptor zusammenAdaptor; + + public VendorSoftwareProductInfoDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) { + this.zusammenAdaptor = zusammenAdaptor; + } + + @Override + public void registerVersioning(String versionableEntityType) { + VersionableEntityMetadata metadata = + new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "vsp", null, null); + + VersioningManagerFactory.getInstance().createInterface() + .register(versionableEntityType, metadata); + } + + @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())) + .collect(Collectors.toList()); + } + + @Override + public void create(VspDetails vspDetails) { + SessionContext context = ZusammenUtil.createSessionContext(); + + Id itemId = zusammenAdaptor.createItem(context, mapVspDetailsToZusammenItemInfo(vspDetails)); + Id versionId = + zusammenAdaptor.createVersion(context, itemId, null, ZusammenUtil.createFirstVersionData()); + + ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE); + zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId), + generalElement, "Create VSP General Info Element"); + + vspDetails.setId(itemId.getValue());//set id for caller + } + + @Override + public void update(VspDetails vspDetails) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspDetails.getId()); + Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor); + + zusammenAdaptor.updateItem(context, itemId, mapVspDetailsToZusammenItemInfo(vspDetails)); + + ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE); + zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId), + generalElement, "Update VSP General Info Element"); + } + + @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())); + + return zusammenAdaptor + .getElementInfoByName(context, elementContext, null, StructureElement.General.name()) + .map(generalElementInfo -> mapInfoToVspDetails( + vspDetails.getId(), vspDetails.getVersion(), generalElementInfo.getInfo(), + itemVersion.getModificationTime(), itemVersion.getCreationTime())) + .orElse(null); + } + + + @Override + public void delete(VspDetails entity) { + + } + + @Override + public void updateOldVersionIndication(VspDetails vspDetails) { + VspDetails retrieved = get(vspDetails); + if (retrieved != null) { + retrieved.setOldVersion(vspDetails.getOldVersion()); + update(retrieved); + } + } + + @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); + + ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData); + zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId), + questionnaireElement, "Update VSP Questionnaire"); + } + + + @Override + public String getQuestionnaireData(String vspId, Version version) { + SessionContext context = ZusammenUtil.createSessionContext(); + Id itemId = new Id(vspId); + Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor); + + return zusammenAdaptor.getElementByName(context, + new ElementContext(itemId, versionId, VspZusammenUtil.getVersionTag(version)), null, + StructureElement.Questionnaire.name()) + .map(questionnaireElement -> + new String(FileUtils.toByteArray(questionnaireElement.getData()))) + .orElse(null); + } + + @Override + public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) { + VspQuestionnaireEntity entity = new VspQuestionnaireEntity(); + entity.setId(vspId); + entity.setVersion(version); + entity.setQuestionnaireData(getQuestionnaireData(vspId, version)); + return entity; + } + + @Override + public void deleteAll(String vspId, Version version) { + + } + + 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); + addVspDetailsToInfo(generalElement.getInfo(), vspDetails); + return generalElement; + } + + private ZusammenElement mapQuestionnaireToZusammenElement(String questionnaireData) { + ZusammenElement questionnaireElement = + VspZusammenUtil.buildStructuralElement(StructureElement.Questionnaire, Action.UPDATE); + questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes())); + return questionnaireElement; + } + + private void addVspDetailsToInfo(Info info, VspDetails vspDetails) { + info.addProperty(InfoPropertyName.name.name(), vspDetails.getName()); + info.addProperty(InfoPropertyName.description.name(), vspDetails.getDescription()); + info.addProperty(InfoPropertyName.icon.name(), vspDetails.getIcon()); + info.addProperty(InfoPropertyName.category.name(), vspDetails.getCategory()); + info.addProperty(InfoPropertyName.subCategory.name(), vspDetails.getSubCategory()); + 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.licenseAgreement.name(), vspDetails.getLicenseAgreement()); + info.addProperty(InfoPropertyName.featureGroups.name(), vspDetails.getFeatureGroups()); + info.addProperty(InfoPropertyName.oldVersion.name(), vspDetails.getOldVersion()); + } + + 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); + return vspDetails; + } + + private enum InfoPropertyName { + name, + description, + icon, + category, + subCategory, + vendorId, + vendorName, + vendorVersion, + licenseAgreement, + featureGroups, + oldVersion + } + +} diff --git a/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/VspZusammenUtil.java b/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/VspZusammenUtil.java new file mode 100644 index 0000000000..dde3603896 --- /dev/null +++ b/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/VspZusammenUtil.java @@ -0,0 +1,61 @@ +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.ItemVersion; +import org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.core.zusammen.api.ZusammenUtil; +import org.openecomp.sdc.common.errors.CoreException; +import org.openecomp.sdc.vendorsoftwareproduct.dao.errors.VendorSoftwareProductNotFoundErrorBuilder; +import org.openecomp.sdc.versioning.dao.types.Version; +import org.openecomp.sdc.versioning.dao.types.VersionStatus; + +import java.util.Objects; +import java.util.Optional; + +class VspZusammenUtil { + + static ItemVersion getFirstVersion(SessionContext context, Id itemId, ZusammenAdaptor + zusammenAdaptor) { + + Optional<ItemVersion> itemVersion = zusammenAdaptor.getFirstVersion(context, itemId); + + if (!itemVersion.isPresent()) { + throw new CoreException( + new VendorSoftwareProductNotFoundErrorBuilder(itemId.getValue()).build()); + } + return itemVersion.get(); + } + + static Id getFirstVersionId(SessionContext context, Id itemId, ZusammenAdaptor zusammenAdaptor) { + return getFirstVersion(context, itemId, zusammenAdaptor).getId(); + } + + // TODO: 4/25/2017 remove upon working with more than one single version + static String getVersionTag(Version version) { + return version.getStatus() == VersionStatus.Locked + ? null + : version.toString(); + } + + static ZusammenElement buildStructuralElement(StructureElement structureElement, Action action) { + return ZusammenUtil.buildStructuralElement(structureElement.name(), action); + } + + static ZusammenElement aggregateElements(ZusammenElement... elements) { + ZusammenElement head = null; + ZusammenElement father = null; + for (ZusammenElement element : elements) { + if (Objects.isNull(head)) { + head = father = element; + } else { + father.getSubElements().add(element); + father = element; + } + } + + return head; + } +} |