From 6ad41e3ccd398a2721f41ad61c80b7bb03f7d127 Mon Sep 17 00:00:00 2001 From: Ittay Stern Date: Mon, 31 Dec 2018 17:21:27 +0200 Subject: Merge from ECOMP's repository Main Features -------------- - Async-Instantiation jobs mechanism major update; still WIP (package `org.onap.vid.job`) - New features in View/Edit: Activate fabric configuration; show related networks; soft delete - Support AAI service-tree traversal (`AAIServiceTree`) - In-memory cache for SDC models and certain A&AI queries (`CacheProviderWithLoadingCache`) - Upgrade TOSCA Parser and add parsing options; fix malformed TOSCA models - Resolve Cloud-Owner values for MSO - Pass X-ONAP headers to MSO Infrastructure -------------- - Remove codehaus' jackson mapper; use soley fasterxml 2.9.7 - Surefire invokes both TestNG and JUnit tests - Support Kotlin source files - AaiController2 which handles errors in a "Spring manner" - Inline generated-sources and remove jsonschema2pojo Quality -------- - Cumulative bug fixes (A&AI API, UI timeouts, and many more) - Many Sonar issues cleaned-up - Some unused classes removed - Minor changes in vid-automation project, allowing some API verification to run Hard Merges ------------ - HTTP Clients (MSO, A&AI, WebConfig, OutgoingRequestHeadersTest) - Moved `package org.onap.vid.controllers` to `controller`, without plural -- just to keep semantic sync with ECOMP. Reference commit in ECOMP: 3d1141625 Issue-ID: VID-378 Change-Id: I9c8d1e74caa41815891d441fc0760bb5f29c5788 Signed-off-by: Ittay Stern --- .../org/onap/vid/model/aaiTree/AAITreeNode.java | 178 +++++++++++++++++++ .../org/onap/vid/model/aaiTree/AbstractNode.java | 53 ++++++ .../onap/vid/model/aaiTree/FailureAAITreeNode.java | 31 ++++ .../java/org/onap/vid/model/aaiTree/Network.java | 20 +++ .../main/java/org/onap/vid/model/aaiTree/Node.java | 139 +++++++++++++++ .../org/onap/vid/model/aaiTree/RelatedVnf.java | 52 ++++++ .../onap/vid/model/aaiTree/ServiceInstance.java | 193 +++++++++++++++++++++ .../java/org/onap/vid/model/aaiTree/VfModule.java | 41 +++++ .../main/java/org/onap/vid/model/aaiTree/Vnf.java | 54 ++++++ .../java/org/onap/vid/model/aaiTree/VnfGroup.java | 52 ++++++ 10 files changed, 813 insertions(+) create mode 100644 vid-app-common/src/main/java/org/onap/vid/model/aaiTree/AAITreeNode.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/model/aaiTree/AbstractNode.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/model/aaiTree/FailureAAITreeNode.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Network.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Node.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/model/aaiTree/RelatedVnf.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/model/aaiTree/ServiceInstance.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/model/aaiTree/VfModule.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Vnf.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/model/aaiTree/VnfGroup.java (limited to 'vid-app-common/src/main/java/org/onap/vid/model/aaiTree') diff --git a/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/AAITreeNode.java b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/AAITreeNode.java new file mode 100644 index 000000000..e6f822969 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/AAITreeNode.java @@ -0,0 +1,178 @@ +package org.onap.vid.model.aaiTree; + +import org.apache.commons.lang3.StringUtils; + +import java.util.*; + +public class AAITreeNode { + + private String type; + private int uniqueNumber; + private String orchestrationStatus; + private String provStatus; + private Boolean inMaint = null; + private String modelVersionId; + private String modelCustomizationId; + private String modelInvariantId; + private String id; + private String name; + private String modelVersion; + private String modelName; + private String modelCustomizationName; + private final List children = Collections.synchronizedList(new LinkedList<>()); + private Map additionalProperties = new HashMap<>(); + private String keyInModel; + private AAITreeNode parent; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public int getUniqueNumber() { + return uniqueNumber; + } + + public void setUniqueNumber(int uniqueNumber) { + this.uniqueNumber = uniqueNumber; + } + + public String getOrchestrationStatus() { + return orchestrationStatus; + } + + public void setOrchestrationStatus(String orchestrationStatus) { + this.orchestrationStatus = orchestrationStatus; + } + + public String getProvStatus() { + return provStatus; + } + + public void setProvStatus(String provStatus) { + this.provStatus = provStatus; + } + + public Boolean getInMaint() { + return inMaint; + } + + public void setInMaint(Boolean inMaint) { + this.inMaint = inMaint; + } + + public String getModelVersionId() { + return modelVersionId; + } + + public void setModelVersionId(String modelVersionId) { + this.modelVersionId = modelVersionId; + } + + public String getModelCustomizationId() { + return modelCustomizationId; + } + + public void setModelCustomizationId(String modelCustomizationId) { + this.modelCustomizationId = modelCustomizationId; + } + + public String getModelInvariantId() { + return modelInvariantId; + } + + public void setModelInvariantId(String modelInvariantId) { + this.modelInvariantId = modelInvariantId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getModelVersion() { + return modelVersion; + } + + public void setModelVersion(String modelVersion) { + this.modelVersion = modelVersion; + } + + public String getModelName() { + return modelName; + } + + public void setModelName(String modelName) { + this.modelName = modelName; + } + + public String getModelCustomizationName() { + return modelCustomizationName; + } + + public void setModelCustomizationName(String modelCustomizationName) { + this.modelCustomizationName = modelCustomizationName; + } + + public List getChildren() { + return children; + } + + public Map getAdditionalProperties() { + return additionalProperties; + } + + public void setAdditionalProperties(Map additionalProperties) { + this.additionalProperties = additionalProperties; + } + + public String getNodeKey() { + if (this.keyInModel != null) { + return this.keyInModel; + } + + return StringUtils.defaultIfEmpty(this.modelVersionId, "not provided"); + } + + public String getUniqueNodeKey() { + return getNodeKey() + ":" + String.format("%03d", this.uniqueNumber); + } + + public void setKeyInModel(String keyInModel) { + this.keyInModel = keyInModel; + } + + public String getKeyInModel() { + return keyInModel; + } + + public AAITreeNode getParent() { + return parent; + } + + public void setParent(AAITreeNode parent) { + this.parent = parent; + } + + public void addChildren(List children) { + for (AAITreeNode child : children) { + child.setParent(this); + } + + this.getChildren().addAll(children); + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/AbstractNode.java b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/AbstractNode.java new file mode 100644 index 000000000..86669e92f --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/AbstractNode.java @@ -0,0 +1,53 @@ +package org.onap.vid.model.aaiTree; + +import org.onap.vid.model.Action; +import org.onap.vid.mso.model.ModelInfo; + +public abstract class AbstractNode { + + protected final Action action; + protected String instanceName; + protected String instanceId; + protected String orchStatus; + protected String productFamilyId; + protected String lcpCloudRegionId; + protected String tenantId; + protected ModelInfo modelInfo; + + public AbstractNode() { + this.action = Action.None; + } + + public final Action getAction() { + return action; + } + + public final String getInstanceName() { + return instanceName; + } + + public final String getInstanceId() { + return instanceId; + } + + public final String getOrchStatus() { + return orchStatus; + } + + public final String getProductFamilyId() { + return productFamilyId; + } + + public final String getLcpCloudRegionId() { + return lcpCloudRegionId; + } + + public final String getTenantId() { + return tenantId; + } + + public final ModelInfo getModelInfo() { + return modelInfo; + } + +} diff --git a/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/FailureAAITreeNode.java b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/FailureAAITreeNode.java new file mode 100644 index 000000000..e6234fca2 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/FailureAAITreeNode.java @@ -0,0 +1,31 @@ +package org.onap.vid.model.aaiTree; + +import org.apache.commons.proxy.Invoker; +import org.apache.commons.proxy.factory.javassist.JavassistProxyFactory; +import org.jetbrains.annotations.NotNull; +import org.onap.vid.exceptions.GenericUncheckedException; + +public class FailureAAITreeNode extends AAITreeNode { + + private static final Class[] classes = {AAITreeNode.class}; + private static final JavassistProxyFactory proxyFactory = new JavassistProxyFactory(); // can proxy a class without an interface + + private FailureAAITreeNode() { + // don't instantiate this class + } + + /* + Returns a new AAITreeNode instance that throws an exception when + invoking any of its methods + */ + public static AAITreeNode of(Exception failureException) { + return (AAITreeNode) proxyFactory.createInvokerProxy(exceptionThrower(failureException), classes); + } + + @NotNull + private static Invoker exceptionThrower(Exception exception) { + return (self, thisMethod, args) -> { + throw new GenericUncheckedException("AAI node fetching failed.", exception); + }; + } +} \ No newline at end of file diff --git a/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Network.java b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Network.java new file mode 100644 index 000000000..959f741cd --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Network.java @@ -0,0 +1,20 @@ +package org.onap.vid.model.aaiTree; + +import org.onap.vid.aai.util.AAITreeConverter; + +import static org.onap.vid.aai.util.AAITreeConverter.NETWORK_TYPE; + +public class Network extends Node { + + public Network(AAITreeNode node) { + super(node, AAITreeConverter.ModelType.network); + } + + public static Network from(AAITreeNode node) { + Network network = new Network(node); + if (node.getAdditionalProperties().get(NETWORK_TYPE) != null) { + network.setInstanceType(node.getAdditionalProperties().get(NETWORK_TYPE).toString()); + } + return network; + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Node.java b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Node.java new file mode 100644 index 000000000..6f0a4a05b --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Node.java @@ -0,0 +1,139 @@ +package org.onap.vid.model.aaiTree; + +import org.onap.vid.aai.util.AAITreeConverter; +import org.onap.vid.mso.model.ModelInfo; + +public class Node extends AbstractNode { + private String instanceType; + + private String provStatus; + private Boolean inMaint; + + private String uuid; + private String originalName; + + private String legacyRegion; + private String lineOfBusiness; + private String platformName; + + private final String trackById; + + public Node(AAITreeNode aaiNode, AAITreeConverter.ModelType modelType) { + super(); + this.instanceId = aaiNode.getId(); + this.instanceName = aaiNode.getName(); + this.orchStatus = aaiNode.getOrchestrationStatus(); + this.provStatus = aaiNode.getProvStatus(); + this.inMaint = aaiNode.getInMaint(); + this.uuid = aaiNode.getModelVersionId(); + this.originalName = aaiNode.getModelCustomizationName(); + this.trackById = aaiNode.getUniqueNodeKey(); + + ModelInfo nodeModelInfo = new ModelInfo(); + nodeModelInfo.setModelType(modelType.name()); + nodeModelInfo.setModelName(aaiNode.getModelName()); + nodeModelInfo.setModelVersion(aaiNode.getModelVersion()); + nodeModelInfo.setModelVersionId(aaiNode.getModelVersionId()); + nodeModelInfo.setModelInvariantId(aaiNode.getModelInvariantId()); + nodeModelInfo.setModelCustomizationId(aaiNode.getModelCustomizationId()); + nodeModelInfo.setModelCustomizationName(aaiNode.getModelCustomizationName()); + + this.modelInfo = nodeModelInfo; + } + + public void setInstanceName(String instanceName) { + this.instanceName = instanceName; + } + + public void setInstanceId(String instanceId) { + this.instanceId = instanceId; + } + + public String getInstanceType() { + return instanceType; + } + + public void setInstanceType(String instanceType) { + this.instanceType = instanceType; + } + + public void setOrchStatus(String orchStatus) { + this.orchStatus = orchStatus; + } + + public String getProvStatus() { + return provStatus; + } + + public void setProvStatus(String provStatus) { + this.provStatus = provStatus; + } + + public Boolean getInMaint() { + return inMaint; + } + + public void setInMaint(Boolean inMaint) { + this.inMaint = inMaint; + } + + public void setModelInfo(ModelInfo modelInfo) { + this.modelInfo = modelInfo; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getOriginalName() { + return originalName; + } + + public void setOriginalName(String originalName) { + this.originalName = originalName; + } + + public void setProductFamilyId(String productFamilyId) { + this.productFamilyId = productFamilyId; + } + + public void setLcpCloudRegionId(String lcpCloudRegionId) { + this.lcpCloudRegionId = lcpCloudRegionId; + } + + public String getLegacyRegion() { + return legacyRegion; + } + + public void setLegacyRegion(String legacyRegion) { + this.legacyRegion = legacyRegion; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getLineOfBusiness() { + return lineOfBusiness; + } + + public void setLineOfBusiness(String lineOfBusiness) { + this.lineOfBusiness = lineOfBusiness; + } + + public String getPlatformName() { + return platformName; + } + + public void setPlatformName(String platformName) { + this.platformName = platformName; + } + + public String getTrackById() { + return trackById; + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/RelatedVnf.java b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/RelatedVnf.java new file mode 100644 index 000000000..043d2ccd9 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/RelatedVnf.java @@ -0,0 +1,52 @@ +package org.onap.vid.model.aaiTree; + +import org.onap.vid.aai.util.AAITreeConverter; + +import static org.onap.vid.aai.util.AAITreeConverter.VNF_TYPE; + +public class RelatedVnf extends Node { + + private String serviceInstanceId; + private String serviceInstanceName; + private String tenantName; + + public String getServiceInstanceId() { + return serviceInstanceId; + } + + public void setServiceInstanceId(String serviceInstanceId) { + this.serviceInstanceId = serviceInstanceId; + } + + public String getServiceInstanceName() { + return serviceInstanceName; + } + + public void setServiceInstanceName(String serviceInstanceName) { + this.serviceInstanceName = serviceInstanceName; + } + + public String getTenantName() { + return tenantName; + } + + public void setTenantName(String tenantName) { + this.tenantName = tenantName; + } + + public RelatedVnf(AAITreeNode node) { + super(node, AAITreeConverter.ModelType.vnf); + } + + public static RelatedVnf from(AAITreeNode node) { + RelatedVnf vnf = new RelatedVnf(node); + vnf.setServiceInstanceId(node.getParent().getId()); + vnf.setServiceInstanceName(node.getParent().getName()); + + if (node.getAdditionalProperties().get(VNF_TYPE) != null) { + vnf.setInstanceType(node.getAdditionalProperties().get(VNF_TYPE).toString()); + } + + return vnf; + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/ServiceInstance.java b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/ServiceInstance.java new file mode 100644 index 000000000..6c6600774 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/ServiceInstance.java @@ -0,0 +1,193 @@ +package org.onap.vid.model.aaiTree; + +import org.onap.vid.mso.model.ModelInfo; + +import java.util.HashMap; +import java.util.Map; + +public class ServiceInstance extends AbstractNode { + + private String globalSubscriberId; + private String subscriptionServiceType; + + private String owningEntityId; + + private String owningEntityName; + private String tenantName; + private String aicZoneId; + private String aicZoneName; + private String projectName; + + private String rollbackOnFailure; + private boolean isALaCarte; + + private Map vnfs = new HashMap<>(); + private Map networks = new HashMap<>(); + + private Map vnfGroups = new HashMap<>(); + + private int validationCounter; + private Map existingVNFCounterMap; + private Map existingNetworksCounterMap; + private Map existingVnfGroupCounterMap; + + public void setInstanceName(String instanceName) { + this.instanceName = instanceName; + } + + public void setInstanceId(String instanceId) { + this.instanceId = instanceId; + } + + public void setOrchStatus(String orchStatus) { + this.orchStatus = orchStatus; + } + + public String getGlobalSubscriberId() { + return globalSubscriberId; + } + + public void setGlobalSubscriberId(String globalSubscriberId) { + this.globalSubscriberId = globalSubscriberId; + } + + public String getSubscriptionServiceType() { + return subscriptionServiceType; + } + + public void setSubscriptionServiceType(String subscriptionServiceType) { + this.subscriptionServiceType = subscriptionServiceType; + } + + public String getOwningEntityId() { + return owningEntityId; + } + + public void setOwningEntityId(String owningEntityId) { + this.owningEntityId = owningEntityId; + } + + public String getOwningEntityName() { + return owningEntityName; + } + + public void setOwningEntityName(String owningEntityName) { + this.owningEntityName = owningEntityName; + } + + public void setProductFamilyId(String productFamilyId) { + this.productFamilyId = productFamilyId; + } + + public void setLcpCloudRegionId(String lcpCloudRegionId) { + this.lcpCloudRegionId = lcpCloudRegionId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getTenantName() { + return tenantName; + } + + public void setTenantName(String tenantName) { + this.tenantName = tenantName; + } + + public String getAicZoneId() { + return aicZoneId; + } + + public void setAicZoneId(String aicZoneId) { + this.aicZoneId = aicZoneId; + } + + public String getAicZoneName() { + return aicZoneName; + } + + public void setAicZoneName(String aicZoneName) { + this.aicZoneName = aicZoneName; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getRollbackOnFailure() { + return rollbackOnFailure; + } + + public void setRollbackOnFailure(String rollbackOnFailure) { + this.rollbackOnFailure = rollbackOnFailure; + } + + public boolean getIsALaCarte() { + return isALaCarte; + } + + public void setIsALaCarte(boolean isALaCarte) { + this.isALaCarte = isALaCarte; + } + + public void setModelInfo(ModelInfo modelInfo) { + this.modelInfo = modelInfo; + } + + public Map getVnfs() { + return vnfs; + } + + public void setVnfs(Map vnfs) { + this.vnfs = vnfs; + } + + public Map getNetworks() { + return networks; + } + + public void setNetworks(Map networks) { + this.networks = networks; + } + + public Map getVnfGroups() { return vnfGroups; } + + public void setVnfGroups(Map vnfGroups) { this.vnfGroups = vnfGroups; } + + public int getValidationCounter() { + return validationCounter; + } + + public void setValidationCounter(int validationCounter) { + this.validationCounter = validationCounter; + } + + public Map getExistingVNFCounterMap() { + return existingVNFCounterMap; + } + + public void setExistingVNFCounterMap(Map existingVNFCounterMap) { + this.existingVNFCounterMap = existingVNFCounterMap; + } + + public Map getExistingNetworksCounterMap() { + return existingNetworksCounterMap; + } + + public void setExistingNetworksCounterMap(Map existingNetworksCounterMap) { + this.existingNetworksCounterMap = existingNetworksCounterMap; + } + + public Map getExistingVnfGroupCounterMap() { + return existingVnfGroupCounterMap; + } + + public void setExistingVnfGroupCounterMap(Map existingVnfGroupCounterMap) { + this.existingVnfGroupCounterMap = existingVnfGroupCounterMap; + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/VfModule.java b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/VfModule.java new file mode 100644 index 000000000..14a43e797 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/VfModule.java @@ -0,0 +1,41 @@ +package org.onap.vid.model.aaiTree; + +import org.onap.vid.aai.util.AAITreeConverter; + +import static org.onap.vid.aai.util.AAITreeConverter.IS_BASE_VF_MODULE; + +public class VfModule extends Node { + + private boolean isBase; + private String volumeGroupName; + + public VfModule(AAITreeNode node) { + super(node, AAITreeConverter.ModelType.vfModule); + } + + public boolean getIsBase() { + return isBase; + } + + public void setIsBase(boolean isBase) { + this.isBase = isBase; + } + + public String getVolumeGroupName() { + return volumeGroupName; + } + + public void setVolumeGroupName(String volumeGroupName) { + this.volumeGroupName = volumeGroupName; + } + + public static VfModule from(AAITreeNode node) { + VfModule vfModule = new VfModule(node); + + if (node.getAdditionalProperties().get(IS_BASE_VF_MODULE) != null) { + vfModule.setIsBase(Boolean.valueOf(node.getAdditionalProperties().get(IS_BASE_VF_MODULE).toString())); + } + + return vfModule; + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Vnf.java b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Vnf.java new file mode 100644 index 000000000..a3280f4e3 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/Vnf.java @@ -0,0 +1,54 @@ +package org.onap.vid.model.aaiTree; + +import org.onap.vid.aai.util.AAITreeConverter; +import org.onap.vid.services.AAITreeNodeBuilder; + +import java.util.HashMap; +import java.util.Map; + +import static org.onap.vid.aai.util.AAITreeConverter.VNF_TYPE; + +public class Vnf extends Node { + + private Map> vfModules = new HashMap<>(); + private Map networks = new HashMap<>(); + + public Vnf(AAITreeNode node) { + super(node, AAITreeConverter.ModelType.vnf); + } + + public Map> getVfModules() { + return vfModules; + } + + public void setVfModules(Map> vfModules) { + this.vfModules = vfModules; + } + + public Map getNetworks() { + return networks; + } + + public void setNetworks(Map networks) { + this.networks = networks; + } + + public static Vnf from(AAITreeNode node) { + Vnf vnf = new Vnf(node); + if (node.getAdditionalProperties().get(VNF_TYPE) != null) { + vnf.setInstanceType(node.getAdditionalProperties().get(VNF_TYPE).toString()); + } + + node.getChildren().forEach(child -> { + if (child.getType().equals(AAITreeNodeBuilder.VF_MODULE)) { + vnf.getVfModules().putIfAbsent(child.getNodeKey(), new HashMap<>()); + vnf.getVfModules().get(child.getNodeKey()) + .put(child.getUniqueNodeKey(), VfModule.from(child)); + } else if (child.getType().equals(AAITreeNodeBuilder.NETWORK)) { + vnf.getNetworks().put(child.getUniqueNodeKey(), Network.from(child)); + } + }); + + return vnf; + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/VnfGroup.java b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/VnfGroup.java new file mode 100644 index 000000000..00e7ed8da --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/model/aaiTree/VnfGroup.java @@ -0,0 +1,52 @@ +package org.onap.vid.model.aaiTree; + +import org.onap.vid.aai.util.AAITreeConverter; + + +public class VnfGroup extends Node { + + public static final String INSTANCE_GROUP_TYPE = "instance-group-type"; + public static final String INSTANCE_GROUP_ROLE = "instance-group-role"; + public static final String INSTANCE_GROUP_FUNCTION = "instance-group-function"; + + private String instanceGroupRole; + private String instanceGroupFunction; + + + public VnfGroup(AAITreeNode node) { + super(node, AAITreeConverter.ModelType.instanceGroup); + } + + public static VnfGroup from(AAITreeNode node) { + VnfGroup vnfGroup = new VnfGroup(node); + if (node.getAdditionalProperties().get(INSTANCE_GROUP_TYPE) != null) { + vnfGroup.setInstanceType(node.getAdditionalProperties().get(INSTANCE_GROUP_TYPE).toString()); + } + if (node.getAdditionalProperties().get(INSTANCE_GROUP_FUNCTION) != null) { + vnfGroup.setInstanceGroupFunction(node.getAdditionalProperties().get(INSTANCE_GROUP_FUNCTION).toString()); + } + if (node.getAdditionalProperties().get(INSTANCE_GROUP_ROLE) != null) { + vnfGroup.setInstanceGroupRole(node.getAdditionalProperties().get(INSTANCE_GROUP_ROLE).toString()); + } + + return vnfGroup; + } + + public String getInstanceGroupRole() { + return instanceGroupRole; + } + + public void setInstanceGroupRole(String instanceGroupRole) { + this.instanceGroupRole = instanceGroupRole; + } + + public String getInstanceGroupFunction() { + return instanceGroupFunction; + } + + public void setInstanceGroupFunction(String instanceGroupFunction) { + this.instanceGroupFunction = instanceGroupFunction; + } + + +} \ No newline at end of file -- cgit 1.2.3-korg