summaryrefslogtreecommitdiffstats
path: root/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java')
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java123
1 files changed, 90 insertions, 33 deletions
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java
index c0ea4134c..8e44bc3bd 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java
@@ -27,8 +27,10 @@ import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.commons.lang3.StringUtils;
-import org.onap.appc.dg.objects.*;
+import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException;
+import org.onap.appc.dg.objects.InventoryModel;
+import org.onap.appc.dg.objects.Node;
+import org.onap.appc.dg.objects.VnfcDependencyModel;
import org.onap.appc.domainmodel.Vnf;
import org.onap.appc.domainmodel.Vnfc;
import org.onap.appc.domainmodel.Vserver;
@@ -43,7 +45,12 @@ import org.onap.appc.seqgen.objects.Transaction;
import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
import java.io.IOException;
-import java.util.*;
+import java.util.Map;
+import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.HashMap;
+import java.util.LinkedList;
public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
@@ -79,6 +86,9 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
sequenceGeneratorInput.setInventoryModel(inventoryModel);
VnfcDependencyModel dependencyModel = buildDependencyModel(inputJson);
+ if(dependencyModel!=null){
+ validateInventoryModelWithDependencyModel(dependencyModel,inventoryModel);
+ }
sequenceGeneratorInput.setDependencyModel(dependencyModel);
return sequenceGeneratorInput;
@@ -92,13 +102,54 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
if (operation == null) {
throw new APPCException("Invalid Action " + action);
}
+ if(Constants.ActionLevel.findByString(sequenceGeneratorInput.getRequestInfo().getActionLevel().toUpperCase())==null){
+ throw new APPCException("Invalid Action Level " + sequenceGeneratorInput.getRequestInfo().getActionLevel());
+ }
SequenceGenerator sequenceGenerator = SequenceGeneratorFactory.getInstance().createSequenceGenerator(operation);
return sequenceGenerator.generateSequence(sequenceGeneratorInput);
}
+ private void validateInventoryModelWithDependencyModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel) throws APPCException {
+ Set<String> dependencyModelVnfcSet = new HashSet<>();
+ Set<String> dependencyModelMandatoryVnfcSet = new HashSet<>();
+ Set<String> inventoryModelVnfcsSet = new HashSet<>();
+
+ for (Node<Vnfc> node : dependencyModel.getDependencies()) {
+ dependencyModelVnfcSet.add(node.getChild().getVnfcType().toLowerCase());
+ if (node.getChild().isMandatory()) {
+ dependencyModelMandatoryVnfcSet.add(node.getChild().getVnfcType().toLowerCase());
+ }
+ }
+
+ for (Vnfc vnfc : inventoryModel.getVnf().getVnfcs()) {
+ inventoryModelVnfcsSet.add(vnfc.getVnfcType().toLowerCase());
+ }
+
+ // if dependency model and inventory model contains same set of VNFCs, validation succeed and hence return
+ if (dependencyModelVnfcSet.equals(inventoryModelVnfcsSet)) {
+ return;
+ }
+
+ if (inventoryModelVnfcsSet.size() >= dependencyModelVnfcSet.size()) {
+ Set<String> difference = new HashSet<>(inventoryModelVnfcsSet);
+ difference.removeAll(dependencyModelVnfcSet);
+ logger.error("Dependency model is missing following vnfc type(s): " + difference);
+ throw new APPCException("Dependency model is missing following vnfc type(s): " + difference);
+ } else {
+ Set<String> difference = new HashSet<>(dependencyModelMandatoryVnfcSet);
+ difference.removeAll(inventoryModelVnfcsSet);
+ if (difference.size() > 0) {
+ logger.error("Inventory model is missing following mandatory vnfc type(s): " + difference);
+ throw new APPCException("VMs missing for the mandatory VNFC : " + difference);
+ }
+ }
+ }
+
// Dependency model is an optional attribute and may contain null values
private VnfcDependencyModel buildDependencyModel(String inputJson) throws IOException, APPCException {
Set<Node<Vnfc>> dependency = new HashSet<>();
+ Set<String> parentVnfcs=new HashSet<>();
+ Set<String> allVnfcTypes=new HashSet<>();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
JsonNode rootNode = objectMapper.readTree(inputJson);
@@ -106,9 +157,13 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
if (vnfcs != null) {
for (JsonNode vnfcNode : vnfcs) {
String vnfcType = readVnfcType(vnfcNode);
+ allVnfcTypes.add(vnfcType);
String mandatory = readMandatory(vnfcNode);
String resilience = readResilience(vnfcNode);
- Vnfc vnfc = new Vnfc(vnfcType, resilience, null, Boolean.parseBoolean(mandatory));
+ Vnfc vnfc = new Vnfc();
+ vnfc.setVnfcType(vnfcType);
+ vnfc.setResilienceType(resilience);
+ vnfc.setMandatory(Boolean.parseBoolean(mandatory));
Node<Vnfc> currentNode = getNode(dependency, vnfcType);
if (currentNode == null) {
currentNode = new Node<>(vnfc);
@@ -120,11 +175,14 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
JsonNode parents = vnfcNode.get("parents");
for (JsonNode parent : parents) {
String parentVnfcType = parent.asText();
+ parentVnfcs.add(parentVnfcType);
Node<Vnfc> parentNode = getNode(dependency, parentVnfcType);
if (parentNode != null) {
currentNode.addParent(parentNode.getChild());
} else {
- Vnfc parentVnfc = new Vnfc(parentVnfcType, null, null, false);
+ Vnfc parentVnfc=new Vnfc();
+ parentVnfc.setVnfcType(parentVnfcType);
+ parentVnfc.setMandatory(false);
parentNode = new Node<>(parentVnfc);
currentNode.addParent(parentVnfc);
dependency.add(parentNode);
@@ -132,6 +190,11 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
}
}
+ for(String parent:parentVnfcs){
+ if(!allVnfcTypes.contains(parent)){
+ throw new APPCException("Dependency model missing vnfc type "+parent);
+ }
+ }
return new VnfcDependencyModel(dependency);
}
return null;
@@ -184,7 +247,6 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
private InventoryModel buildInventoryModel(String inputJson) throws IOException, APPCException {
ObjectMapper objectMapper = new ObjectMapper();
- objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
JsonNode jsonNode = objectMapper.readTree(inputJson);
JsonNode inventoryInfo = jsonNode.get("inventory-info");
if (inventoryInfo == null) {
@@ -197,45 +259,40 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
String vnfId = vnfInfo.get("vnf-id").asText();
String vnfType = vnfInfo.get("vnf-type").asText();
- String vnfVersion = vnfInfo.get("vnf-version").asText();
-
- Vnf vnf = new Vnf(vnfId, vnfType, vnfVersion);
-
- JsonNode vms = vnfInfo.get("vm");
-
+ Vnf vnf =new Vnf();
+ vnf.setVnfId(vnfId);
+ vnf.setVnfType(vnfType);
Map<Vnfc, List<Vserver>> vfcs = new HashMap<>();
+ JsonNode vms = vnfInfo.get("vm");
+ if(vms.size()<1){
+ throw new APPCException("vm info not provided in the input");
+ }
for (JsonNode vm : vms) {
if(vm.get("vserver-id")== null){
throw new APPCException("vserver-id not found ");
}
String vserverId = vm.get("vserver-id").asText();
- Vserver vserver = new Vserver(null, null, vserverId, null, null);
- JsonNode vnfc = vm.get("vnfc");
- if (vnfc.get("vnfc-name") == null) {
- throw new APPCException("vnfc-name not found for vserver " + vserverId);
- }
- String vnfcName = vnfc.get("vnfc-name").asText();
- if (vnfc.get("vnfc-type") == null) {
- throw new APPCException("vnfc-type not found for vserver " + vserverId);
- }
- String vnfcType = vnfc.get("vnfc-type").asText();
- if (StringUtils.isEmpty(vnfcType)) {
- throw new APPCException("vserver " + vserverId + " is not associated with any vnfc");
- }
- Vnfc vfc = new Vnfc(vnfcType, null, vnfcName);
- List<Vserver> vServers = vfcs.get(vfc);
- if (vServers == null) {
- vServers = new LinkedList<>();
- vfcs.put(vfc, vServers);
+ Vserver vserver = new Vserver();
+ vserver.setId(vserverId);
+ if (vm.get("vnfc")!=null&& vm.get("vnfc").get("vnfc-name") != null && vm.get("vnfc").get("vnfc-type")!= null) {
+ Vnfc vfc = new Vnfc();
+ vfc.setVnfcType(vm.get("vnfc").get("vnfc-type").asText());
+ vfc.setVnfcName(vm.get("vnfc").get("vnfc-name").asText());
+ vserver.setVnfc(vfc);
+ List<Vserver> vServers = vfcs.get(vfc);
+ if (vServers == null) {
+ vServers = new LinkedList<>();
+ vfcs.put(vfc, vServers);
+ }
+ vServers.add(vserver);
}
- vServers.add(vserver);
+ vnf.addVserver(vserver);
}
for (Map.Entry<Vnfc, List<Vserver>> entry : vfcs.entrySet()) {
Vnfc vnfc = entry.getKey();
List<Vserver> vServers = vfcs.get(vnfc);
- vnfc.addVms(vServers);
- vnf.addVnfc(vnfc);
+ vnfc.addVservers(vServers);
}
return new InventoryModel(vnf);