GenericResourceApiProvider fixes part 4
[sdnc/northbound.git] / generic-resource-api / provider / src / main / java / org / onap / sdnc / northbound / GenericResourceApiProvider.java
index a747df6..fea699b 100644 (file)
@@ -86,6 +86,7 @@ import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.re
 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.status.ServiceStatus.RpcAction;
 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.status.ServiceStatusBuilder;
 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.tunnelxconn.response.information.TunnelxconnResponseInformationBuilder;
+import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
@@ -95,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
@@ -136,25 +136,50 @@ import com.google.common.util.concurrent.SettableFuture;
 
 public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURCEAPIService {
 
-       private final Logger log = LoggerFactory.getLogger(GenericResourceApiProvider.class);
-       private final String appName = "generic-resource-api";
+       private static final String APP_NAME = "generic-resource-api";
+       private static final String CALLED_STR = "{} called.";
+       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: {}";
+       private static final String OPERATIONAL_DATA_PARAM = "operational-data";
+       private static final String NO_SERVICE_LOGIC_ACTIVE = "No service logic active for ";
+       private static final String SERVICE_LOGIC_SEARCH_ERROR_MESSAGE = "Caught exception looking for service logic";
+       private static final String ERROR_CODE_PARAM = "error-code";
+       private static final String ERROR_MESSAGE_PARAM = "error-message";
+       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 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;
 
-       private final GenericResourceApiSvcLogicServiceClient svcLogicClient;
-
-       public GenericResourceApiProvider(
+    public GenericResourceApiProvider(
                        DataBroker dataBroker,
                        NotificationPublishService notificationPublishService,
                        RpcProviderRegistry rpcProviderRegistry,
                        GenericResourceApiSvcLogicServiceClient client
        ) {
-               log.info("Creating provider for {}", appName);
+               log.info("Creating provider for {}", APP_NAME);
                executor = Executors.newFixedThreadPool(1);
                setDataBroker(dataBroker);
                setNotificationService(notificationPublishService);
@@ -165,16 +190,16 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
        }
 
        public void initialize() {
-               log.info("Initializing provider for {}", appName);
+               log.info("Initializing provider for {}", APP_NAME);
                // Create the top level containers
                createContainers();
                try {
                        GenericResourceApiUtil.loadProperties();
                } catch (Exception e) {
-                       log.error("Caught Exception while trying to load properties file");
+                       log.error("Caught Exception while trying to load properties file", e);
                }
 
-               log.info("Initialization complete for {}", appName);
+               log.info("Initialization complete for {}", APP_NAME);
        }
 
        protected void initializeChild() {
@@ -183,43 +208,45 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
        @Override
        public void close() throws Exception {
-               log.info("Closing provider for {}", appName);
+               log.info("Closing provider for {}", APP_NAME);
                executor.shutdown();
                rpcRegistration.close();
-               log.info("Successfully closed provider for {}", appName);
+               log.info("Successfully closed provider for {}", APP_NAME);
        }
 
        private static class Iso8601Util {
-               private static TimeZone tz = TimeZone.getTimeZone("UTC");
-               private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+
+               private static TimeZone timeZone = TimeZone.getTimeZone("UTC");
+               private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+
+               private Iso8601Util() {}
 
                static {
-                       df.setTimeZone(tz);
+                       dateFormat.setTimeZone(timeZone);
                }
-
                private static String now() {
-                       return df.format(new Date());
+                       return dateFormat.format(new Date());
                }
        }
 
        public void setDataBroker(DataBroker dataBroker) {
                this.dataBroker = dataBroker;
                if (log.isDebugEnabled()) {
-                       log.debug("DataBroker set to {}", (dataBroker == null ? "null" : "non-null"));
+                       log.debug("DataBroker set to {}", dataBroker == null ? NULL_PARAM : NON_NULL_PARAM);
                }
        }
 
        public void setNotificationService(NotificationPublishService notificationService) {
                this.notificationService = notificationService;
                if (log.isDebugEnabled()) {
-                       log.debug("Notification Service set to {}", (notificationService == null ? "null" : "non-null"));
+                       log.debug("Notification Service set to {}", notificationService == null ? NULL_PARAM : NON_NULL_PARAM);
                }
        }
 
        public void setRpcRegistry(RpcProviderRegistry rpcRegistry) {
                this.rpcRegistry = rpcRegistry;
                if (log.isDebugEnabled()) {
-                       log.debug("RpcRegistry set to {}", (rpcRegistry == null ? "null" : "non-null"));
+                       log.debug("RpcRegistry set to {}", rpcRegistry == null ? NULL_PARAM : NON_NULL_PARAM);
                }
        }
 
@@ -261,15 +288,6 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                if (requestInformation != null && requestInformation.getRequestAction() != null) {
                        serviceStatusBuilder.setAction(requestInformation.getRequestAction().toString());
                }
-
-               /*
-                * if (requestInformation != null && requestInformation.getRequestSubAction() !=
-                * null) { switch (requestInformation.getRequestSubAction()) { case SUPP:
-                * serviceStatusBuilder.setVnfsdnSubaction(VnfsdnSubaction.SUPP); break; case
-                * CANCEL: serviceStatusBuilder.setVnfsdnSubaction(VnfsdnSubaction.CANCEL);
-                * break; default: log.error("Unknown RequestSubAction: " +
-                * requestInformation.getRequestSubAction() ); break; }; }
-                */
        }
 
        private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, SdncRequestHeader requestHeader) {
@@ -304,12 +322,15 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
 
        private void getServiceData(String siid, ServiceDataBuilder serviceDataBuilder, LogicalDatastoreType type) {
                // See if any data exists yet for this siid, if so grab it.
-               InstanceIdentifier serviceInstanceIdentifier = InstanceIdentifier.<Services>builder(Services.class)
-                               .child(Service.class, new ServiceKey(siid)).build();
+               InstanceIdentifier<Service> serviceInstanceIdentifier = InstanceIdentifier
+                       .builder(Services.class)
+                       .child(Service.class, new ServiceKey(siid))
+                       .build();
+
                ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
-               Optional<Service> data = null;
+               Optional<Service> data = Optional.absent();
                try {
-                       data = (Optional<Service>) readTx.read(type, serviceInstanceIdentifier).get();
+                       data = readTx.read(type, serviceInstanceIdentifier).get();
                } catch (InterruptedException | ExecutionException e) {
                        log.error("Caught Exception reading MD-SAL ({}) data for [{}] ", type, siid, e);
                }
@@ -337,159 +358,158 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                }
        }
 
-       private void getPreloadData(String vnf_name, String vnf_type, PreloadDataBuilder preloadDataBuilder) {
+       private void getPreloadData(String vnfName, String vnfType, PreloadDataBuilder preloadDataBuilder) {
                // default to config
-               getPreloadData(vnf_name, vnf_type, preloadDataBuilder, LogicalDatastoreType.CONFIGURATION);
+               getPreloadData(vnfName, vnfType, preloadDataBuilder, LogicalDatastoreType.CONFIGURATION);
        }
 
-       private void getPreloadData(String preload_name, String preload_type, PreloadDataBuilder preloadDataBuilder,
+       private void getPreloadData(String preloadName, String preloadType, PreloadDataBuilder preloadDataBuilder,
                        LogicalDatastoreType type) {
                // See if any data exists yet for this name/type, if so grab it.
-               InstanceIdentifier preloadInstanceIdentifier = InstanceIdentifier.<PreloadVnfs>builder(PreloadVnfs.class)
-                               .child(VnfPreloadList.class, new VnfPreloadListKey(preload_name, preload_type)).build();
+               InstanceIdentifier<VnfPreloadList> preloadInstanceIdentifier = InstanceIdentifier
+                       .builder(PreloadVnfs.class)
+                       .child(VnfPreloadList.class, new VnfPreloadListKey(preloadName, preloadType))
+                       .build();
+
                ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
-               Optional<VnfPreloadList> data = null;
+               Optional<VnfPreloadList> data = Optional.absent();
                try {
-                       data = (Optional<VnfPreloadList>) readTx.read(type, preloadInstanceIdentifier).get();
+                       data = readTx.read(type, preloadInstanceIdentifier).get();
                } catch (InterruptedException | ExecutionException e) {
-                       log.error("Caught Exception reading MD-SAL ({}) for [{},{}] ", type, preload_name, preload_type, e);
+                       log.error("Caught Exception reading MD-SAL ({}) for [{},{}] ", type, preloadName, preloadType, e);
                }
 
                if (data != null && data.isPresent()) {
                        PreloadData preloadData = data.get().getPreloadData();
                        if (preloadData != null) {
-                               log.info("Read MD-SAL ({}) data for [{},{}] PreloadData: {}", type, preload_name, preload_type,
+                               log.info("Read MD-SAL ({}) data for [{},{}] PreloadData: {}", type, preloadName, preloadType,
                                                preloadData);
                                preloadDataBuilder.setVnfTopologyInformation(preloadData.getVnfTopologyInformation());
                                preloadDataBuilder.setNetworkTopologyInformation(preloadData.getNetworkTopologyInformation());
                                preloadDataBuilder.setOperStatus(preloadData.getOperStatus());
                        } else {
-                               log.info("No preload-data found in MD-SAL ({}) for [{},{}] ", type, preload_name, preload_type);
+                               log.info("No preload-data found in MD-SAL ({}) for [{},{}] ", type, preloadName, preloadType);
                        }
                } else {
-                       log.info("No data found in MD-SAL ({}) for [{},{}] ", type, preload_name, preload_type);
+                       log.info("No data found in MD-SAL ({}) for [{},{}] ", type, preloadName, preloadType);
                }
        }
 
-       private void saveService(final Service entry, boolean merge, LogicalDatastoreType storeType)
-                       throws IllegalStateException {
+       private void saveService(final Service entry, boolean merge, LogicalDatastoreType storeType) {
                // Each entry will be identifiable by a unique key, we have to create that
                // identifier
-               InstanceIdentifier.InstanceIdentifierBuilder<Service> serviceBuilder = InstanceIdentifier
-                               .<Services>builder(Services.class).child(Service.class, entry.getKey());
-               InstanceIdentifier<Service> path = serviceBuilder.build();
+               InstanceIdentifier<Service> path = InstanceIdentifier
+                       .builder(Services.class)
+                       .child(Service.class, entry.getKey())
+                       .build();
+
+               trySaveEntry(entry, merge, storeType, path);
+       }
+
+       private void savePreloadList(final VnfPreloadList entry, boolean merge, LogicalDatastoreType storeType) {
 
+               // Each entry will be identifiable by a unique key, we have to create that
+               // identifier
+               InstanceIdentifier<VnfPreloadList> path = InstanceIdentifier
+                       .builder(PreloadVnfs.class)
+                       .child(VnfPreloadList.class, entry.getKey())
+                       .build();
+
+               trySaveEntry(entry, merge, storeType, path);
+       }
+
+       private <T extends DataObject> void trySaveEntry(T entry, boolean merge, LogicalDatastoreType storeType,
+               InstanceIdentifier<T> path) {
                int tries = 2;
                while (true) {
                        try {
-                               WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-                               if (merge) {
-                                       tx.merge(storeType, path, entry);
-                               } else {
-                                       tx.put(storeType, path, entry);
-                               }
-                               tx.submit().checkedGet();
-                               log.debug("Update DataStore succeeded");
+                               save(entry, merge, storeType, path);
                                break;
-                       } catch (final TransactionCommitFailedException e) {
-                               if (e instanceof OptimisticLockFailedException) {
-                                       if (--tries <= 0) {
-                                               log.debug("Got OptimisticLockFailedException on last try - failing ");
-                                               throw new IllegalStateException(e);
-                                       }
-                                       log.debug("Got OptimisticLockFailedException - trying again ");
-                               } else {
-                                       log.debug("Update DataStore failed");
+                       } catch (OptimisticLockFailedException e) {
+                               if (--tries <= 0) {
+                                       log.debug("Got OptimisticLockFailedException on last try - failing ");
                                        throw new IllegalStateException(e);
                                }
+                               log.debug("Got OptimisticLockFailedException - trying again ");
                        }
+                       catch (TransactionCommitFailedException ex){
+                               log.debug("Update DataStore failed");
+                               throw new IllegalStateException(ex);
+                       }
+               }
+       }
+
+       private <T extends DataObject> void save(T entry, boolean merge, LogicalDatastoreType storeType,
+               InstanceIdentifier<T> path)
+               throws TransactionCommitFailedException {
+               WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
+               if (merge) {
+                       tx.merge(storeType, path, entry);
+               } else {
+                       tx.put(storeType, path, entry);
                }
+               tx.submit().checkedGet();
+               log.debug("Update DataStore succeeded");
        }
 
-       private void deleteService(final Service entry, LogicalDatastoreType storeType) throws IllegalStateException {
+       private void deleteService(final Service entry, LogicalDatastoreType storeType) {
                // Each entry will be identifiable by a unique key, we have to create
                // that identifier
-               InstanceIdentifier.InstanceIdentifierBuilder<Service> serviceListIdBuilder = InstanceIdentifier
-                               .<Services>builder(Services.class).child(Service.class, entry.getKey());
-               InstanceIdentifier<Service> path = serviceListIdBuilder.build();
+               InstanceIdentifier<Service> path = InstanceIdentifier
+                       .builder(Services.class)
+                       .child(Service.class, entry.getKey())
+                       .build();
 
-               int tries = 2;
-               while (true) {
-                       try {
-                               WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-                               tx.delete(storeType, path);
-                               tx.submit().checkedGet();
-                               log.debug("DataStore delete succeeded");
-                               break;
-                       } catch (final TransactionCommitFailedException e) {
-                               if (e instanceof OptimisticLockFailedException) {
-                                       if (--tries <= 0) {
-                                               log.debug("Got OptimisticLockFailedException on last try - failing ");
-                                               throw new IllegalStateException(e);
-                                       }
-                                       log.debug("Got OptimisticLockFailedException - trying again ");
-                               } else {
-                                       log.debug("Update DataStore failed");
-                                       throw new IllegalStateException(e);
-                               }
-                       }
-               }
+               tryDeleteEntry(storeType, path);
        }
 
-       private void savePreloadList(final VnfPreloadList entry, boolean merge, LogicalDatastoreType storeType)
-                       throws IllegalStateException {
-
-               // Each entry will be identifiable by a unique key, we have to create that
-               // identifier
-               InstanceIdentifier.InstanceIdentifierBuilder<VnfPreloadList> vnfPreloadListBuilder = InstanceIdentifier
-                               .<PreloadVnfs>builder(PreloadVnfs.class).child(VnfPreloadList.class, entry.getKey());
-               InstanceIdentifier<VnfPreloadList> path = vnfPreloadListBuilder.build();
+       private void tryDeleteEntry(LogicalDatastoreType storeType, InstanceIdentifier<Service> path) {
                int tries = 2;
                while (true) {
                        try {
-                               WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-                               if (merge) {
-                                       tx.merge(storeType, path, entry);
-                               } else {
-                                       tx.put(storeType, path, entry);
-                               }
-                               tx.submit().checkedGet();
-                               log.debug("Update DataStore succeeded");
+                               delete(storeType, path);
                                break;
-                       } catch (final TransactionCommitFailedException e) {
-                               if (e instanceof OptimisticLockFailedException) {
-                                       if (--tries <= 0) {
-                                               log.debug("Got OptimisticLockFailedException on last try - failing ");
-                                               throw new IllegalStateException(e);
-                                       }
-                                       log.debug("Got OptimisticLockFailedException - trying again ");
-                               } else {
-                                       log.debug("Update DataStore failed");
+                       } catch (OptimisticLockFailedException e) {
+                               if (--tries <= 0) {
+                                       log.debug("Got OptimisticLockFailedException on last try - failing ");
                                        throw new IllegalStateException(e);
                                }
+                               log.debug("Got OptimisticLockFailedException - trying again ");
+                       }
+                       catch (TransactionCommitFailedException ex){
+                               log.debug("Update DataStore failed");
+                               throw new IllegalStateException(ex);
                        }
                }
        }
 
+       private void delete(LogicalDatastoreType storeType, InstanceIdentifier<Service> path)
+               throws TransactionCommitFailedException {
+               WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
+               tx.delete(storeType, path);
+               tx.submit().checkedGet();
+               log.debug("DataStore delete succeeded");
+       }
+
        @Override
        public Future<RpcResult<ServiceTopologyOperationOutput>> serviceTopologyOperation(
                        ServiceTopologyOperationInput input) {
 
-               final String SVC_OPERATION = "service-topology-operation";
+               final String svcOperation = "service-topology-operation";
                ServiceData serviceData;
                ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
                Properties parms = new Properties();
 
-               log.info("{} called.", SVC_OPERATION);
+               log.info(CALLED_STR, svcOperation);
                // create a new response object
                ServiceTopologyOperationOutputBuilder responseBuilder = new ServiceTopologyOperationOutputBuilder();
 
                if (input == null || input.getServiceInformation() == null
                                || input.getServiceInformation().getServiceInstanceId() == null
                                || input.getServiceInformation().getServiceInstanceId().length() == 0) {
-                       log.debug("exiting {} because of null or empty service-instance-id", SVC_OPERATION);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
                        responseBuilder.setResponseCode("404");
-                       responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
+                       responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
                        responseBuilder.setAckFinalIndicator("Y");
                        RpcResult<ServiceTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<ServiceTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
@@ -519,59 +539,36 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                 * topology-response-common; // uses service-response-information;
                 */
 
-               log.info("Adding INPUT data for {} [{}] input: {}", SVC_OPERATION, siid, input);
+               log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
                ServiceTopologyOperationInputBuilder inputBuilder = new ServiceTopologyOperationInputBuilder(input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
 
-               log.info("Adding OPERATIONAL data for {} [{}] operational-data: {}", SVC_OPERATION, siid,
+               log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid,
                                operDataBuilder.build());
-               GenericResourceApiUtil.toProperties(parms, "operational-data", operDataBuilder);
+               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";
                String serviceObjectPath = null;
-
-               try {
-                       if (svcLogicClient.hasGraph(appName, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(appName, 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 for " + appName + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error("Caught exception looking for service logic", e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty("error-code");
-                       errorMessage = respProps.getProperty("error-message");
-                       ackFinal = respProps.getProperty("ack-final", "Y");
-                       serviceObjectPath = respProps.getProperty("service-object-path");
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
+                       ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
+                       serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
                }
 
-               setServiceStatus(serviceStatusBuilder, errorCode, errorMessage, ackFinal);
+               setServiceStatus(serviceStatusBuilder, error.getStatusCode(), error.getMessage(), ackFinal);
                serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
-               // serviceStatusBuilder.setRpcName(RpcName.ServiceTopologyOperation);
-               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();
@@ -580,9 +577,9 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        try {
                                saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
                        } catch (Exception e) {
-                               log.error("Caught Exception updating MD-SAL for {} [{}] \n", SVC_OPERATION, siid, e);
+                               log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        }
-                       log.error("Returned FAILED for {} [{}] {}", SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<ServiceTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<ServiceTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                        return Futures.immediateFuture(rpcResult);
@@ -591,7 +588,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // Got success from SLI
                try {
                        serviceData = serviceDataBuilder.build();
-                       log.info("Updating MD-SAL for {} [{}] ServiceData: {}", SVC_OPERATION, siid, serviceData);
+                       log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
 
                        // service object
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -600,13 +597,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.Delete)) {
                                // Only update operational tree on delete
-                               if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete)) {
-                                       log.info("Delete from both CONFIGURATION and OPERATIONAL tree.");
-                                       deleteService(serviceBuilder.build(), LogicalDatastoreType.OPERATIONAL);
-                                       deleteService(serviceBuilder.build(), LogicalDatastoreType.CONFIGURATION);
-                               }
+                               log.info("Delete from both CONFIGURATION and OPERATIONAL tree.");
+                               deleteService(serviceBuilder.build(), LogicalDatastoreType.OPERATIONAL);
+                               deleteService(serviceBuilder.build(), LogicalDatastoreType.CONFIGURATION);
                        }
 
                        ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
@@ -615,48 +610,81 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (Exception e) {
-                       log.error("Caught Exception updating MD-SAL for {} [{}] \n", 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 for {} [{}] {}", SVC_OPERATION, siid, responseBuilder.build());
+                       log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
                        RpcResult<ServiceTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<ServiceTopologyOperationOutput>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 MD-SAL for {} [{}]", SVC_OPERATION, siid);
-               log.info("Returned SUCCESS for {} [{}] {}", SVC_OPERATION, siid, responseBuilder.build());
+               log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
+               log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
 
                RpcResult<ServiceTopologyOperationOutput> rpcResult = RpcResultBuilder
                                .<ServiceTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
                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 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.", 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("exiting {} because of null or empty service-instance-id", SVC_OPERATION);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
                        responseBuilder.setResponseCode("404");
-                       responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
+                       responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
                        responseBuilder.setAckFinalIndicator("Y");
                        RpcResult<VnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<VnfTopologyOperationOutput>status(true)
                                        .withResult(responseBuilder.build()).build();
@@ -673,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");
@@ -682,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);
 
@@ -727,66 +737,37 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // uses vnf-configuration-information;
                // uses oper-status;
 
-               log.info("Adding INPUT data for {} [{}] input: {}", 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 for {} [{}] operational-data: {}", SVC_OPERATION, siid,
+               log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid,
                                operDataBuilder.build());
-               GenericResourceApiUtil.toProperties(parms, "operational-data", operDataBuilder);
-
-               /*
-                * log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+
-                * preload_type+"] preload-data: " + preloadDataBuilder.build());
-                * GenericResourceApiUtil.toProperties(parms, "preload-data",
-                * preloadDataBuilder);
-                */
+               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";
                String serviceObjectPath = null;
-
-               try {
-                       if (svcLogicClient.hasGraph(appName, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(appName, 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 for " + appName + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error("Caught exception looking for service logic", e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty("error-code");
-                       errorMessage = respProps.getProperty("error-message");
-                       ackFinal = respProps.getProperty("ack-final", "Y");
+                       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();
@@ -794,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("Caught Exception updating MD-SAL for {} [{}] \n", SVC_OPERATION, siid, e);
+                               log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        }
-                       log.error("Returned FAILED for {} [{}] {}", 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
@@ -815,7 +796,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // Got success from SLI
                try {
                        serviceData = serviceDataBuilder.build();
-                       log.info("Updating MD-SAL for {} [{}] ServiceData: {}", SVC_OPERATION, siid, serviceData);
+                       log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
 
                        // service object
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -824,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();
@@ -838,24 +818,24 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (Exception e) {
-                       log.error("Caught Exception updating MD-SAL for {} [{}] \n", 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 for {} [{}] {}", 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 MD-SAL for {} [{}]", SVC_OPERATION, siid);
-               log.info("Returned SUCCESS for {} [{}] {}", 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();
@@ -863,25 +843,29 @@ 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.", 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("exiting {} because of null or empty service-instance-id", SVC_OPERATION);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
                        responseBuilder.setResponseCode("403");
-                       responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
+                       responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
                        responseBuilder.setAckFinalIndicator("Y");
                        RpcResult<VfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<VfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
@@ -891,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");
@@ -902,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");
@@ -918,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);
 
@@ -960,65 +929,36 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // uses vnf-configuration-information;
                // uses oper-status;
 
-               log.info("Adding INPUT data for {} [{}] input: {}", 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 for {} [{}] operational-data: {}", SVC_OPERATION, siid,
+               log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid,
                                operDataBuilder.build());
-               GenericResourceApiUtil.toProperties(parms, "operational-data", operDataBuilder);
-
-               /*
-                * log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+
-                * preload_type+"] preload-data: " +preloadDataBuilder.build());
-                * GenericResourceApiUtil.toProperties(parms, "preload-data",
-                * preloadDataBuilder);
-                */
+               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";
                String serviceObjectPath = null;
-
-               try {
-                       if (svcLogicClient.hasGraph(appName, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(appName, 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 for " + appName + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error("Caught exception looking for service logic", e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty("error-code");
-                       errorMessage = respProps.getProperty("error-message");
-                       ackFinal = respProps.getProperty("ack-final", "Y");
+                       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();
@@ -1027,9 +967,9 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        try {
                                saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
                        } catch (Exception e) {
-                               log.error("Caught Exception updating MD-SAL for {} [{}] \n", SVC_OPERATION, siid, e);
+                               log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
                        }
-                       log.error("Returned FAILED for {} [{}] {}", 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
@@ -1039,23 +979,22 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // Got success from SLI
                try {
                        serviceData = serviceDataBuilder.build();
-                       log.info("Updating MD-SAL for {} [{}] ServiceData: {}", 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();
@@ -1064,24 +1003,24 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (Exception e) {
-                       log.error("Caught Exception updating MD-SAL for {} [{}] \n", 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 for {} [{}] {}", 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 MD-SAL for {} [{}]", SVC_OPERATION, siid);
-               log.info("Returned SUCCESS for {} [{}] {}", 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();
@@ -1089,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.", 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("exiting {} because of null or empty service-instance-id", SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
-                       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();
@@ -1126,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 for {} [{}] input: {}", 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(appName, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(appName, 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 for " + appName + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error("Caught exception looking for service logic", e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty("error-code");
-                       errorMessage = respProps.getProperty("error-message");
-                       ackFinal = respProps.getProperty("ack-final", "Y");
+                       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");
+                       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 for {} [{}] {}", 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();
@@ -1215,7 +1108,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                try {
 
                        serviceData = serviceDataBuilder.build();
-                       log.info("Updating MD-SAL for {} [{}] ServiceData: {}", SVC_OPERATION, siid, serviceData);
+                       log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
 
                        // service object
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -1224,12 +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)) {
-                                       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();
@@ -1243,53 +1136,64 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (IllegalStateException e) {
-                       log.error("Caught Exception updating MD-SAL for {} [{}] \n", 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 for {} [{}] {}", 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 MD-SAL for {} [{}]", SVC_OPERATION, siid);
-               log.info("Returned SUCCESS for {} [{}] {}", 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.", 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("exiting {} because of null or empty service-instance-id", SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
-                       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();
@@ -1304,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(appName, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(appName, 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 for " + appName + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error("Caught exception looking for service logic", e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty("error-code");
-                       errorMessage = respProps.getProperty("error-message");
-                       ackFinal = respProps.getProperty("ack-final", "Y");
-                       allottedResourceId = respProps.getProperty("allotted-resource-id");
-                       serviceObjectPath = respProps.getProperty("service-object-path");
+                       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_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 for {} [{}] {}", 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();
@@ -1375,7 +1250,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                try {
 
                        serviceData = serviceDataBuilder.build();
-                       log.info("Updating MD-SAL for {} [{}] ServiceData: {}", SVC_OPERATION, siid, serviceData);
+                       log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
 
                        // service object
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -1384,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();
@@ -1404,53 +1278,67 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (IllegalStateException e) {
-                       log.error("Caught Exception updating MD-SAL for {} [{}] \n", 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 for {} [{}] {}", 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 MD-SAL for {} [{}]", SVC_OPERATION, siid);
-               log.info("Returned SUCCESS for {} [{}] {}", 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.", 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("exiting {} because of null or empty service-instance-id", SVC_OPERATION);
-                       responseBuilder.setResponseCode("404");
-                       responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
-                       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();
@@ -1465,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 for {} [{}] input: {}", SVC_OPERATION, siid, input);
+               log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
                SecurityZoneTopologyOperationInputBuilder inputBuilder = new SecurityZoneTopologyOperationInputBuilder(input);
                GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
 
@@ -1484,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(appName, SVC_OPERATION, null, "sync")) {
+                       if (svcLogicClient.hasGraph(APP_NAME, svcOperation, null, "sync")) {
 
                                try {
-                                       respProps = svcLogicClient.execute(appName, 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 for " + appName + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
+                               error.setMessage(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + svcOperation + "'");
+                               error.setStatusCode("503");
                        }
                } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error("Caught exception looking for service logic", e);
+                       error.setStatusCode("500");
+                       error.setMessage(e.getMessage());
+                       log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
                }
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty("error-code");
-                       errorMessage = respProps.getProperty("error-message");
-                       ackFinal = respProps.getProperty("ack-final", "Y");
-                       allottedResourceId = respProps.getProperty("allotted-resource-id");
-                       serviceObjectPath = respProps.getProperty("service-object-path");
+                       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_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 for {} [{}] {}", 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();
@@ -1536,7 +1417,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                try {
 
                        serviceData = serviceDataBuilder.build();
-                       log.info("Updating MD-SAL for {} [{}] ServiceData: {}", SVC_OPERATION, siid, serviceData);
+                       log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
 
                        // service object
                        ServiceBuilder serviceBuilder = new ServiceBuilder();
@@ -1545,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();
@@ -1565,49 +1445,66 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (IllegalStateException e) {
-                       log.error("Caught Exception updating MD-SAL for {} [{}] \n", 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 for {} [{}] {}", 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 MD-SAL for {} [{}]", SVC_OPERATION, siid);
-               log.info("Returned SUCCESS for {} [{}] {}", 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.", 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("exiting {} because of null or empty service-instance-id", SVC_OPERATION);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
                        responseBuilder.setResponseCode("404");
-                       responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
+                       responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
                        responseBuilder.setAckFinalIndicator("Y");
                        RpcResult<TunnelxconnTopologyOperationOutput> rpcResult = RpcResultBuilder
                                        .<TunnelxconnTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
@@ -1616,77 +1513,37 @@ 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 for {} [{}] input: {}", 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(appName, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(appName, 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 for " + appName + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error("Caught exception looking for service logic", e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty("error-code");
-                       errorMessage = respProps.getProperty("error-message");
-                       ackFinal = respProps.getProperty("ack-final", "Y");
-                       allottedResourceId = respProps.getProperty("allotted-resource-id");
-                       serviceObjectPath = respProps.getProperty("service-object-path");
+                       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_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 for {} [{}] {}", 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();
@@ -1696,24 +1553,7 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // Got success from SLI
                try {
 
-                       serviceData = serviceDataBuilder.build();
-                       log.info("Updating MD-SAL for {} [{}] ServiceData: {}", SVC_OPERATION, siid, serviceData);
 
-                       // service object
-                       ServiceBuilder serviceBuilder = new ServiceBuilder();
-                       serviceBuilder.setServiceData(serviceData);
-                       serviceBuilder.setServiceInstanceId(siid);
-                       serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
-                       saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
-
-                       if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null) {
-                               // 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);
-                               }
-                       }
 
                        TunnelxconnResponseInformationBuilder tunnelxconnResponseInformationBuilder = new TunnelxconnResponseInformationBuilder();
                        tunnelxconnResponseInformationBuilder.setInstanceId(allottedResourceId);
@@ -1726,47 +1566,68 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (IllegalStateException e) {
-                       log.error("Caught Exception updating MD-SAL for {} [{}] \n", 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 for {} [{}] {}", 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 MD-SAL for {} [{}]", SVC_OPERATION, siid);
-               log.info("Returned SUCCESS for {} [{}] {}", 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.", 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("exiting {} because of null or empty service-instance-id", SVC_OPERATION);
+                       log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
                        responseBuilder.setResponseCode("404");
-                       responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
+                       responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
                        responseBuilder.setAckFinalIndicator("Y");
                        RpcResult<BrgTopologyOperationOutput> rpcResult = RpcResultBuilder.<BrgTopologyOperationOutput>status(true)
                                        .withResult(responseBuilder.build()).build();
@@ -1775,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 for {} [{}] input: {}", 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(appName, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(appName, 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 for " + appName + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error("Caught exception looking for service logic", e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty("error-code");
-                       errorMessage = respProps.getProperty("error-message");
-                       ackFinal = respProps.getProperty("ack-final", "Y");
-                       allottedResourceId = respProps.getProperty("allotted-resource-id");
-                       serviceObjectPath = respProps.getProperty("service-object-path");
+                       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_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 for {} [{}] {}", 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();
@@ -1855,24 +1673,6 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                // Got success from SLI
                try {
 
-                       serviceData = serviceDataBuilder.build();
-                       log.info("Updating MD-SAL for {} [{}] ServiceData: {}", SVC_OPERATION, siid, serviceData);
-
-                       // service object
-                       ServiceBuilder serviceBuilder = new ServiceBuilder();
-                       serviceBuilder.setServiceData(serviceData);
-                       serviceBuilder.setServiceInstanceId(siid);
-                       serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
-                       saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
-
-                       if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null) {
-                               // 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);
-                               }
-                       }
 
                        BrgResponseInformationBuilder brgResponseInformationBuilder = new BrgResponseInformationBuilder();
                        brgResponseInformationBuilder.setInstanceId(allottedResourceId);
@@ -1885,24 +1685,24 @@ public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURC
                        responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
 
                } catch (IllegalStateException e) {
-                       log.error("Caught Exception updating MD-SAL for {} [{}] \n", 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 for {} [{}] {}", 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 MD-SAL for {} [{}]", SVC_OPERATION, siid);
-               log.info("Returned SUCCESS for {} [{}] {}", 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();
@@ -1913,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.", 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");
@@ -1936,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");
@@ -1955,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
@@ -1974,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());
-               GenericResourceApiUtil.toProperties(parms, "operational-data", operDataBuilder);
+               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(appName, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(appName, 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 for " + appName + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error("Caught exception looking for service logic", e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty("error-code");
-                       errorMessage = respProps.getProperty("error-message");
-                       ackFinal = respProps.getProperty("ack-final", "Y");
-                       // internalError = respProps.getProperty("internal-error", "false");
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
+                       ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
                }
 
-               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
@@ -2043,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();
@@ -2070,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
@@ -2084,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.", 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");
@@ -2112,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");
@@ -2131,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
@@ -2151,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());
-               GenericResourceApiUtil.toProperties(parms, "operational-data", operDataBuilder);
+               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(appName, SVC_OPERATION, null, "sync")) {
-
-                               try {
-                                       respProps = svcLogicClient.execute(appName, 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 for " + appName + ": '" + SVC_OPERATION + "'";
-                               errorCode = "503";
-                       }
-               } catch (Exception e) {
-                       errorCode = "500";
-                       errorMessage = e.getMessage();
-                       log.error("Caught exception looking for service logic", e);
-               }
+               Properties respProps = tryGetProperties(svcOperation, parms, error);
 
                if (respProps != null) {
-                       errorCode = respProps.getProperty("error-code");
-                       errorMessage = respProps.getProperty("error-message");
-                       ackFinal = respProps.getProperty("ack-final", "Y");
-                       // internalError = respProps.getProperty("internal-error", "false");
+                       error.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
+                       error.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
+                       ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
                }
 
-               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");
@@ -2222,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();
@@ -2249,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