diff options
Diffstat (limited to 'appc-config/appc-flow-controller/provider/src/main')
6 files changed, 518 insertions, 230 deletions
diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/data/ActionIdentifier.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/data/ActionIdentifier.java index abce46862..9fc1527eb 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/data/ActionIdentifier.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/data/ActionIdentifier.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -23,12 +23,14 @@ package org.onap.appc.flow.controller.data; import com.fasterxml.jackson.annotation.JsonProperty; public class ActionIdentifier { - + @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((vnfId == null) ? 0 : vnfId.hashCode()); + result = prime * result + ((vnfcName == null) ? 0 : vnfcName.hashCode()); + result = prime * result + ((vserverId == null) ? 0 : vserverId.hashCode()); return result; } @@ -46,11 +48,41 @@ public class ActionIdentifier { return false; } else if (!vnfId.equals(other.vnfId)) return false; + if (vnfcName == null) { + if (other.vnfcName != null) + return false; + } else if (!vnfcName.equals(other.vnfcName)) + return false; + if (vserverId == null) { + if (other.vserverId != null) + return false; + } else if (!vserverId.equals(other.vserverId)) + return false; return true; } @JsonProperty("vnf-id") private String vnfId ; + @JsonProperty("vserver-id") + private String vserverId; + @JsonProperty("vnfc-name") + private String vnfcName; + + public String getVserverId() { + return vserverId; + } + + public void setVserverId(String vserverId) { + this.vserverId = vserverId; + } + + public String getVnfcName() { + return vnfcName; + } + + public void setVnfcName(String vnfcName) { + this.vnfcName = vnfcName; + } public String getVnfId() { return vnfId; @@ -62,9 +94,7 @@ public class ActionIdentifier { @Override public String toString() { - return "ActionIdentifier [vnfId=" + vnfId + "]"; + return "ActionIdentifier [vnfId=" + vnfId + ", vserverId=" + vserverId + ", vnfcName=" + vnfcName + "]"; } - - } diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/dbervices/FlowControlDBService.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/dbervices/FlowControlDBService.java index 41251c5cf..9da9bcde9 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/dbervices/FlowControlDBService.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/dbervices/FlowControlDBService.java @@ -22,6 +22,7 @@ package org.onap.appc.flow.controller.dbervices; import java.util.Map; +import org.apache.commons.lang.StringUtils; import org.onap.appc.flow.controller.data.Transaction; import org.onap.appc.flow.controller.utils.EscapeUtils; import org.onap.appc.flow.controller.utils.FlowControllerConstants; @@ -39,183 +40,240 @@ public class FlowControlDBService { private static final EELFLogger log = EELFManager.getInstance().getLogger(FlowControlDBService.class); private SvcLogicResource serviceLogic; private static FlowControlDBService dgGeneralDBService = null; + public static FlowControlDBService initialise() { if (dgGeneralDBService == null) { dgGeneralDBService = new FlowControlDBService(); } return dgGeneralDBService; } + private FlowControlDBService() { if (serviceLogic == null) { serviceLogic = new SqlResource(); } } - public void getFlowReferenceData(SvcLogicContext ctx, Map<String, String> inParams, SvcLogicContext localContext) throws SvcLogicException { - + public void getFlowReferenceData(SvcLogicContext ctx, Map<String, String> inParams, SvcLogicContext localContext) + throws SvcLogicException { + String fn = "DBService.getflowModelInfo"; - // log.debug("Testing " + ctx.getAttribute(FlowExecutorConstants.VNF_TYPE) + " and " + ctx.getAttribute(FlowExecutorConstants.ACTION_LEVEL)); - String whereClause = " where ACTION = $" +FlowControllerConstants.REQUEST_ACTION ; - - if(ctx.getAttribute(FlowControllerConstants.VNF_TYPE) !=null) + String whereClause = " where ACTION = $" + FlowControllerConstants.REQUEST_ACTION; + + if (StringUtils.isNotBlank(ctx.getAttribute(FlowControllerConstants.VNF_TYPE))) whereClause = whereClause.concat(" and VNF_TYPE = $" + FlowControllerConstants.VNF_TYPE); - - if(ctx.getAttribute(FlowControllerConstants.ACTION_LEVEL) !=null) + if (StringUtils.isNotBlank(ctx.getAttribute(FlowControllerConstants.ACTION_LEVEL))) whereClause = whereClause.concat(" and ACTION_LEVEL = $" + FlowControllerConstants.ACTION_LEVEL); - + QueryStatus status = null; - if (serviceLogic != null && localContext != null) { - String key = "select SEQUENCE_TYPE, CATEGORY, GENERATION_NODE, EXECUTION_NODE from " + FlowControllerConstants.DB_MULTISTEP_FLOW_REFERENCE + - whereClause ; + if (serviceLogic != null& localContext != null) { + String key = "select SEQUENCE_TYPE, CATEGORY, GENERATION_NODE, EXECUTION_NODE from " + + FlowControllerConstants.DB_MULTISTEP_FLOW_REFERENCE + whereClause; log.debug(fn + "Query String : " + key); status = serviceLogic.query("SQL", false, null, key, null, null, localContext); - if(status.toString().equals("FAILURE")) + if (status.toString().equals("FAILURE")) throw new SvcLogicException("Error - while getting FlowReferenceData "); - } + } } + public String getEndPointByAction(String action) { - // TODO Auto-generated method stub return null; } + public String getDesignTimeFlowModel(SvcLogicContext localContext) throws SvcLogicException { - String fn = "DBService.getDesignTimeFlowModel "; + String fn = "DBService.getDesignTimeFlowModel "; QueryStatus status = null; - if (serviceLogic != null && localContext != null) { - String queryString = "select max(internal_version) as maxInternalVersion, artifact_name as artifactName from " + FlowControllerConstants.DB_SDC_ARTIFACTS - + " where artifact_name in (select artifact_name from " + FlowControllerConstants.DB_SDC_REFERENCE + - " where vnf_type= $" + FlowControllerConstants.VNF_TYPE + - " and vnfc_type = $" + FlowControllerConstants.VNFC_TYPE + - " and action = $" + FlowControllerConstants.REQUEST_ACTION + - " and file_category = $" + FlowControllerConstants.CATEGORY + " )" ; - - + if (serviceLogic != null& localContext != null) { + String queryString = "select max(internal_version) as maxInternalVersion, artifact_name as artifactName from " + + FlowControllerConstants.DB_SDC_ARTIFACTS + " where artifact_name in (select artifact_name from " + + FlowControllerConstants.DB_SDC_REFERENCE + " where vnf_type= $" + FlowControllerConstants.VNF_TYPE + + " and vnfc_type = $" + FlowControllerConstants.VNFC_TYPE + " and action = $" + + FlowControllerConstants.REQUEST_ACTION + " and file_category = $" + + FlowControllerConstants.CATEGORY + " )"; + log.debug(fn + "Query String : " + queryString); - status = serviceLogic.query("SQL", false, null, queryString, null, null, localContext); + status = serviceLogic.query("SQL", false, null, queryString, null, null, localContext); - if(status.toString().equals("FAILURE")) + if (status.toString().equals("FAILURE")) throw new SvcLogicException("Error - while getting FlowReferenceData "); - - String queryString1 = "select artifact_content from " + FlowControllerConstants.DB_SDC_ARTIFACTS + - " where artifact_name = $artifactName and internal_version = $maxInternalVersion "; - + + String queryString1 = "select artifact_content from " + FlowControllerConstants.DB_SDC_ARTIFACTS + + " where artifact_name = $artifactName and internal_version = $maxInternalVersion "; + log.debug(fn + "Query String : " + queryString1); - status = serviceLogic.query("SQL", false, null, queryString1, null, null, localContext); - if(status.toString().equals("FAILURE")) + status = serviceLogic.query("SQL", false, null, queryString1, null, null, localContext); + if (status.toString().equals("FAILURE")) throw new SvcLogicException("Error - while getting FlowReferenceData "); } return localContext != null ? localContext.getAttribute("artifact-content") : null; } + public QueryStatus loadSequenceIntoDB(SvcLogicContext localContext) throws SvcLogicException { - + QueryStatus status = null; - + if (localContext != null) { String fn = "DBService.saveArtifacts"; - + localContext.setAttribute(FlowControllerConstants.ARTIFACT_CONTENT_ESCAPED, - EscapeUtils.escapeSql(localContext.getAttribute(FlowControllerConstants.ARTIFACT_CONTENT))); - log.debug("ESCAPED sequence for DB : " + localContext.getAttribute(FlowControllerConstants.ARTIFACT_CONTENT_ESCAPED)); - + EscapeUtils.escapeSql(localContext.getAttribute(FlowControllerConstants.ARTIFACT_CONTENT))); + log.debug("ESCAPED sequence for DB : " + + localContext.getAttribute(FlowControllerConstants.ARTIFACT_CONTENT_ESCAPED)); + for (Object key : localContext.getAttributeKeySet()) { String parmName = (String) key; String parmValue = localContext.getAttribute(parmName); - log.debug(" loadSequenceIntoDB " + parmName + "=" + parmValue); - + log.debug(" loadSequenceIntoDB " + parmName + "=" + parmValue); } - - String queryString = "INSERT INTO " + FlowControllerConstants.DB_REQUEST_ARTIFACTS + - " set request_id = $" + FlowControllerConstants.REQUEST_ID + - " , action = $" + FlowControllerConstants.REQUEST_ACTION + - " , action_level = $" + FlowControllerConstants.ACTION_LEVEL + - " , vnf_type = $" + FlowControllerConstants.VNF_TYPE + - " , category = $" + FlowControllerConstants.CATEGORY + - " , artifact_content = $" + FlowControllerConstants.ARTIFACT_CONTENT_ESCAPED + - " , updated_date = sysdate() "; - + + String queryString = "INSERT INTO " + FlowControllerConstants.DB_REQUEST_ARTIFACTS + " set request_id = $" + + FlowControllerConstants.REQUEST_ID + " , action = $" + FlowControllerConstants.REQUEST_ACTION + + " , action_level = $" + FlowControllerConstants.ACTION_LEVEL + " , vnf_type = $" + + FlowControllerConstants.VNF_TYPE + " , category = $" + FlowControllerConstants.CATEGORY + + " , artifact_content = $" + FlowControllerConstants.ARTIFACT_CONTENT_ESCAPED + + " , updated_date = sysdate() "; + log.debug(fn + "Query String : " + queryString); status = serviceLogic.save("SQL", false, false, queryString, null, null, localContext); - if(status.toString().equals("FAILURE")) - throw new SvcLogicException("Error While processing storing Artifact: " +localContext.getAttribute(FlowControllerConstants.ARTIFACT_NAME)); + if (status.toString().equals("FAILURE")) + throw new SvcLogicException("Error While processing storing Artifact: " + + localContext.getAttribute(FlowControllerConstants.ARTIFACT_NAME)); } return status; } - public void populateModuleAndRPC(Transaction transaction, String vnf_type) throws SvcLogicException { + + public void populateModuleAndRPC(Transaction transaction, String vnf_type) throws Exception { String fn = "FlowControlDBService.populateModuleAndRPC "; QueryStatus status = null; - SvcLogicContext context = new SvcLogicContext(); - - String key = "select execution_type, execution_module, execution_rpc from " + FlowControllerConstants.DB_PROCESS_FLOW_REFERENCE + - " where action = '" + transaction.getAction() + "'" + - " and action_level = '" + transaction.getActionLevel() + "'" + - " and protocol in ( select protocol from " + FlowControllerConstants.DB_PROTOCOL_REFERENCE + - " where action = '" + transaction.getAction() + "'" ; - if(vnf_type !=null && !vnf_type.isEmpty()) - key = key + " and vnf_type ='" + vnf_type + "' )" ; - else - key = key + " ) " ; + SvcLogicContext context = new SvcLogicContext(); + String protocolType = null; + + protocolType = getProtocolType(transaction, vnf_type, fn, context, protocolType); + + String key = "select execution_type, execution_module, execution_rpc from " + + FlowControllerConstants.DB_PROCESS_FLOW_REFERENCE + " where action = '" + transaction.getAction() + + "'" + " and action_level = '" + transaction.getActionLevel() + "'" + " and protocol = '" + + protocolType + "'"; + log.debug(fn + "Query String : " + key); status = serviceLogic.query("SQL", false, null, key, null, null, context); - if(status.toString().equals("FAILURE")) + if (status.toString().equals("FAILURE")) throw new SvcLogicException("Error - while getting FlowReferenceData "); - + transaction.setExecutionModule(context.getAttribute(FlowControllerConstants.EXECUTTION_MODULE)); transaction.setExecutionRPC(context.getAttribute(FlowControllerConstants.EXECUTION_RPC)); transaction.setExecutionType(context.getAttribute(FlowControllerConstants.EXECUTION_TYPE)); - + + } + + private String getProtocolType(Transaction transaction, String vnf_type, String fn, SvcLogicContext context, + String protocolType) throws Exception { + QueryStatus status; + String protocolQuery; + int protocolCount; + protocolQuery = "select count(protocol) from " + FlowControllerConstants.DB_PROTOCOL_REFERENCE + + " where action = '" + transaction.getAction() + "'" + " and action_level = '" + + transaction.getActionLevel() + "'"; + + log.debug(fn + "Query String : " + protocolQuery); + status = serviceLogic.query("SQL", false, null, protocolQuery, null, null, context); + if (status.toString().equals("FAILURE")) + throw new SvcLogicException("Error - while getting FlowReferenceData "); + + log.debug(" Protocol Count " + context.getAttribute("count(protocol)")); + protocolCount = Integer.parseInt(context.getAttribute("count(protocol)")); + + if (protocolCount == 1) { + protocolQuery = "select protocol from " + FlowControllerConstants.DB_PROTOCOL_REFERENCE + + " where action = '" + transaction.getAction() + "'" + " and action_level = '" + + transaction.getActionLevel() + "'"; + + log.debug(fn + "Query String : " + protocolQuery); + status = serviceLogic.query("SQL", false, null, protocolQuery, null, null, context); + if (status.toString().equals("FAILURE")) + throw new SvcLogicException("Error - while getting FlowReferenceData "); + protocolType = context.getAttribute("protocol"); + } + else { + protocolQuery = "select count(protocol) from " + FlowControllerConstants.DB_PROTOCOL_REFERENCE + + " where action = '" + transaction.getAction() + "'" + " and action_level = '" + + transaction.getActionLevel() + "'" + " and vnf_type = '" + vnf_type + "'"; + + log.debug(fn + "Query String : " + protocolQuery); + status = serviceLogic.query("SQL", false, null, protocolQuery, null, null, context); + if (status.toString().equals("FAILURE")) + throw new SvcLogicException("Error - while getting FlowReferenceData "); + + log.debug(" Protocol Count " + context.getAttribute("count(protocol)")); + protocolCount = Integer.parseInt(context.getAttribute("count(protocol)")); + if(protocolCount > 1){ + throw new Exception("Got more than 2 values.."); + }else if(protocolCount == 1){ + protocolQuery = "select protocol from " + FlowControllerConstants.DB_PROTOCOL_REFERENCE + + " where action = '" + transaction.getAction() + "'" + " and action_level = '" + + transaction.getActionLevel() + "'"+ " and vnf_type = '" + vnf_type + "'"; + log.debug(fn + "Query String : " + protocolQuery); + status = serviceLogic.query("SQL", false, null, protocolQuery, null, null, context); + if (status.toString().equals("FAILURE")) + throw new SvcLogicException("Error - while getting FlowReferenceData "); + protocolType = context.getAttribute("protocol"); + } + } + return protocolType; } - + public String getDependencyInfo(SvcLogicContext localContext) throws SvcLogicException { - String fn = "DBService.getDependencyInfo "; + String fn = "DBService.getDependencyInfo "; QueryStatus status = null; - if (serviceLogic != null && localContext != null) { - String queryString = "select max(internal_version) as maxInternalVersion, artifact_name as artifactName from " + FlowControllerConstants.DB_SDC_ARTIFACTS - + " where artifact_name in (select artifact_name from " + FlowControllerConstants.DB_SDC_REFERENCE + - " where vnf_type= $" + FlowControllerConstants.VNF_TYPE + - " and file_category = '" + FlowControllerConstants.DEPENDENCYMODEL +"' )" ; - + if (serviceLogic != null& localContext != null) { + String queryString = "select max(internal_version) as maxInternalVersion, artifact_name as artifactName from " + + FlowControllerConstants.DB_SDC_ARTIFACTS + " where artifact_name in (select artifact_name from " + + FlowControllerConstants.DB_SDC_REFERENCE + " where vnf_type= $" + FlowControllerConstants.VNF_TYPE + + " and file_category = '" + FlowControllerConstants.DEPENDENCYMODEL + "' )"; + log.debug(fn + "Query String : " + queryString); - status = serviceLogic.query("SQL", false, null, queryString, null, null, localContext); + status = serviceLogic.query("SQL", false, null, queryString, null, null, localContext); - if(status.toString().equals("FAILURE")) + if (status.toString().equals("FAILURE")) throw new SvcLogicException("Error - while getting dependencydata "); - - String queryString1 = "select artifact_content from " + FlowControllerConstants.DB_SDC_ARTIFACTS + - " where artifact_name = $artifactName and internal_version = $maxInternalVersion "; - + + String queryString1 = "select artifact_content from " + FlowControllerConstants.DB_SDC_ARTIFACTS + + " where artifact_name = $artifactName and internal_version = $maxInternalVersion "; + log.debug(fn + "Query String : " + queryString1); - status = serviceLogic.query("SQL", false, null, queryString1, null, null, localContext); - if(status.toString().equals("FAILURE")) + status = serviceLogic.query("SQL", false, null, queryString1, null, null, localContext); + if (status.toString().equals("FAILURE")) throw new SvcLogicException("Error - while getting dependencyData "); } return localContext != null ? localContext.getAttribute("artifact-content") : null; } - - public String getCapabilitiesData(SvcLogicContext localContext) throws SvcLogicException { - String fn = "DBService.getCapabilitiesData "; - QueryStatus status = null; - if (serviceLogic != null && localContext != null) { - String queryString = "select max(internal_version) as maxInternalVersion, artifact_name as artifactName from " + FlowControllerConstants.DB_SDC_ARTIFACTS - + " where artifact_name in (select artifact_name from " + FlowControllerConstants.DB_SDC_REFERENCE + - " where vnf_type= $" + FlowControllerConstants.VNF_TYPE + - " and file_category = '" + FlowControllerConstants.CAPABILITY +"' )" ; - - log.info(fn + "Query String : " + queryString); - status = serviceLogic.query("SQL", false, null, queryString, null, null, localContext); - - if(status.toString().equals("FAILURE")) - throw new SvcLogicException("Error - while getting capabilitiesData "); - - String queryString1 = "select artifact_content from " + FlowControllerConstants.DB_SDC_ARTIFACTS + - " where artifact_name = $artifactName and internal_version = $maxInternalVersion "; - - log.debug(fn + "Query String : " + queryString1); - status = serviceLogic.query("SQL", false, null, queryString1, null, null, localContext); - if(status.toString().equals("FAILURE")) - throw new SvcLogicException("Error - while getting capabilitiesData "); - } - return localContext != null ? localContext.getAttribute("artifact-content") : null; + + public String getCapabilitiesData(SvcLogicContext localContext) throws SvcLogicException { + String fn = "DBService.getCapabilitiesData "; + QueryStatus status = null; + if (serviceLogic != null& localContext != null) { + String queryString = "select max(internal_version) as maxInternalVersion, artifact_name as artifactName from " + + FlowControllerConstants.DB_SDC_ARTIFACTS + " where artifact_name in (select artifact_name from " + + FlowControllerConstants.DB_SDC_REFERENCE + " where vnf_type= $" + FlowControllerConstants.VNF_TYPE + + " and file_category = '" + FlowControllerConstants.CAPABILITY + "' )"; + + log.info(fn + "Query String : " + queryString); + status = serviceLogic.query("SQL", false, null, queryString, null, null, localContext); + + if (status.toString().equals("FAILURE")) + throw new SvcLogicException("Error - while getting capabilitiesData "); + + String queryString1 = "select artifact_content from " + FlowControllerConstants.DB_SDC_ARTIFACTS + + " where artifact_name = $artifactName and internal_version = $maxInternalVersion "; + + log.debug(fn + "Query String : " + queryString1); + status = serviceLogic.query("SQL", false, null, queryString1, null, null, localContext); + if (status.toString().equals("FAILURE")) + throw new SvcLogicException("Error - while getting capabilitiesData "); } + return localContext != null ? localContext.getAttribute("artifact-content") : null; + } } diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/executorImpl/RestExecutor.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/executorImpl/RestExecutor.java index 180a612d6..0f901e0fe 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/executorImpl/RestExecutor.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/executorImpl/RestExecutor.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -32,6 +32,7 @@ import javax.net.ssl.SSLContext; import javax.ws.rs.HttpMethod; import javax.ws.rs.core.MediaType; +import org.apache.commons.lang3.StringUtils; import org.onap.appc.flow.controller.data.Response; import org.onap.appc.flow.controller.data.Transaction; import org.onap.appc.flow.controller.interfaces.FlowExecutorInterface; @@ -51,7 +52,7 @@ public class RestExecutor implements FlowExecutorInterface { private static final EELFLogger log = EELFManager.getInstance().getLogger(RestExecutor.class); private static final String SDNC_CONFIG_DIR_VAR = "SDNC_CONFIG_DIR"; Properties props = new Properties(); - public RestExecutor() throws Exception { + public RestExecutor() throws Exception { String propDir = System.getenv(SDNC_CONFIG_DIR_VAR); if (propDir == null) throw new Exception(" Cannot find Property file -" + SDNC_CONFIG_DIR_VAR); @@ -70,10 +71,10 @@ public class RestExecutor implements FlowExecutorInterface { catch (Exception e){ log.warn("Could not close FileInputStream", e); } - } + } } @Override - public HashMap<String, String> execute(Transaction transaction, SvcLogicContext ctx) throws Exception{ + public HashMap<String, String> execute(Transaction transaction, SvcLogicContext ctx) throws Exception{ log.info("Configuring Rest Operation....." + transaction.toString()); Response response = new Response(); HashMap<String, String> outputMessage = new HashMap<String, String>(); @@ -82,8 +83,8 @@ public class RestExecutor implements FlowExecutorInterface { ClientResponse clientResponse = null; String responseDataType=MediaType.APPLICATION_JSON; String requestDataType=MediaType.APPLICATION_JSON; - - + + try{ DefaultClientConfig defaultClientConfig = new DefaultClientConfig(); System.setProperty("jsse.enableSNIExtension", "false"); @@ -114,15 +115,21 @@ public class RestExecutor implements FlowExecutorInterface { response.setResponseCode(String.valueOf(clientResponse.getStatus())); ArrayList<Response> responses = new ArrayList<Response>(); responses.add(response); - transaction.setResponses(responses); + transaction.setResponses(responses); outputMessage.put("restResponse", clientResponse.getEntity(String.class)); } else{ + + String errorMsg = clientResponse.getEntity(String.class); + if (StringUtils.isNotBlank(errorMsg)) { + log.debug("Error Message from Client Response" + errorMsg); + } + throw new Exception("Can not determine the state of : " + transaction.getActionLevel() + " HTTP error code : " + clientResponse.getStatus()); - + } - + log.info("Completed Rest Operation....."); }catch (Exception e) { @@ -141,7 +148,7 @@ public class RestExecutor implements FlowExecutorInterface { return outputMessage; } - + private HostnameVerifier getHostnameVerifier() { return new HostnameVerifier() { @Override 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 010729f29..e0ef5fd7e 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 @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -30,6 +30,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; +import org.json.JSONObject; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -53,6 +54,7 @@ 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; @@ -76,7 +78,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ public void processFlow(Map<String, String> 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(FlowControllerConstants.INPUT_PARAM_RESPONSE_PRIFIX); try { responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : ""; @@ -85,7 +87,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ 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.ACTION_LEVEL, ctx.getAttribute(FlowControllerConstants.ACTION_LEVEL)); localContext.setAttribute(FlowControllerConstants.RESPONSE_PREFIX, responsePrefix); ctx.setAttribute(FlowControllerConstants.RESPONSE_PREFIX, responsePrefix); dbservice.getFlowReferenceData(ctx, inParams, localContext); @@ -96,10 +98,10 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ log.debug("processFlow " + parmName + "=" + parmValue); } - processFlowSequence(inParams, ctx, localContext); + 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)); - + } catch (Exception e) { ctx.setAttribute(responsePrefix + FlowControllerConstants.OUTPUT_PARAM_STATUS, FlowControllerConstants.OUTPUT_STATUS_FAILURE); ctx.setAttribute(responsePrefix + FlowControllerConstants.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage()); @@ -108,10 +110,10 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ } } - private void processFlowSequence( Map<String, String> inParams, SvcLogicContext ctx, SvcLogicContext localContext) throws Exception + private void processFlowSequence( Map<String, String> inParams, SvcLogicContext ctx, SvcLogicContext localContext) throws Exception { String fn = "FlowExecutorNode.processflowSequence"; - log.debug(fn + "Received model for flow : " + localContext.toString()); + log.debug(fn + "Received model for flow : " + localContext.toString()); FlowControlDBService dbservice = FlowControlDBService.initialise(); String flowSequnce =null; for (Object key : localContext.getAttributeKeySet()) { @@ -125,13 +127,13 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ 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){ + 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)); - } + throw new Exception("Can not find Custom defined Flow Generator for " + localContext.getAttribute(FlowControllerConstants.GENERATION_NODE)); + } else if(((String) localContext.getAttribute(FlowControllerConstants.SEQUENCE_TYPE)).equalsIgnoreCase(FlowControllerConstants.DESINGTIME)){ localContext.setAttribute(FlowControllerConstants.VNFC_TYPE, ctx.getAttribute(FlowControllerConstants.VNFC_TYPE)); flowSequnce = dbservice.getDesignTimeFlowModel(localContext); @@ -139,15 +141,19 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ throw new Exception("Flow Sequence is not found User Desinged VNF " + ctx.getAttribute(FlowControllerConstants.VNF_TYPE)); } else if(((String) localContext.getAttribute(FlowControllerConstants.SEQUENCE_TYPE)).equalsIgnoreCase(FlowControllerConstants.RUNTIME)){ - + Transaction transaction = new Transaction(); String input = collectInputParams(ctx,transaction); - log.info("collectInputParamsData" + input ); - - RestExecutor restExe = new RestExecutor(); + log.info("CollectInputParamsData-Input: " + input ); + + RestExecutor restExe = new RestExecutor(); HashMap<String,String>flowSeq= restExe.execute(transaction, localContext); - flowSequnce=flowSeq.get("restResponse"); - + + JSONObject sequence=new JSONObject(flowSeq.get("restResponse")); + if(sequence.has("output")) + flowSequnce = sequence.getJSONObject("output").toString(); + log.info("MultistepSequenceGenerator-Output: "+flowSequnce); + if(flowSequnce == null) throw new Exception("Failed to get the Flow Sequece runtime for VNF type" + ctx.getAttribute(FlowControllerConstants.VNF_TYPE)); @@ -156,7 +162,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ //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)); + throw new Exception("Flow Sequence not found for " + ctx.getAttribute(FlowControllerConstants.VNF_TYPE)); } else { @@ -167,7 +173,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ else{ FlowGenerator flowGenerator = new FlowGenerator(); Transactions trans = flowGenerator.createSingleStepModel(inParams,ctx); - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper = new ObjectMapper(); flowSequnce = mapper.writeValueAsString(trans); log.debug("Single step Flow Sequence : " + flowSequnce); @@ -175,7 +181,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ log.debug("Received Flow Sequence : " + flowSequnce); HashMap<Integer, Transaction> transactionMap = createTransactionMap(flowSequnce, localContext); - exeuteAllTransaction(transactionMap, ctx); + exeuteAllTransaction(transactionMap, ctx); log.info("Executed all the transacstion successfully"); } @@ -185,14 +191,14 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ String fn = "FlowExecutorNode.exeuteAllTransaction "; int retry = 0; FlowExecutorInterface flowExecutor = null; - 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()); continue; - } + } if(transaction.getExecutionType() != null){ switch (transaction.getExecutionType()){ case FlowControllerConstants.GRAPH : @@ -219,9 +225,9 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ 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--; + key--; retry++; log.debug(fn + "key =" + key + "retry =" + retry); @@ -236,7 +242,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ } if(responseAction.getJump() != null && Integer.parseInt(responseAction.getJump()) > 0 ){ key = Integer.parseInt(responseAction.getJump()); - key --; + key --; } log.debug(fn + "key =" + key + "retry =" + retry); @@ -252,9 +258,9 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ } - private ResponseAction handleResponse(Transaction transaction) { + private ResponseAction handleResponse(Transaction transaction) { log.info("Handling Response for transaction Id " + transaction.getTransactionId()); - DefaultResponseHandler defaultHandler = new DefaultResponseHandler(); + DefaultResponseHandler defaultHandler = new DefaultResponseHandler(); return defaultHandler.handlerResponse(transaction); } @@ -263,7 +269,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ log.debug("Starting Preprocessing Logic "); boolean runthisStep = false; try{ - if(transaction.getPrecheck() != null && transaction.getPrecheck().getPrecheckOptions() != null + if(transaction.getPrecheck() != null && transaction.getPrecheck().getPrecheckOptions() != null && !transaction.getPrecheck().getPrecheckOptions().isEmpty()){ List<PrecheckOption> precheckOptions = transaction.getPrecheck().getPrecheckOptions(); for(PrecheckOption precheck : precheckOptions){ @@ -271,15 +277,15 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ ObjectMapper mapper = new ObjectMapper(); log.info("Mapper= " + mapper.writeValueAsString(trans)); HashMap<Object, Object> trmap = mapper.readValue(mapper.writeValueAsString(trans), HashMap.class); - if(trmap.get(precheck.getParamName()) != null && + if(trmap.get(precheck.getParamName()) != null && ((String) trmap.get(precheck.getParamName())).equalsIgnoreCase(precheck.getParamValue())) runthisStep = true; else runthisStep = false; - if(transaction.getPrecheck().getPrecheckOperator() != null && + if(transaction.getPrecheck().getPrecheckOperator() != null && transaction.getPrecheck().getPrecheckOperator().equalsIgnoreCase("any") && runthisStep) - break; + break; } } @@ -299,19 +305,19 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ return runthisStep ; } - private HashMap<Integer, Transaction> createTransactionMap(String flowSequnce, SvcLogicContext localContext) throws SvcLogicException, JsonParseException, JsonMappingException, IOException { - ObjectMapper mapper = new ObjectMapper(); + private HashMap<Integer, Transaction> createTransactionMap(String flowSequnce, SvcLogicContext localContext) throws Exception { + ObjectMapper mapper = new ObjectMapper(); Transactions transactions = mapper.readValue(flowSequnce,Transactions.class); - HashMap<Integer, Transaction> transMap = new HashMap<Integer, Transaction>(); - for(Transaction transaction : transactions.getTransactions()){ + HashMap<Integer, Transaction> transMap = new HashMap<Integer, Transaction>(); + for(Transaction transaction : transactions.getTransactions()){ compileFlowDependencies(transaction, localContext); - //loadTransactionIntoStatus(transactions, ctx); //parse the Transactions Object and create records in process_flow_status table - transMap.put(transaction.getTransactionId(), transaction); - } + //loadTransactionIntoStatus(transactions, ctx); //parse the Transactions Object and create records in process_flow_status table + transMap.put(transaction.getTransactionId(), transaction); + } return transMap; } - private void compileFlowDependencies(Transaction transaction, SvcLogicContext localContext) throws SvcLogicException, JsonParseException, JsonMappingException, IOException { + private void compileFlowDependencies(Transaction transaction, SvcLogicContext localContext) throws Exception { String fn = "FlowExecutorNode.compileFlowDependencies"; FlowControlDBService dbservice = FlowControlDBService.initialise(); @@ -319,59 +325,68 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ 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) != 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 { + + 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"); } - ActionIdentifier actionIdentifier = new ActionIdentifier(); - actionIdentifier.setVnfId(vnfId); - actionIdentifier.setVserverId(ctx.getAttribute(FlowControllerConstants.VSERVER_ID)); - actionIdentifier.setVnfcName(ctx.getAttribute(FlowControllerConstants.VNFC_NAME)); - - RequestInfo requestInfo = new RequestInfo(); - requestInfo.setAction(ctx.getAttribute(FlowControllerConstants.ACTION)); - requestInfo.setActionLevel(ctx.getAttribute(FlowControllerConstants.ACTION_LEVEL)); - requestInfo.setPayload(ctx.getAttribute(FlowControllerConstants.PAYLOAD)); - requestInfo.setActionIdentifier(actionIdentifier); - - InventoryInfo inventoryInfo = getInventoryInfo(ctx,vnfId); - DependencyInfo dependencyInfo = getDependencyInfo(ctx); - Capabilities capabilites = getCapabilitesData(ctx); - - Input input = new Input(); - input.setRequestInfo(requestInfo); - input.setInventoryInfo(inventoryInfo); - input.setDependencyInfo(dependencyInfo); - input.setCapabilities(capabilites); - //input.setTunableParameters(null); - - - log.info(fn + "Input parameters:" + input.toString()); - - String inputData = null; 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); + mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true); inputData = mapper.writeValueAsString(input); - log.info("InputDataJson:"+inputData); + log.info("InputDataJson:" + inputData); } catch (Exception e) { e.printStackTrace(); @@ -380,18 +395,21 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ 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(prop.getProperty(FlowControllerConstants.SEQ_GENERATOR_PWD)); + 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(); @@ -402,18 +420,18 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ 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(dependencyInfoData.toString()).get("vnfcs"); + //JsonNode dependencyInfoData = mapper.readTree(dependencyData).get("dependencyInfo"); + JsonNode vnfcData = mapper.readTree(dependencyData.toString()).get("vnfcs"); List<Vnfcs> 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"; @@ -474,7 +492,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ capabilities.getVnf().addAll(vnfsList); capabilities.getVfModule().addAll(vfModulesList); capabilities.getVm().addAll(vmList); - + log.info("Capabilities Output:"+ capabilities.toString()); } @@ -482,19 +500,21 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ return capabilities; } - + private InventoryInfo getInventoryInfo(SvcLogicContext ctx, String vnfId) throws Exception{ - + String fn = "FlowExecutorNode.getInventoryInfo"; - String vmcount = ctx.getAttribute("tmp.vnfInfo.vm-count"); - int vmCount = Integer.parseInt(vmcount); - log.info(fn +"vmcount:"+ vmCount); 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(); @@ -502,7 +522,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ for (int i = 0; i < vmCount; i++) { - vm.setVserverId(ctx.getAttribute("tmp.vnfInfo.vm[" + i + "].vserverId")); + 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); @@ -514,14 +534,15 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ vnfInfo.getVm().add(vm); } } - + } InventoryInfo inventoryInfo = new InventoryInfo(); inventoryInfo.setVnfInfo(vnfInfo); - + log.info(fn + "Inventory Output:" +inventoryInfo.toString()); + return inventoryInfo; - + } - + private String getFlowSequence() throws IOException { String sequenceModel = IOUtils.toString(FlowControlNode.class.getClassLoader().getResourceAsStream("sequence.json"), Charset.defaultCharset()); @@ -529,14 +550,14 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ return null; } - + 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; - InputStream propStream = new FileInputStream(propFile); + InputStream propStream = new FileInputStream(propFile); try { props.load(propStream); @@ -559,4 +580,5 @@ private static Properties loadProperties() throws Exception { return props; } + } diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/EncryptionTool.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/EncryptionTool.java new file mode 100644 index 000000000..61b3cd51c --- /dev/null +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/EncryptionTool.java @@ -0,0 +1,170 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * 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.utils; + + +import java.security.Provider; +import java.security.Provider.Service; +import java.security.Security; + +import org.jasypt.contrib.org.apache.commons.codec_1_3.binary.Base64; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This class is used to encapsulate the encryption and decryption support in one place and to + * provide a utility to encrypt and decrypt data. + */ +public class EncryptionTool { + + /** + * The prefix we insert onto any data we encrypt so that we can tell if it is encrpyted later and + * therefore decrypt it + */ + public static final String ENCRYPTED_VALUE_PREFIX = "enc:"; + + /** + * The instance of the encryption utility object + */ + private static EncryptionTool instance = null; + + /** + * The logger for this class. + */ + private static final Logger LOG = LoggerFactory.getLogger(EncryptionTool.class); + + /** + * The secret passphrase (PBE) that we use to perform encryption and decryption. The algorithm we + * are using is a symmetrical cipher. + */ + private static char[] secret = {'C', '_', 'z', 'l', '!', 'K', '!', '4', '?', 'O', 'z', 'E', 'K', 'E', '>', 'U', 'R', + '/', '%', 'Y', '\\', 'f', 'b', '"', 'e', 'n', '{', '"', 'l', 'U', 'F', '+', 'E', '\'', 'R', 'T', 'p', '1', + 'V', '4', 'l', 'a', '9', 'w', 'v', '5', 'Z', '#', 'i', 'V', '"', 'd', 'l', '!', 'L', 'M', 'g', 'L', 'Q', + '{', 'v', 'v', 'K', 'V'}; + + + + /** + * Get an instance of the EncryptionTool + * + * @return The encryption tool to be used + */ + public static final synchronized EncryptionTool getInstance() { + if (instance == null) { + instance = new EncryptionTool(); + } + return instance; + } + + /** + * Create the EncryptionTool instance + */ + private EncryptionTool() { + + StringBuilder sb = new StringBuilder("Found the following security algorithms:"); + for (Provider p : Security.getProviders()) { + for (Service s : p.getServices()) { + String algo = s.getAlgorithm(); + sb.append(String.format("%n -Algorithm [ %s ] in provider [ %s ] and service [ %s ]", algo, p.getName(), + s.getClassName())); + } + } + if (LOG.isDebugEnabled()) { + LOG.debug(sb.toString()); + } + } + + /** + * Decrypt the provided encrypted text + * + * @param cipherText THe cipher text to be decrypted. If the ciphertext is not encrypted, then it is + * returned as is. + * @return the clear test of the (possibly) encrypted value. The original value if the string is not + * encrypted. + */ + public synchronized String decrypt(String cipherText) { + if (isEncrypted(cipherText)) { + String encValue = cipherText.substring(ENCRYPTED_VALUE_PREFIX.length()); + byte[] plainByte = Base64.decodeBase64(encValue.getBytes()); + byte[] decryptByte = xorWithSecret(plainByte); + return new String(decryptByte); + } else { + return cipherText; + } + + } + + /** + * Encrypt the provided clear text + * + * @param clearText The clear text to be encrypted + * @return the encrypted text. If the clear text is empty (null or zero length), then an empty + * string is returned. If the clear text is already encrypted, it is not encrypted again and + * is returned as is. Otherwise, the clear text is encrypted and returned. + */ + public synchronized String encrypt(String clearText) { + if (clearText != null) { + byte[] encByte = xorWithSecret(clearText.getBytes()); + String encryptedValue = new String(Base64.encodeBase64(encByte)); + return ENCRYPTED_VALUE_PREFIX + encryptedValue; + } else { + return null; + } + } + + /** + * Is a value encrypted? A value is considered to be encrypted if it begins with the + * {@linkplain #ENCRYPTED_VALUE_PREFIX encrypted value prefix}. + * + * @param value the value to check. + * @return true/false; + */ + private static boolean isEncrypted(final String value) { + return value != null && value.startsWith(ENCRYPTED_VALUE_PREFIX); + } + + /** + * XORs the input byte array with the secret key, padding 0x0 to the end of the secret key if the + * input is longer and returns a byte array the same size as input + * + * @param inp The byte array to be XORed with secret + * @return A byte array the same size as inp or null if input is null. + */ + private byte[] xorWithSecret(byte[] inp) { + if (inp == null) { + return new byte[0]; + } + + byte[] secretBytes = new String(secret).getBytes(); + int size = inp.length; + + byte[] out = new byte[size]; + for (int i = 0; i < size; i++) { + out[i] = (byte) ((inp[i]) ^ (secretBytes[i % secretBytes.length])); + } + return out; + } + +} diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/FlowControllerConstants.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/FlowControllerConstants.java index 1881e3e45..2b9ce03ce 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/FlowControllerConstants.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/FlowControllerConstants.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -21,7 +21,7 @@ package org.onap.appc.flow.controller.utils; public class FlowControllerConstants { - + public static String STRING_ENCODING = "utf-8"; public static String Y = "Y"; public static String N = "N"; @@ -29,14 +29,14 @@ public class FlowControllerConstants { public static String DATA_TYPE_JSON = "JSON"; public static String DATA_TYPE_XML = "XML"; public static String DATA_TYPE_SQL = "SQL"; - + public static String INPUT_PARAM_RESPONSE_PRIFIX = "responsePrefix"; - + public static String OUTPUT_PARAM_STATUS = "status"; public static String OUTPUT_PARAM_ERROR_MESSAGE = "error-message"; public static String OUTPUT_STATUS_SUCCESS = "success"; public static String OUTPUT_STATUS_FAILURE = "failure"; - + public static final String DESINGTIME = "DesignTime"; public static final String RUNTIME = "RunTime"; public static final String APPC_FLOW_CONTROLLER = "/appc-flow-controller.properties"; @@ -59,15 +59,15 @@ public class FlowControllerConstants { public static final String EXTERNAL = "External"; public static final String ACTION_LEVEL = "action-level"; public static final String ARTIFACT_NAME = "artifact-name"; - - public static enum endPointType {DG,REST,NODE}; + + public static enum endPointType {DG,REST,NODE}; public static enum flowStatus {PENDING,IN_PROCESS,COMPLETED}; - + public static final String GENERATION_NODE = "GENERATION-NODE"; public static final String SEQUENCE_TYPE = "SEQUENCE-TYPE"; public static final String CATEGORY = "CATEGORY"; public static final String EXECUTION_NODE = "EXECUTION-NODE"; - + public static final String REQUEST_ID = "reqeust-id"; public static final String ARTIFACT_CONTENT = "artifact-content"; @@ -79,8 +79,8 @@ public class FlowControllerConstants { public static final String GRAPH = "graph"; public static final String NODE = "node"; public static final String REST = "rest"; - - + + public static final String DB_SDC_ARTIFACTS = "ASDC_ARTIFACTS"; public static final String DB_SDC_REFERENCE = "ASDC_REFERENCE"; public static final String DB_REQUEST_ARTIFACTS = "REQUEST_ARTIFACTS"; @@ -104,7 +104,7 @@ public class FlowControllerConstants { public static final String INPUT_REQUEST_ACTION_TYPE = "request-action-type"; public static final String INPUT_REQUEST_ACTION = "request-action"; public static final String HTTP = "http://"; - + public static final String VNF_ID = "vnf-id"; public static final String VSERVER_ID = "vserver-id"; public static final String SEQ_GENERATOR_URL = "seq_generator_url"; @@ -114,4 +114,5 @@ public class FlowControllerConstants { public static final String DEPENDENCYMODEL ="tosca_dependency_model"; public static final String VF_MODULE ="vf-module"; public static final String VNFC_NAME = "vnfc-name"; + public static final String AAI_VNF_TYPE ="aai-vnf-type"; } |