X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=appc-dispatcher%2Fappc-workflow-management%2Fappc-workflow-management-core%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fappc%2Fworkflow%2Fimpl%2FWorkFlowManagerImpl.java;h=172d8c4e6598635c7164d2bf313f57d21e880ee1;hb=06bfa9f289b1960a3ac692b2e58dac3da6abb968;hp=483668031ebfddf08967ff1e408b6e10714249ba;hpb=36bcd566167f2f91c0e8e7a304fce5f6bc150776;p=appc.git diff --git a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/java/org/onap/appc/workflow/impl/WorkFlowManagerImpl.java b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/java/org/onap/appc/workflow/impl/WorkFlowManagerImpl.java index 483668031..172d8c4e6 100644 --- a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/java/org/onap/appc/workflow/impl/WorkFlowManagerImpl.java +++ b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/java/org/onap/appc/workflow/impl/WorkFlowManagerImpl.java @@ -2,30 +2,27 @@ * ============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. * ================================================================================ * 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.workflow.impl; import org.apache.commons.lang.ObjectUtils; -import org.apache.commons.lang3.StringUtils; import org.onap.appc.common.constant.Constants; import org.onap.appc.configuration.Configuration; import org.onap.appc.configuration.ConfigurationFactory; @@ -39,8 +36,24 @@ import org.onap.appc.workflow.objects.WorkflowResponse; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.provider.SvcLogicService; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceReference; +import java.util.ArrayList; +import org.onap.ccsdk.sli.core.dblib.DbLibService; +import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; +import javax.sql.rowset.CachedRowSet; +import java.sql.SQLException; +import java.io.ObjectInputStream; +import java.io.IOException; +import org.slf4j.MDC; + + + import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Enumeration; @@ -49,6 +62,7 @@ import java.util.Properties; public class WorkFlowManagerImpl implements WorkFlowManager{ + private static final String DRIVER_ERROR = "DriverLoadError"; private SvcLogicService svcLogic = null; private final EELFLogger logger = EELFManager.getInstance().getLogger(WorkFlowManagerImpl.class); private final Configuration configuration = ConfigurationFactory.getConfiguration(); @@ -58,7 +72,7 @@ public class WorkFlowManagerImpl implements WorkFlowManager{ ); public void setWorkflowResolver(WorkflowResolver workflowResolver){ - this.workflowResolver=workflowResolver; + this.workflowResolver = workflowResolver; } public void setSvcLogicServiceRef(SvcLogicService svcLogic) { @@ -68,120 +82,150 @@ public class WorkFlowManagerImpl implements WorkFlowManager{ /** * Execute workflow and return response. * This method execute workflow with following steps. - * Retrieve workflow(DG) details - module, version and mode from database based on command and vnf Type from incoming request. + * Retrieve workflow(DG) details - module, version and mode from database + * based on command and vnf Type from incoming request. * Execute workflow (DG) using SVC Logic Service reference * Return response of workflow (DG) to caller. * - * @param workflowRequest workflow execution request which contains vnfType, command, requestId, targetId, payload and (optional) confID; + * @param workflowRequest workflow execution request which contains vnfType, + * command, requestId, targetId, payload and (optional) confID; * @return Workflow Response which contains execution status and payload from DG if any */ @Override public WorkflowResponse executeWorkflow(WorkflowRequest workflowRequest) { - if (logger.isTraceEnabled()) { - logger.trace("Entering to executeWorkflow with WorkflowRequest = "+ ObjectUtils.toString(workflowRequest.toString())); - } + logger.trace("Entering to executeWorkflow with WorkflowRequest = " + + ObjectUtils.toString(workflowRequest.toString())); WorkflowResponse workflowResponse = new WorkflowResponse(); workflowResponse.setResponseContext(workflowRequest.getResponseContext()); try { - - - WorkflowKey workflowKey = workflowResolver.resolve(workflowRequest.getRequestContext().getAction().name(), workflowRequest.getVnfContext().getType(), null,workflowRequest.getRequestContext().getCommonHeader().getApiVer()); + WorkflowKey workflowKey = + workflowResolver.resolve(workflowRequest.getRequestContext().getAction().name(), + workflowRequest.getVnfContext().getType(), null, + workflowRequest.getRequestContext().getCommonHeader().getApiVer()); Properties workflowParams = new Properties(); String actionProperty; String requestIdProperty; String vfIdProperty; - if(!workflowRequest.getRequestContext().getCommonHeader().getApiVer().startsWith("1.")){ + if (!workflowRequest.getRequestContext().getCommonHeader().getApiVer().startsWith("1.")) { /* The following method call (populateDGContext) populates DG context with the request parameters to maintain backward compatibility with old DGs, - we are not altering the old way of passing (org.onap.appc.vnfId and so on..) + we are not altering the old way of passing (org.onap.appc.vnfId and so on..) This is still a temporary solution, the end solution should be agreed with all stakeholders and implemented. */ - populateDGContext(workflowParams,workflowRequest); + populateDGContext(workflowParams, workflowRequest); } else { - actionProperty = configuration.getProperty("org.onap.appc.workflow.action", String.valueOf(Constants.ACTION)); - requestIdProperty = configuration.getProperty("org.onap.appc.workflow.request.id", String.valueOf(Constants.REQUEST_ID)); - vfIdProperty = configuration.getProperty("org.onap.appc.workflow.vfid", String.valueOf(Constants.VF_ID)); - String vfTypeProperty = configuration.getProperty("org.onap.appc.workflow.vftype", String.valueOf(Constants.VF_TYPE)); - String apiVerProperty = configuration.getProperty("org.onap.appc.workflow.apiVersion", String.valueOf(Constants.API_VERSION)); - String originatorIdProperty = configuration.getProperty("org.onap.appc.workflow.originatorId",Constants.ORIGINATOR_ID); - String subRequestId = configuration.getProperty("org.onap.appc.workflow.subRequestId",Constants.SUB_REQUEST_ID); - - workflowParams.put(actionProperty,workflowRequest.getRequestContext().getAction().name()); - workflowParams.put(requestIdProperty, workflowRequest.getRequestContext().getCommonHeader().getRequestId()); + actionProperty = + configuration.getProperty("org.onap.appc.workflow.action", String.valueOf(Constants.ACTION)); + requestIdProperty = + configuration.getProperty("org.onap.appc.workflow.request.id", + String.valueOf(Constants.REQUEST_ID)); + vfIdProperty = + configuration.getProperty("org.onap.appc.workflow.vfid", String.valueOf(Constants.VF_ID)); + String vfTypeProperty = + configuration.getProperty("org.onap.appc.workflow.vftype", String.valueOf(Constants.VF_TYPE)); + String apiVerProperty = + configuration.getProperty("org.onap.appc.workflow.apiVersion", + String.valueOf(Constants.API_VERSION)); + String originatorIdProperty = + configuration.getProperty("org.onap.appc.workflow.originatorId", Constants.ORIGINATOR_ID); + String subRequestId = + configuration.getProperty("org.onap.appc.workflow.subRequestId", Constants.SUB_REQUEST_ID); + + workflowParams.put(actionProperty, workflowRequest.getRequestContext().getAction().name()); + workflowParams.put(requestIdProperty, + workflowRequest.getRequestContext().getCommonHeader().getRequestId()); workflowParams.put(vfIdProperty, workflowRequest.getVnfContext().getId()); - workflowParams.put(vfTypeProperty,workflowRequest.getVnfContext().getType()); - workflowParams.put(apiVerProperty,workflowRequest.getRequestContext().getCommonHeader().getApiVer()); - workflowParams.put(originatorIdProperty,workflowRequest.getRequestContext().getCommonHeader().getOriginatorId()); - workflowParams.put(subRequestId,workflowRequest.getRequestContext().getCommonHeader().getSubRequestId()); + workflowParams.put(vfTypeProperty, workflowRequest.getVnfContext().getType()); + workflowParams.put(apiVerProperty, workflowRequest.getRequestContext().getCommonHeader().getApiVer()); + workflowParams.put(originatorIdProperty, + workflowRequest.getRequestContext().getCommonHeader().getOriginatorId()); + workflowParams.put(subRequestId, + workflowRequest.getRequestContext().getCommonHeader().getSubRequestId()); Object payloadJson = workflowRequest.getRequestContext().getPayload(); - if(payloadJson!=null) { + if (payloadJson != null) { try { Map payloadProperties = ObjectMapper.map(payloadJson); workflowParams.putAll(payloadProperties); - if (logger.isDebugEnabled()) { - logger.debug("DG properties: " + workflowParams); - } + logger.debug("DG properties: " + workflowParams); } catch (Exception e) { logger.error("Error parsing payload json string", e); Properties workflowPrp = new Properties(); workflowPrp.setProperty("error-message", "Error parsing payload json string"); - fillStatus(501, "Error parsing payload json string: "+e.getMessage(), workflowRequest.getResponseContext()); - if (logger.isTraceEnabled()) { - logger.trace("Exiting from executeWorkflow with (workflowResponse = "+ObjectUtils.toString(workflowResponse)+")"); - } + fillStatus(501, "Error parsing payload json string: " + e.getMessage(), + workflowRequest.getResponseContext()); + logger.trace("Exiting from executeWorkflow with (workflowResponse = " + + ObjectUtils.toString(workflowResponse) + ")"); return workflowResponse; } } - if (logger.isDebugEnabled()) { - logger.debug("DG parameters "+ actionProperty +":"+ workflowRequest.getRequestContext().getAction().name()+", "+ - requestIdProperty +":"+ workflowRequest.getRequestContext().getCommonHeader().getRequestId()+", "+ - vfIdProperty +":"+ workflowRequest.getVnfContext().getId()); - - logger.debug("Starting DG Execution for request "+workflowRequest.getRequestContext().getCommonHeader().getRequestId()); - } + logger.debug("DG parameters " + actionProperty + ":" + + workflowRequest.getRequestContext().getAction().name() + ", " + + requestIdProperty + ":" + + workflowRequest.getRequestContext().getCommonHeader().getRequestId() + ", " + + vfIdProperty + ":" + workflowRequest.getVnfContext().getId()); + + logger.debug("Starting DG Execution for request " + + workflowRequest.getRequestContext().getCommonHeader().getRequestId()); } - if (workflowRequest.getRequestContext().getCommonHeader().getApiVer().startsWith("1.")){ - workflowParams.put("isBwcMode","true"); + if (workflowRequest.getRequestContext().getCommonHeader().getApiVer().startsWith("1.")) { + workflowParams.put("isBwcMode", "true"); } else { workflowParams.put("isBwcMode", "false"); } - SVCLogicServiceExecute(workflowKey, workflowRequest.getRequestContext(), workflowParams , workflowResponse); - if (logger.isTraceEnabled()) { - logger.trace("Completed DG Execution for Request id: " + workflowRequest.getRequestContext().getCommonHeader().getRequestId() + "with response code: " + workflowResponse.getResponseContext().getStatus().getCode()); - } - }catch (Exception e){ - logger.error("Error Executing DG " +e.getMessage(),e); - fillStatus(501, "Error Executing DG "+e.getMessage(), workflowRequest.getResponseContext()); - } - if (logger.isTraceEnabled()) { - logger.trace("Exiting from executeWorkflow with (workflowResponse = "+ ObjectUtils.toString(workflowResponse.getResponseContext().getStatus().getMessage())+")"); + SVCLogicServiceExecute(workflowKey, workflowRequest.getRequestContext(), workflowParams, + workflowResponse); + logger.trace("Completed DG Execution for Request id: " + + workflowRequest.getRequestContext().getCommonHeader().getRequestId() + " with response code: " + + workflowResponse.getResponseContext().getStatus().getCode()); + } catch (Exception e) { + logger.error("Error Executing DG " + e.getMessage(), e); + fillStatus(501, "Error Executing DG " + e.getMessage(), workflowRequest.getResponseContext()); } + logger.trace("Exiting from executeWorkflow with (workflowResponse = " + + ObjectUtils.toString(workflowResponse.getResponseContext().getStatus().getMessage()) + ")"); return workflowResponse; } private void populateDGContext(Properties workflowParams, WorkflowRequest workflowRequest) { - workflowParams.put("input.common-header.timestamp",new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(workflowRequest.getRequestContext().getCommonHeader().getTimeStamp())); - workflowParams.put("input.common-header.api-ver",workflowRequest.getRequestContext().getCommonHeader().getApiVer()); - workflowParams.put("input.common-header.request-id",workflowRequest.getRequestContext().getCommonHeader().getRequestId()); - workflowParams.put("input.common-header.originator-id",workflowRequest.getRequestContext().getCommonHeader().getOriginatorId()); - workflowParams.put("input.common-header.sub-request-id",workflowRequest.getRequestContext().getCommonHeader().getSubRequestId()!=null ? workflowRequest.getRequestContext().getCommonHeader().getSubRequestId():""); - workflowParams.put("input.action",workflowRequest.getRequestContext().getAction().toString()); - workflowParams.put("input.payload",null != workflowRequest.getRequestContext().getPayload() ? workflowRequest.getRequestContext().getPayload() : ""); - workflowParams.put("input.action-identifiers.vnf-id",workflowRequest.getVnfContext().getId()); - workflowParams.put("input.action-identifiers.vnfc-name",workflowRequest.getRequestContext().getActionIdentifiers().getVnfcName()!=null?workflowRequest.getRequestContext().getActionIdentifiers().getVnfcName():""); - workflowParams.put("input.action-identifiers.service-instance-id",workflowRequest.getRequestContext().getActionIdentifiers().getServiceInstanceId()!=null?workflowRequest.getRequestContext().getActionIdentifiers().getServiceInstanceId():""); - workflowParams.put("input.action-identifiers.vserver-id",workflowRequest.getRequestContext().getActionIdentifiers().getVserverId()!=null?workflowRequest.getRequestContext().getActionIdentifiers().getVserverId():""); - workflowParams.put("input.action-identifiers.vf-module-id",workflowRequest.getRequestContext().getActionIdentifiers().getVfModuleId()!=null?workflowRequest.getRequestContext().getActionIdentifiers().getVfModuleId():""); + workflowParams.put("input.common-header.timestamp", + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") + .format(workflowRequest.getRequestContext().getCommonHeader().getTimeStamp())); + workflowParams.put("input.common-header.api-ver", + workflowRequest.getRequestContext().getCommonHeader().getApiVer()); + workflowParams.put("input.common-header.request-id", + workflowRequest.getRequestContext().getCommonHeader().getRequestId()); + workflowParams.put("input.common-header.originator-id", + workflowRequest.getRequestContext().getCommonHeader().getOriginatorId()); + workflowParams.put("input.common-header.sub-request-id", + workflowRequest.getRequestContext().getCommonHeader().getSubRequestId() != null ? + workflowRequest.getRequestContext().getCommonHeader().getSubRequestId() : ""); + workflowParams.put("input.action", workflowRequest.getRequestContext().getAction().toString()); + workflowParams.put("input.payload", + null != workflowRequest.getRequestContext().getPayload() ? + workflowRequest.getRequestContext().getPayload() : ""); + workflowParams.put("input.action-identifiers.vnf-id", workflowRequest.getVnfContext().getId()); + workflowParams.put("input.action-identifiers.vnfc-name", + workflowRequest.getRequestContext().getActionIdentifiers().getVnfcName() != null ? + workflowRequest.getRequestContext().getActionIdentifiers().getVnfcName() : ""); + workflowParams.put("input.action-identifiers.service-instance-id", + workflowRequest.getRequestContext().getActionIdentifiers().getServiceInstanceId() != null ? + workflowRequest.getRequestContext().getActionIdentifiers().getServiceInstanceId() : ""); + workflowParams.put("input.action-identifiers.vserver-id", + workflowRequest.getRequestContext().getActionIdentifiers().getVserverId() != null ? + workflowRequest.getRequestContext().getActionIdentifiers().getVserverId() : ""); + workflowParams.put("input.action-identifiers.vf-module-id", + workflowRequest.getRequestContext().getActionIdentifiers().getVfModuleId() != null ? + workflowRequest.getRequestContext().getActionIdentifiers().getVfModuleId() : ""); final Map additionalContext; - if ((additionalContext = workflowRequest.getRequestContext().getAdditionalContext())!=null) { + if ((additionalContext = workflowRequest.getRequestContext().getAdditionalContext()) != null) { for (Map.Entry entry : additionalContext.entrySet()) { workflowParams.put("input." + entry.getKey(), null != entry.getValue() ? entry.getValue() : ""); } @@ -196,10 +240,9 @@ public class WorkFlowManagerImpl implements WorkFlowManager{ */ @Override public WorkflowExistsOutput workflowExists(WorkflowRequest workflowQueryParams) { - WorkflowExistsOutput workflowExistsOutput = new WorkflowExistsOutput(false,false); - if (logger.isTraceEnabled()) { - logger.trace("Entering to workflowExists with WorkflowRequest = "+ObjectUtils.toString(workflowQueryParams.toString())); - } + WorkflowExistsOutput workflowExistsOutput = new WorkflowExistsOutput(false, false); + logger.trace("Entering to workflowExists with WorkflowRequest = " + + ObjectUtils.toString(workflowQueryParams.toString())); try { WorkflowKey workflowKey = workflowResolver.resolve( @@ -214,26 +257,27 @@ public class WorkFlowManagerImpl implements WorkFlowManager{ workflowExistsOutput.setWorkflowVersion(workflowKey.version()); if (isDGExists(workflowKey)) { workflowExistsOutput.setDgExist(true); - }else{ + } else { logger.warn( - String.format("SLI doesn't have DG for resolved mapping entry: DG module - '%s', DG name - '%s', DG version - '%s'", - workflowKey.module(), workflowKey.name(), workflowKey.version())); + String.format("SLI doesn't have DG for resolved mapping entry: " + + "DG module - '%s', DG name - '%s', DG version - '%s'", + workflowKey.module(), workflowKey.name(), workflowKey.version())); } - }else{ + } else { logger.warn( - String.format("Unable to resolve recipe matching action '%s', VNF type '%s' and VNF version '%s'", - workflowQueryParams.getRequestContext().getAction().name(), workflowQueryParams.getVnfContext().getType(), null)); + String.format("Unable to resolve recipe matching action '%s', VNF type '%s'" + + " and VNF version '%s'", + workflowQueryParams.getRequestContext().getAction().name(), + workflowQueryParams.getVnfContext().getType(), null)); } } catch (RuntimeException e) { - logger.error("Error querying workflow from database"+e.getMessage()); + logger.error("Error querying workflow from database" + e.getMessage()); throw e; - }catch (SvcLogicException e) { - logger.error("Error querying workflow from database"+e.getMessage()); + } catch (SvcLogicException e) { + logger.error("Error querying workflow from database" + e.getMessage()); throw new RuntimeException(e); } - if (logger.isTraceEnabled()) { - logger.trace("Exiting workflowExists"); - } + logger.trace("Exiting workflowExists"); return workflowExistsOutput; } @@ -242,22 +286,162 @@ public class WorkFlowManagerImpl implements WorkFlowManager{ return svcLogic.hasGraph(workflowKey.module(), workflowKey.name(), workflowKey.version(), "sync"); } - private void SVCLogicServiceExecute(WorkflowKey workflowKey, RequestContext requestContext, Properties workflowParams, WorkflowResponse workflowResponse) { - if (logger.isTraceEnabled()) { - logger.trace("Entering SVCLogicServiceExecute"); + + private void restartDbLibProvider() { + + Bundle bundle = FrameworkUtil.getBundle(org.onap.ccsdk.sli.core.dblib.DbLibService.class); + try { + bundle.stop(); + bundle.start(); + //Thread.sleep(5000); + } catch (org.osgi.framework.BundleException be) { + logger.error("Error restarting db lib" + be.toString()); + } /*catch (InterruptedException e) { + }*/ + } + + private SvcLogicGraph fetchGraph(String module, String rpc, String version, String mode, StringBuilder sbError) + { + DbLibService dbLibSvc = null; + + ServiceReference sref = null; + BundleContext bctx = null; + + Bundle bundle = FrameworkUtil.getBundle(WorkFlowManagerImpl.class); + + if (bundle != null) { + bctx = bundle.getBundleContext(); + + if (bctx != null) { + sref = bctx.getServiceReference("org.onap.ccsdk.sli.core.dblib.DbLibService"); + } + + if (sref == null) { + logger.warn("Could not find service reference for DBLIB service"); + } else { + dbLibSvc = (DbLibService) bctx.getService(sref); + if (dbLibSvc == null) { + logger.warn("Could not find service reference for DBLIB service"); + } + } } + if (dbLibSvc == null) + return null; + else + logger.info("Retrieving graph(new)"); + + SvcLogicGraph retval = null; + CachedRowSet results = null; + + String fetchVersionGraphSql = "SELECT graph FROM SVC_LOGIC" + + " WHERE module = ? AND rpc = ? AND mode = ? AND version = ?"; + + String fetchActiveGraphSql = "SELECT graph FROM SVC_LOGIC" + + " WHERE module = ? AND rpc = ? AND mode = ? AND active = 'Y'"; + + + String fetchGraphStmt; + + ArrayList params = new ArrayList<>(); + params.add(module); + params.add(rpc); + params.add(mode); + + if (version == null) { + fetchGraphStmt = fetchActiveGraphSql; + } else { + params.add(version); + fetchGraphStmt = fetchVersionGraphSql; + } + + StringBuilder sqlBuilder = new StringBuilder(fetchGraphStmt); + try { + results = dbLibSvc.getData(sqlBuilder.toString(), new ArrayList(params), "sdnctl"); + + if (results.next()) { + + ObjectInputStream gStream = new ObjectInputStream(results.getBinaryStream("graph")); + + Object graphObj = gStream.readObject(); + gStream.close(); + + if (graphObj instanceof SvcLogicGraph) { + retval = (SvcLogicGraph) graphObj; + } else { + logger.error("invalid type for graph " + graphObj.getClass().getName()); + return null; + } + + } else { + return null; + } + } catch (SQLException e) { + logger.error("query " + sqlBuilder + " :: " + e.getMessage() + " Will retry"); + //sbError.append(DRIVER_ERROR); + return null; + } catch (IOException e) { + logger.error("IOException " + " :: " + e.getMessage() + " Will retry"); + //sbError.append(DRIVER_ERROR); + return null; + } catch (Exception e) { + logger.error("Exception " + " :: " + e.getMessage() + " Will retry"); + sbError.append(DRIVER_ERROR); + return null; + } + + + return retval; + } + + protected Properties workflowExecute(String module, String rpc, String version, String mode, Properties props) + throws SvcLogicException { + logger.info("Fetching service logic from data store"); + //logger.info("Trial Restart "); + //restartDbLibProvider(); + //logger.info("Trial Restart End"); + + StringBuilder sbError = new StringBuilder(); + SvcLogicGraph graph = fetchGraph(module, rpc, version, mode, sbError); + if (sbError.toString().equals(DRIVER_ERROR)) + { + restartDbLibProvider(); + sbError = new StringBuilder(); + graph = fetchGraph(module, rpc, version, mode, sbError); + } + if (graph == null) { + Properties retProps = new Properties(); + retProps.setProperty("error-code", "401"); + retProps.setProperty("error-message", + "No service logic found for [" + module + "," + rpc + "," + version + "," + mode + "]"); + return (retProps); + } + + SvcLogicContext ctx = new SvcLogicContext(props); + ctx.setAttribute("currentGraph", graph.toString()); + ctx.setAttribute("X-ONAP-RequestID", MDC.get("X-ONAP-RequestID")); + svcLogic.execute(graph, ctx); + return (ctx.toProperties()); + } + + private void SVCLogicServiceExecute(WorkflowKey workflowKey, RequestContext requestContext, + Properties workflowParams, WorkflowResponse workflowResponse) { + logger.trace("Entering SVCLogicServiceExecute"); Properties respProps = null; try { - respProps = svcLogic.execute(workflowKey.module(), workflowKey.name(), workflowKey.version(), "sync", workflowParams); + respProps = workflowExecute(workflowKey.module(), workflowKey.name(), workflowKey.version(), + "sync", workflowParams); } catch (Exception e) { - setWorkFlowResponseStatus(workflowResponse.getResponseContext(), "failure", "Unexpected SLI Adapter failure", 200); + setWorkFlowResponseStatus(workflowResponse.getResponseContext(), "failure", + "Unexpected SLI Adapter failure", 200); + String stk = ""; if (logger.isDebugEnabled()) { - logger.debug("Error while executing DG " + e.getMessage() + e.getStackTrace()); + stk = Arrays.toString(e.getStackTrace()); + logger.debug("Error while executing DG " + e.getMessage() + stk); } - logger.error("Error in DG", e.getMessage()+ Arrays.toString(e.getStackTrace()),e); + logger.error("Error in DG", e.getMessage() + stk, e); } if (respProps != null) { @@ -273,16 +457,13 @@ public class WorkFlowManagerImpl implements WorkFlowManager{ specificStatusCode = Integer.parseInt(dgOutputStatusCode); } - setWorkFlowResponseStatus(workflowResponse.getResponseContext(), commonStatus, specificStatusMessage, specificStatusCode); + setWorkFlowResponseStatus(workflowResponse.getResponseContext(), commonStatus, specificStatusMessage, + specificStatusCode); - if (logger.isDebugEnabled()) { - logger.debug("DG Execution Status: " + commonStatus); - } + logger.debug("DG Execution Status: " + commonStatus); } - if (logger.isTraceEnabled()) { - logger.trace("Exiting from SVCLogicServiceExecute"); - } + logger.trace("Exiting from SVCLogicServiceExecute"); } /** @@ -291,42 +472,44 @@ public class WorkFlowManagerImpl implements WorkFlowManager{ * @param responseContext response context which you need to fill * @param respProps DG context in a properties format */ - private void fillResponseContextByOutputFieldsFromDgContext(ResponseContext responseContext, Properties respProps) { + private void fillResponseContextByOutputFieldsFromDgContext(ResponseContext responseContext, + Properties respProps) { Enumeration e = respProps.propertyNames(); - while (e.hasMoreElements()){ + while (e.hasMoreElements()) { String key = (String) e.nextElement(); - if (key.startsWith("output.")){ - if (!key.startsWith("output.common-header.") && !key.startsWith("output.status.")){ + if (key.startsWith("output.")) { + if (!key.startsWith("output.common-header.") && !key.startsWith("output.status.")) { - if (key.equalsIgnoreCase("output.payload")){ + if (key.equalsIgnoreCase("output.payload")) { responseContext.setPayload(respProps.getProperty(key)); } else { responseContext.addKeyValueToAdditionalContext(key, respProps.getProperty(key)); - } + } } } } } /** - * Filling responceContext status code amd message according to responce messages and codes from DG. + * Filling responseContext status code and message according to response messages and codes from DG. * * @param responseContext response cotext * @param commonStatus common status message from DG ("success" or "failure") * @param specificStatusMessage specific status message from specific DG node * @param specificStatusCode specific status code from specific DG node */ - private void setWorkFlowResponseStatus(ResponseContext responseContext, String commonStatus, String specificStatusMessage, int specificStatusCode) { + private void setWorkFlowResponseStatus(ResponseContext responseContext, String commonStatus, + String specificStatusMessage, int specificStatusCode) { if (null == specificStatusMessage) { specificStatusMessage = ""; } - if (commonStatus.equalsIgnoreCase(Constants.DG_STATUS_SUCCESS)){ - if (specificStatusCode != 0 ){ + if (commonStatus.equalsIgnoreCase(Constants.DG_STATUS_SUCCESS)) { + if (specificStatusCode != 0) { fillStatus(specificStatusCode, specificStatusMessage, responseContext); } else { fillStatus(400, commonStatus, responseContext); } } else { - if (specificStatusCode != 0){ + if (specificStatusCode != 0) { fillStatus(specificStatusCode, specificStatusMessage, responseContext); } else { fillStatus(401, specificStatusMessage, responseContext); @@ -339,11 +522,11 @@ public class WorkFlowManagerImpl implements WorkFlowManager{ * * @param code 3-digit status code * @param message explanation of a status code - * @param responceContext response context which will be store status code and status message + * @param responseContext response context which will be store status code and status message */ - private void fillStatus(int code, String message, ResponseContext responceContext) { - responceContext.getStatus().setCode(code); - responceContext.getStatus().setMessage(message); + private void fillStatus(int code, String message, ResponseContext responseContext) { + responseContext.getStatus().setCode(code); + responseContext.getStatus().setMessage(message); }