GenericResourceApiProvider fixes part 4
[sdnc/northbound.git] / generic-resource-api / provider / src / main / java / org / onap / sdnc / northbound / GenericResourceApiProvider.java
index a5b9e8d..fea699b 100644 (file)
@@ -96,7 +96,6 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.SettableFuture;
 
 /**
  * Defines a base implementation for your provider. This class extends from a
@@ -139,7 +138,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
        private static final String APP_NAME = "generic-resource-api";
        private static final String CALLED_STR = "{} called.";
-       private static final String NULL_OR_EMPTY_ERROR_LOG = "exiting {} because of null or empty service-instance-id";
+       private static final String NULL_OR_EMPTY_ERROR_MESSAGE = "exiting {} because of null or empty service-instance-id";
        private static final String NULL_OR_EMPTY_ERROR_PARAM = "invalid input, null or empty service-instance-id";
        private static final String ADDING_INPUT_DATA_LOG = "Adding INPUT data for {} [{}] input: {}";
        private static final String ADDING_OPERATIONAL_DATA_LOG = "Adding OPERATIONAL data for {} [{}] operational-data: {}";
@@ -151,24 +150,30 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
        private static final String ACK_FINAL_PARAM = "ack-final";
        private static final String SERVICE_OBJECT_PATH_PARAM = "service-object-path";
        private static final String UPDATING_MDSAL_ERROR_MESSAGE = "Caught Exception updating MD-SAL for {} [{}] \n";
+    private static final String UPDATING_MDSAL_ERROR_MESSAGE_2 = "Caught Exception updating MD-SAL for {} [{},{}] \n";
        private static final String RETURNED_FAILED_MESSAGE = "Returned FAILED for {} [{}] {}";
        private static final String UPDATING_MDSAL_INFO_MESSAGE = "Updating MD-SAL for {} [{}] ServiceData: {}";
        private static final String UPDATED_MDSAL_INFO_MESSAGE = "Updated MD-SAL for {} [{}]";
        private static final String RETURNED_SUCCESS_MESSAGE = "Returned SUCCESS for {} [{}] {}";
        private static final String NON_NULL_PARAM = "non-null";
        private static final String NULL_PARAM = "null";
-       private static final String SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE = "Caught exception executing service logic for {} ";
+    private static final String SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE = "Caught exception executing service logic for {} ";
+    private static final String UPDATING_TREE_INFO_MESSAGE = "Updating OPERATIONAL tree.";
+    private static final String EMPTY_SERVICE_INSTANCE_MESSAGE = "exiting {} because the service-instance does not have any service data in SDNC";
+    private static final String INVALID_INPUT_ERROR_MESSAGE = "invalid input: the service-instance does not have any service data in SDNC";
+    private static final String ALLOTTED_RESOURCE_ID_PARAM = "allotted-resource-id";
+    private static final String ERROR_NETWORK_ID = "error";
 
        private final Logger log = LoggerFactory.getLogger(GenericResourceApiProvider.class);
        private final ExecutorService executor;
        private final GenericResourceApiSvcLogicServiceClient svcLogicClient;
 
-       protected DataBroker dataBroker;
+    protected DataBroker dataBroker;
        protected NotificationPublishService notificationService;
        protected RpcProviderRegistry rpcRegistry;
        protected BindingAwareBroker.RpcRegistration<GENERICRESOURCEAPIService> rpcRegistration;
 
-       public GenericResourceApiProvider(
+    public GenericResourceApiProvider(
                        DataBroker dataBroker,
                        NotificationPublishService notificationPublishService,
                        RpcProviderRegistry rpcProviderRegistry,
@@ -502,7 +507,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                if (input == null || input.getServiceInformation() == null
                                || input.getServiceInformation().getServiceInstanceId() == null
                                || input.getServiceInformation().getServiceInstanceId().length() == 0) {
-                       log.debug(NULL_OR_EMPTY_ERROR_LOG, svcOperation);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
                        responseBuilder.setResponseCode("404");
                        responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
                        responseBuilder.setAckFinalIndicator("Y");
@@ -546,28 +551,9 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // Get SvcLogicService reference
 
                ErrorObject error = new ErrorObject("200", "");
-               Properties respProps = null;
                String ackFinal = "Y";
                String serviceObjectPath = null;
-
-               try {
-                       if (svcLogicClient.hasGraph(APP_NAME, svcOperation, null, "sync")) {
-                               try {
-                                       respProps = svcLogicClient.execute(APP_NAME, svcOperation, null, "sync", serviceDataBuilder, parms);
-                               } catch (Exception e) {
-                                       log.error(SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE, svcOperation, e);
-                                       error.setMessage(e.getMessage());
-                                       error.setStatusCode("500");
-                               }
-                       } else {
-                               error.setMessage(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + svcOperation + "'");
-                               error.setStatusCode("503");
-                       }
-               } catch (Exception e) {
-                       error.setMessage(e.getMessage());
-                       error.setStatusCode("500");
-                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, error);
 
                if (respProps != null) {
                        error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
@@ -611,7 +597,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
                        saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
 
-                       if (validateInput(input)) {
+                       if (isValidRequest(input) && input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete)) {
                                // Only update operational tree on delete
                                log.info("Delete from both CONFIGURATION and OPERATIONAL tree.");
                                deleteService(serviceBuilder.build(), LogicalDatastoreType.OPERATIONAL);
@@ -648,32 +634,55 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                return Futures.immediateFuture(rpcResult);
        }
 
+       private Properties tryGetProperties(String svcOperation, Properties parms, ServiceDataBuilder serviceDataBuilder,
+               ErrorObject error) {
+               try {
+                       if (svcLogicClient.hasGraph(APP_NAME, svcOperation, null, "sync")) {
+                               try {
+                                       return svcLogicClient.execute(APP_NAME, svcOperation, null, "sync", serviceDataBuilder, parms);
+                               } catch (Exception e) {
+                                       log.error(SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE, svcOperation, e);
+                                       error.setMessage(e.getMessage());
+                                       error.setStatusCode("500");
+                               }
+                       } else {
+                               error.setMessage(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + svcOperation + "'");
+                               error.setStatusCode("503");
+                       }
+               } catch (Exception e) {
+                       error.setMessage(e.getMessage());
+                       error.setStatusCode("500");
+                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
+               }
+
+               return null;
+       }
+
        private boolean validateErrorObject(ErrorObject error) {
                return
                        !error.getStatusCode().isEmpty() && !("0".equals(error.getStatusCode()) || "200".equals(error.getStatusCode()));
        }
 
-       private boolean validateInput(ServiceTopologyOperationInput input) {
-               return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null
-            && input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete);
+       private boolean isValidRequest(ServiceTopologyOperationInput input){
+               return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
        }
 
        @Override
        public Future<RpcResult<VnfTopologyOperationOutput>> vnfTopologyOperation(VnfTopologyOperationInput input) {
 
-               final String SVC_OPERATION = "vnf-topology-operation";
+               final String svcOperation = "vnf-topology-operation";
                ServiceData serviceData;
                ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
                Properties parms = new Properties();
 
-               log.info(CALLED_STR, SVC_OPERATION);
+               log.info(CALLED_STR, svcOperation);
                // create a new response object
                VnfTopologyOperationOutputBuilder responseBuilder = new VnfTopologyOperationOutputBuilder();
 
                if (input == null || input.getServiceInformation() == null
                                || input.getServiceInformation().getServiceInstanceId() == null
                                || input.getServiceInformation().getServiceInstanceId().length() == 0) {
-                       log.debug(NULL_OR_EMPTY_ERROR_LOG, SVC_OPERATION);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
                        responseBuilder.setResponseCode("404");
                        responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
                        responseBuilder.setAckFinalIndicator("Y");
@@ -692,7 +701,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
                if (input.getVnfInformation() == null || input.getVnfInformation().getVnfId() == null
                                || input.getVnfInformation().getVnfId().length() == 0) {
-                       log.debug("exiting {} because of null or empty vnf-id", SVC_OPERATION);
+                       log.debug("exiting {} because of null or empty vnf-id", svcOperation);
                        responseBuilder.setResponseCode("404");
                        responseBuilder.setResponseMessage("invalid input, null or empty vnf-id");
                        responseBuilder.setAckFinalIndicator("Y");
@@ -701,24 +710,6 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        return Futures.immediateFuture(rpcResult);
                }
 
-               /*
-                * Mobility wont use vipr intf in 1707
-                *
-                * String preload_name = null; String preload_type = null; if
-                * (input.getVnfRequestInput() != null &&
-                * input.getVnfRequestInput().getVnfName() != null &&
-                * input.getVnfRequestInput().getVnfName().length() != 0) { preload_name =
-                * input.getVnfRequestInput().getVnfName(); } if
-                * (input.getVnfInformation().getVnfType() != null &&
-                * input.getVnfInformation().getVnfType().length() != 0) { preload_type =
-                * input.getVnfInformation().getVnfType(); }
-                *
-                * PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder(); if
-                * (preload_name != null && preload_type != null) { getPreloadData(preload_name,
-                * preload_type, preloadDataBuilder); } else {
-                * log.info("vnf-name and vnf-type not present in the request"); }
-                */
-
                ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
                getServiceData(siid, serviceDataBuilder);
 
@@ -746,66 +737,37 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // uses vnf-configuration-information;
                // uses oper-status;
 
-               log.info(ADDING_INPUT_DATA_LOG, SVC_OPERATION, siid, input);
+               log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
                VnfTopologyOperationInputBuilder inputBuilder = new VnfTopologyOperationInputBuilder(input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
 
-               log.info(ADDING_OPERATIONAL_DATA_LOG, SVC_OPERATION, siid,
+               log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid,
                                operDataBuilder.build());
                GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
 
-               /*
-                * log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+
-                * preload_type+"] preload-data: " + preloadDataBuilder.build());
-                * GenericResourceApiUtil.toProperties(parms, "preload-data",
-                * preloadDataBuilder);
-                */
-
                // Call SLI sync method
                // Get SvcLogicService reference
 
-               Properties respProps = null;
 
-               String errorCode = "200";
-               String errorMessage = null;
+               ErrorObject error = new ErrorObject("200", "");
                String ackFinal = "Y";
                String serviceObjectPath = null;
-
-               try {
-                       if (svcLogicClient.hasGraph(APP_NAME, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(APP_NAME, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
-                               } catch (Exception e) {
-                                       log.error(SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE, SVC_OPERATION, e);
-                                       errorMessage = e.getMessage();
-                                       errorCode = "500";
-                               }
-                       } else {
-                               errorMessage = NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty(ERROR_CODE_PARAM);
-                       errorMessage = respProps.getProperty(ERROR_MESSAGE_PARAM);
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
                        ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
                        serviceObjectPath = respProps.getProperty("vnf-object-path");
                }
 
-               setServiceStatus(serviceStatusBuilder, errorCode, errorMessage, ackFinal);
+               setServiceStatus(serviceStatusBuilder, error.getStatusCode(), error.getMessage(), ackFinal);
                serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
-               // serviceStatusBuilder.setRpcName(RpcName.VnfTopologyOperation);
-               serviceStatusBuilder.setRpcName(SVC_OPERATION);
+               serviceStatusBuilder.setRpcName(svcOperation);
 
-               if (errorCode != null && errorCode.length() != 0 && !(errorCode.equals("0") || errorCode.equals("200"))) {
-                       responseBuilder.setResponseCode(errorCode);
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (validateErrorObject(error)) {
+                       responseBuilder.setResponseCode(error.getStatusCode());
+                       responseBuilder.setResponseMessage(error.getMessage());
                        responseBuilder.setAckFinalIndicator(ackFinal);
 
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -813,18 +775,18 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
                        try {
                                saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
-                               if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null) {
+                               if (isValidRequest(input) &&
+                                       (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete) ||
+                                               input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))) {
+
                                        // Only update operational tree on activate or delete
-                                       if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete)
-                                                       || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)) {
-                                               log.info("Updating OPERATIONAL tree.");
-                                               saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
-                                       }
+                                       log.info(UPDATING_TREE_INFO_MESSAGE);
+                                       saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
                                }
                        } catch (Exception e) {
-                               log.error(UPDATING_MDSAL_ERROR_MESSAGE, SVC_OPERATION, siid, e);
+                               log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        }
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<VnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<VnfTopologyOperationOutput>status(true)
                                        .withResult(responseBuilder.build()).build();
                        // return error
@@ -834,7 +796,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // Got success from SLI
                try {
                        serviceData = serviceDataBuilder.build();
-                       log.info(UPDATING_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid, serviceData);
+                       log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
 
                        // service object
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -843,12 +805,11 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
                        saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
 
-                       if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null) {
+                       if (isValidRequest(input) && input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate) ) {
                                // Only update operational tree on Assign
-                               if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)) {
-                                       log.info("Updating OPERATIONAL tree.");
-                                       saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
-                               }
+
+                               log.info(UPDATING_TREE_INFO_MESSAGE);
+                               saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
                        }
 
                        ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
@@ -857,24 +818,24 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (Exception e) {
-                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, SVC_OPERATION, siid, e);
+                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        responseBuilder.setResponseCode("500");
                        responseBuilder.setResponseMessage(e.toString());
                        responseBuilder.setAckFinalIndicator("Y");
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<VnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<VnfTopologyOperationOutput>status(true)
                                        .withResult(responseBuilder.build()).build();
                        return Futures.immediateFuture(rpcResult);
                }
 
                // Update succeeded
-               responseBuilder.setResponseCode(errorCode);
+               responseBuilder.setResponseCode(error.getStatusCode());
                responseBuilder.setAckFinalIndicator(ackFinal);
-               if (errorMessage != null) {
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (!error.getMessage().isEmpty()) {
+                       responseBuilder.setResponseMessage(error.getMessage());
                }
-               log.info(UPDATED_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid);
-               log.info(RETURNED_SUCCESS_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+               log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
+               log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                RpcResult<VnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<VnfTopologyOperationOutput>status(true)
                                .withResult(responseBuilder.build()).build();
@@ -882,23 +843,27 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                return Futures.immediateFuture(rpcResult);
        }
 
+       private boolean isValidRequest(VnfTopologyOperationInput input){
+               return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
+       }
+
        @Override
        public Future<RpcResult<VfModuleTopologyOperationOutput>> vfModuleTopologyOperation(
                        VfModuleTopologyOperationInput input) {
 
-               final String SVC_OPERATION = "vf-module-topology-operation";
+               final String svcOperation = "vf-module-topology-operation";
                ServiceData serviceData;
                ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
                Properties parms = new Properties();
 
-               log.info(CALLED_STR, SVC_OPERATION);
+               log.info(CALLED_STR, svcOperation);
                // create a new response object
                VfModuleTopologyOperationOutputBuilder responseBuilder = new VfModuleTopologyOperationOutputBuilder();
 
                if (input == null || input.getServiceInformation() == null
                                || input.getServiceInformation().getServiceInstanceId() == null
                                || input.getServiceInformation().getServiceInstanceId().length() == 0) {
-                       log.debug(NULL_OR_EMPTY_ERROR_LOG, SVC_OPERATION);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
                        responseBuilder.setResponseCode("403");
                        responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
                        responseBuilder.setAckFinalIndicator("Y");
@@ -910,7 +875,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
                if (input.getVnfInformation() == null || input.getVnfInformation().getVnfId() == null
                                || input.getVnfInformation().getVnfId().length() == 0) {
-                       log.debug("exiting {} because of null or empty vnf-id", SVC_OPERATION);
+                       log.debug("exiting {} because of null or empty vnf-id", svcOperation);
                        responseBuilder.setResponseCode("403");
                        responseBuilder.setResponseMessage("invalid input, null or empty vnf-id");
                        responseBuilder.setAckFinalIndicator("Y");
@@ -921,7 +886,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
                if (input.getVfModuleInformation() == null || input.getVfModuleInformation().getVfModuleId() == null
                                || input.getVfModuleInformation().getVfModuleId().length() == 0) {
-                       log.debug("exiting {} because of null or empty vf-module-id", SVC_OPERATION);
+                       log.debug("exiting {} because of null or empty vf-module-id", svcOperation);
                        responseBuilder.setResponseCode("403");
                        responseBuilder.setResponseMessage("invalid input, vf-module-id is null or empty");
                        responseBuilder.setAckFinalIndicator("Y");
@@ -937,21 +902,6 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
                }
 
-               /*
-                * String preload_name = null; String preload_type = null;
-                *
-                * preload_name = input.getVfModuleRequestInput().getVfModuleName();
-                *
-                * if(input.getVfModuleInformation().getVfModuleType() != null &&
-                * input.getVfModuleInformation().getVfModuleType().length() != 0) {
-                * preload_type = input.getVfModuleInformation().getVfModuleType(); }
-                *
-                * PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder(); if
-                * (preload_name != null && preload_type != null) { getPreloadData(preload_name,
-                * preload_type, preloadDataBuilder); } else {
-                * log.debug("vf-module-name and vf-module-type not present in the request."); }
-                */
-
                ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
                getServiceData(siid, serviceDataBuilder);
 
@@ -979,65 +929,36 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // uses vnf-configuration-information;
                // uses oper-status;
 
-               log.info(ADDING_INPUT_DATA_LOG, SVC_OPERATION, siid, input);
+               log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
                VfModuleTopologyOperationInputBuilder inputBuilder = new VfModuleTopologyOperationInputBuilder(input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
 
-               log.info(ADDING_OPERATIONAL_DATA_LOG, SVC_OPERATION, siid,
+               log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid,
                                operDataBuilder.build());
                GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
 
-               /*
-                * log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+
-                * preload_type+"] preload-data: " +preloadDataBuilder.build());
-                * GenericResourceApiUtil.toProperties(parms, "preload-data",
-                * preloadDataBuilder);
-                */
-
                // Call SLI sync method
                // Get SvcLogicService reference
 
-               Properties respProps = null;
-
-               String errorCode = "200";
-               String errorMessage = null;
+               ErrorObject error = new ErrorObject("200", "");
                String ackFinal = "Y";
                String serviceObjectPath = null;
-
-               try {
-                       if (svcLogicClient.hasGraph(APP_NAME, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(APP_NAME, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
-                               } catch (Exception e) {
-                                       log.error("Caught exception executing service logic for " + SVC_OPERATION, e);
-                                       errorMessage = e.getMessage();
-                                       errorCode = "500";
-                               }
-                       } else {
-                               errorMessage = NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty(ERROR_CODE_PARAM);
-                       errorMessage = respProps.getProperty(ERROR_MESSAGE_PARAM);
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
                        ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
                        serviceObjectPath = respProps.getProperty("vf-module-object-path");
                }
 
-               setServiceStatus(serviceStatusBuilder, errorCode, errorMessage, ackFinal);
+               setServiceStatus(serviceStatusBuilder, error.getStatusCode(), error.getMessage(), ackFinal);
                serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
-               serviceStatusBuilder.setRpcName(SVC_OPERATION);
+               serviceStatusBuilder.setRpcName(svcOperation);
 
-               if (errorCode != null && errorCode.length() != 0 && !(errorCode.equals("0") || errorCode.equals("200"))) {
-                       responseBuilder.setResponseCode(errorCode);
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (validateErrorObject(error)) {
+                       responseBuilder.setResponseCode(error.getStatusCode());
+                       responseBuilder.setResponseMessage(error.getStatusCode());
                        responseBuilder.setAckFinalIndicator(ackFinal);
 
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -1046,9 +967,9 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        try {
                                saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
                        } catch (Exception e) {
-                               log.error(UPDATING_MDSAL_ERROR_MESSAGE, SVC_OPERATION, siid, e);
+                               log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        }
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<VfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<VfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                        // return error
@@ -1058,23 +979,22 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // Got success from SLI
                try {
                        serviceData = serviceDataBuilder.build();
-                       log.info(UPDATING_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid, serviceData);
+                       log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
 
                        // service object
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
                        serviceBuilder.setServiceData(serviceData);
-                       // serviceBuilder.setServiceInstanceId(serviceData.getServiceTopology().getServiceTopologyIdentifier().getServiceInstanceId());
                        serviceBuilder.setServiceInstanceId(siid);
                        serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
                        saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
 
-                       if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null) {
+                       if (isValidRequest(input) &&
+                               (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign) ||
+                                       input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))) {
                                // Only update operational tree on activate or delete
-                               if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign)
-                                               || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)) {
-                                       log.info("Updating OPERATIONAL tree.");
-                                       saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
-                               }
+
+                               log.info(UPDATING_TREE_INFO_MESSAGE);
+                               saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
                        }
 
                        ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
@@ -1083,24 +1003,24 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (Exception e) {
-                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, SVC_OPERATION, siid, e);
+                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        responseBuilder.setResponseCode("500");
                        responseBuilder.setResponseMessage(e.toString());
                        responseBuilder.setAckFinalIndicator("Y");
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<VfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<VfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                        return Futures.immediateFuture(rpcResult);
                }
 
                // Update succeeded
-               responseBuilder.setResponseCode(errorCode);
+               responseBuilder.setResponseCode(error.getStatusCode());
                responseBuilder.setAckFinalIndicator(ackFinal);
-               if (errorMessage != null) {
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (!error.getMessage().isEmpty()) {
+                       responseBuilder.setResponseMessage(error.getMessage());
                }
-               log.info(UPDATED_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid);
-               log.info(RETURNED_SUCCESS_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+               log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
+               log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                RpcResult<VfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
                                .<VfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
@@ -1108,29 +1028,28 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                return Futures.immediateFuture(rpcResult);
        }
 
+       private boolean isValidRequest(VfModuleTopologyOperationInput input) {
+               return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
+       }
+
        @Override
        public Future<RpcResult<NetworkTopologyOperationOutput>> networkTopologyOperation(
                        NetworkTopologyOperationInput input) {
 
-               final String SVC_OPERATION = "network-topology-operation";
+               final String svcOperation = "network-topology-operation";
                ServiceData serviceData;
                ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
                Properties parms = new Properties();
 
-               log.info(CALLED_STR, SVC_OPERATION);
+               log.info(CALLED_STR, svcOperation);
                // create a new response object
                NetworkTopologyOperationOutputBuilder responseBuilder = new NetworkTopologyOperationOutputBuilder();
 
                if (input == null || input.getServiceInformation() == null
                                || input.getServiceInformation().getServiceInstanceId() == null
                                || input.getServiceInformation().getServiceInstanceId().length() == 0) {
-                       log.debug(NULL_OR_EMPTY_ERROR_LOG, SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
-                       responseBuilder.setAckFinalIndicator("Y");
-                       RpcResult<NetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
-                                       .<NetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
-                       return Futures.immediateFuture(rpcResult);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
+                       return buildRpcResultFuture(responseBuilder, NULL_OR_EMPTY_ERROR_PARAM);
                }
 
                String siid = input.getServiceInformation().getServiceInstanceId();
@@ -1145,85 +1064,40 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
                ServiceData sd = serviceDataBuilder.build();
                if (sd == null || sd.getServiceLevelOperStatus() == null) {
-                       log.debug("exiting {} because the service-instance does not have any service data in SDNC", SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder
-                                       .setResponseMessage("invalid input: the service-instance does not have any service data in SDNC");
-                       responseBuilder.setAckFinalIndicator("Y");
-                       RpcResult<NetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
-                                       .<NetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
-                       return Futures.immediateFuture(rpcResult);
+                       log.debug(EMPTY_SERVICE_INSTANCE_MESSAGE, svcOperation);
+                       return buildRpcResultFuture(responseBuilder, INVALID_INPUT_ERROR_MESSAGE);
                }
 
-               /*
-                * //String preload_name = null; //String preload_type = null; // If both
-                * network-name and network-type are present in request, get the preload network
-                * from MD-SAL if (input.getNetworkRequestInput() != null &&
-                * input.getNetworkRequestInput().getNetworkName() != null &&
-                * input.getNetworkRequestInput().getNetworkName().length() != 0) { preload_name
-                * = input.getNetworkRequestInput().getNetworkName(); } if
-                * (input.getNetworkInformation() != null &&
-                * input.getNetworkInformation().getNetworkType() != null &&
-                * input.getNetworkInformation().getNetworkType().length() != 0) { preload_type
-                * = input.getNetworkInformation().getNetworkType(); }
-                *
-                * PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder(); if
-                * (preload_name != null && preload_type != null) { getPreloadData(preload_name,
-                * preload_type, preloadDataBuilder); } else {
-                * log.debug("network-name and network-type not present in request"); }
-                */
-
-               log.info(ADDING_INPUT_DATA_LOG, SVC_OPERATION, siid, input);
+               log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
                NetworkTopologyOperationInputBuilder inputBuilder = new NetworkTopologyOperationInputBuilder(input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
 
                // Call SLI sync method
                // Get SvcLogicService reference
 
-               Properties respProps = null;
 
-               String errorCode = "200";
-               String errorMessage = null;
+               ErrorObject error = new ErrorObject("200", "");
                String ackFinal = "Y";
-               String networkId = "error";
+               String networkId = ERROR_NETWORK_ID;
                String serviceObjectPath = null;
                String networkObjectPath = null;
-
-               try {
-                       if (svcLogicClient.hasGraph(APP_NAME, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(APP_NAME, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
-                               } catch (Exception e) {
-                                       log.error("Caught exception executing service logic for {}", SVC_OPERATION, e);
-                                       errorMessage = e.getMessage();
-                                       errorCode = "500";
-                               }
-                       } else {
-                               errorMessage = NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty(ERROR_CODE_PARAM);
-                       errorMessage = respProps.getProperty(ERROR_MESSAGE_PARAM);
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
                        ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
                        networkId = respProps.getProperty("networkId");
                        serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
                        networkObjectPath = respProps.getProperty("network-object-path");
                }
 
-               if (errorCode != null && errorCode.length() != 0 && !(errorCode.equals("0") || errorCode.equals("200"))) {
-                       responseBuilder.setResponseCode(errorCode);
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (validateErrorObject(error)) {
+                       responseBuilder.setResponseCode(error.getStatusCode());
+                       responseBuilder.setResponseMessage(error.getMessage());
                        responseBuilder.setAckFinalIndicator(ackFinal);
 
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                        RpcResult<NetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<NetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
@@ -1234,7 +1108,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                try {
 
                        serviceData = serviceDataBuilder.build();
-                       log.info(UPDATING_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid, serviceData);
+                       log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
 
                        // service object
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -1243,13 +1117,12 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
                        saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
 
-                       if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null) {
+                       if (isValidRequest(input) &&
+                               (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate) ||
+                                       input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Create))) {
                                // Only update operational tree on Activate
-                               if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)
-                                       || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Create)) {
-                                       log.info("Updating OPERATIONAL tree.");
-                                       saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
-                               }
+                               log.info(UPDATING_TREE_INFO_MESSAGE);
+                               saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
                        }
 
                        NetworkResponseInformationBuilder networkResponseInformationBuilder = new NetworkResponseInformationBuilder();
@@ -1263,53 +1136,64 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (IllegalStateException e) {
-                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, SVC_OPERATION, siid, e);
+                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        responseBuilder.setResponseCode("500");
                        responseBuilder.setResponseMessage(e.toString());
                        responseBuilder.setAckFinalIndicator("Y");
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<NetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<NetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                        return Futures.immediateFuture(rpcResult);
                }
 
                // Update succeeded
-               responseBuilder.setResponseCode(errorCode);
+               responseBuilder.setResponseCode(error.getStatusCode());
                responseBuilder.setAckFinalIndicator(ackFinal);
-               if (errorMessage != null) {
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (!error.getMessage().isEmpty()) {
+                       responseBuilder.setResponseMessage(error.getMessage());
                }
-               log.info(UPDATED_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid);
-               log.info(RETURNED_SUCCESS_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+               log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
+               log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                RpcResult<NetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
                                .<NetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                return Futures.immediateFuture(rpcResult);
        }
 
+       private Future<RpcResult<NetworkTopologyOperationOutput>> buildRpcResultFuture(
+               NetworkTopologyOperationOutputBuilder responseBuilder, String responseMessage) {
+
+               responseBuilder.setResponseCode("404");
+               responseBuilder
+                .setResponseMessage(responseMessage);
+               responseBuilder.setAckFinalIndicator("Y");
+               RpcResult<NetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
+                .<NetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
+               return Futures.immediateFuture(rpcResult);
+       }
+
+       private boolean isValidRequest(NetworkTopologyOperationInput input) {
+               return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
+       }
+
        @Override
        public Future<RpcResult<ContrailRouteTopologyOperationOutput>> contrailRouteTopologyOperation(
                        ContrailRouteTopologyOperationInput input) {
 
-               final String SVC_OPERATION = "contrail-route-topology-operation";
+               final String svcOperation = "contrail-route-topology-operation";
                ServiceData serviceData;
                ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
                Properties parms = new Properties();
 
-               log.info(CALLED_STR, SVC_OPERATION);
+               log.info(CALLED_STR, svcOperation);
                // create a new response object
                ContrailRouteTopologyOperationOutputBuilder responseBuilder = new ContrailRouteTopologyOperationOutputBuilder();
 
                if (input == null || input.getServiceInformation() == null
                                || input.getServiceInformation().getServiceInstanceId() == null
                                || input.getServiceInformation().getServiceInstanceId().length() == 0) {
-                       log.debug(NULL_OR_EMPTY_ERROR_LOG, SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
-                       responseBuilder.setAckFinalIndicator("Y");
-                       RpcResult<ContrailRouteTopologyOperationOutput> rpcResult = RpcResultBuilder
-                                       .<ContrailRouteTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
-                       return Futures.immediateFuture(rpcResult);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
+                       return buildRpcResultFuture(responseBuilder, NULL_OR_EMPTY_ERROR_PARAM);
                }
 
                String siid = input.getServiceInformation().getServiceInstanceId();
@@ -1324,67 +1208,38 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
                ServiceData sd = serviceDataBuilder.build();
                if (sd == null || sd.getServiceLevelOperStatus() == null) {
-                       log.debug("exiting {} because the service-instance does not have any service data in SDNC", SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder
-                                       .setResponseMessage("invalid input: the service-instance does not have any service data in SDNC");
-                       responseBuilder.setAckFinalIndicator("Y");
-                       RpcResult<ContrailRouteTopologyOperationOutput> rpcResult = RpcResultBuilder
-                                       .<ContrailRouteTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
-                       return Futures.immediateFuture(rpcResult);
+                       log.debug(EMPTY_SERVICE_INSTANCE_MESSAGE, svcOperation);
+                       return buildRpcResultFuture(responseBuilder, INVALID_INPUT_ERROR_MESSAGE);
                }
 
-               log.info("Adding INPUT data for " + SVC_OPERATION + " [" + siid + "] input: " + input);
+               log.info("Adding INPUT data for " + svcOperation + " [" + siid + "] input: " + input);
                ContrailRouteTopologyOperationInputBuilder inputBuilder = new ContrailRouteTopologyOperationInputBuilder(input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
 
                // Call SLI sync method
                // Get SvcLogicService reference
-
-               Properties respProps = null;
-
-               String errorCode = "200";
-               String errorMessage = null;
+               ErrorObject error = new ErrorObject("200", "");
                String ackFinal = "Y";
-               String allottedResourceId = "error";
+               String allottedResourceId = ERROR_NETWORK_ID;
                String serviceObjectPath = null;
                String contrailRouteObjectPath = null;
-
-               try {
-                       if (svcLogicClient.hasGraph(APP_NAME, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(APP_NAME, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
-                               } catch (Exception e) {
-                                       log.error("Caught exception executing service logic for {}", SVC_OPERATION, e);
-                                       errorMessage = e.getMessage();
-                                       errorCode = "500";
-                               }
-                       } else {
-                               errorMessage = NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty(ERROR_CODE_PARAM);
-                       errorMessage = respProps.getProperty(ERROR_MESSAGE_PARAM);
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
                        ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
-                       allottedResourceId = respProps.getProperty("allotted-resource-id");
+                       allottedResourceId = respProps.getProperty(ALLOTTED_RESOURCE_ID_PARAM);
                        serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
                        contrailRouteObjectPath = respProps.getProperty("contrail-route-object-path");
                }
 
-               if (errorCode != null && errorCode.length() != 0 && !(errorCode.equals("0") || errorCode.equals("200"))) {
-                       responseBuilder.setResponseCode(errorCode);
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (validateErrorObject(error)) {
+                       responseBuilder.setResponseCode(error.getStatusCode());
+                       responseBuilder.setResponseMessage(error.getMessage());
                        responseBuilder.setAckFinalIndicator(ackFinal);
 
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                        RpcResult<ContrailRouteTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<ContrailRouteTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
@@ -1395,7 +1250,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                try {
 
                        serviceData = serviceDataBuilder.build();
-                       log.info(UPDATING_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid, serviceData);
+                       log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
 
                        // service object
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -1404,13 +1259,12 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
                        saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
 
-                       if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null) {
+                       if (isValidRequest(input) &&
+                (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign) ||
+                    input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))) {
                                // Only update operational tree on activate or delete
-                               if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign)
-                                               || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)) {
-                                       log.info("Updating OPERATIONAL tree.");
-                                       saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
-                               }
+                log.info(UPDATING_TREE_INFO_MESSAGE);
+                saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
                        }
 
                        ContrailRouteResponseInformationBuilder contrailRouteResponseInformationBuilder = new ContrailRouteResponseInformationBuilder();
@@ -1424,53 +1278,67 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (IllegalStateException e) {
-                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, SVC_OPERATION, siid, e);
+                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        responseBuilder.setResponseCode("500");
                        responseBuilder.setResponseMessage(e.toString());
                        responseBuilder.setAckFinalIndicator("Y");
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<ContrailRouteTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<ContrailRouteTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                        return Futures.immediateFuture(rpcResult);
                }
 
                // Update succeeded
-               responseBuilder.setResponseCode(errorCode);
+               responseBuilder.setResponseCode(error.getStatusCode());
                responseBuilder.setAckFinalIndicator(ackFinal);
-               if (errorMessage != null) {
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (!error.getMessage().isEmpty()) {
+                       responseBuilder.setResponseMessage(error.getMessage());
                }
-               log.info(UPDATED_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid);
-               log.info(RETURNED_SUCCESS_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+               log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
+               log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                RpcResult<ContrailRouteTopologyOperationOutput> rpcResult = RpcResultBuilder
                                .<ContrailRouteTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                return Futures.immediateFuture(rpcResult);
        }
 
-       @Override
+       private Future<RpcResult<ContrailRouteTopologyOperationOutput>>
+               buildRpcResultFuture(ContrailRouteTopologyOperationOutputBuilder responseBuilder, String responseMessage) {
+
+               responseBuilder.setResponseCode("404");
+               responseBuilder.setResponseMessage(responseMessage);
+               responseBuilder.setAckFinalIndicator("Y");
+
+               RpcResult<ContrailRouteTopologyOperationOutput> rpcResult = RpcResultBuilder
+                       .<ContrailRouteTopologyOperationOutput>status(true)
+                       .withResult(responseBuilder.build())
+                       .build();
+
+               return Futures.immediateFuture(rpcResult);
+       }
+
+       private boolean isValidRequest(ContrailRouteTopologyOperationInput input) {
+        return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
+    }
+
+    @Override
        public Future<RpcResult<SecurityZoneTopologyOperationOutput>> securityZoneTopologyOperation(
                        SecurityZoneTopologyOperationInput input) {
 
-               final String SVC_OPERATION = "security-zone-topology-operation";
+               final String svcOperation = "security-zone-topology-operation";
                ServiceData serviceData;
                ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
                Properties parms = new Properties();
 
-               log.info(CALLED_STR, SVC_OPERATION);
+               log.info(CALLED_STR, svcOperation);
                // create a new response object
                SecurityZoneTopologyOperationOutputBuilder responseBuilder = new SecurityZoneTopologyOperationOutputBuilder();
 
                if (input == null || input.getServiceInformation() == null
                                || input.getServiceInformation().getServiceInstanceId() == null
                                || input.getServiceInformation().getServiceInstanceId().length() == 0) {
-                       log.debug(NULL_OR_EMPTY_ERROR_LOG, SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
-                       responseBuilder.setAckFinalIndicator("Y");
-                       RpcResult<SecurityZoneTopologyOperationOutput> rpcResult = RpcResultBuilder
-                                       .<SecurityZoneTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
-                       return Futures.immediateFuture(rpcResult);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
+                       return buildRpcResultFuture(responseBuilder, NULL_OR_EMPTY_ERROR_PARAM);
                }
 
                String siid = input.getServiceInformation().getServiceInstanceId();
@@ -1485,17 +1353,11 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
                ServiceData sd = serviceDataBuilder.build();
                if (sd == null || sd.getServiceLevelOperStatus() == null) {
-                       log.debug("exiting {} because the service-instance does not have any service data in SDNC", SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder
-                                       .setResponseMessage("invalid input: the service-instance does not have any service data in SDNC");
-                       responseBuilder.setAckFinalIndicator("Y");
-                       RpcResult<SecurityZoneTopologyOperationOutput> rpcResult = RpcResultBuilder
-                                       .<SecurityZoneTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
-                       return Futures.immediateFuture(rpcResult);
+                       log.debug(EMPTY_SERVICE_INSTANCE_MESSAGE, svcOperation);
+                       return buildRpcResultFuture(responseBuilder, INVALID_INPUT_ERROR_MESSAGE);
                }
 
-               log.info(ADDING_INPUT_DATA_LOG, SVC_OPERATION, siid, input);
+               log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
                SecurityZoneTopologyOperationInputBuilder inputBuilder = new SecurityZoneTopologyOperationInputBuilder(input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
 
@@ -1504,48 +1366,47 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
                Properties respProps = null;
 
-               String errorCode = "200";
-               String errorMessage = null;
+               ErrorObject error = new ErrorObject("200", "");
                String ackFinal = "Y";
-               String allottedResourceId = "error";
+               String allottedResourceId = ERROR_NETWORK_ID;
                String serviceObjectPath = null;
                String securityZoneObjectPath = null;
 
                try {
-                       if (svcLogicClient.hasGraph(APP_NAME, SVC_OPERATION, null, "sync")) {
+                       if (svcLogicClient.hasGraph(APP_NAME, svcOperation, null, "sync")) {
 
                                try {
-                                       respProps = svcLogicClient.execute(APP_NAME, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
+                                       respProps = svcLogicClient.execute(APP_NAME, svcOperation, null, "sync", serviceDataBuilder, parms);
                                } catch (Exception e) {
-                                       log.error("Caught exception executing service logic for {}", SVC_OPERATION, e);
-                                       errorMessage = e.getMessage();
-                                       errorCode = "500";
+                                       log.error(SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE, svcOperation, e);
+                                       error.setMessage(e.getMessage());
+                                       error.setStatusCode("500");
                                }
                        } else {
-                               errorMessage = NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
+                               error.setMessage(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + svcOperation + "'");
+                               error.setStatusCode("503");
                        }
                } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
+                       error.setStatusCode("500");
+                       error.setMessage(e.getMessage());
                        log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
                }
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty(ERROR_CODE_PARAM);
-                       errorMessage = respProps.getProperty(ERROR_MESSAGE_PARAM);
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
                        ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
-                       allottedResourceId = respProps.getProperty("allotted-resource-id");
+                       allottedResourceId = respProps.getProperty(ALLOTTED_RESOURCE_ID_PARAM);
                        serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
                        securityZoneObjectPath = respProps.getProperty("security-zone-object-path");
                }
 
-               if (errorCode != null && errorCode.length() != 0 && !(errorCode.equals("0") || errorCode.equals("200"))) {
-                       responseBuilder.setResponseCode(errorCode);
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (validateErrorObject(error)) {
+                       responseBuilder.setResponseCode(error.getStatusCode());
+                       responseBuilder.setResponseMessage(error.getMessage());
                        responseBuilder.setAckFinalIndicator(ackFinal);
 
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                        RpcResult<SecurityZoneTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<SecurityZoneTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
@@ -1556,7 +1417,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                try {
 
                        serviceData = serviceDataBuilder.build();
-                       log.info(UPDATING_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid, serviceData);
+                       log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
 
                        // service object
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -1565,13 +1426,12 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
                        saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
 
-                       if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null) {
+                       if (isValidRequest(input) &&
+                (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign) ||
+                    input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))) {
                                // Only update operational tree on activate or delete
-                               if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign)
-                                               || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)) {
-                                       log.info("Updating OPERATIONAL tree.");
-                                       saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
-                               }
+                log.info(UPDATING_TREE_INFO_MESSAGE);
+                saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
                        }
 
                        SecurityZoneResponseInformationBuilder securityZoneResponseInformationBuilder = new SecurityZoneResponseInformationBuilder();
@@ -1585,47 +1445,64 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (IllegalStateException e) {
-                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, SVC_OPERATION, siid, e);
+                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        responseBuilder.setResponseCode("500");
                        responseBuilder.setResponseMessage(e.toString());
                        responseBuilder.setAckFinalIndicator("Y");
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<SecurityZoneTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<SecurityZoneTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                        return Futures.immediateFuture(rpcResult);
                }
 
                // Update succeeded
-               responseBuilder.setResponseCode(errorCode);
+               responseBuilder.setResponseCode(error.getStatusCode());
                responseBuilder.setAckFinalIndicator(ackFinal);
-               if (errorMessage != null) {
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (!error.getMessage().isEmpty()) {
+                       responseBuilder.setResponseMessage(error.getMessage());
                }
-               log.info(UPDATED_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid);
-               log.info(RETURNED_SUCCESS_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+               log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
+               log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                RpcResult<SecurityZoneTopologyOperationOutput> rpcResult = RpcResultBuilder
                                .<SecurityZoneTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                return Futures.immediateFuture(rpcResult);
        }
 
-       @Override
+       private Future<RpcResult<SecurityZoneTopologyOperationOutput>>
+               buildRpcResultFuture(SecurityZoneTopologyOperationOutputBuilder responseBuilder, String responseMessage) {
+
+               responseBuilder.setResponseCode("404");
+               responseBuilder.setResponseMessage(responseMessage);
+               responseBuilder.setAckFinalIndicator("Y");
+
+               RpcResult<SecurityZoneTopologyOperationOutput> rpcResult = RpcResultBuilder
+                       .<SecurityZoneTopologyOperationOutput>status(true)
+                       .withResult(responseBuilder.build())
+                       .build();
+
+               return Futures.immediateFuture(rpcResult);
+       }
+
+       private boolean isValidRequest(SecurityZoneTopologyOperationInput input) {
+        return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
+    }
+
+    @Override
        public Future<RpcResult<TunnelxconnTopologyOperationOutput>> tunnelxconnTopologyOperation(
                        TunnelxconnTopologyOperationInput input) {
 
-               final String SVC_OPERATION = "tunnelxconn-topology-operation";
-               ServiceData serviceData;
-               ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
+               final String svcOperation = "tunnelxconn-topology-operation";
                Properties parms = new Properties();
 
-               log.info(CALLED_STR, SVC_OPERATION);
+               log.info(CALLED_STR, svcOperation);
                // create a new response object
                TunnelxconnTopologyOperationOutputBuilder responseBuilder = new TunnelxconnTopologyOperationOutputBuilder();
 
                if (input == null || input.getServiceInformation() == null
                                || input.getServiceInformation().getServiceInstanceId() == null
                                || input.getServiceInformation().getServiceInstanceId().length() == 0) {
-                       log.debug(NULL_OR_EMPTY_ERROR_LOG, SVC_OPERATION);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
                        responseBuilder.setResponseCode("404");
                        responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
                        responseBuilder.setAckFinalIndicator("Y");
@@ -1635,78 +1512,38 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                }
 
                String siid = input.getServiceInformation().getServiceInstanceId();
-/*
-               // Get the service-instance service data from MD-SAL
-               ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
-               getServiceData(siid, serviceDataBuilder);
-
-               if (input.getSdncRequestHeader() != null) {
-                       responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
-               }
-
-               ServiceData sd = serviceDataBuilder.build();
-               if (sd == null || sd.getServiceLevelOperStatus() == null) {
-                       log.debug("exiting {} because the service-instance does not have any service data in SDNC", SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder
-                                       .setResponseMessage("invalid input: the service-instance does not have any service data in SDNC");
-                       responseBuilder.setAckFinalIndicator("Y");
-                       RpcResult<TunnelxconnTopologyOperationOutput> rpcResult = RpcResultBuilder
-                                       .<TunnelxconnTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
-                       return Futures.immediateFuture(rpcResult);
-               }*/
 
-               log.info(ADDING_INPUT_DATA_LOG, SVC_OPERATION, siid, input);
+               log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
                TunnelxconnTopologyOperationInputBuilder inputBuilder = new TunnelxconnTopologyOperationInputBuilder(input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
 
                // Call SLI sync method
                // Get SvcLogicService reference
 
-               Properties respProps = null;
 
-               String errorCode = "200";
-               String errorMessage = null;
+
+               ErrorObject error = new ErrorObject("200", "");
                String ackFinal = "Y";
-               String allottedResourceId = "error";
+               String allottedResourceId = ERROR_NETWORK_ID;
                String serviceObjectPath = null;
                String tunnelxconnObjectPath = null;
-
-               try {
-                       if (svcLogicClient.hasGraph(APP_NAME, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(APP_NAME, SVC_OPERATION, null, "sync",  parms);
-                               } catch (Exception e) {
-                                       log.error("Caught exception executing service logic for {}", SVC_OPERATION, e);
-                                       errorMessage = e.getMessage();
-                                       errorCode = "500";
-                               }
-                       } else {
-                               errorMessage = NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty(ERROR_CODE_PARAM);
-                       errorMessage = respProps.getProperty(ERROR_MESSAGE_PARAM);
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
                        ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
-                       allottedResourceId = respProps.getProperty("allotted-resource-id");
+                       allottedResourceId = respProps.getProperty(ALLOTTED_RESOURCE_ID_PARAM);
                        serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
                        tunnelxconnObjectPath = respProps.getProperty("tunnelxconn-object-path");
                }
 
-               if (errorCode != null && errorCode.length() != 0 && !(errorCode.equals("0") || errorCode.equals("200"))) {
-                       responseBuilder.setResponseCode(errorCode);
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (validateErrorObject(error)) {
+                       responseBuilder.setResponseCode(error.getStatusCode());
+                       responseBuilder.setResponseMessage(error.getMessage());
                        responseBuilder.setAckFinalIndicator(ackFinal);
 
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                        RpcResult<TunnelxconnTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<TunnelxconnTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
@@ -1729,45 +1566,66 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (IllegalStateException e) {
-                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, SVC_OPERATION, siid, e);
+                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        responseBuilder.setResponseCode("500");
                        responseBuilder.setResponseMessage(e.toString());
                        responseBuilder.setAckFinalIndicator("Y");
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<TunnelxconnTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<TunnelxconnTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                        return Futures.immediateFuture(rpcResult);
                }
 
                // Update succeeded
-               responseBuilder.setResponseCode(errorCode);
+               responseBuilder.setResponseCode(error.getStatusCode());
                responseBuilder.setAckFinalIndicator(ackFinal);
-               if (errorMessage != null) {
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (!error.getMessage().isEmpty()) {
+                       responseBuilder.setResponseMessage(error.getMessage());
                }
-               log.info(UPDATED_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid);
-               log.info(RETURNED_SUCCESS_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+               log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
+               log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                RpcResult<TunnelxconnTopologyOperationOutput> rpcResult = RpcResultBuilder
                                .<TunnelxconnTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                return Futures.immediateFuture(rpcResult);
        }
 
+       private Properties tryGetProperties(String svcOperation, Properties parms, ErrorObject error) {
+               try {
+                       if (svcLogicClient.hasGraph(APP_NAME, svcOperation, null, "sync")) {
+
+                               try {
+                                       return svcLogicClient.execute(APP_NAME, svcOperation, null, "sync",  parms);
+                               } catch (Exception e) {
+                                       log.error(SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE, svcOperation, e);
+                                       error.setMessage(e.getMessage());
+                                       error.setStatusCode("500");
+                               }
+                       } else {
+                               error.setMessage(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + svcOperation + "'");
+                               error.setStatusCode("503");
+                       }
+               } catch (Exception e) {
+            error.setMessage(e.getMessage());
+            error.setStatusCode("500");
+                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
+               }
+               return null;
+       }
+
        @Override
        public Future<RpcResult<BrgTopologyOperationOutput>> brgTopologyOperation(BrgTopologyOperationInput input) {
-               final String SVC_OPERATION = "brg-topology-operation";
-               ServiceData serviceData;
-               ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
+               final String svcOperation = "brg-topology-operation";
                Properties parms = new Properties();
 
-               log.info(CALLED_STR, SVC_OPERATION);
+               log.info(CALLED_STR, svcOperation);
                // create a new response object
                BrgTopologyOperationOutputBuilder responseBuilder = new BrgTopologyOperationOutputBuilder();
 
                if (input == null || input.getServiceInformation() == null
                                || input.getServiceInformation().getServiceInstanceId() == null
                                || input.getServiceInformation().getServiceInstanceId().length() == 0) {
-                       log.debug(NULL_OR_EMPTY_ERROR_LOG, SVC_OPERATION);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
                        responseBuilder.setResponseCode("404");
                        responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
                        responseBuilder.setAckFinalIndicator("Y");
@@ -1778,77 +1636,34 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
                String siid = input.getServiceInformation().getServiceInstanceId();
 
-/*             // Get the service-instance service data from MD-SAL
-               ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
-               getServiceData(siid, serviceDataBuilder);
-
-               if (input.getSdncRequestHeader() != null) {
-                       responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
-               }
-
-               ServiceData sd = serviceDataBuilder.build();
-               if (sd == null || sd.getServiceLevelOperStatus() == null) {
-                       log.debug("exiting {} because the service-instance does not have any service data in SDNC", SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder
-                                       .setResponseMessage("invalid input: the service-instance does not have any service data in SDNC");
-                       responseBuilder.setAckFinalIndicator("Y");
-                       RpcResult<BrgTopologyOperationOutput> rpcResult = RpcResultBuilder.<BrgTopologyOperationOutput>status(true)
-                                       .withResult(responseBuilder.build()).build();
-                       return Futures.immediateFuture(rpcResult);
-               }*/
-
-               log.info(ADDING_INPUT_DATA_LOG, SVC_OPERATION, siid, input);
+               log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
                BrgTopologyOperationInputBuilder inputBuilder = new BrgTopologyOperationInputBuilder(input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
 
                // Call SLI sync method
                // Get SvcLogicService reference
-
-               Properties respProps = null;
-
-               String errorCode = "200";
-               String errorMessage = null;
+               ErrorObject error = new ErrorObject("200", "");
                String ackFinal = "Y";
-               String allottedResourceId = "error";
+               String allottedResourceId = ERROR_NETWORK_ID;
                String serviceObjectPath = null;
                String brgObjectPath = null;
-
-               try {
-                       if (svcLogicClient.hasGraph(APP_NAME, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(APP_NAME, SVC_OPERATION, null, "sync", parms);
-                               } catch (Exception e) {
-                                       log.error("Caught exception executing service logic for {}", SVC_OPERATION, e);
-                                       errorMessage = e.getMessage();
-                                       errorCode = "500";
-                               }
-                       } else {
-                               errorMessage = NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty(ERROR_CODE_PARAM);
-                       errorMessage = respProps.getProperty(ERROR_MESSAGE_PARAM);
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
                        ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
-                       allottedResourceId = respProps.getProperty("allotted-resource-id");
+                       allottedResourceId = respProps.getProperty(ALLOTTED_RESOURCE_ID_PARAM);
                        serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
                        brgObjectPath = respProps.getProperty("brg-object-path");
                }
 
-               if (errorCode != null && errorCode.length() != 0 && !(errorCode.equals("0") || errorCode.equals("200"))) {
-                       responseBuilder.setResponseCode(errorCode);
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (validateErrorObject(error)) {
+                       responseBuilder.setResponseCode(error.getStatusCode());
+                       responseBuilder.setResponseMessage(error.getMessage());
                        responseBuilder.setAckFinalIndicator(ackFinal);
 
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                        RpcResult<BrgTopologyOperationOutput> rpcResult = RpcResultBuilder.<BrgTopologyOperationOutput>status(true)
                                        .withResult(responseBuilder.build()).build();
@@ -1870,24 +1685,24 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (IllegalStateException e) {
-                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, SVC_OPERATION, siid, e);
+                       log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        responseBuilder.setResponseCode("500");
                        responseBuilder.setResponseMessage(e.toString());
                        responseBuilder.setAckFinalIndicator("Y");
-                       log.error(RETURNED_FAILED_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<BrgTopologyOperationOutput> rpcResult = RpcResultBuilder.<BrgTopologyOperationOutput>status(true)
                                        .withResult(responseBuilder.build()).build();
                        return Futures.immediateFuture(rpcResult);
                }
 
                // Update succeeded
-               responseBuilder.setResponseCode(errorCode);
+               responseBuilder.setResponseCode(error.getStatusCode());
                responseBuilder.setAckFinalIndicator(ackFinal);
-               if (errorMessage != null) {
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (!error.getMessage().isEmpty()) {
+                       responseBuilder.setResponseMessage(error.getMessage());
                }
-               log.info(UPDATED_MDSAL_INFO_MESSAGE, SVC_OPERATION, siid);
-               log.info(RETURNED_SUCCESS_MESSAGE, SVC_OPERATION, siid, responseBuilder.build());
+               log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
+               log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                RpcResult<BrgTopologyOperationOutput> rpcResult = RpcResultBuilder.<BrgTopologyOperationOutput>status(true)
                                .withResult(responseBuilder.build()).build();
@@ -1898,20 +1713,17 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
        public Future<RpcResult<PreloadVnfTopologyOperationOutput>> preloadVnfTopologyOperation(
                        PreloadVnfTopologyOperationInput input) {
 
-               final String SVC_OPERATION = "preload-vnf-topology-operation";
+               final String svcOperation = "preload-vnf-topology-operation";
                PreloadData preloadData;
                Properties parms = new Properties();
 
-               log.info(CALLED_STR, SVC_OPERATION);
+               log.info(CALLED_STR, svcOperation);
                // create a new response object
                PreloadVnfTopologyOperationOutputBuilder responseBuilder = new PreloadVnfTopologyOperationOutputBuilder();
 
-               // Result from savePreloadData
-               final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
-
                if (input == null || input.getVnfTopologyInformation() == null
                                || input.getVnfTopologyInformation().getVnfTopologyIdentifier() == null) {
-                       log.debug("exiting {} because of null input", SVC_OPERATION);
+                       log.debug("exiting {} because of null input", svcOperation);
                        responseBuilder.setResponseCode("403");
                        responseBuilder.setResponseMessage("invalid input: input is null");
                        responseBuilder.setAckFinalIndicator("Y");
@@ -1921,12 +1733,12 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                }
 
                // Grab the name and type from the input buffer
-               String preload_name = input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfName();
-               String preload_type = input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfType();
+               String preloadName = input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfName();
+               String preloadType = input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfType();
 
                // Make sure we have a preload_name and preload_type
-               if (preload_name == null || preload_name.length() == 0 || preload_type == null || preload_type.length() == 0) {
-                       log.debug("exiting {} vnf-name or vnf-type is null or empty", SVC_OPERATION);
+               if (preloadName == null || preloadName.length() == 0 || preloadType == null || preloadType.length() == 0) {
+                       log.debug("exiting {} vnf-name or vnf-type is null or empty", svcOperation);
                        responseBuilder.setResponseCode("403");
                        responseBuilder.setResponseMessage("invalid input: vnf-name or vnf-type is null or empty");
                        responseBuilder.setAckFinalIndicator("Y");
@@ -1940,10 +1752,10 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                }
 
                PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
-               getPreloadData(preload_name, preload_type, preloadDataBuilder);
+               getPreloadData(preloadName, preloadType, preloadDataBuilder);
 
                PreloadDataBuilder operDataBuilder = new PreloadDataBuilder();
-               getPreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
+               getPreloadData(preloadName, preloadType, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
 
                // setup a preload-data object builder
                // ACTION preload-vnf-topology-operation
@@ -1959,66 +1771,42 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // uses network-topology-information;
                // uses oper-status;
 
-               log.info("Adding INPUT data for {} [{},{}] input: {}", SVC_OPERATION, preload_name, preload_type, input);
+               log.info("Adding INPUT data for {} [{},{}] input: {}", svcOperation, preloadName, preloadType, input);
                PreloadVnfTopologyOperationInputBuilder inputBuilder = new PreloadVnfTopologyOperationInputBuilder(input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
-               log.info("Adding OPERATIONAL data for {} [{},{}] operational-data: {}", SVC_OPERATION, preload_name,
-                               preload_type, operDataBuilder.build());
+               log.info("Adding OPERATIONAL data for {} [{},{}] operational-data: {}", svcOperation, preloadName,
+                               preloadType, operDataBuilder.build());
                GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
 
                // Call SLI sync method
                // Get SvcLogicService reference
-
-               Properties respProps = null;
-
-               String errorCode = "200";
-               String errorMessage = null;
+               ErrorObject error = new ErrorObject("200", "");
                String ackFinal = "Y";
-
-               try {
-                       if (svcLogicClient.hasGraph(APP_NAME, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(APP_NAME, SVC_OPERATION, null, "sync", preloadDataBuilder, parms);
-                               } catch (Exception e) {
-                                       log.error("Caught exception executing service logic for {}", SVC_OPERATION, e);
-                                       errorMessage = e.getMessage();
-                                       errorCode = "500";
-                               }
-                       } else {
-                               errorMessage = NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty(ERROR_CODE_PARAM);
-                       errorMessage = respProps.getProperty(ERROR_MESSAGE_PARAM);
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
                        ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
-                       // internalError = respProps.getProperty("internal-error", "false");
                }
 
-               if (errorCode != null && errorCode.length() != 0 && !(errorCode.equals("0") || errorCode.equals("200"))) {
+               if (validateErrorObject(error)) {
 
-                       responseBuilder.setResponseCode(errorCode);
-                       responseBuilder.setResponseMessage(errorMessage);
+                       responseBuilder.setResponseCode(error.getStatusCode());
+                       responseBuilder.setResponseMessage(error.getMessage());
                        responseBuilder.setAckFinalIndicator(ackFinal);
 
                        VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
-                       preloadVnfListBuilder.setVnfName(preload_name);
-                       preloadVnfListBuilder.setVnfType(preload_type);
+                       preloadVnfListBuilder.setVnfName(preloadName);
+                       preloadVnfListBuilder.setVnfType(preloadType);
                        preloadVnfListBuilder.setPreloadData(preloadDataBuilder.build());
-                       log.error("Returned FAILED for {} [{},{}] error code: '{}', Reason: '{}'", SVC_OPERATION, preload_name,
-                                       preload_type, errorCode, errorMessage);
+                       log.error("Returned FAILED for {} [{},{}] error code: '{}', Reason: '{}'", svcOperation, preloadName,
+                                       preloadType, error.getStatusCode(), error.getMessage());
                        try {
                                savePreloadList(preloadVnfListBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
                        } catch (Exception e) {
-                               log.error("Caught Exception updating MD-SAL for {} [{},{}] \n", SVC_OPERATION, preload_name,
-                                               preload_type, e);
+                               log.error(UPDATING_MDSAL_ERROR_MESSAGE_2, svcOperation, preloadName,
+                                               preloadType, e);
                        }
                        log.debug("Sending Success rpc result due to external error");
                        RpcResult<PreloadVnfTopologyOperationOutput> rpcResult = RpcResultBuilder
@@ -2028,26 +1816,14 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
                // Got success from SLI
                try {
-                       preloadData = preloadDataBuilder.build();
-                       log.info("Updating MD-SAL for {} [{},{}] preloadData: {}", SVC_OPERATION, preload_name, preload_type,
-                                       preloadData);
-                       // svc-configuration-list
-                       VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
-                       preloadVnfListBuilder.setVnfName(preload_name);
-                       preloadVnfListBuilder.setVnfType(preload_type);
-                       preloadVnfListBuilder.setPreloadData(preloadData);
-
-                       // merge flag sets to false to allow it to be overwritten (not appended)
-                       savePreloadList(preloadVnfListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
-                       log.info("Updating OPERATIONAL tree.");
-                       savePreloadList(preloadVnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
+                       updatePreloadData(svcOperation, preloadName, preloadType, preloadDataBuilder);
                } catch (Exception e) {
-                       log.error("Caught Exception updating MD-SAL for {} [{},{}] \n", SVC_OPERATION, preload_name, preload_type,
+                       log.error(UPDATING_MDSAL_ERROR_MESSAGE_2, svcOperation, preloadName, preloadType,
                                        e);
                        responseBuilder.setResponseCode("500");
                        responseBuilder.setResponseMessage(e.toString());
                        responseBuilder.setAckFinalIndicator("Y");
-                       log.error("Returned FAILED for {} [{},{}] {}", SVC_OPERATION, preload_name, preload_type,
+                       log.error("Returned FAILED for {} [{},{}] {}", svcOperation, preloadName, preloadType,
                                        responseBuilder.build());
                        RpcResult<PreloadVnfTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<PreloadVnfTopologyOperationOutput>status(false).withResult(responseBuilder.build()).build();
@@ -2055,13 +1831,13 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                }
 
                // Update succeeded
-               responseBuilder.setResponseCode(errorCode);
+               responseBuilder.setResponseCode(error.getStatusCode());
                responseBuilder.setAckFinalIndicator(ackFinal);
-               if (errorMessage != null) {
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (!error.getMessage().isEmpty()) {
+                       responseBuilder.setResponseMessage(error.getMessage());
                }
-               log.info("Updated MD-SAL for {} [{},{}]", SVC_OPERATION, preload_name, preload_type);
-               log.info("Returned SUCCESS for {} [{},{}] {}", SVC_OPERATION, preload_name, preload_type,
+               log.info("Updated MD-SAL for {} [{},{}]", svcOperation, preloadName, preloadType);
+               log.info("Returned SUCCESS for {} [{},{}] {}", svcOperation, preloadName, preloadType,
                                responseBuilder.build());
 
                RpcResult<PreloadVnfTopologyOperationOutput> rpcResult = RpcResultBuilder
@@ -2069,25 +1845,40 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                return Futures.immediateFuture(rpcResult);
        }
 
+       private void updatePreloadData(String svcOperation, String preloadName, String preloadType,
+               PreloadDataBuilder preloadDataBuilder) {
+               PreloadData preloadData;
+               preloadData = preloadDataBuilder.build();
+               log.info("Updating MD-SAL for {} [{},{}] preloadData: {}", svcOperation, preloadName, preloadType,
+                preloadData);
+               // svc-configuration-list
+               VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
+               preloadVnfListBuilder.setVnfName(preloadName);
+               preloadVnfListBuilder.setVnfType(preloadType);
+               preloadVnfListBuilder.setPreloadData(preloadData);
+
+               // merge flag sets to false to allow it to be overwritten (not appended)
+               savePreloadList(preloadVnfListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
+               log.info(UPDATING_TREE_INFO_MESSAGE);
+               savePreloadList(preloadVnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
+       }
+
        @Override
        public Future<RpcResult<PreloadNetworkTopologyOperationOutput>> preloadNetworkTopologyOperation(
                        PreloadNetworkTopologyOperationInput input) {
 
-               final String SVC_OPERATION = "preload-network-topology-operation";
+               final String svcOperation = "preload-network-topology-operation";
                PreloadData preloadData;
                Properties parms = new Properties();
 
-               log.info(CALLED_STR, SVC_OPERATION);
+               log.info(CALLED_STR, svcOperation);
                // create a new response object
                PreloadNetworkTopologyOperationOutputBuilder responseBuilder = new PreloadNetworkTopologyOperationOutputBuilder();
 
-               // Result from savePreloadData
-               final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
-
                if (input == null || input.getNetworkTopologyInformation() == null
                                || input.getNetworkTopologyInformation().getNetworkTopologyIdentifier() == null) {
 
-                       log.debug("exiting {} because of null input", SVC_OPERATION);
+                       log.debug("exiting {} because of null input", svcOperation);
                        responseBuilder.setResponseCode("403");
                        responseBuilder.setResponseMessage("input is null");
                        responseBuilder.setAckFinalIndicator("Y");
@@ -2097,12 +1888,12 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                }
 
                // Grab the name and type from the input buffer
-               String preload_name = input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkName();
-               String preload_type = input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkType();
+               String preloadName = input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkName();
+               String preloadType = input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkType();
 
                // Make sure we have a preload_name and preload_type
-               if (preload_name == null || preload_name.length() == 0 || preload_type == null || preload_type.length() == 0) {
-                       log.debug("exiting {} because of invalid preload-name", SVC_OPERATION);
+               if (preloadName == null || preloadName.length() == 0 || preloadType == null || preloadType.length() == 0) {
+                       log.debug("exiting {} because of invalid preload-name", svcOperation);
                        responseBuilder.setResponseCode("403");
                        responseBuilder.setResponseMessage("input, invalid preload-name");
                        responseBuilder.setAckFinalIndicator("Y");
@@ -2116,10 +1907,10 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                }
 
                PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
-               getPreloadData(preload_name, preload_type, preloadDataBuilder);
+               getPreloadData(preloadName, preloadType, preloadDataBuilder);
 
                PreloadDataBuilder operDataBuilder = new PreloadDataBuilder();
-               getPreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
+               getPreloadData(preloadName, preloadType, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
 
                //
                // setup a preload-data object builder
@@ -2136,67 +1927,43 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // uses network-topology-information;
                // uses oper-status;
 
-               log.info("Adding INPUT data for {} [{},{}] input: {}", SVC_OPERATION, preload_name, preload_type, input);
+               log.info("Adding INPUT data for {} [{},{}] input: {}", svcOperation, preloadName, preloadType, input);
                PreloadNetworkTopologyOperationInputBuilder inputBuilder = new PreloadNetworkTopologyOperationInputBuilder(
                                input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
-               log.info("Adding OPERATIONAL data for {} [{},{}] operational-data: {}", SVC_OPERATION, preload_name,
-                               preload_type, operDataBuilder.build());
+               log.info("Adding OPERATIONAL data for {} [{},{}] operational-data: {}", svcOperation, preloadName,
+                               preloadType, operDataBuilder.build());
                GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
 
                // Call SLI sync method
                // Get SvcLogicService reference
-
-               Properties respProps = null;
-
-               String errorCode = "200";
-               String errorMessage = null;
+               ErrorObject error = new ErrorObject("200", "");
                String ackFinal = "Y";
-
-               try {
-                       if (svcLogicClient.hasGraph(APP_NAME, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(APP_NAME, SVC_OPERATION, null, "sync", preloadDataBuilder, parms);
-                               } catch (Exception e) {
-                                       log.error("Caught exception executing service logic for {}", SVC_OPERATION, e);
-                                       errorMessage = e.getMessage();
-                                       errorCode = "500";
-                               }
-                       } else {
-                               errorMessage = NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty(ERROR_CODE_PARAM);
-                       errorMessage = respProps.getProperty(ERROR_MESSAGE_PARAM);
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
                        ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
-                       // internalError = respProps.getProperty("internal-error", "false");
                }
 
-               if (errorCode != null && errorCode.length() != 0 && !(errorCode.equals("0") || errorCode.equals("200"))) {
+               if (validateErrorObject(error)) {
 
-                       responseBuilder.setResponseCode(errorCode);
-                       responseBuilder.setResponseMessage(errorMessage);
+                       responseBuilder.setResponseCode(error.getStatusCode());
+                       responseBuilder.setResponseMessage(error.getMessage());
                        responseBuilder.setAckFinalIndicator(ackFinal);
 
                        VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
-                       preloadVnfListBuilder.setVnfName(preload_name);
-                       preloadVnfListBuilder.setVnfType(preload_type);
+                       preloadVnfListBuilder.setVnfName(preloadName);
+                       preloadVnfListBuilder.setVnfType(preloadType);
                        preloadVnfListBuilder.setPreloadData(preloadDataBuilder.build());
-                       log.error("Returned FAILED for {} [{},{}] error code: '{}', Reason: '{}'", SVC_OPERATION, preload_name,
-                                       preload_type, errorCode, errorMessage);
+                       log.error("Returned FAILED for {} [{},{}] error code: '{}', Reason: '{}'", svcOperation, preloadName,
+                                       preloadType, error.getStatusCode(), error.getMessage());
                        try {
                                savePreloadList(preloadVnfListBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
                        } catch (Exception e) {
-                               log.error("Caught Exception updating MD-SAL for {} [{},{}] \n", SVC_OPERATION, preload_name,
-                                               preload_type, e);
+                               log.error(UPDATING_MDSAL_ERROR_MESSAGE_2, svcOperation, preloadName,
+                                               preloadType, e);
 
                        }
                        log.debug("Sending Success rpc result due to external error");
@@ -2207,26 +1974,13 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
                // Got success from SLI
                try {
-                       preloadData = preloadDataBuilder.build();
-                       log.info("Updating MD-SAL for {} [{},{}] preloadData: {}", SVC_OPERATION, preload_name, preload_type,
-                                       preloadData);
-                       // svc-configuration-list
-                       VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
-                       preloadVnfListBuilder.setVnfName(preload_name);
-                       preloadVnfListBuilder.setVnfType(preload_type);
-                       preloadVnfListBuilder.setPreloadData(preloadData);
-
-                       // merge flag sets to false to allow it to be overwritten (not appended)
-                       savePreloadList(preloadVnfListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
-                       log.info("Updating OPERATIONAL tree.");
-                       savePreloadList(preloadVnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
+                       updatePreloadData(svcOperation, preloadName, preloadType, preloadDataBuilder);
                } catch (Exception e) {
-                       log.error("Caught Exception updating MD-SAL for " + SVC_OPERATION + " [" + preload_name + "," + preload_type
-                                       + "] \n", e);
+                       log.error(UPDATING_MDSAL_ERROR_MESSAGE_2, svcOperation, preloadName, preloadType, e);
                        responseBuilder.setResponseCode("500");
                        responseBuilder.setResponseMessage(e.toString());
                        responseBuilder.setAckFinalIndicator("Y");
-                       log.error("Returned FAILED for {} [{},{}] {}", SVC_OPERATION, preload_name, preload_type,
+                       log.error("Returned FAILED for {} [{},{}] {}", svcOperation, preloadName, preloadType,
                                        responseBuilder.build());
                        RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<PreloadNetworkTopologyOperationOutput>status(false).withResult(responseBuilder.build()).build();
@@ -2234,13 +1988,13 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                }
 
                // Update succeeded
-               responseBuilder.setResponseCode(errorCode);
+               responseBuilder.setResponseCode(error.getStatusCode());
                responseBuilder.setAckFinalIndicator(ackFinal);
-               if (errorMessage != null) {
-                       responseBuilder.setResponseMessage(errorMessage);
+               if (!error.getMessage().isEmpty()) {
+                       responseBuilder.setResponseMessage(error.getMessage());
                }
-               log.info("Updated MD-SAL for {} [{},{}]", SVC_OPERATION, preload_name, preload_type);
-               log.info("Returned SUCCESS for {} [{},{}] {}", SVC_OPERATION, preload_name, preload_type,
+               log.info("Updated MD-SAL for {} [{},{}]", svcOperation, preloadName, preloadType);
+               log.info("Returned SUCCESS for {} [{},{}] {}", svcOperation, preloadName, preloadType,
                                responseBuilder.build());
 
                RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult = RpcResultBuilder