diff options
Diffstat (limited to 'appc-dg/appc-dg-shared/appc-dg-dependency-model/src')
14 files changed, 182 insertions, 167 deletions
diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/DependencyManager.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/DependencyManager.java index 8d04cea11..481d4dcad 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/DependencyManager.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/DependencyManager.java @@ -25,12 +25,12 @@ package org.onap.appc.dg.dependencymanager; import org.onap.appc.dg.dependencymanager.exception.DependencyModelNotFound; -import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.dg.objects.DependencyTypes; import org.onap.appc.dg.objects.VnfcDependencyModel; import org.onap.appc.metadata.objects.DependencyModelIdentifier; public interface DependencyManager { - VnfcDependencyModel getVnfcDependencyModel(DependencyModelIdentifier modelIdentifier, DependencyTypes dependencyType) throws InvalidDependencyModel, DependencyModelNotFound; + VnfcDependencyModel getVnfcDependencyModel(DependencyModelIdentifier modelIdentifier, DependencyTypes dependencyType) throws InvalidDependencyModelException, DependencyModelNotFound; } diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/DependencyType.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/DependencyType.java index 15717f06b..7d2b0677f 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/DependencyType.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/DependencyType.java @@ -25,11 +25,11 @@ package org.onap.appc.dg.dependencymanager; import org.onap.appc.dg.dependencymanager.exception.DependencyModelNotFound; -import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.dg.objects.VnfcDependencyModel; import org.onap.appc.metadata.objects.DependencyModelIdentifier; public interface DependencyType { - VnfcDependencyModel getVnfcDependencyModel(DependencyModelIdentifier modelIdentifier) throws InvalidDependencyModel, DependencyModelNotFound; + VnfcDependencyModel getVnfcDependencyModel(DependencyModelIdentifier modelIdentifier) throws InvalidDependencyModelException, DependencyModelNotFound; } diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/helper/DependencyModelParser.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/helper/DependencyModelParser.java index 187020028..ea00f09ec 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/helper/DependencyModelParser.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/helper/DependencyModelParser.java @@ -31,7 +31,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import org.apache.commons.lang3.StringUtils; -import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.dg.objects.Node; import org.onap.appc.dg.objects.VnfcDependencyModel; import org.onap.appc.domainmodel.Vnfc; @@ -39,18 +39,19 @@ import org.onap.appc.domainmodel.Vnfc; import java.io.IOException; import java.util.*; - public class DependencyModelParser { - private static final EELFLogger logger = EELFManager.getInstance().getLogger(DependencyModelParser.class); - private static Map<String, String> dependencyMap; + private final EELFLogger logger = EELFManager.getInstance().getLogger(DependencyModelParser.class); + private static final String PROPERTIES = "properties"; private static final String ACTIVE_ACTIVE = "Active-Active"; private static final String ACTIVE_PASSIVE = "Active-Passive"; private static final String HIGH_AVAILABLITY = "high_availablity"; private static final String MANDATORY = "mandatory"; private static final String TOPOLOGY_TEMPLATE = "topology_template"; + private static final String RELATIONSHIP="relationship"; + private static Map<String, String> dependencyMap; static { Map<String, String> dependencyTypeMappingMap =new HashMap<>(); dependencyTypeMappingMap.put("geo-activeactive", ACTIVE_ACTIVE); @@ -60,17 +61,17 @@ public class DependencyModelParser { dependencyMap = Collections.unmodifiableMap(dependencyTypeMappingMap); } - public VnfcDependencyModel generateDependencyModel(String vnfModel,String vnfType) { + public VnfcDependencyModel generateDependencyModel(String vnfModel,String vnfType) throws InvalidDependencyModelException { Set<Node<Vnfc>> dependencies = new HashSet<>(); ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); boolean mandatory; String resilienceType; - String prefix = "org.openecomp.resource.vfc."+vnfType+".abstract.nodes."; + String prefix = "org.onap.resource.vfc."+vnfType+".abstract.nodes."; try { ObjectNode root = (ObjectNode) mapper.readTree(vnfModel); if(root.get(TOPOLOGY_TEMPLATE) == null || root.get(TOPOLOGY_TEMPLATE).get("node_templates") == null) { - throw new InvalidDependencyModel("Dependency model is missing 'topology_template' or 'node_templates' elements"); + throw new InvalidDependencyModelException("Dependency model is missing 'topology_template' or 'node_templates' elements"); } JsonNode topologyTemplateNode = root.get(TOPOLOGY_TEMPLATE); @@ -81,7 +82,7 @@ public class DependencyModelParser { String fullvnfcType = itretor.next().getValue().get("type").textValue(); String vnfcType= getQualifiedVnfcType(fullvnfcType); String type = yamlNode.get("type").textValue(); - type = type.substring(0,type.lastIndexOf(".")+1); + type = type.substring(0,type.lastIndexOf('.')+1); if(type.concat(vnfcType).toLowerCase().startsWith(prefix.concat(vnfcType).toLowerCase())) { if(yamlNode.get(PROPERTIES).findValue(HIGH_AVAILABLITY) == null || yamlNode.get(PROPERTIES).findValue(HIGH_AVAILABLITY).asText().isEmpty()) { @@ -110,7 +111,7 @@ public class DependencyModelParser { } else { logger.debug("Creating dependency node for : " + vnfcType); - vnfcNode = new Node<>(new Vnfc(vnfcType, resilienceType, null, mandatory)); + vnfcNode = new Node<>(createVnfc(mandatory, resilienceType, vnfcType)); if (parentList != null && parentList.length > 0) addDependencies(dependencies, vnfcNode, parentList); logger.debug("Adding VNFC to dependency model : " + vnfcNode); @@ -121,13 +122,21 @@ public class DependencyModelParser { } catch (IOException e) { logger.error("Error parsing dependency model : " + vnfModel); logger.error("Error message : " + e); - throw new InvalidDependencyModel("Error parsing dependency model. " + e.getMessage()); + throw new InvalidDependencyModelException("Error parsing dependency model. " + e.getMessage()); } return new VnfcDependencyModel(dependencies); } + private Vnfc createVnfc(boolean mandatory, String resilienceType, String vnfcType) { + Vnfc vnfc = new Vnfc(); + vnfc.setMandatory(mandatory); + vnfc.setResilienceType(resilienceType); + vnfc.setVnfcType(vnfcType); + return vnfc; + } + private String getQualifiedVnfcType(String fullvnfcType) { - return fullvnfcType.substring(fullvnfcType.lastIndexOf(".")+1,fullvnfcType.length()); + return fullvnfcType.substring(fullvnfcType.lastIndexOf('.')+1,fullvnfcType.length()); } private void addDependencies(Set<Node<Vnfc>> nodes, Node node, String[] parentList) { @@ -139,7 +148,7 @@ public class DependencyModelParser { node.addParent(parentNode.getChild()); } else { logger.debug("VNFC does not exist for VNFC type: " + parentType + ". Creating new VNFC "); - parentNode = new Node<>(new Vnfc(parentType, null)); + parentNode = new Node<>(createVnfc(false,null,parentType)); node.addParent(parentNode.getChild()); logger.debug("Adding VNFC to dependency model : " + parentNode); nodes.add(parentNode); @@ -147,20 +156,20 @@ public class DependencyModelParser { } } - private String[] getDependencyArray(JsonNode node, JsonNode nodeTemplateNode) { + private String[] getDependencyArray(JsonNode node, JsonNode nodeTemplateNode) throws InvalidDependencyModelException { JsonNode requirementsNode = node.get("requirements"); - List<String> dependencyList = new ArrayList(); + Set<String> dependencyList = new HashSet<>(); if(requirementsNode!=null) { for (JsonNode internalNode : requirementsNode) { //TODO : In this release we are supporting both relationship = tosca.capabilities.Node and relationship =tosca.relationships.DependsOn we need to remove one of them in next release post confirming with SDC team if (nodeNullCheck(internalNode) &&"tosca.capabilities.Node".equalsIgnoreCase(internalNode.findValue("capability").asText()) - && ("tosca.relationships.DependsOn".equalsIgnoreCase(internalNode.findValue("relationship").asText()) || "tosca.capabilities.Node".equalsIgnoreCase(internalNode.findValue("relationship").asText()))) { + && ("tosca.relationships.DependsOn".equalsIgnoreCase(internalNode.findValue(RELATIONSHIP).asText()) || "tosca.capabilities.Node".equalsIgnoreCase(internalNode.findValue(RELATIONSHIP).asText()))) { if(internalNode.findValue("node") != null) { String nodeName = internalNode.findValue("node").asText(); String fullVnfcName = nodeTemplateNode.get(nodeName).get("type").asText(); dependencyList.add(getQualifiedVnfcType(fullVnfcName)); }else{ - throw new InvalidDependencyModel("Error parsing dependency model. " + "Dependent Node not found for "+ node.get("type")); + throw new InvalidDependencyModelException("Error parsing dependency model. " + "Dependent Node not found for "+ node.get("type")); } } } @@ -171,7 +180,7 @@ public class DependencyModelParser { } private boolean nodeNullCheck(JsonNode internalNode) { - return internalNode.get("dependency") != null && internalNode.findValue("capability") != null && internalNode.findValue("relationship") != null; + return internalNode.get("dependency") != null && internalNode.findValue("capability") != null && internalNode.findValue(RELATIONSHIP) != null; } private Node<Vnfc> getNode(Set<Node<Vnfc>> nodes, String vnfcType) { diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/impl/DependencyManagerImpl.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/impl/DependencyManagerImpl.java index 31ea46cc6..e4261f8d4 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/impl/DependencyManagerImpl.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/impl/DependencyManagerImpl.java @@ -27,7 +27,7 @@ package org.onap.appc.dg.dependencymanager.impl; import org.onap.appc.dg.dependencymanager.DependencyManager; import org.onap.appc.dg.dependencymanager.DependencyType; import org.onap.appc.dg.dependencymanager.exception.DependencyModelNotFound; -import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.dg.objects.DependencyTypes; import org.onap.appc.dg.objects.VnfcDependencyModel; @@ -47,7 +47,7 @@ public class DependencyManagerImpl implements DependencyManager { cache = MetadataCacheFactory.getInstance().getMetadataCache(); } - public VnfcDependencyModel getVnfcDependencyModel(DependencyModelIdentifier modelIdentifier,DependencyTypes dependencyType) throws InvalidDependencyModel, DependencyModelNotFound { + public VnfcDependencyModel getVnfcDependencyModel(DependencyModelIdentifier modelIdentifier,DependencyTypes dependencyType) throws InvalidDependencyModelException, DependencyModelNotFound { if (logger.isTraceEnabled()) { logger.trace("Entering to getVnfcDependencyModel with DependencyModelIdentifier = "+ modelIdentifier + " , DependencyTypes = " + dependencyType); diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/impl/ResourceDependency.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/impl/ResourceDependency.java index 73792d3ad..484241639 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/impl/ResourceDependency.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/dependencymanager/impl/ResourceDependency.java @@ -32,7 +32,7 @@ import com.att.eelf.configuration.EELFManager; import org.onap.appc.dg.dependencymanager.DependencyType; import org.onap.appc.dg.dependencymanager.exception.DependencyModelNotFound; import org.onap.appc.dg.dependencymanager.helper.DependencyModelParser; -import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.dg.objects.VnfcDependencyModel; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; @@ -68,7 +68,7 @@ public class ResourceDependency implements DependencyType{ this.metadataService = metadataService; } - public VnfcDependencyModel getVnfcDependencyModel(DependencyModelIdentifier modelIdentifier) throws InvalidDependencyModel, DependencyModelNotFound { + public VnfcDependencyModel getVnfcDependencyModel(DependencyModelIdentifier modelIdentifier) throws InvalidDependencyModelException, DependencyModelNotFound { if (logger.isTraceEnabled()) { logger.trace("Entering to getVnfcDependencyModel with DependencyModelIdentifier = "+ modelIdentifier); } diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/FlowBuilder.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/FlowBuilder.java index 78dacd105..2c572516a 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/FlowBuilder.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/FlowBuilder.java @@ -24,11 +24,12 @@ package org.onap.appc.dg.flowbuilder; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.dg.objects.InventoryModel; import org.onap.appc.dg.objects.VnfcDependencyModel; import org.onap.appc.dg.objects.VnfcFlowModel; public interface FlowBuilder { - VnfcFlowModel buildFlowModel(VnfcDependencyModel dependencyModel,InventoryModel inventoryModel); + VnfcFlowModel buildFlowModel(VnfcDependencyModel dependencyModel,InventoryModel inventoryModel) throws InvalidDependencyModelException; } diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/FlowStrategy.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/FlowStrategy.java index e2c292776..dcea86197 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/FlowStrategy.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/FlowStrategy.java @@ -24,6 +24,7 @@ package org.onap.appc.dg.flowbuilder; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.dg.objects.InventoryModel; import org.onap.appc.dg.objects.VnfcDependencyModel; import org.onap.appc.dg.objects.VnfcFlowModel; @@ -31,5 +32,5 @@ import org.onap.appc.dg.objects.VnfcFlowModel; public interface FlowStrategy { - VnfcFlowModel buildFlowModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel); + VnfcFlowModel buildFlowModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel) throws InvalidDependencyModelException; } diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/exception/InvalidDependencyModel.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/exception/InvalidDependencyModelException.java index 9f4cfed93..a4a674b8a 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/exception/InvalidDependencyModel.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/exception/InvalidDependencyModelException.java @@ -25,8 +25,8 @@ package org.onap.appc.dg.flowbuilder.exception; -public class InvalidDependencyModel extends RuntimeException { - public InvalidDependencyModel(String message){ +public class InvalidDependencyModelException extends Exception { + public InvalidDependencyModelException(String message){ super(message); } } diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/helper/Graph.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/helper/Graph.java index 95e0b6675..3b409a70e 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/helper/Graph.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/helper/Graph.java @@ -26,8 +26,6 @@ package org.onap.appc.dg.flowbuilder.helper; import java.util.*; -import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel; - public class Graph<T> { private int size; diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/AbstractFlowStrategy.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/AbstractFlowStrategy.java index fbb2d5d67..8d3eab3e9 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/AbstractFlowStrategy.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/AbstractFlowStrategy.java @@ -32,7 +32,7 @@ import java.util.List; import java.util.Set; import org.onap.appc.dg.flowbuilder.FlowStrategy; -import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.dg.flowbuilder.helper.Graph; import org.onap.appc.dg.objects.*; import org.onap.appc.domainmodel.Vnfc; @@ -40,11 +40,11 @@ import org.onap.appc.domainmodel.Vnfc; public abstract class AbstractFlowStrategy implements FlowStrategy { - protected Graph<Vnfc> graph; + private final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractFlowStrategy.class); - private static final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractFlowStrategy.class); + Graph<Vnfc> graph; - public VnfcFlowModel buildFlowModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel) { + public VnfcFlowModel buildFlowModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel) throws InvalidDependencyModelException { if(logger.isTraceEnabled()){ logger.trace("Entering into buildFlowModel with dependency model = " + dependencyModel + "inventory model = " +inventoryModel); @@ -54,7 +54,7 @@ public abstract class AbstractFlowStrategy implements FlowStrategy { || dependencyModel.getDependencies() ==null || dependencyModel.getDependencies().size() ==0){ logger.debug("Dependency model not available, building flow model with sequence"); - throw new InvalidDependencyModel("Dependency model either null or does not contain any dependency"); + throw new InvalidDependencyModelException("Dependency model either null or does not contain any dependency"); } VnfcFlowModel flowModel = buildFlowModel(dependencyModel); @@ -72,7 +72,7 @@ public abstract class AbstractFlowStrategy implements FlowStrategy { } private void populateFlowModel(VnfcFlowModel flowModel, InventoryModel inventoryModel) { - Iterator<List<Vnfc>> flowIterator = null; + Iterator<List<Vnfc>> flowIterator; for(Vnfc vnfcFromInventory:inventoryModel.getVnf().getVnfcs()){ flowIterator = flowModel.getModelIterator(); @@ -81,7 +81,7 @@ public abstract class AbstractFlowStrategy implements FlowStrategy { for(Vnfc vnfcFromFlowModel:flowIterator.next() ){ if(vnfcType.equalsIgnoreCase(vnfcFromFlowModel.getVnfcType())){ vnfcFromFlowModel.setVnfcName(vnfcFromInventory.getVnfcName()); - vnfcFromFlowModel.addVms(vnfcFromInventory.getVserverList()); + vnfcFromFlowModel.setVserverList(vnfcFromInventory.getVserverList()); } } } @@ -90,7 +90,8 @@ public abstract class AbstractFlowStrategy implements FlowStrategy { } - private VnfcFlowModel buildFlowModel(VnfcDependencyModel dependencyModel) throws InvalidDependencyModel { + @SuppressWarnings("unchecked") + private VnfcFlowModel buildFlowModel(VnfcDependencyModel dependencyModel) throws InvalidDependencyModelException { Set<Node<Vnfc>> dependencies = dependencyModel.getDependencies(); graph = new Graph(dependencies.size()); @@ -116,21 +117,11 @@ public abstract class AbstractFlowStrategy implements FlowStrategy { count++; } if(flowModelSize != dependencies.size()){ - throw new InvalidDependencyModel("Cycle detected in the VNFC dependencies"); + throw new InvalidDependencyModelException("Cyclic dependency detected between the VNFC's"); } return builder.build(); } - protected abstract List<List<Vnfc>> orderDependencies(); - - /*private VnfcFlowModel buildFlowModelWithoutSequence(InventoryModel inventoryModel) { - VnfcFlowModel.VnfcFlowModelBuilder builder = new VnfcFlowModel.VnfcFlowModelBuilder(); - - for(Vnfc vnfc:inventoryModel.getVnf().getVnfcs()){ - builder = builder.addMetadata(0,vnfc); - } - - return builder.build(); - }*/ + protected abstract List<List<Vnfc>> orderDependencies() throws InvalidDependencyModelException; } diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/FlowBuilderImpl.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/FlowBuilderImpl.java index 59d1e4bf9..e57e2d38a 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/FlowBuilderImpl.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/FlowBuilderImpl.java @@ -24,6 +24,7 @@ package org.onap.appc.dg.flowbuilder.impl; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.dg.flowbuilder.FlowBuilder; import org.onap.appc.dg.flowbuilder.FlowStrategy; import org.onap.appc.dg.objects.InventoryModel; @@ -44,7 +45,7 @@ public class FlowBuilderImpl implements FlowBuilder { this.strategy = strategy; } - public VnfcFlowModel buildFlowModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel) { + public VnfcFlowModel buildFlowModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel) throws InvalidDependencyModelException{ return strategy.buildFlowModel(dependencyModel, inventoryModel); } diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/ForwardFlowStrategy.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/ForwardFlowStrategy.java index 9c5aae64f..053981989 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/ForwardFlowStrategy.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/ForwardFlowStrategy.java @@ -26,13 +26,13 @@ package org.onap.appc.dg.flowbuilder.impl; import java.util.*; -import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.domainmodel.Vnfc; public class ForwardFlowStrategy extends AbstractFlowStrategy { @Override - protected List<List<Vnfc>> orderDependencies() { + protected List<List<Vnfc>> orderDependencies() throws InvalidDependencyModelException{ ArrayList<List<Vnfc>> arrayList = new ArrayList<>(); Queue<Vnfc> queue1 = new LinkedList(); @@ -53,7 +53,7 @@ public class ForwardFlowStrategy extends AbstractFlowStrategy { } } if(queue1.isEmpty()){ - throw new InvalidDependencyModel("There seems to be no Root/Independent node for Vnfc dependencies"); + throw new InvalidDependencyModelException("There seems to be no Root/Independent node for Vnfc dependencies"); } arrayList.add((List<Vnfc>)queue1); queue1 = new LinkedList<>(queue1); @@ -86,7 +86,7 @@ public class ForwardFlowStrategy extends AbstractFlowStrategy { if(arrayList.size()>graph.getSize()){ // dependency list cannot be larger than total number of nodes // if it happens indicates cycle in the dependency - throw new InvalidDependencyModel("Cycle detected in the VNFC dependencies"); + throw new InvalidDependencyModelException("Cycle detected in the VNFC dependencies"); } queue1.addAll(queue2); queue2 = new LinkedHashSet<>(); diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/ReverseFlowStrategy.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/ReverseFlowStrategy.java index 79cd4420c..72b88f6e5 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/ReverseFlowStrategy.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/main/java/org/onap/appc/dg/flowbuilder/impl/ReverseFlowStrategy.java @@ -26,14 +26,14 @@ package org.onap.appc.dg.flowbuilder.impl; import java.util.*; -import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.domainmodel.Vnfc; public class ReverseFlowStrategy extends AbstractFlowStrategy { @Override - protected List<List<Vnfc>> orderDependencies() { + protected List<List<Vnfc>> orderDependencies() throws InvalidDependencyModelException{ ArrayList<List<Vnfc>> arrayList = new ArrayList<>(); Queue<Vnfc> queue1 = new LinkedList(); @@ -54,7 +54,7 @@ public class ReverseFlowStrategy extends AbstractFlowStrategy { } } if(queue1.isEmpty()){ - throw new InvalidDependencyModel("There seems to be no leaf node for Vnfc dependencies"); + throw new InvalidDependencyModelException("There seems to be no leaf node for Vnfc dependencies"); } arrayList.add((List<Vnfc>)queue1); queue1 = new LinkedList<>(queue1); @@ -87,7 +87,7 @@ public class ReverseFlowStrategy extends AbstractFlowStrategy { if(arrayList.size()>graph.getSize()){ // dependency list cannot be larger than total number of nodes // if it happens indicates cycle in the dependency - throw new InvalidDependencyModel("Cycle detected in the VNFC dependencies"); + throw new InvalidDependencyModelException("Cyclic dependency detected between the VNFCs"); } queue1.addAll(queue2); queue2 = new LinkedHashSet<>(); diff --git a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/test/java/org/onap/appc/dg/flowbuilder/TestFlowBuilder.java b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/test/java/org/onap/appc/dg/flowbuilder/TestFlowBuilder.java index 009515378..03037afeb 100644 --- a/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/test/java/org/onap/appc/dg/flowbuilder/TestFlowBuilder.java +++ b/appc-dg/appc-dg-shared/appc-dg-dependency-model/src/test/java/org/onap/appc/dg/flowbuilder/TestFlowBuilder.java @@ -27,7 +27,7 @@ package org.onap.appc.dg.flowbuilder; import org.junit.Assert; import org.junit.Test; import org.onap.appc.dg.flowbuilder.FlowBuilder; -import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel; +import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException; import org.onap.appc.dg.flowbuilder.impl.FlowBuilderFactory; import org.onap.appc.dg.objects.*; import org.onap.appc.domainmodel.Vnf; @@ -41,9 +41,8 @@ import java.util.Set; public class TestFlowBuilder { - @Test - public void testForwardFlowBuilder(){ + public void testForwardFlowBuilder() throws InvalidDependencyModelException { FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD); VnfcDependencyModel dependencyModel = readDependencyModel(); InventoryModel inventoryModel = readInventoryModel(); @@ -51,17 +50,25 @@ public class TestFlowBuilder { Iterator<List<Vnfc>> itr = flowModel.getModelIterator(); List<Vnfc> list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("SMP","Active-Passive","SMP_Name"))); + Assert.assertTrue(list.contains(createVnfc("SMP","Active-Passive","SMP_Name"))); list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("BE","Active-Active","BE_Name"))); + Assert.assertTrue(list.contains(createVnfc("BE","Active-Active","BE_Name"))); list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("FE","Active-Active","FE_Name"))); + Assert.assertTrue(list.contains(createVnfc("FE","Active-Active","FE_Name"))); + } + + private Vnfc createVnfc(String vnfcType,String resilienceType,String vnfcName) { + Vnfc vnfc = new Vnfc(); + vnfc.setVnfcType(vnfcType); + vnfc.setVnfcName(vnfcName); + vnfc.setResilienceType(resilienceType); + return vnfc; } @Test - public void testReverseFlowBuilder(){ + public void testReverseFlowBuilder() throws InvalidDependencyModelException { FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.REVERSE); VnfcDependencyModel dependencyModel = readDependencyModel(); InventoryModel inventoryModel = readInventoryModel(); @@ -69,42 +76,45 @@ public class TestFlowBuilder { Iterator<List<Vnfc>> itr = flowModel.getModelIterator(); List<Vnfc> list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("FE","Active-Active","FE_Name"))); + Assert.assertTrue(list.contains(createVnfc("FE","Active-Active","FE_Name"))); list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("BE","Active-Active","BE_Name"))); + Assert.assertTrue(list.contains(createVnfc("BE","Active-Active","BE_Name"))); list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("SMP","Active-Passive","SMP_Name"))); + Assert.assertTrue(list.contains(createVnfc("SMP","Active-Passive","SMP_Name"))); } @Test - public void testComplexFlowBuilderForward(){ + public void testComplexFlowBuilderForward() throws InvalidDependencyModelException { FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD); VnfcDependencyModel dependencyModel = readComplexDependencyModel(); InventoryModel inventoryModel = readComplexInventoryModel(); VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel); Iterator<List<Vnfc>> itr = flowModel.getModelIterator(); - - List<Vnfc> list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("A","Active-Active","A_Name"))); - Assert.assertTrue(list.contains(new Vnfc("E","Active-Active","E_Name"))); - - list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("B","Active-Active","B_Name"))); - Assert.assertTrue(list.contains(new Vnfc("C","Active-Active","C_Name"))); - - list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("D","Active-Active","D_Name"))); - Assert.assertTrue(list.contains(new Vnfc("F","Active-Active","F_Name"))); - - list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("G","Active-Active","G_Name"))); - + try{ + List<Vnfc> list = itr.next(); + Assert.assertTrue(list.contains(createVnfc("A","Active-Active","A_Name"))); + Assert.assertTrue(list.contains(createVnfc("E","Active-Active","E_Name"))); + + list = itr.next(); + Assert.assertTrue(list.contains(createVnfc("B","Active-Active","B_Name"))); + Assert.assertTrue(list.contains(createVnfc("C","Active-Active","C_Name"))); + + list = itr.next(); + Assert.assertTrue(list.contains(createVnfc("D","Active-Active","D_Name"))); + Assert.assertTrue(list.contains(createVnfc("F","Active-Active","F_Name"))); + + list = itr.next(); + Assert.assertTrue(list.contains(createVnfc("G","Active-Active","G_Name"))); + } + catch (Exception e){ + e.printStackTrace(); + } } @Test - public void testComplexFlowBuilderReverse(){ + public void testComplexFlowBuilderReverse() throws InvalidDependencyModelException { FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.REVERSE); VnfcDependencyModel dependencyModel = readComplexDependencyModel(); InventoryModel inventoryModel = readComplexInventoryModel(); @@ -112,33 +122,33 @@ public class TestFlowBuilder { Iterator<List<Vnfc>> itr = flowModel.getModelIterator(); List<Vnfc> list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("D","Active-Active","D_Name"))); + Assert.assertTrue(list.contains(createVnfc("D","Active-Active","D_Name"))); - Assert.assertTrue(list.contains(new Vnfc("G","Active-Active","G_Name"))); + Assert.assertTrue(list.contains(createVnfc("G","Active-Active","G_Name"))); list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("B","Active-Active","B_Name"))); - Assert.assertTrue(list.contains(new Vnfc("F","Active-Active","F_Name"))); + Assert.assertTrue(list.contains(createVnfc("B","Active-Active","B_Name"))); + Assert.assertTrue(list.contains(createVnfc("F","Active-Active","F_Name"))); list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("C","Active-Active","C_Name"))); + Assert.assertTrue(list.contains(createVnfc("C","Active-Active","C_Name"))); list = itr.next(); - Assert.assertTrue(list.contains(new Vnfc("E","Active-Active","E_Name"))); - Assert.assertTrue(list.contains(new Vnfc("A","Active-Active","A_Name"))); + Assert.assertTrue(list.contains(createVnfc("E","Active-Active","E_Name"))); + Assert.assertTrue(list.contains(createVnfc("A","Active-Active","A_Name"))); } - @Test(expected = InvalidDependencyModel.class) - public void testCyclicBuilder(){ + @Test(expected = InvalidDependencyModelException.class) + public void testCyclicBuilder() throws InvalidDependencyModelException { FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD); VnfcDependencyModel dependencyModel = readCyclicDependencyModel(); InventoryModel inventoryModel = readInventoryModel(); builder.buildFlowModel(dependencyModel,inventoryModel); } - @Test(expected = InvalidDependencyModel.class) - public void testCyclicBuilderWithRootNode(){ + @Test(expected = InvalidDependencyModelException.class) + public void testCyclicBuilderWithRootNode() throws InvalidDependencyModelException { FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD); VnfcDependencyModel dependencyModel = readCyclicDependencyModelWithRootNode(); InventoryModel inventoryModel = readInventoryModel(); @@ -146,9 +156,9 @@ public class TestFlowBuilder { } private VnfcDependencyModel readCyclicDependencyModelWithRootNode() { - Vnfc a = new Vnfc("A","Active-Passive",null); - Vnfc b = new Vnfc("B","Active-Active",null); - Vnfc c = new Vnfc("C","Active-Active",null); + Vnfc a = createVnfc("A","Active-Passive",null); + Vnfc b = createVnfc("B","Active-Active",null); + Vnfc c = createVnfc("C","Active-Active",null); Node aNode = new Node(a); @@ -168,43 +178,43 @@ public class TestFlowBuilder { } private InventoryModel readComplexInventoryModel() { - Vnf vnf = new Vnf("vnf_1","vABCD","1"); - - Vnfc vnfcA = new Vnfc("A","Active-Active","A_Name"); - Vnfc vnfcB = new Vnfc("B","Active-Active","B_Name"); - Vnfc vnfcC = new Vnfc("C","Active-Active","C_Name"); - Vnfc vnfcD = new Vnfc("D","Active-Active","D_Name"); - Vnfc vnfcE = new Vnfc("E","Active-Active","E_Name"); - Vnfc vnfcF = new Vnfc("F","Active-Active","F_Name"); - Vnfc vnfcG = new Vnfc("G","Active-Active","G_Name"); - - vnfcA.addVm(new Vserver("VM_URL_A1")); - vnfcB.addVm(new Vserver("VM_URL_B1")); - vnfcC.addVm(new Vserver("VM_URL_C1")); - vnfcD.addVm(new Vserver("VM_URL_D1")); - vnfcE.addVm(new Vserver("VM_URL_E1")); - vnfcF.addVm(new Vserver("VM_URL_F1")); - vnfcG.addVm(new Vserver("VM_URL_G1")); - - vnf.addVnfc(vnfcA); - vnf.addVnfc(vnfcB); - vnf.addVnfc(vnfcC); - vnf.addVnfc(vnfcD); - vnf.addVnfc(vnfcE); - vnf.addVnfc(vnfcF); - vnf.addVnfc(vnfcG); + Vnf vnf = createVnf("vnf_1","vABCD","1"); + + Vnfc vnfcA = createVnfc("A","Active-Active","A_Name"); + Vnfc vnfcB = createVnfc("B","Active-Active","B_Name"); + Vnfc vnfcC = createVnfc("C","Active-Active","C_Name"); + Vnfc vnfcD = createVnfc("D","Active-Active","D_Name"); + Vnfc vnfcE = createVnfc("E","Active-Active","E_Name"); + Vnfc vnfcF = createVnfc("F","Active-Active","F_Name"); + Vnfc vnfcG = createVnfc("G","Active-Active","G_Name"); + + vnf.addVserver(createVserver("VM_URL_A1",vnfcA)); + vnf.addVserver(createVserver("VM_URL_B1",vnfcB)); + vnf.addVserver(createVserver("VM_URL_C1",vnfcC)); + vnf.addVserver(createVserver("VM_URL_D1",vnfcD)); + vnf.addVserver(createVserver("VM_URL_E1",vnfcE)); + vnf.addVserver(createVserver("VM_URL_F1",vnfcF)); + vnf.addVserver(createVserver("VM_URL_G1",vnfcG)); return new InventoryModel(vnf); } + private Vnf createVnf(String vnfId,String vnfType,String vnfVersion) { + Vnf vnf = new Vnf(); + vnf.setVnfId(vnfId); + vnf.setVnfType(vnfType); + vnf.setVnfVersion(vnfVersion); + return vnf; + } + private VnfcDependencyModel readComplexDependencyModel() { - Vnfc a = new Vnfc("A","Active-Active",null); - Vnfc b = new Vnfc("B","Active-Active",null); - Vnfc c = new Vnfc("C","Active-Active",null); - Vnfc d = new Vnfc("D","Active-Active",null); - Vnfc e = new Vnfc("E","Active-Active",null); - Vnfc f = new Vnfc("F","Active-Active",null); - Vnfc g = new Vnfc("G","Active-Active",null); + Vnfc a = createVnfc("A","Active-Active",null); + Vnfc b = createVnfc("B","Active-Active",null); + Vnfc c = createVnfc("C","Active-Active",null); + Vnfc d = createVnfc("D","Active-Active",null); + Vnfc e = createVnfc("E","Active-Active",null); + Vnfc f = createVnfc("F","Active-Active",null); + Vnfc g = createVnfc("G","Active-Active",null); Node aNode = new Node(a); @@ -242,10 +252,10 @@ public class TestFlowBuilder { private VnfcDependencyModel readCyclicDependencyModel() { - Vnfc a = new Vnfc("A","Active-Passive",null); - Vnfc b = new Vnfc("B","Active-Active",null); - Vnfc c = new Vnfc("C","Active-Active",null); - Vnfc d = new Vnfc("D","Active-Active",null); + Vnfc a = createVnfc("A","Active-Passive",null); + Vnfc b = createVnfc("B","Active-Active",null); + Vnfc c = createVnfc("C","Active-Active",null); + Vnfc d = createVnfc("D","Active-Active",null); Node aNode = new Node(a); @@ -271,48 +281,52 @@ public class TestFlowBuilder { } private InventoryModel readInventoryModel() { - Vnf vnf = new Vnf("vnf_1","vSCP","1"); - - Vnfc smp = new Vnfc("SMP",null,"SMP_Name"); - Vserver smpVm1 = new Vserver("SMP_URL1"); - Vserver smpVm2 = new Vserver("SMP_URL2"); + Vnf vnf = createVnf("vnf_1","vSCP","1"); - smp.addVm(smpVm1); - smp.addVm(smpVm2); + Vnfc smp = createVnfc("SMP",null,"SMP_Name"); + Vserver smpVm1 = createVserver("SMP_URL1",smp); + Vserver smpVm2 = createVserver("SMP_URL2",smp); - Vnfc be = new Vnfc("BE",null,"BE_Name"); + vnf.addVserver(smpVm1); + vnf.addVserver(smpVm2); - Vserver beVm1 = new Vserver("BE_URL1"); - Vserver beVm2 = new Vserver("BE_URL2"); - Vserver beVm3 = new Vserver("BE_URL3"); - Vserver beVm4 = new Vserver("BE_URL4"); - Vserver beVm5 = new Vserver("BE_URL5"); + Vnfc be = createVnfc("BE",null,"BE_Name"); - be.addVm(beVm1); - be.addVm(beVm2); - be.addVm(beVm3); - be.addVm(beVm4); - be.addVm(beVm5); + Vserver beVm1 = createVserver("BE_URL1",be); + Vserver beVm2 = createVserver("BE_URL2",be); + Vserver beVm3 = createVserver("BE_URL3",be); + Vserver beVm4 = createVserver("BE_URL4",be); + Vserver beVm5 = createVserver("BE_URL5",be); - Vnfc fe = new Vnfc("FE",null,"FE_Name"); + vnf.addVserver(beVm1); + vnf.addVserver(beVm2); + vnf.addVserver(beVm3); + vnf.addVserver(beVm4); + vnf.addVserver(beVm5); - Vserver feVm1 = new Vserver("FE_URL1"); - Vserver feVm2 = new Vserver("FE_URL2"); + Vnfc fe = createVnfc("FE",null,"FE_Name"); - fe.addVm(feVm1); - fe.addVm(feVm2); + Vserver feVm1 = createVserver("FE_URL1",fe); + Vserver feVm2 = createVserver("FE_URL2",fe); - vnf.addVnfc(smp); - vnf.addVnfc(be); - vnf.addVnfc(fe); + vnf.addVserver(feVm1); + vnf.addVserver(feVm2); return new InventoryModel(vnf); } + private Vserver createVserver(String url,Vnfc vnfc) { + Vserver vserver = new Vserver(); + vserver.setUrl(url); + vserver.setVnfc(vnfc); + vnfc.addVserver(vserver); + return vserver; + } + private VnfcDependencyModel readDependencyModel() { - Vnfc smp = new Vnfc("SMP","Active-Passive",null); - Vnfc be = new Vnfc("BE","Active-Active",null); - Vnfc fe = new Vnfc("FE","Active-Active",null); + Vnfc smp = createVnfc("SMP","Active-Passive",null); + Vnfc be = createVnfc("BE","Active-Active",null); + Vnfc fe = createVnfc("FE","Active-Active",null); Node smpNode = new Node(smp); |