lower code smells
[appc.git] / appc-dispatcher / appc-workflow-management / appc-workflow-management-core / src / main / java / org / onap / appc / workflow / impl / WorkFlowManagerImpl.java
index 50b37ec..172d8c4 100644 (file)
@@ -2,29 +2,27 @@
  * ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017-2018 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.
- * 
  * ============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;
@@ -38,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;
@@ -48,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();
@@ -57,7 +72,7 @@ public class WorkFlowManagerImpl implements WorkFlowManager{
     );
 
     public void setWorkflowResolver(WorkflowResolver workflowResolver){
-        this.workflowResolver=workflowResolver;
+        this.workflowResolver = workflowResolver;
     }
 
     public void setSvcLogicServiceRef(SvcLogicService svcLogic) {
@@ -67,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<String, String> 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<String, String> additionalContext;
-        if ((additionalContext = workflowRequest.getRequestContext().getAdditionalContext())!=null) {
+        if ((additionalContext = workflowRequest.getRequestContext().getAdditionalContext()) != null) {
             for (Map.Entry<String, String> entry : additionalContext.entrySet()) {
                 workflowParams.put("input." + entry.getKey(), null != entry.getValue() ? entry.getValue() : "");
     }
@@ -195,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(
@@ -213,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;
     }
 
@@ -241,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<String> 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) {
@@ -272,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");
     }
 
     /**
@@ -290,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);
@@ -338,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);
     }