X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=appc-config%2Fappc-flow-controller%2Fprovider%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fappc%2Fflow%2Fcontroller%2Fnode%2FFlowControlNode.java;h=74932b41e6fbdbe030fe9c0223373164c91011dd;hb=HEAD;hp=34cdf87ecb891cc4cc3934eb32e63ef73292fa82;hpb=38fce41830355fba09b4191f022f2b7f4f83189e;p=appc.git diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java index 34cdf87ec..74932b41e 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java @@ -2,7 +2,9 @@ * ============LICENSE_START======================================================= * ONAP : APPC * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. + * ============================================================================= + * Modifications Copyright (C) 2019 Ericsson * ============================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,29 +18,33 @@ * See the License for the specific language governing permissions and * limitations under the License. * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. * ============LICENSE_END========================================================= */ + package org.onap.appc.flow.controller.node; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import java.io.FileInputStream; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.ACTION_LEVEL; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.DESINGTIME; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.GRAPH; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_PARAM_RESPONSE_PREFIX; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.NODE; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_PARAM_ERROR_CODE; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_PARAM_ERROR_MESSAGE; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_PARAM_STATUS; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_STATUS_FAILURE; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_STATUS_MESSAGE; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_STATUS_SUCCESS; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.REQUEST_ACTION; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.REQUEST_ID; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.RESPONSE_PREFIX; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.REST; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.SEQUENCE_TYPE; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.VNF_TYPE; import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Properties; import org.apache.commons.lang3.StringUtils; -import org.json.JSONObject; import org.onap.appc.flow.controller.ResponseHandlerImpl.DefaultResponseHandler; import org.onap.appc.flow.controller.data.PrecheckOption; import org.onap.appc.flow.controller.data.ResponseAction; @@ -48,485 +54,216 @@ import org.onap.appc.flow.controller.dbervices.FlowControlDBService; import org.onap.appc.flow.controller.executorImpl.GraphExecutor; import org.onap.appc.flow.controller.executorImpl.NodeExecutor; import org.onap.appc.flow.controller.executorImpl.RestExecutor; -import org.onap.appc.flow.controller.interfaceData.ActionIdentifier; -import org.onap.appc.flow.controller.interfaceData.Capabilities; -import org.onap.appc.flow.controller.interfaceData.DependencyInfo; -import org.onap.appc.flow.controller.interfaceData.Input; -import org.onap.appc.flow.controller.interfaceData.InventoryInfo; -import org.onap.appc.flow.controller.interfaceData.RequestInfo; -import org.onap.appc.flow.controller.interfaceData.Vm; -import org.onap.appc.flow.controller.interfaceData.VnfInfo; -import org.onap.appc.flow.controller.interfaceData.Vnfcs; -import org.onap.appc.flow.controller.interfaceData.Vnfcslist; import org.onap.appc.flow.controller.interfaces.FlowExecutorInterface; -import org.onap.appc.flow.controller.utils.EncryptionTool; -import org.onap.appc.flow.controller.utils.FlowControllerConstants; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicException; import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.ObjectMapper; -public class FlowControlNode implements SvcLogicJavaPlugin{ +public class FlowControlNode implements SvcLogicJavaPlugin { private static final EELFLogger log = EELFManager.getInstance().getLogger(FlowControlNode.class); - private static final String SDNC_CONFIG_DIR_VAR = "SDNC_CONFIG_DIR"; + + private final FlowControlDBService dbService; + private final FlowSequenceGenerator flowSequenceGenerator; + + public FlowControlNode() { + this.dbService = FlowControlDBService.initialise(); + this.flowSequenceGenerator = new FlowSequenceGenerator(); + } + + FlowControlNode(FlowControlDBService dbService, FlowSequenceGenerator flowSequenceGenerator) { + this.dbService = dbService; + this.flowSequenceGenerator = flowSequenceGenerator; + } public void processFlow(Map inParams, SvcLogicContext ctx) throws SvcLogicException { log.debug("Received processParamKeys call with params : " + inParams); - String responsePrefix = inParams.get(FlowControllerConstants.INPUT_PARAM_RESPONSE_PRIFIX); + String responsePrefix = inParams.get(INPUT_PARAM_RESPONSE_PREFIX); try { - responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : ""; - FlowControlDBService dbservice = FlowControlDBService.initialise(); + responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix + ".") : ""; SvcLogicContext localContext = new SvcLogicContext(); - localContext.setAttribute(FlowControllerConstants.REQUEST_ID, ctx.getAttribute(FlowControllerConstants.REQUEST_ID)); - localContext.setAttribute(FlowControllerConstants.VNF_TYPE, ctx.getAttribute(FlowControllerConstants.VNF_TYPE)); - localContext.setAttribute(FlowControllerConstants.REQUEST_ACTION, ctx.getAttribute(FlowControllerConstants.REQUEST_ACTION)); - localContext.setAttribute(FlowControllerConstants.ACTION_LEVEL, ctx.getAttribute(FlowControllerConstants.ACTION_LEVEL)); - localContext.setAttribute(FlowControllerConstants.RESPONSE_PREFIX, responsePrefix); - ctx.setAttribute(FlowControllerConstants.RESPONSE_PREFIX, responsePrefix); - dbservice.getFlowReferenceData(ctx, inParams, localContext); - - for (Object key : localContext.getAttributeKeySet()) { - String parmName = (String) key; - String parmValue = ctx.getAttribute(parmName); - log.debug("processFlow " + parmName + "=" + parmValue); + localContext.setAttribute(REQUEST_ID, ctx.getAttribute(REQUEST_ID)); + localContext.setAttribute(VNF_TYPE, ctx.getAttribute(VNF_TYPE)); + localContext.setAttribute(REQUEST_ACTION, ctx.getAttribute(REQUEST_ACTION)); + localContext.setAttribute(ACTION_LEVEL, ctx.getAttribute(ACTION_LEVEL)); + localContext.setAttribute(RESPONSE_PREFIX, responsePrefix); + ctx.setAttribute(RESPONSE_PREFIX, responsePrefix); + + dbService.getFlowReferenceData(ctx, inParams, localContext); + + for (String key : localContext.getAttributeKeySet()) { + log.debug("processFlow " + key + "=" + ctx.getAttribute(key)); } processFlowSequence(inParams, ctx, localContext); - if(!ctx.getAttribute(responsePrefix + FlowControllerConstants.OUTPUT_PARAM_STATUS).equals(FlowControllerConstants.OUTPUT_STATUS_SUCCESS)) - throw new SvcLogicException(ctx.getAttribute(responsePrefix + FlowControllerConstants.OUTPUT_STATUS_MESSAGE)); - + if (!ctx.getAttribute(responsePrefix + OUTPUT_PARAM_STATUS).equals(OUTPUT_STATUS_SUCCESS)) { + throw new SvcLogicException(ctx.getAttribute(responsePrefix + OUTPUT_STATUS_MESSAGE)); + } } catch (Exception e) { - ctx.setAttribute(responsePrefix + FlowControllerConstants.OUTPUT_PARAM_STATUS, FlowControllerConstants.OUTPUT_STATUS_FAILURE); - ctx.setAttribute(responsePrefix + FlowControllerConstants.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage()); - log.error("Error occured in processFlow ", e); + ctx.setAttribute(responsePrefix + OUTPUT_PARAM_STATUS, OUTPUT_STATUS_FAILURE); + ctx.setAttribute(responsePrefix + OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage()); + ctx.setAttribute(responsePrefix + OUTPUT_PARAM_ERROR_CODE, ctx.getAttribute(OUTPUT_PARAM_ERROR_CODE)); + log.error("Error occurred in processFlow ", e); throw new SvcLogicException(e.getMessage()); } } - private void processFlowSequence(Map inParams, SvcLogicContext ctx, SvcLogicContext localContext) throws Exception - { + private void processFlowSequence(Map inParams, SvcLogicContext ctx, SvcLogicContext localContext) + throws Exception { + String fn = "FlowExecutorNode.processflowSequence"; log.debug(fn + "Received model for flow : " + localContext.toString()); - FlowControlDBService dbservice = FlowControlDBService.initialise(); - String flowSequnce = null; - for (Object key : localContext.getAttributeKeySet()) { - String parmName = (String) key; - String parmValue = ctx.getAttribute(parmName); - log.debug(parmName + "=" + parmValue); - - } - if(localContext.getAttribute(FlowControllerConstants.SEQUENCE_TYPE) !=null){ - - if(localContext.getAttribute(FlowControllerConstants.GENERATION_NODE) != null){ - GraphExecutor transactionExecutor = new GraphExecutor(); - Boolean generatorExists = transactionExecutor.hasGraph("APPC_COMMOM", localContext.getAttribute(FlowControllerConstants.GENERATION_NODE), null, "sync"); - if(generatorExists){ - flowSequnce = transactionExecutor.executeGraph("APPC_COMMOM", localContext.getAttribute(FlowControllerConstants.GENERATION_NODE), - null, "sync", null).getProperty(FlowControllerConstants.FLOW_SEQUENCE); - } - else - throw new Exception("Can not find Custom defined Flow Generator for " + localContext.getAttribute(FlowControllerConstants.GENERATION_NODE)); - } - else if((localContext.getAttribute(FlowControllerConstants.SEQUENCE_TYPE)).equalsIgnoreCase(FlowControllerConstants.DESINGTIME)){ - localContext.setAttribute(FlowControllerConstants.VNFC_TYPE, ctx.getAttribute(FlowControllerConstants.VNFC_TYPE)); - flowSequnce = dbservice.getDesignTimeFlowModel(localContext); - if(flowSequnce == null) - throw new Exception("Flow Sequence is not found User Desinged VNF " + ctx.getAttribute(FlowControllerConstants.VNF_TYPE)); - } - else if((localContext.getAttribute(FlowControllerConstants.SEQUENCE_TYPE)).equalsIgnoreCase(FlowControllerConstants.RUNTIME)){ - - Transaction transaction = new Transaction(); - String input = collectInputParams(ctx,transaction); - log.info("CollectInputParamsData-Input: " + input ); - - RestExecutor restExe = new RestExecutor(); - HashMapflowSeq= restExe.execute(transaction, localContext); - JSONObject sequence = new JSONObject(flowSeq.get("restResponse")); - if(sequence.has("output")) - flowSequnce = sequence.getJSONObject("output").toString(); - log.info("MultistepSequenceGenerator-Output: "+flowSequnce); + localContext.getAttributeKeySet().forEach(key -> log.debug(key + "=" + ctx.getAttribute(key))); - if(flowSequnce == null) - throw new Exception("Failed to get the Flow Sequece runtime for VNF type" + ctx.getAttribute(FlowControllerConstants.VNF_TYPE)); - - } - else if((localContext.getAttribute(FlowControllerConstants.SEQUENCE_TYPE)).equalsIgnoreCase(FlowControllerConstants.EXTERNAL)){ - //String input = collectInputParams(localContext); - // flowSequnce = ""; //get it from the External interface calling the Rest End point - TBD - //if(flowSequnce == null) - throw new Exception("Flow Sequence not found for " + ctx.getAttribute(FlowControllerConstants.VNF_TYPE)); - } - else - { - //No other type of model supported...in Future can get flowModel from other generators which will be included here - throw new Exception("No information found for sequence Owner Design-Time Vs Run-Time" ); - } - } - else{ - FlowGenerator flowGenerator = new FlowGenerator(); - Transactions trans = flowGenerator.createSingleStepModel(inParams,ctx); - ObjectMapper mapper = new ObjectMapper(); - flowSequnce = mapper.writeValueAsString(trans); - log.debug("Single step Flow Sequence : " + flowSequnce); - } - log.debug("Received Flow Sequence : " + flowSequnce); + String flowSequence = flowSequenceGenerator.getFlowSequence(inParams, ctx, localContext); - HashMap transactionMap = createTransactionMap(flowSequnce, localContext); - exeuteAllTransaction(transactionMap, ctx); - log.info("Executed all the transacstion successfully"); + log.debug("Received Flow Sequence : " + flowSequence); + HashMap transactionMap = createTransactionMap(flowSequence, localContext); + executeAllTransaction(transactionMap, ctx); + log.info("Executed all the transaction successfully"); } - private void exeuteAllTransaction(HashMap transactionMap, SvcLogicContext ctx) throws Exception { + private void executeAllTransaction(HashMap transactionMap, SvcLogicContext ctx) + throws Exception { - String fn = "FlowExecutorNode.exeuteAllTransaction "; + String fn = "FlowExecutorNode.executeAllTransaction "; int retry = 0; FlowExecutorInterface flowExecutor; - for (int key = 1; key <= transactionMap.size() ; key++) - { + for (int key = 1; key <= transactionMap.size(); key++) { log.debug(fn + "Starting transactions ID " + key + " :)=" + retry); Transaction transaction = transactionMap.get(key); - if(!preProcessor(transactionMap, transaction)){ - log.info("Skipping Transaction ID " + transaction.getTransactionId()); + if (!preProcessor(transactionMap, transaction)) { + log.info("Skipping Transaction ID " + transaction.getTransactionId()); continue; } - if(transaction.getExecutionType() != null){ - switch (transaction.getExecutionType()){ - case FlowControllerConstants.GRAPH : - flowExecutor = new GraphExecutor(); - break; - case FlowControllerConstants.NODE : - flowExecutor = new NodeExecutor(); - break; - case FlowControllerConstants.REST : - flowExecutor = new RestExecutor(); - break; - default : - throw new Exception("No Executor found for transaction ID" + transaction.getTransactionId()); + if (transaction.getExecutionType() != null) { + switch (transaction.getExecutionType()) { + case GRAPH: + flowExecutor = new GraphExecutor(); + break; + case NODE: + flowExecutor = new NodeExecutor(); + break; + case REST: + flowExecutor = new RestExecutor(); + break; + default: + throw new Exception("No Executor found for transaction ID" + transaction.getTransactionId()); } flowExecutor.execute(transaction, ctx); - ResponseAction responseAction= handleResponse(transaction); + ResponseAction responseAction = handleResponse(transaction, ctx); - if(responseAction.getWait() != null && Integer.parseInt(responseAction.getWait()) > 0){ + if (responseAction.getWait() != null && Integer.parseInt(responseAction.getWait()) > 0) { log.debug(fn + "Going to Sleep .... " + responseAction.getWait()); - Thread.sleep(Integer.parseInt(responseAction.getWait())*1000L); + Thread.sleep(Integer.parseInt(responseAction.getWait()) * 1000L); } - - if(responseAction.isIntermediateMessage()){ + if (responseAction.isIntermediateMessage()) { log.debug(fn + "Sending Intermediate Message back .... "); sendIntermediateMessage(); } - if(responseAction.getRetry() != null && Integer.parseInt(responseAction.getRetry()) > retry ){ + if (responseAction.getRetry() != null && Integer.parseInt(responseAction.getRetry()) > retry) { log.debug(fn + "Ooppss!!! We will retry again ....... "); key--; retry++; - log.debug(fn + "key =" + key + "retry =" + retry); - + log.debug(fn + "key =" + key + "retry =" + retry); } - if(responseAction.isIgnore()){ + if (responseAction.isIgnore()) { log.debug(fn + "Ignoring this Error and moving ahead ....... "); continue; } - if(responseAction.isStop()){ + if (responseAction.isStop()) { log.debug(fn + "Need to Stop ....... "); break; } - if(responseAction.getJump() != null && Integer.parseInt(responseAction.getJump()) > 0 ){ + if (responseAction.getJump() != null && Integer.parseInt(responseAction.getJump()) > 0) { key = Integer.parseInt(responseAction.getJump()); - key --; + key--; } - log.debug(fn + "key =" + key + "retry =" + retry); + log.debug(fn + "key =" + key + "retry =" + retry); } else { throw new Exception("Don't know how to execute transaction ID " + transaction.getTransactionId()); } } - } - private void sendIntermediateMessage() { + + protected void sendIntermediateMessage() { // TODO Auto-generated method stub } - private ResponseAction handleResponse(Transaction transaction) { + protected ResponseAction handleResponse(Transaction transaction, SvcLogicContext ctx) { log.info("Handling Response for transaction Id " + transaction.getTransactionId()); DefaultResponseHandler defaultHandler = new DefaultResponseHandler(); - return defaultHandler.handlerResponse(transaction); + return defaultHandler.handlerResponse(transaction, ctx); } - private boolean preProcessor(HashMap transactionMap, Transaction transaction) throws IOException { + private boolean preProcessor(HashMap transactionMap, Transaction transaction) + throws IOException { + log.debug("Starting Preprocessing Logic "); - boolean runthisStep = false; + boolean runThisStep = false; try { - if(transaction.getPrecheck() != null && transaction.getPrecheck().getPrecheckOptions() != null - && !transaction.getPrecheck().getPrecheckOptions().isEmpty()){ - List precheckOptions = transaction.getPrecheck().getPrecheckOptions(); - for(PrecheckOption precheck : precheckOptions){ + if (transaction.getPrecheck() != null && transaction.getPrecheck().getPrecheckOptions() != null + && !transaction.getPrecheck().getPrecheckOptions().isEmpty()) { + + List precheckOptions = transaction.getPrecheck().getPrecheckOptions(); + for (PrecheckOption precheck : precheckOptions) { Transaction trans = transactionMap.get(precheck.getpTransactionID()); ObjectMapper mapper = new ObjectMapper(); log.info("Mapper= " + mapper.writeValueAsString(trans)); HashMap trmap = mapper.readValue(mapper.writeValueAsString(trans), HashMap.class); - if(trmap.get(precheck.getParamName()) != null && - ((String) trmap.get(precheck.getParamName())).equalsIgnoreCase(precheck.getParamValue())) - runthisStep = true; - else - runthisStep = false; + runThisStep = trmap.get(precheck.getParamName()) != null + && ((String) trmap.get(precheck.getParamName())).equalsIgnoreCase(precheck.getParamValue()); - if(("any").equalsIgnoreCase(transaction.getPrecheck().getPrecheckOperator()) && runthisStep) + if (("any").equalsIgnoreCase(transaction.getPrecheck().getPrecheckOperator()) && runThisStep) { break; + } } } else { log.debug("No Pre check defined for transaction ID " + transaction.getTransactionId()); - runthisStep = true; + runThisStep = true; } - } - catch(Exception e) - { + } catch (Exception e) { log.error("Error occured when Preprocessing Logic ", e); throw e; } - log.debug("Returing process current Transaction = " + runthisStep); - - return runthisStep ; + log.debug("Returing process current Transaction = " + runThisStep); + return runThisStep; } - private HashMap createTransactionMap(String flowSequnce, SvcLogicContext localContext) throws Exception { + private HashMap createTransactionMap(String flowSequence, SvcLogicContext localContext) + throws Exception { + ObjectMapper mapper = new ObjectMapper(); - Transactions transactions = mapper.readValue(flowSequnce,Transactions.class); + Transactions transactions = mapper.readValue(flowSequence, Transactions.class); HashMap transMap = new HashMap<>(); - for(Transaction transaction : transactions.getTransactions()){ + for (Transaction transaction : transactions.getTransactions()) { compileFlowDependencies(transaction, localContext); - //loadTransactionIntoStatus(transactions, ctx); //parse the Transactions Object and create records in process_flow_status table + // parse the Transactions Object and create records in process_flow_status table + // loadTransactionIntoStatus(transactions, ctx); transMap.put(transaction.getTransactionId(), transaction); } return transMap; } private void compileFlowDependencies(Transaction transaction, SvcLogicContext localContext) throws Exception { - FlowControlDBService dbservice = FlowControlDBService.initialise(); - dbservice.populateModuleAndRPC(transaction, localContext.getAttribute(FlowControllerConstants.VNF_TYPE)); - ObjectMapper mapper = new ObjectMapper(); - log.debug("Indivisual Transaction Details :" + transaction.toString()); - if((localContext.getAttribute(FlowControllerConstants.SEQUENCE_TYPE) == null) || - (localContext.getAttribute(FlowControllerConstants.SEQUENCE_TYPE) != null && - ! localContext.getAttribute(FlowControllerConstants.SEQUENCE_TYPE).equalsIgnoreCase(FlowControllerConstants.DESINGTIME))){ - localContext.setAttribute("artifact-content", mapper.writeValueAsString(transaction)); - dbservice.loadSequenceIntoDB(localContext); - } - //get a field in transction class as transactionhandle interface and register the Handler here for each trnactions - } - - private String collectInputParams(SvcLogicContext ctx,Transaction transaction) throws Exception { - - String fn = "FlowExecuteNode.collectInputParams"; - Properties prop = loadProperties(); - log.info("Loaded Properties " + prop.toString()); - - String vnfId = ctx.getAttribute(FlowControllerConstants.VNF_ID); - String inputData = null; - log.debug(fn + "vnfId :" + vnfId); - - if (StringUtils.isBlank(vnfId)) { - throw new Exception("VnfId is missing"); - } - - try { - - ActionIdentifier actionIdentifier = new ActionIdentifier(); - log.debug("Enter ActionIdentifier"); - if (StringUtils.isNotBlank(vnfId)) { - actionIdentifier.setVnfId(vnfId); - } - if (StringUtils.isNotBlank(ctx.getAttribute(FlowControllerConstants.VSERVER_ID))) { - actionIdentifier.setVserverId(ctx.getAttribute(FlowControllerConstants.VSERVER_ID)); - } - if (StringUtils.isNotBlank(ctx.getAttribute(FlowControllerConstants.VNFC_NAME))) { - actionIdentifier.setVnfcName(ctx.getAttribute(FlowControllerConstants.VNFC_NAME)); - } - log.info("ActionIdentifierData" + actionIdentifier.toString()); - - RequestInfo requestInfo = new RequestInfo(); - log.info("Enter RequestInfo"); - requestInfo.setAction(ctx.getAttribute(FlowControllerConstants.REQUEST_ACTION)); - requestInfo.setActionLevel(ctx.getAttribute(FlowControllerConstants.ACTION_LEVEL)); - requestInfo.setPayload(ctx.getAttribute(FlowControllerConstants.PAYLOAD)); - requestInfo.setActionIdentifier(actionIdentifier); - log.debug("RequestInfo: " + requestInfo.toString()); - - InventoryInfo inventoryInfo = getInventoryInfo(ctx, vnfId); - DependencyInfo dependencyInfo = getDependencyInfo(ctx); - Capabilities capabilites = getCapabilitesData(ctx); - - Input input = new Input(); - log.info("Enter InputData"); - input.setRequestInfo(requestInfo); - input.setInventoryInfo(inventoryInfo); - input.setDependencyInfo(dependencyInfo); - input.setCapabilities(capabilites); - log.info(fn + "Input parameters:" + input.toString()); - - ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(Include.NON_NULL); - mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true); - inputData = mapper.writeValueAsString(input); - log.info("InputDataJson:" + inputData); - - } catch (Exception e) { - log.error("Error occured in " + fn, e); - } - - String resourceUri = prop.getProperty(FlowControllerConstants.SEQ_GENERATOR_URL); - log.info(fn + "resourceUri= " + resourceUri); - - EncryptionTool et = EncryptionTool.getInstance(); - String pass = et.decrypt(prop.getProperty(FlowControllerConstants.SEQ_GENERATOR_PWD)); - - transaction.setPayload(inputData); - transaction.setExecutionRPC("POST"); - transaction.setuId(prop.getProperty(FlowControllerConstants.SEQ_GENERATOR_UID)); - transaction.setPswd(pass); - transaction.setExecutionEndPoint(resourceUri); - - return inputData; - } - - private DependencyInfo getDependencyInfo(SvcLogicContext ctx) throws Exception { - - String fn = "FlowExecutorNode.getDependencyInfo"; - DependencyInfo dependencyInfo = new DependencyInfo(); - FlowControlDBService dbservice = FlowControlDBService.initialise(); - String dependencyData = dbservice.getDependencyInfo(ctx); - log.info(fn + "dependencyDataInput:" + dependencyData); - - if (dependencyData != null) { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); - mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); - //JsonNode dependencyInfoData = mapper.readTree(dependencyData).get("dependencyInfo"); - JsonNode vnfcData = mapper.readTree(dependencyData).get("vnfcs"); - List vnfclist = Arrays.asList(mapper.readValue(vnfcData.toString(), Vnfcs[].class)); - dependencyInfo.getVnfcs().addAll(vnfclist); - - log.info("Dependency Output:"+ dependencyInfo.toString()); - } - return dependencyInfo; - } - - private Capabilities getCapabilitesData(SvcLogicContext ctx) throws Exception { - - String fn = "FlowExecutorNode.getCapabilitesData"; - Capabilities capabilities = new Capabilities(); - FlowControlDBService dbservice = FlowControlDBService.initialise(); - String capabilitiesData = dbservice.getCapabilitiesData(ctx); - log.info(fn + "capabilitiesDataInput:" + capabilitiesData); - - if (capabilitiesData != null) { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); - mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); - JsonNode capabilitiesNode = mapper.readValue(capabilitiesData,JsonNode.class); - log.info("capabilitiesNode:" + capabilitiesNode.toString()); - - JsonNode vnfs = capabilitiesNode.findValue(FlowControllerConstants.VNF); - List vnfsList = new ArrayList<>(); - if (vnfs != null) { - for (int i = 0; i < vnfs.size(); i++) { - - String vnf = vnfs.get(i).asText(); - vnfsList.add(vnf); - } - } - JsonNode vfModules = capabilitiesNode.findValue(FlowControllerConstants.VF_MODULE); - List vfModulesList = new ArrayList<>(); - if (vfModules != null) { - for (int i = 0; i < vfModules.size(); i++) { - - String vfModule = vfModules.get(i).asText(); - vfModulesList.add(vfModule); - } - } - - JsonNode vnfcs = capabilitiesNode.findValue(FlowControllerConstants.VNFC); - List vnfcsList = new ArrayList<>(); - if (vnfcs != null) { - for (int i = 0; i < vnfcs.size(); i++) { - - String vnfc1 = vnfcs.get(i).asText(); - vnfcsList.add(vnfc1); - } - } - - JsonNode vms = capabilitiesNode.findValue(FlowControllerConstants.VM); - - List vmList = new ArrayList<>(); - if (vms != null) { - for (int i = 0; i < vms.size(); i++) { - - String vm1 = vms.get(i).asText(); - vmList.add(vm1); - } - } - - capabilities.getVnfc().addAll(vnfcsList); - capabilities.getVnf().addAll(vnfsList); - capabilities.getVfModule().addAll(vfModulesList); - capabilities.getVm().addAll(vmList); - - log.info("Capabilities Output:"+ capabilities.toString()); - } - return capabilities; - } - - private InventoryInfo getInventoryInfo(SvcLogicContext ctx, String vnfId) throws Exception{ - String fn = "FlowExecutorNode.getInventoryInfo"; - - VnfInfo vnfInfo = new VnfInfo(); - vnfInfo.setVnfId(vnfId); - vnfInfo.setVnfName(ctx.getAttribute("tmp.vnfInfo.vnf.vnf-name")); - vnfInfo.setVnfType(ctx.getAttribute("tmp.vnfInfo.vnf.vnf-type")); - - String vmcount = ctx.getAttribute("tmp.vnfInfo.vm-count"); - if(StringUtils.isNotBlank(vmcount)){ - int vmCount = Integer.parseInt(vmcount); - log.info(fn +"vmcount:"+ vmCount); - - Vm vm = new Vm(); - Vnfcslist vnfc = new Vnfcslist(); - for (int i = 0; i < vmCount; i++) { + dbService.populateModuleAndRPC(transaction, localContext.getAttribute(VNF_TYPE)); + ObjectMapper mapper = new ObjectMapper(); + log.debug("Individual Transaction Details :" + transaction.toString()); - vm.setVserverId(ctx.getAttribute("tmp.vnfInfo.vm[" + i + "].vserver-id")); - String vnfccount = ctx.getAttribute("tmp.vnfInfo.vm[" + i + "].vnfc-count"); - int vnfcCount = Integer.parseInt(vnfccount); + if ((localContext.getAttribute(SEQUENCE_TYPE) == null) || (localContext.getAttribute(SEQUENCE_TYPE) != null + && !localContext.getAttribute(SEQUENCE_TYPE).equalsIgnoreCase(DESINGTIME))) { - if (vnfcCount > 0) { - vnfc.setVnfcName(ctx.getAttribute("tmp.vnfInfo.vm[" + i + "].vnfc-name")); - vnfc.setVnfcType(ctx.getAttribute("tmp.vnfInfo.vm[" + i + "].vnfc-type")); - vm.setVnfc(vnfc); - } - vnfInfo.getVm().add(vm); - } + localContext.setAttribute("artifact-content", mapper.writeValueAsString(transaction)); + dbService.loadSequenceIntoDB(localContext); } - InventoryInfo inventoryInfo = new InventoryInfo(); - inventoryInfo.setVnfInfo(vnfInfo); - log.info(fn + "Inventory Output:" +inventoryInfo.toString()); - - return inventoryInfo; + // get a field in transction class as transactionhandle interface and register + // the Handler here for each transactions } - private static Properties loadProperties() throws Exception { - Properties props = new Properties(); - String propDir = System.getenv(SDNC_CONFIG_DIR_VAR); - if (propDir == null) - throw new Exception("Cannot find Property file -" + SDNC_CONFIG_DIR_VAR); - String propFile = propDir + FlowControllerConstants.APPC_FLOW_CONTROLLER; - try (InputStream propStream = new FileInputStream(propFile)) - { - props.load(propStream); - } - catch (Exception e) - { - throw new Exception("Could not load properties file " + propFile, e); - } - return props; - } }