Updated SDC listener and dependent bundles
[appc.git] / appc-dg / appc-dg-shared / appc-dg-common / src / main / java / org / onap / appc / dg / common / impl / VnfExecutionFlowImpl.java
index 65b364f..8129e2e 100644 (file)
@@ -28,6 +28,7 @@ import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.att.eelf.i18n.EELFResourceManager;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+import org.onap.appc.exceptions.APPCException;
 
 import java.util.*;
 
@@ -36,7 +37,7 @@ import org.onap.appc.dg.dependencymanager.DependencyManager;
 import org.onap.appc.dg.dependencymanager.exception.DependencyModelNotFound;
 import org.onap.appc.dg.dependencymanager.impl.DependencyModelFactory;
 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;
@@ -47,10 +48,15 @@ import org.onap.appc.metadata.objects.DependencyModelIdentifier;
 
 public class VnfExecutionFlowImpl implements VnfExecutionFlow {
 
-    private static final EELFLogger logger = EELFManager.getInstance().getLogger(VnfExecutionFlowImpl.class);
-
+    private final EELFLogger logger = EELFManager.getInstance().getLogger(VnfExecutionFlowImpl.class);
+    private static final String VNFC_FLOW="vnfcFlow[";
+    private static final String VNF_VNFC="vnf.vnfc[";
+    /**
+     * Constructor
+     * <p>Used through blueprint
+     */
     public VnfExecutionFlowImpl(){
-
+        // do nothing
     }
 
     @Override
@@ -58,7 +64,7 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow {
         String dependencyType = params.get(Constants.DEPENDENCY_TYPE);
         String flowStrategy = params.get(Constants.FLOW_STRATEGY);
         DependencyModelIdentifier modelIdentifier = readDependencyModelIdentifier(params);
-        VnfcDependencyModel dependencyModel = null;
+        VnfcDependencyModel dependencyModel;
         try {
             validateInput(dependencyType, flowStrategy, params);
 
@@ -69,8 +75,6 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow {
             }
 
             DependencyManager dependencyManager = DependencyModelFactory.createDependencyManager();
-
-
             dependencyModel = dependencyManager.getVnfcDependencyModel(
                     modelIdentifier, DependencyTypes.findByString(dependencyType));
         } catch (DependencyModelNotFound e) {
@@ -79,12 +83,17 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow {
             context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE,msg);
             context.setAttribute("dependencyModelFound","false");
             return;
-        } catch (InvalidDependencyModel e){
+        } catch (InvalidDependencyModelException e){
             String msg = EELFResourceManager.format(Msg.INVALID_DEPENDENCY_MODEL,params.get(Constants.VNF_TYPE), e.getMessage());
             logger.error(msg);
             context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE,msg);
-            throw e;
-        }catch (RuntimeException e){
+            throw new RuntimeException(e.getMessage(),e);
+        } catch (APPCException e){
+            logger.error(e.getMessage());
+            context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE,e.getMessage());
+            throw new RuntimeException(e.getMessage(),e);
+        }
+        catch (RuntimeException e){
             logger.error(e.getMessage());
             context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE,e.getMessage());
             throw e;
@@ -96,7 +105,14 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow {
             logger.debug("Dependency Model = " +dependencyModel);
         }
         logger.info("Building Inventory Model from DG context");
-        InventoryModel inventoryModel = readInventoryModel(context);
+        InventoryModel inventoryModel = null;
+        try {
+             inventoryModel = readInventoryModel(context);
+        } catch (APPCException e) {
+            logger.error(e.getMessage());
+            context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE,e.getMessage());
+            throw new RuntimeException(e.getMessage(),e);
+        }
         if(logger.isDebugEnabled()){
             logger.debug("Inventory Model = " +inventoryModel);
         }
@@ -106,25 +122,26 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow {
         }
         try {
             validateInventoryModelWithDependencyModel(dependencyModel, inventoryModel);
-        }catch (RuntimeException e){
+        }
+        catch (APPCException e){
             logger.error(e.getMessage());
             context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE,e.getMessage());
-            throw e;
+            throw new RuntimeException(e.getMessage(),e);
         }
         logger.info("Creating flow builder");
         FlowBuilder flowBuilder = FlowBuilderFactory.getInstance().getFlowBuilder(
                 FlowStrategies.findByString(flowStrategy));
 
         logger.info("Building Vnf flow model");
-        VnfcFlowModel flowModel = null;
+        VnfcFlowModel flowModel;
         try{
             flowModel = flowBuilder.buildFlowModel(dependencyModel,inventoryModel);
         }
-        catch (InvalidDependencyModel e){
+        catch (InvalidDependencyModelException e){
             String msg = EELFResourceManager.format(Msg.INVALID_DEPENDENCY_MODEL,params.get(Constants.VNF_TYPE), e.getMessage());
             logger.error(msg);
             context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE,msg);
-            throw e;
+            throw new RuntimeException(e.getMessage(),e);
         }
 
         // remove VNFCs from the flow model where vserver list is empty
@@ -137,22 +154,22 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow {
         context.setAttribute(org.onap.appc.Constants.ATTRIBUTE_SUCCESS_MESSAGE, msg);
     }
 
-    private void validateInput(String dependencyType, String flowStrategy, Map<String, String> params) {
+    private void validateInput(String dependencyType, String flowStrategy, Map<String, String> params) throws APPCException {
         DependencyTypes dependencyTypes = DependencyTypes.findByString(dependencyType);
         if(dependencyTypes == null){
-            throw new RuntimeException("Dependency type from the input : " + dependencyType +" is invalid.");
+            throw new APPCException("Dependency type from the input : " + dependencyType +" is invalid.");
         }
         FlowStrategies flowStrategies = FlowStrategies.findByString(flowStrategy);
         if(flowStrategies == null){
-            throw new RuntimeException("Flow Strategy from the input : " + flowStrategy +" is invalid.");
+            throw new APPCException("Flow Strategy from the input : " + flowStrategy +" is invalid.");
         }
         String vnfType = params.get(Constants.VNF_TYPE);
         if(vnfType ==null || vnfType.length() ==0){
-            throw new RuntimeException("Vnf Type is not passed in the input");
+            throw new APPCException("Vnf Type is not passed in the input");
         }
         String vnfVersion = params.get(Constants.VNF_VERION);
         if(vnfVersion == null || vnfVersion.length() ==0){
-            throw new RuntimeException("Vnf Version not found");
+            throw new APPCException("Vnf Version not found");
         }
     }
 
@@ -167,13 +184,13 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow {
         Iterator<List<Vnfc>> iterator = flowModel.getModelIterator();
         while (iterator.hasNext()){
             for(Vnfc vnfc:iterator.next()){
-                context.setAttribute("vnfcFlow["+flowIndex+"].vnfcName",vnfc.getVnfcName());
-                context.setAttribute("vnfcFlow["+flowIndex+"].vnfcType",vnfc.getVnfcType());
-                context.setAttribute("vnfcFlow["+flowIndex+"].resilienceType",vnfc.getResilienceType());
-                context.setAttribute("vnfcFlow["+flowIndex+"].vmCount",Integer.toString(vnfc.getVserverList().size()));
+                context.setAttribute(VNFC_FLOW+flowIndex+"].vnfcName",vnfc.getVnfcName());
+                context.setAttribute(VNFC_FLOW+flowIndex+"].vnfcType",vnfc.getVnfcType());
+                context.setAttribute(VNFC_FLOW+flowIndex+"].resilienceType",vnfc.getResilienceType());
+                context.setAttribute(VNFC_FLOW+flowIndex+"].vmCount",Integer.toString(vnfc.getVserverList().size()));
                 int vmIndex =0;
                 for(Vserver vm :vnfc.getVserverList()){
-                    context.setAttribute("vnfcFlow["+flowIndex+"].vm["+vmIndex+"].url",vm.getUrl());
+                    context.setAttribute(VNFC_FLOW+flowIndex+"].vm["+vmIndex+"].url",vm.getUrl());
                     vmIndex++;
                 }
                 flowIndex++;
@@ -182,73 +199,88 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow {
         context.setAttribute("vnfcFlowCount",Integer.toString(flowIndex));
     }
 
-    private InventoryModel readInventoryModel(SvcLogicContext context) {
+    private InventoryModel readInventoryModel(SvcLogicContext context) throws APPCException {
         String vnfId = context.getAttribute("input.action-identifiers.vnf-id");
         String vnfType = context.getAttribute("vnf.type");
         String vnfVersion = context.getAttribute("vnf.version");
         String vnfcCountStr = context.getAttribute("vnf.vnfcCount");
         Integer vnfcCount = Integer.parseInt(vnfcCountStr);
-
-        Vnf vnf = new Vnf(vnfId,vnfType,vnfVersion);
-
+        Vnf vnf = createVnf(vnfId, vnfType, vnfVersion);
         for(Integer i=0;i<vnfcCount;i++){
-            String vnfcName = context.getAttribute("vnf.vnfc["+ i+"].name");
-            String vnfcType = context.getAttribute("vnf.vnfc["+ i+"].type");
-            String vmCountStr = context.getAttribute("vnf.vnfc["+ i+"].vm_count");
+            String vnfcName = context.getAttribute(VNF_VNFC+ i+"].name");
+            String vnfcType = context.getAttribute(VNF_VNFC+ i+"].type");
+            String vmCountStr = context.getAttribute(VNF_VNFC+ i+"].vm_count");
             if(vnfcType ==null || vnfcType.length() ==0){
-                throw new RuntimeException("Could not retrieve VNFC Type from DG Context for vnf.vnfc["+ i+"].type");
+                throw new APPCException("Could not retrieve VNFC Type from DG Context for vnf.vnfc["+ i+"].type");
             }
             Integer vmCount = Integer.parseInt(vmCountStr);
-            Vnfc vnfc = new Vnfc(vnfcType,null,vnfcName);
+            Vnfc vnfc = createVnfc(vnfcName, vnfcType);
             for(Integer j=0;j<vmCount;j++){
-                String vmURL = context.getAttribute("vnf.vnfc["+i+"].vm["+j+"].url");
-                Vserver vm = new Vserver(vmURL);
-                vnfc.addVm(vm);
+                String vmURL = context.getAttribute(VNF_VNFC+i+"].vm["+j+"].url");
+                Vserver vm = createVserver(vmURL);
+                vm.setVnfc(vnfc);
+                vnfc.addVserver(vm);
+                vnf.addVserver(vm);
             }
-            vnf.addVnfc(vnfc);
         }
         return new InventoryModel(vnf);
     }
 
+    private Vserver createVserver(String vmURL) {
+        Vserver vserver = new Vserver();
+        vserver.setUrl(vmURL);
+        return vserver;
+    }
+
+    private Vnfc createVnfc(String vnfcName, String vnfcType) {
+        Vnfc vnfc =new Vnfc();
+        vnfc.setVnfcName(vnfcName);
+        vnfc.setVnfcType(vnfcType);
+        return vnfc;
+    }
+
+    private Vnf createVnf(String vnfId, String vnfType, String vnfVersion) {
+        Vnf vnf =new Vnf();
+        vnf.setVnfType(vnfType);
+        vnf.setVnfId(vnfId);
+        vnf.setVnfVersion(vnfVersion);
+        return vnf;
+    }
+
     private DependencyModelIdentifier readDependencyModelIdentifier(Map<String, String> params) {
         String vnfType = params.get(Constants.VNF_TYPE);
         String catalogVersion = params.get(Constants.VNF_VERION);
         return new DependencyModelIdentifier(vnfType,catalogVersion);
     }
 
-    private void validateInventoryModelWithDependencyModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel) {
-        Set<String> dependencyModelVnfcSet = new HashSet<String>();
-        Set<String> dependencyModelMandatoryVnfcSet = new HashSet<String>();
-        Set<String> inventoryModelVnfcsSet = new HashSet<String>();
-
+    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<String>(inventoryModelVnfcsSet);
+            Set<String> difference = new HashSet<>(inventoryModelVnfcsSet);
             difference.removeAll(dependencyModelVnfcSet);
             logger.error("Dependency model is missing following vnfc type(s): " + difference);
-            throw new RuntimeException("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<String>(dependencyModelVnfcSet);
+            Set<String> difference = new HashSet<>(dependencyModelMandatoryVnfcSet);
             difference.removeAll(inventoryModelVnfcsSet);
-            difference.retainAll(dependencyModelMandatoryVnfcSet);
             if (difference.size() > 0) {
                 logger.error("Inventory model is missing following mandatory vnfc type(s): " + difference);
-                throw new RuntimeException("Inventory model is missing following mandatory vnfc type(s): " + difference);
+                throw new APPCException("Inventory model is missing following mandatory vnfc type(s): " + difference);
             }
         }
     }
@@ -268,4 +300,5 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow {
             }
         }
     }
+
 }