Merge "Added new RST files for Microservices"
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintConstants.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintConstants.kt
index 4c2d6e2..4ef0e82 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintConstants.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintConstants.kt
@@ -1,172 +1,174 @@
-/*
- * Copyright © 2017-2018 AT&T Intellectual Property.
- * Modifications Copyright © 2018 IBM.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onap.ccsdk.apps.controllerblueprints.core
-
-/**
- * BluePrintConstants
- *
- * @author Brinda Santh
- */
-object BluePrintConstants {
-
-    const val RESPONSE_HEADER_TRANSACTION_ID: String = "X-ONAP-RequestID"
-    const val RESPONSE_HEADER_MINOR_VERSION: String = "X-MinorVersion"
-    const val RESPONSE_HEADER_PATCH_VERSION: String = "X-PatchVersion"
+/*

+ * Copyright © 2017-2018 AT&T Intellectual Property.

+ * Modifications Copyright © 2018 IBM.

+ *

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ *     http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+package org.onap.ccsdk.apps.controllerblueprints.core

+

+/**

+ * BluePrintConstants

+ *

+ * @author Brinda Santh

+ */

+object BluePrintConstants {

+

+    const val RESPONSE_HEADER_TRANSACTION_ID: String = "X-ONAP-RequestID"

+    const val RESPONSE_HEADER_MINOR_VERSION: String = "X-MinorVersion"

+    const val RESPONSE_HEADER_PATCH_VERSION: String = "X-PatchVersion"

     const val RESPONSE_HEADER_LATEST_VERSION: String = "X-LatestVersion"
 
     const val STATUS_SUCCESS: String = "success"
+    const val STATUS_PROCESSING: String = "processing"
     const val STATUS_FAILURE: String = "failure"
 
     const val TYPE_DEFAULT: String = "default"
-
-    const val DATA_TYPE_STRING: String = "string"
-    const val DATA_TYPE_INTEGER: String = "integer"
-    const val DATA_TYPE_FLOAT: String = "float"
-    const val DATA_TYPE_BOOLEAN: String = "boolean"
-    const val DATA_TYPE_TIMESTAMP: String = "timestamp"
-    const val DATA_TYPE_NULL: String = "null"
-    const val DATA_TYPE_LIST: String = "list"
-    const val DATA_TYPE_MAP: String = "map"
-
-    const val USER_SYSTEM: String = "System"
-
-    const val PATH_DIVIDER: String = "/"
-    const val PATH_SERVICE_TEMPLATE: String = "service_template"
-    const val PATH_TOPOLOGY_TEMPLATE: String = "topology_template"
-    const val PATH_METADATA: String = "metadata"
-    const val PATH_NODE_TYPES: String = "node_types"
-    const val PATH_POLICY_TYPES: String = "policy_types"
-    const val PATH_RELATIONSHIP_TYPES: String = "relationship_types"
-    const val PATH_ARTIFACT_TYPES: String = "artifact_types"
-    const val PATH_DATA_TYPES: String = "data_types"
-    const val PATH_INPUTS: String = "inputs"
-    const val PATH_NODE_WORKFLOWS: String = "workflows"
-    const val PATH_NODE_TEMPLATES: String = "node_templates"
-    const val PATH_CAPABILITIES: String = "capabilities"
-    const val PATH_REQUIREMENTS: String = "requirements"
-    const val PATH_INTERFACES: String = "interfaces"
-    const val PATH_OPERATIONS: String = "operations"
-    const val PATH_OUTPUTS: String = "outputs"
-    const val PATH_PROPERTIES: String = "properties"
-    const val PATH_ATTRIBUTES: String = "attributes"
-    const val PATH_ARTIFACTS: String = "artifacts"
-
-    const val MODEL_DIR_MODEL_TYPE: String = "definition-type"
-
-    const val MODEL_DEFINITION_TYPE_NODE_TYPE: String = "node_type"
-    const val MODEL_DEFINITION_TYPE_ARTIFACT_TYPE: String = "artifact_type"
-    const val MODEL_DEFINITION_TYPE_CAPABILITY_TYPE: String = "capability_type"
-    const val MODEL_DEFINITION_TYPE_RELATIONSHIP_TYPE: String = "relationship_type"
-    const val MODEL_DEFINITION_TYPE_DATA_TYPE: String = "data_type"
-
-    const val MODEL_TYPE_DATATYPES_ROOT: String = "tosca.datatypes.Root"
-    const val MODEL_TYPE_NODES_ROOT: String = "tosca.nodes.Root"
-    const val MODEL_TYPE_GROUPS_ROOT: String = "tosca.groups.Root"
-    const val MODEL_TYPE_RELATIONSHIPS_ROOT: String = "tosca.relationships.Root"
-    const val MODEL_TYPE_ARTIFACTS_ROOT: String = "tosca.artifacts.Root"
-    const val MODEL_TYPE_CAPABILITIES_ROOT: String = "tosca.capabilities.Root"
-    const val MODEL_TYPE_INTERFACES_ROOT: String = "tosca.interfaces.Root"
-
-    const val MODEL_TYPE_RELATIONSHIPS_DEPENDS_ON = "tosca.relationships.DependsOn"
-    const val MODEL_TYPE_RELATIONSHIPS_HOSTED_ON = "tosca.relationships.HostedOn"
-    const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO = "tosca.relationships.ConnectsTo"
-    const val MODEL_TYPE_RELATIONSHIPS_ATTACH_TO = "tosca.relationships.AttachesTo"
-    const val MODEL_TYPE_RELATIONSHIPS_ROUTES_TO = "tosca.relationships.RoutesTo"
-
-    const val MODEL_TYPE_NODE_DG = "tosca.nodes.DG"
-    const val MODEL_TYPE_NODE_COMPONENT = "tosca.nodes.Component"
-    const val MODEL_TYPE_NODE_VNF = "tosca.nodes.Vnf"
-    @Deprecated("Artifacts will be attached to Node Template")
-    const val MODEL_TYPE_NODE_ARTIFACT = "tosca.nodes.Artifact"
-    const val MODEL_TYPE_NODE_RESOURCE_SOURCE = "tosca.nodes.ResourceSource"
-
-    const val MODEL_TYPE_NODES_COMPONENT_JAVA: String = "tosca.nodes.component.Java"
-    const val MODEL_TYPE_NODES_COMPONENT_BUNDLE: String = "tosca.nodes.component.Bundle"
-    const val MODEL_TYPE_NODES_COMPONENT_SCRIPT: String = "tosca.nodes.component.Script"
-    const val MODEL_TYPE_NODES_COMPONENT_PYTHON: String = "tosca.nodes.component.Python"
-    const val MODEL_TYPE_NODES_COMPONENT_JYTHON: String = "tosca.nodes.component.Jython"
-    const val MODEL_TYPE_NODES_COMPONENT_JAVA_SCRIPT: String = "tosca.nodes.component.JavaScript"
-
-    const val MODEL_TYPE_ARTIFACT_TYPE_IMPLEMENTATION = "tosca.artifacts.Implementation"
-
-    const val MODEL_TYPE_DATA_TYPE_DYNAMIC = "tosca.datatypes.Dynamic"
-
-    const val MODEL_TYPE_CAPABILITY_TYPE_NODE = "tosca.capabilities.Node"
-    const val MODEL_TYPE_CAPABILITY_TYPE_COMPUTE = "tosca.capabilities.Compute"
-    const val MODEL_TYPE_CAPABILITY_TYPE_NETWORK = "tosca.capabilities.Network"
-    const val MODEL_TYPE_CAPABILITY_TYPE_STORAGE = "tosca.capabilities.Storage"
-    const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT = "tosca.capabilities.Endpoint"
-    const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_PUBLIC = "tosca.capabilities.Endpoint.Public"
-    const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_ADMIN = "tosca.capabilities.Endpoint.Admin"
-    const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_DATABASE = "tosca.capabilities.Endpoint.Database"
-    const val MODEL_TYPE_CAPABILITY_TYPE_ATTACHMENT = "tosca.capabilities.Attachment"
-    const val MODEL_TYPE_CAPABILITY_TYPE_OPERATION_SYSTEM = "tosca.capabilities.OperatingSystem"
-    const val MODEL_TYPE_CAPABILITY_TYPE_BINDABLE = "tosca.capabilities.network.Bindable"
-    // Custom capabilities
-    const val MODEL_TYPE_CAPABILITY_TYPE_CONTENT = "tosca.capabilities.Content"
-    const val MODEL_TYPE_CAPABILITY_TYPE_MAPPING = "tosca.capabilities.Mapping"
-    const val MODEL_TYPE_CAPABILITY_TYPE_NETCONF = "tosca.capabilities.Netconf"
-    const val MODEL_TYPE_CAPABILITY_TYPE_SSH = "tosca.capabilities.Ssh"
-    const val MODEL_TYPE_CAPABILITY_TYPE_SFTP = "tosca.capabilities.Sftp"
-
-    const val EXPRESSION_GET_INPUT: String = "get_input"
-    const val EXPRESSION_GET_ATTRIBUTE: String = "get_attribute"
-    const val EXPRESSION_GET_ARTIFACT: String = "get_artifact"
-    const val EXPRESSION_GET_PROPERTY: String = "get_property"
-    const val EXPRESSION_GET_OPERATION_OUTPUT: String = "get_operation_output"
-    const val EXPRESSION_GET_NODE_OF_TYPE: String = "get_nodes_of_type"
-
-    const val PROPERTY_BLUEPRINT_PROCESS_ID: String = "blueprint-process-id"
-    const val PROPERTY_BLUEPRINT_BASE_PATH: String = "blueprint-basePath"
-    const val PROPERTY_BLUEPRINT_RUNTIME: String = "blueprint-runtime"
-    const val PROPERTY_BLUEPRINT_INPUTS_DATA: String = "blueprint-inputs-data"
-    const val PROPERTY_BLUEPRINT_CONTEXT: String = "blueprint-context"
-    const val PROPERTY_BLUEPRINT_NAME: String = "template_name"
-    const val PROPERTY_BLUEPRINT_VERSION: String = "template_version"
-
-    const val TOSCA_METADATA_DIR: String = "TOSCA-Metadata"
-    const val TOSCA_METADATA_ENTRY_DEFINITION_FILE: String = "TOSCA-Metadata/TOSCA.meta"
-    const val TOSCA_DEFINITIONS_DIR: String = "Definitions"
-    const val TOSCA_PLANS_DIR: String = "Plans"
-    const val TOSCA_SCRIPTS_DIR: String = "Scripts"
-    const val TOSCA_MAPPINGS_DIR: String = "Mappings"
-    const val TOSCA_TEMPLATES_DIR: String = "Templates"
-
-    const val METADATA_USER_GROUPS = "user-groups"
-    const val METADATA_TEMPLATE_NAME = "template_name"
-    const val METADATA_TEMPLATE_VERSION = "template_version"
-    const val METADATA_TEMPLATE_AUTHOR = "template_author"
-    const val METADATA_TEMPLATE_TAGS = "template_tags"
-    const val METADATA_WORKFLOW_NAME = "workflow_name"
-
-    const val PAYLOAD_DATA = "payload-data"
-    const val PROPERTY_CURRENT_STEP = "current-step"
-    const val PROPERTY_CURRENT_NODE_TEMPLATE = "current-node-template"
-    const val PROPERTY_CURRENT_INTERFACE = "current-interface"
-    const val PROPERTY_CURRENT_OPERATION = "current-operation"
-    const val PROPERTY_CURRENT_IMPLEMENTATION = "current-implementation"
-    const val PROPERTY_EXECUTION_REQUEST = "execution-request"
-
-    const val OPERATION_PROCESS = "process"
-    const val OPERATION_PREPARE = "prepare"
-
-    const val BLUEPRINT_RETRIEVE_TYPE_DB = "db"
-    const val BLUEPRINT_RETRIEVE_TYPE_FILE = "file"
-    const val BLUEPRINT_RETRIEVE_TYPE_REPO = "repo"
-
+

+    const val DATA_TYPE_STRING: String = "string"

+    const val DATA_TYPE_INTEGER: String = "integer"

+    const val DATA_TYPE_FLOAT: String = "float"

+    const val DATA_TYPE_DOUBLE: String = "double"

+    const val DATA_TYPE_BOOLEAN: String = "boolean"

+    const val DATA_TYPE_TIMESTAMP: String = "timestamp"

+    const val DATA_TYPE_NULL: String = "null"

+    const val DATA_TYPE_LIST: String = "list"

+    const val DATA_TYPE_MAP: String = "map"

+

+    const val USER_SYSTEM: String = "System"

+

+    const val PATH_DIVIDER: String = "/"

+    const val PATH_SERVICE_TEMPLATE: String = "service_template"

+    const val PATH_TOPOLOGY_TEMPLATE: String = "topology_template"

+    const val PATH_METADATA: String = "metadata"

+    const val PATH_NODE_TYPES: String = "node_types"

+    const val PATH_POLICY_TYPES: String = "policy_types"

+    const val PATH_RELATIONSHIP_TYPES: String = "relationship_types"

+    const val PATH_ARTIFACT_TYPES: String = "artifact_types"

+    const val PATH_DATA_TYPES: String = "data_types"

+    const val PATH_INPUTS: String = "inputs"

+    const val PATH_NODE_WORKFLOWS: String = "workflows"

+    const val PATH_NODE_TEMPLATES: String = "node_templates"

+    const val PATH_CAPABILITIES: String = "capabilities"

+    const val PATH_REQUIREMENTS: String = "requirements"

+    const val PATH_INTERFACES: String = "interfaces"

+    const val PATH_OPERATIONS: String = "operations"

+    const val PATH_OUTPUTS: String = "outputs"

+    const val PATH_PROPERTIES: String = "properties"

+    const val PATH_ATTRIBUTES: String = "attributes"

+    const val PATH_ARTIFACTS: String = "artifacts"

+

+    const val MODEL_DIR_MODEL_TYPE: String = "definition-type"

+

+    const val MODEL_DEFINITION_TYPE_NODE_TYPE: String = "node_type"

+    const val MODEL_DEFINITION_TYPE_ARTIFACT_TYPE: String = "artifact_type"

+    const val MODEL_DEFINITION_TYPE_CAPABILITY_TYPE: String = "capability_type"

+    const val MODEL_DEFINITION_TYPE_RELATIONSHIP_TYPE: String = "relationship_type"

+    const val MODEL_DEFINITION_TYPE_DATA_TYPE: String = "data_type"

+

+    const val MODEL_TYPE_DATATYPES_ROOT: String = "tosca.datatypes.Root"

+    const val MODEL_TYPE_NODES_ROOT: String = "tosca.nodes.Root"

+    const val MODEL_TYPE_GROUPS_ROOT: String = "tosca.groups.Root"

+    const val MODEL_TYPE_RELATIONSHIPS_ROOT: String = "tosca.relationships.Root"

+    const val MODEL_TYPE_ARTIFACTS_ROOT: String = "tosca.artifacts.Root"

+    const val MODEL_TYPE_CAPABILITIES_ROOT: String = "tosca.capabilities.Root"

+    const val MODEL_TYPE_INTERFACES_ROOT: String = "tosca.interfaces.Root"

+

+    const val MODEL_TYPE_RELATIONSHIPS_DEPENDS_ON = "tosca.relationships.DependsOn"

+    const val MODEL_TYPE_RELATIONSHIPS_HOSTED_ON = "tosca.relationships.HostedOn"

+    const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO = "tosca.relationships.ConnectsTo"

+    const val MODEL_TYPE_RELATIONSHIPS_ATTACH_TO = "tosca.relationships.AttachesTo"

+    const val MODEL_TYPE_RELATIONSHIPS_ROUTES_TO = "tosca.relationships.RoutesTo"

+

+    const val MODEL_TYPE_NODE_DG = "tosca.nodes.DG"

+    const val MODEL_TYPE_NODE_COMPONENT = "tosca.nodes.Component"

+    const val MODEL_TYPE_NODE_VNF = "tosca.nodes.Vnf"

+    @Deprecated("Artifacts will be attached to Node Template")

+    const val MODEL_TYPE_NODE_ARTIFACT = "tosca.nodes.Artifact"

+    const val MODEL_TYPE_NODE_RESOURCE_SOURCE = "tosca.nodes.ResourceSource"

+

+    const val MODEL_TYPE_NODES_COMPONENT_JAVA: String = "tosca.nodes.component.Java"

+    const val MODEL_TYPE_NODES_COMPONENT_BUNDLE: String = "tosca.nodes.component.Bundle"

+    const val MODEL_TYPE_NODES_COMPONENT_SCRIPT: String = "tosca.nodes.component.Script"

+    const val MODEL_TYPE_NODES_COMPONENT_PYTHON: String = "tosca.nodes.component.Python"

+    const val MODEL_TYPE_NODES_COMPONENT_JYTHON: String = "tosca.nodes.component.Jython"

+    const val MODEL_TYPE_NODES_COMPONENT_JAVA_SCRIPT: String = "tosca.nodes.component.JavaScript"

+

+    const val MODEL_TYPE_ARTIFACT_TYPE_IMPLEMENTATION = "tosca.artifacts.Implementation"

+

+    const val MODEL_TYPE_DATA_TYPE_DYNAMIC = "tosca.datatypes.Dynamic"

+

+    const val MODEL_TYPE_CAPABILITY_TYPE_NODE = "tosca.capabilities.Node"

+    const val MODEL_TYPE_CAPABILITY_TYPE_COMPUTE = "tosca.capabilities.Compute"

+    const val MODEL_TYPE_CAPABILITY_TYPE_NETWORK = "tosca.capabilities.Network"

+    const val MODEL_TYPE_CAPABILITY_TYPE_STORAGE = "tosca.capabilities.Storage"

+    const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT = "tosca.capabilities.Endpoint"

+    const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_PUBLIC = "tosca.capabilities.Endpoint.Public"

+    const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_ADMIN = "tosca.capabilities.Endpoint.Admin"

+    const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_DATABASE = "tosca.capabilities.Endpoint.Database"

+    const val MODEL_TYPE_CAPABILITY_TYPE_ATTACHMENT = "tosca.capabilities.Attachment"

+    const val MODEL_TYPE_CAPABILITY_TYPE_OPERATION_SYSTEM = "tosca.capabilities.OperatingSystem"

+    const val MODEL_TYPE_CAPABILITY_TYPE_BINDABLE = "tosca.capabilities.network.Bindable"

+    // Custom capabilities

+    const val MODEL_TYPE_CAPABILITY_TYPE_CONTENT = "tosca.capabilities.Content"

+    const val MODEL_TYPE_CAPABILITY_TYPE_MAPPING = "tosca.capabilities.Mapping"

+    const val MODEL_TYPE_CAPABILITY_TYPE_NETCONF = "tosca.capabilities.Netconf"

+    const val MODEL_TYPE_CAPABILITY_TYPE_SSH = "tosca.capabilities.Ssh"

+    const val MODEL_TYPE_CAPABILITY_TYPE_SFTP = "tosca.capabilities.Sftp"

+

+    const val EXPRESSION_GET_INPUT: String = "get_input"

+    const val EXPRESSION_GET_ATTRIBUTE: String = "get_attribute"

+    const val EXPRESSION_GET_ARTIFACT: String = "get_artifact"

+    const val EXPRESSION_GET_PROPERTY: String = "get_property"

+    const val EXPRESSION_GET_OPERATION_OUTPUT: String = "get_operation_output"

+    const val EXPRESSION_GET_NODE_OF_TYPE: String = "get_nodes_of_type"

+

+    const val PROPERTY_BLUEPRINT_PROCESS_ID: String = "blueprint-process-id"

+    const val PROPERTY_BLUEPRINT_BASE_PATH: String = "blueprint-basePath"

+    const val PROPERTY_BLUEPRINT_RUNTIME: String = "blueprint-runtime"

+    const val PROPERTY_BLUEPRINT_INPUTS_DATA: String = "blueprint-inputs-data"

+    const val PROPERTY_BLUEPRINT_CONTEXT: String = "blueprint-context"

+    const val PROPERTY_BLUEPRINT_NAME: String = "template_name"

+    const val PROPERTY_BLUEPRINT_VERSION: String = "template_version"

+

+    const val TOSCA_METADATA_DIR: String = "TOSCA-Metadata"

+    const val TOSCA_METADATA_ENTRY_DEFINITION_FILE: String = "TOSCA-Metadata/TOSCA.meta"

+    const val TOSCA_DEFINITIONS_DIR: String = "Definitions"

+    const val TOSCA_PLANS_DIR: String = "Plans"

+    const val TOSCA_SCRIPTS_DIR: String = "Scripts"

+    const val TOSCA_MAPPINGS_DIR: String = "Mappings"

+    const val TOSCA_TEMPLATES_DIR: String = "Templates"

+

+    const val METADATA_USER_GROUPS = "user-groups"

+    const val METADATA_TEMPLATE_NAME = "template_name"

+    const val METADATA_TEMPLATE_VERSION = "template_version"

+    const val METADATA_TEMPLATE_AUTHOR = "template_author"

+    const val METADATA_TEMPLATE_TAGS = "template_tags"

+    const val METADATA_WORKFLOW_NAME = "workflow_name"

+

+    const val PAYLOAD_DATA = "payload-data"

+    const val PROPERTY_CURRENT_STEP = "current-step"

+    const val PROPERTY_CURRENT_NODE_TEMPLATE = "current-node-template"

+    const val PROPERTY_CURRENT_INTERFACE = "current-interface"

+    const val PROPERTY_CURRENT_OPERATION = "current-operation"

+    const val PROPERTY_CURRENT_IMPLEMENTATION = "current-implementation"

+    const val PROPERTY_EXECUTION_REQUEST = "execution-request"

+

+    const val OPERATION_PROCESS = "process"

+    const val OPERATION_PREPARE = "prepare"

+

+    const val BLUEPRINT_RETRIEVE_TYPE_DB = "db"

+    const val BLUEPRINT_RETRIEVE_TYPE_FILE = "file"

+    const val BLUEPRINT_RETRIEVE_TYPE_REPO = "repo"

+

 }
\ No newline at end of file
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintTypes.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintTypes.kt
index 64797ed..4c35b53 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintTypes.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintTypes.kt
@@ -103,6 +103,7 @@
         validTypes.add(BluePrintConstants.DATA_TYPE_STRING)

         validTypes.add(BluePrintConstants.DATA_TYPE_INTEGER)

         validTypes.add(BluePrintConstants.DATA_TYPE_FLOAT)

+        validTypes.add(BluePrintConstants.DATA_TYPE_DOUBLE)

         validTypes.add(BluePrintConstants.DATA_TYPE_BOOLEAN)

         validTypes.add(BluePrintConstants.DATA_TYPE_TIMESTAMP)

         validTypes.add(BluePrintConstants.DATA_TYPE_NULL)

@@ -117,6 +118,7 @@
         validTypes.add(BluePrintConstants.DATA_TYPE_STRING)

         validTypes.add(BluePrintConstants.DATA_TYPE_INTEGER)

         validTypes.add(BluePrintConstants.DATA_TYPE_FLOAT)

+        validTypes.add(BluePrintConstants.DATA_TYPE_DOUBLE)

         validTypes.add(BluePrintConstants.DATA_TYPE_BOOLEAN)

         validTypes.add(BluePrintConstants.DATA_TYPE_TIMESTAMP)

         validTypes.add(BluePrintConstants.DATA_TYPE_NULL)

diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/CustomFunctions.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/CustomFunctions.kt
index 4d1d9b6..11f709c 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/CustomFunctions.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/CustomFunctions.kt
@@ -112,25 +112,40 @@
 // Checks

 

 fun checkNotEmpty(value: String?): Boolean {

-    return value != null && value.isNotEmpty()

+    return value != null && value.isNotBlank()

 }

 

-fun checkNotEmptyNThrow(value: String?, message: String? = value.plus(" is null/empty ")): Boolean {

-    val notEmpty = value != null && value.isNotEmpty()

+fun checkNotEmptyOrThrow(value: String?, message: String? = value.plus(" is null/empty ")): Boolean {

+    val notEmpty = checkNotEmpty(value)

     if (!notEmpty) {

         throw BluePrintException(message!!)

     }

     return notEmpty

 }

 

+fun checkEqualsOrThrow(value1: String?, value2: String?, lazyMessage: () -> Any): Boolean {

+    if (value1.equals(value2, ignoreCase = true)) {

+        return true

+    } else {

+        throw BluePrintException(lazyMessage().toString())

+    }

+}

+

+fun nullToEmpty(value: String?): String {

+    return if (checkNotEmpty(value)) value!! else ""

+}

+

+fun returnNotEmptyOrThrow(value: String?, lazyMessage: () -> Any): String {

+    if (checkNotEmpty(value)) {

+        return value!!

+    } else {

+        throw IllegalStateException(lazyMessage().toString())

+    }

+}

+

 fun InputStream.toFile(path: String): File {

     val file = File(path)

     file.outputStream().use { this.copyTo(it) }

     return file

 }

 

-

-

-

-

-

diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/interfaces/BluePrintCatalogService.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/interfaces/BluePrintCatalogService.kt
index 9186635..c99cdf7 100755
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/interfaces/BluePrintCatalogService.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/interfaces/BluePrintCatalogService.kt
@@ -16,25 +16,44 @@
 
 package org.onap.ccsdk.apps.controllerblueprints.core.interfaces
 
+import org.jetbrains.annotations.NotNull
+import org.jetbrains.annotations.Nullable
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import java.io.File
+import java.nio.file.Path
+
 interface BluePrintCatalogService {
 
     /**
-     * Upload the CBA Zip fle to data base and return the Database identifier
+     * Save the CBA to database.
+     * @param blueprintFile Either a directory, or an archive
+     * @param validate whether to validate blueprint content. Default true.
+     * @return The unique blueprint identifier
+     * @throws BluePrintException if process failed
      */
-    fun uploadToDataBase(file: String, validate : Boolean): String
+    @NotNull
+    @Throws(BluePrintException::class)
+    fun saveToDatabase(@NotNull blueprintFile: File, @Nullable validate: Boolean = true): String
 
     /**
-     * Download the CBA zip file from the data base and place it in a path and return the CBA zip absolute path
+     * Retrieve the CBA from database either archived or extracted.
+     * @param name Name of the blueprint
+     * @param version Version of the blueprint
+     * @param extract true to extract the content, false for archived content. Default to true
+     * @return Path where CBA is located
+     * @throws BluePrintException if process failed
      */
-    fun downloadFromDataBase(name: String, version: String, path: String): String
+    @NotNull
+    @Throws(BluePrintException::class)
+    fun getFromDatabase(@NotNull name: String, @NotNull version: String, @Nullable extract: Boolean = true): Path
 
     /**
-     * Get the Blueprint from Data Base and Download it under working directory and return the path path
+     * Delete the CBA from database.
+     * @param name Name of the blueprint
+     * @param version Version of the blueprint
+     * @throws BluePrintException if process failed
      */
-    fun prepareBluePrint(name: String, version: String): String
-
-    /**
-     * Get blueprint archive with zip file from Data Base
-     */
-    fun downloadFromDataBase(uuid: String, path: String): String
+    @NotNull
+    @Throws(BluePrintException::class)
+    fun deleteFromDatabase(@NotNull name: String, @NotNull version: String)
 }
\ No newline at end of file
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BluePrintScriptConfiguration.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BluePrintScriptConfiguration.kt
deleted file mode 100644
index f7bfb85..0000000
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BluePrintScriptConfiguration.kt
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright © 2017-2018 AT&T Intellectual Property.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onap.ccsdk.apps.controllerblueprints.core.script
-
-import org.jetbrains.kotlin.script.util.LocalFilesResolver
-import java.io.File
-import kotlin.script.dependencies.ScriptContents
-import kotlin.script.dependencies.ScriptDependenciesResolver
-import kotlin.script.experimental.annotations.KotlinScript
-import kotlin.script.experimental.api.*
-import kotlin.script.experimental.jvm.JvmDependency
-import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
-import kotlin.script.experimental.jvm.jvm
-
-
-@KotlinScript(fileExtension = "kts",
-        compilationConfiguration = ComponentScriptConfiguration::class)
-abstract class ComponentScript {
-
-}
-
-object ComponentScriptConfiguration : ScriptCompilationConfiguration(
-        {
-           // defaultImports(DependsOn::class, Repository::class)
-            jvm {
-                dependenciesFromCurrentContext(
-                        wholeClasspath = true
-                )
-            }
-//            refineConfiguration {
-//                onAnnotations(DependsOn::class, Repository::class, handler = ::configureLocalFileDepsOnAnnotations)
-//            }
-        }
-)
-
-
-private val resolver = LocalFilesResolver()
-
-fun configureLocalFileDepsOnAnnotations(context: ScriptConfigurationRefinementContext):
-        ResultWithDiagnostics<ScriptCompilationConfiguration> {
-
-    val annotations = context.collectedData?.get(ScriptCollectedData.foundAnnotations)?.takeIf { it.isNotEmpty() }
-            ?: return context.compilationConfiguration.asSuccess()
-
-    val scriptContents = object : ScriptContents {
-        override val annotations: Iterable<Annotation> = annotations
-        override val file: File? = null
-        override val text: CharSequence? = null
-    }
-
-    val diagnostics = arrayListOf<ScriptDiagnostic>()
-
-    fun report(severity: ScriptDependenciesResolver.ReportSeverity, message: String, position: ScriptContents.Position?) {
-        //TODO
-    }
-
-    return try {
-        val newDepsFromResolver = resolver.resolve(scriptContents, emptyMap(), ::report, null).get()
-                ?: return context.compilationConfiguration.asSuccess(diagnostics)
-
-        val resolvedClasspath = newDepsFromResolver.classpath.toList().takeIf { it.isNotEmpty() }
-                ?: return context.compilationConfiguration.asSuccess(diagnostics)
-
-        ScriptCompilationConfiguration(context.compilationConfiguration) {
-            dependencies.append(JvmDependency(resolvedClasspath))
-
-        }.asSuccess(diagnostics)
-
-    } catch (e: Throwable) {
-        ResultWithDiagnostics.Failure(*diagnostics.toTypedArray(), e.asDiagnostics())
-    }
-}
\ No newline at end of file
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BluePrintScriptService.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BluePrintScriptService.kt
deleted file mode 100644
index 8ae0915..0000000
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BluePrintScriptService.kt
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright © 2017-2018 AT&T Intellectual Property.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onap.ccsdk.apps.controllerblueprints.core.script
-
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
-import java.io.File
-import java.io.InputStream
-import java.io.Reader
-import javax.script.ScriptEngineManager
-import kotlin.script.experimental.api.ResultValue
-import kotlin.script.experimental.api.ResultWithDiagnostics
-import kotlin.script.experimental.api.resultOrNull
-import kotlin.script.experimental.host.toScriptSource
-import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate
-
-
-open class BluePrintScriptService(classLoader: ClassLoader? = Thread.currentThread().contextClassLoader) {
-
-    /**
-     * Get the Script Class instance
-     */
-    inline fun <reified T> scriptClassNewInstance(scriptFile: File, scriptClassName: String): T {
-
-        val compilationConfiguration = createJvmCompilationConfigurationFromTemplate<ComponentScript>()
-
-        val scriptEvaluator = BluePrintScriptEvaluator(scriptClassName)
-
-        val evalResponse = BlueprintScriptingHost(scriptEvaluator).eval(scriptFile.toScriptSource(), compilationConfiguration,
-                null)
-
-        when (evalResponse) {
-            is ResultWithDiagnostics.Success -> {
-                val returnValue = evalResponse.resultOrNull()?.returnValue as ResultValue.Value
-                return returnValue.value.castOrError()
-            }
-            is ResultWithDiagnostics.Failure -> {
-                throw BluePrintProcessorException(evalResponse.reports.joinToString("\n"))
-            }
-            else -> {
-                throw BluePrintProcessorException("Failed to process script ${scriptFile.absolutePath}")
-            }
-        }
-
-    }
-
-    val engine = ScriptEngineManager(classLoader).getEngineByExtension("kts")
-
-    inline fun <R> safeEval(evaluation: () -> R?) = try {
-        evaluation()
-    } catch (e: Exception) {
-        throw BluePrintProcessorException("Cannot load script", e)
-    }
-
-    inline fun <reified T> Any?.castOrError() = takeIf { it is T }?.let { it as T }
-            ?: throw IllegalArgumentException("Cannot cast $this to expected type ${T::class}")
-
-    inline fun <reified T> load(script: String): T = safeEval { engine.eval(script) }.castOrError()
-
-    inline fun <reified T> load(reader: Reader): T = safeEval { engine.eval(reader) }.castOrError()
-
-    inline fun <reified T> load(inputStream: InputStream): T = load(inputStream.reader())
-
-    inline fun <reified T> loadAll(vararg inputStream: InputStream): List<T> = inputStream.map(::load)
-}
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeService.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeService.kt
index bd19ae4..6031865 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeService.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeService.kt
@@ -62,20 +62,20 @@
 

     fun setBluePrintError(bluePrintError: BluePrintError)

 

-    /*

-      Get the Node Type Definition for the Node Template, Then iterate Node Type Properties and resolve the expressing

-   */

+    fun resolveNodeTemplatePropertyAssignments(nodeTemplateName: String,

+                                               propertyDefinitions: MutableMap<String, PropertyDefinition>,

+                                               propertyAssignments: MutableMap<String, JsonNode>): MutableMap<String, JsonNode>

+

     fun resolveNodeTemplateProperties(nodeTemplateName: String): MutableMap<String, JsonNode>

 

-    fun resolveNodeTemplateCapabilityProperties(nodeTemplateName: String, capability: String): MutableMap<String,

+    fun resolveNodeTemplateCapabilityProperties(nodeTemplateName: String, capabilityName: String): MutableMap<String,

             JsonNode>

 

-    fun resolveNodeTemplateRequirementProperties(nodeTemplateName: String, requirementName: String): MutableMap<String,

-            JsonNode>

+    fun resolveNodeTemplateInterfaceOperationInputs(nodeTemplateName: String, interfaceName: String,

+                                                    operationName: String): MutableMap<String, JsonNode>

 

-    fun resolveNodeTemplateInterfaceOperationInputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>

-

-    fun resolveNodeTemplateInterfaceOperationOutputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>

+    fun resolveNodeTemplateInterfaceOperationOutputs(nodeTemplateName: String, interfaceName: String,

+                                                     operationName: String): MutableMap<String, JsonNode>

 

     fun resolveNodeTemplateArtifact(nodeTemplateName: String, artifactName: String): String

 

@@ -89,24 +89,24 @@
 

     fun setNodeTemplateAttributeValue(nodeTemplateName: String, attributeName: String, value: JsonNode)

 

-    fun setNodeTemplateOperationPropertyValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String, value: JsonNode)

+    fun setNodeTemplateOperationPropertyValue(nodeTemplateName: String, interfaceName: String,

+                                              operationName: String, propertyName: String, value: JsonNode)

 

-    fun setNodeTemplateOperationInputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String, value: JsonNode)

+    fun setNodeTemplateOperationInputValue(nodeTemplateName: String, interfaceName: String,

+                                           operationName: String, propertyName: String, value: JsonNode)

 

-    fun setNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String, value: JsonNode)

+    fun setNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String,

+                                            operationName: String, propertyName: String, value: JsonNode)

 

     fun getInputValue(propertyName: String): JsonNode

 

-    fun getNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String): JsonNode

+    fun getNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String,

+                                            operationName: String, propertyName: String): JsonNode

 

     fun getNodeTemplatePropertyValue(nodeTemplateName: String, propertyName: String): JsonNode?

 

     fun getNodeTemplateAttributeValue(nodeTemplateName: String, attributeName: String): JsonNode?

 

-    fun getNodeTemplateRequirementPropertyValue(nodeTemplateName: String, requirementName: String, propertyName: String): JsonNode?

-

-    fun getNodeTemplateCapabilityPropertyValue(nodeTemplateName: String, capabilityName: String, propertyName: String): JsonNode?

-

     fun assignInputs(jsonNode: JsonNode)

 

     fun assignWorkflowInputs(workflowName: String, jsonNode: JsonNode)

@@ -190,22 +190,17 @@
         this.bluePrintError = bluePrintError

     }

 

-    /*

-                Get the Node Type Definition for the Node Template, Then iterate Node Type Properties and resolve the expressing

-             */

-    override fun resolveNodeTemplateProperties(nodeTemplateName: String): MutableMap<String, JsonNode> {

-        log.info("resolveNodeTemplatePropertyValues for node template ({})", nodeTemplateName)

+    /**

+     * Resolve any property assignments for the node

+     */

+    override fun resolveNodeTemplatePropertyAssignments(nodeTemplateName: String,

+                                                        propertyDefinitions: MutableMap<String, PropertyDefinition>,

+                                                        propertyAssignments: MutableMap<String, JsonNode>)

+            : MutableMap<String, JsonNode> {

+

         val propertyAssignmentValue: MutableMap<String, JsonNode> = hashMapOf()

 

-        val nodeTemplate: NodeTemplate = bluePrintContext.nodeTemplateByName(nodeTemplateName)

-

-        val propertyAssignments: MutableMap<String, JsonNode> = nodeTemplate.properties!!

-

-        // Get the Node Type Definitions

-        val nodeTypeProperties: MutableMap<String, PropertyDefinition> = bluePrintContext.nodeTypeChainedProperties(nodeTemplate.type)!!

-

-        // Iterate Node Type Properties

-        nodeTypeProperties.forEach { nodeTypePropertyName, nodeTypeProperty ->

+        propertyDefinitions.forEach { nodeTypePropertyName, nodeTypeProperty ->

             // Get the Express or Value for the Node Template

             val propertyAssignment: JsonNode? = propertyAssignments[nodeTypePropertyName]

 

@@ -213,38 +208,61 @@
             if (propertyAssignment != null) {

                 // Resolve the Expressing

                 val propertyAssignmentExpression = PropertyAssignmentService(this)

-                resolvedValue = propertyAssignmentExpression.resolveAssignmentExpression(nodeTemplateName, nodeTypePropertyName, propertyAssignment)

+                resolvedValue = propertyAssignmentExpression.resolveAssignmentExpression(nodeTemplateName,

+                        nodeTypePropertyName, propertyAssignment)

             } else {

                 // Assign default value to the Operation

-                nodeTypeProperty.defaultValue?.let { defaultValue ->

-                    resolvedValue = defaultValue

+                nodeTypeProperty.defaultValue?.let {

+                    resolvedValue = JacksonUtils.jsonNodeFromObject(nodeTypeProperty.defaultValue!!)

                 }

             }

             // Set for Return of method

             propertyAssignmentValue[nodeTypePropertyName] = resolvedValue

         }

-        log.info("resolved property definition for node template ({}), values ({})", nodeTemplateName, propertyAssignmentValue)

         return propertyAssignmentValue

     }

 

+    override fun resolveNodeTemplateProperties(nodeTemplateName: String): MutableMap<String, JsonNode> {

+        log.info("resolveNodeTemplatePropertyValues for node template ({})", nodeTemplateName)

+

+        val nodeTemplate: NodeTemplate = bluePrintContext.nodeTemplateByName(nodeTemplateName)

+

+        val propertyAssignments: MutableMap<String, JsonNode> = nodeTemplate.properties!!

+

+        // Get the Node Type Definitions

+        val nodeTypePropertieDefinitions: MutableMap<String, PropertyDefinition> = bluePrintContext

+                .nodeTypeChainedProperties(nodeTemplate.type)!!

+

+        /**

+         * Resolve the NodeTemplate Property Assignment Values.

+         */

+        return resolveNodeTemplatePropertyAssignments(nodeTemplateName, nodeTypePropertieDefinitions,

+                propertyAssignments)

+    }

+

     override fun resolveNodeTemplateCapabilityProperties(nodeTemplateName: String, capabilityName: String):

             MutableMap<String, JsonNode> {

         log.info("resolveNodeTemplateCapabilityProperties for node template($nodeTemplateName) capability " +

                 "($capabilityName)")

-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.

-    }

+        val nodeTemplate: NodeTemplate = bluePrintContext.nodeTemplateByName(nodeTemplateName)

 

-    override fun resolveNodeTemplateRequirementProperties(nodeTemplateName: String, requirementName: String): MutableMap<String, JsonNode> {

-        log.info("resolveNodeTemplateRequirementProperties for node template($nodeTemplateName) requirement ($requirementName)")

-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.

+        val propertyAssignments = nodeTemplate.capabilities?.get(capabilityName)?.properties ?: hashMapOf()

+

+        val propertyDefinitions = bluePrintContext.nodeTemplateNodeType(nodeTemplateName)

+                .capabilities?.get(capabilityName)?.properties ?: hashMapOf()

+

+        /**

+         * Resolve the Capability Property Assignment Values.

+         */

+        return resolveNodeTemplatePropertyAssignments(nodeTemplateName, propertyDefinitions,

+                propertyAssignments)

     }

 

     override fun resolveNodeTemplateInterfaceOperationInputs(nodeTemplateName: String,

-                                                             interfaceName: String, operationName: String): MutableMap<String, JsonNode> {

-        log.info("resolveNodeTemplateInterfaceOperationInputs for node template ({}),interface name ({}), " +

-                "operationName({})", nodeTemplateName, interfaceName, operationName)

-

-        val propertyAssignmentValue: MutableMap<String, JsonNode> = hashMapOf()

+                                                             interfaceName: String,

+                                                             operationName: String): MutableMap<String, JsonNode> {

+        log.info("resolveNodeTemplateInterfaceOperationInputs for node template ($nodeTemplateName),interface name " +

+                "($interfaceName), operationName($operationName)")

 

         val propertyAssignments: MutableMap<String, JsonNode> =

                 bluePrintContext.nodeTemplateInterfaceOperationInputs(nodeTemplateName, interfaceName, operationName)

@@ -256,40 +274,22 @@
                 bluePrintContext.nodeTypeInterfaceOperationInputs(nodeTypeName, interfaceName, operationName)

                         ?: hashMapOf()

 

-        log.info("input definition for node template ({}), values ({})", nodeTemplateName, propertyAssignments)

+        log.info("input definition for node template ($nodeTemplateName), values ($propertyAssignments)")

 

-        // Iterate Node Type Properties

-        nodeTypeInterfaceOperationInputs.forEach { nodeTypePropertyName, nodeTypeProperty ->

-            // Get the Express or Value for the Node Template

-            val propertyAssignment: JsonNode? = propertyAssignments[nodeTypePropertyName]

+        /**

+         * Resolve the Property Input Assignment Values.

+         */

+        return resolveNodeTemplatePropertyAssignments(nodeTemplateName, nodeTypeInterfaceOperationInputs,

+                propertyAssignments)

 

-            var resolvedValue: JsonNode = NullNode.getInstance()

-            if (propertyAssignment != null) {

-                // Resolve the Expressing

-                val propertyAssignmentExpression = PropertyAssignmentService(this)

-                resolvedValue = propertyAssignmentExpression.resolveAssignmentExpression(nodeTemplateName, nodeTypePropertyName, propertyAssignment)

-            } else {

-                // Assign default value to the Operation

-                nodeTypeProperty.defaultValue?.let {

-                    resolvedValue = JacksonUtils.jsonNodeFromObject(nodeTypeProperty.defaultValue!!)

-                }

-            }

-            // Set for Return of method

-            propertyAssignmentValue[nodeTypePropertyName] = resolvedValue

-        }

-        log.trace("resolved input assignments for node template ({}), values ({})", nodeTemplateName,

-                propertyAssignmentValue)

-

-        return propertyAssignmentValue

     }

 

 

     override fun resolveNodeTemplateInterfaceOperationOutputs(nodeTemplateName: String,

-                                                              interfaceName: String, operationName: String): MutableMap<String, JsonNode> {

-        log.info("resolveNodeTemplateInterfaceOperationOutputs for node template ({}),interface name ({}), " +

-                "operationName({})", nodeTemplateName, interfaceName, operationName)

-

-        val propertyAssignmentValue: MutableMap<String, JsonNode> = hashMapOf()

+                                                              interfaceName: String,

+                                                              operationName: String): MutableMap<String, JsonNode> {

+        log.info("resolveNodeTemplateInterfaceOperationOutputs for node template ($nodeTemplateName),interface name " +

+                "($interfaceName), operationName($operationName)")

 

         val propertyAssignments: MutableMap<String, JsonNode> =

                 bluePrintContext.nodeTemplateInterfaceOperationOutputs(nodeTemplateName, interfaceName, operationName)

@@ -300,30 +300,15 @@
         val nodeTypeInterfaceOperationOutputs: MutableMap<String, PropertyDefinition> =

                 bluePrintContext.nodeTypeInterfaceOperationOutputs(nodeTypeName, interfaceName, operationName)

                         ?: hashMapOf()

+        /**

+         * Resolve the Property Output Assignment Values.

+         */

+        val propertyAssignmentValue = resolveNodeTemplatePropertyAssignments(nodeTemplateName,

+                nodeTypeInterfaceOperationOutputs, propertyAssignments)

 

-        // Iterate Node Type Properties

-        nodeTypeInterfaceOperationOutputs.forEach { nodeTypePropertyName, nodeTypeProperty ->

-

-            // Get the Express or Value for the Node Template

-            val propertyAssignment: JsonNode? = propertyAssignments[nodeTypePropertyName]

-

-            var resolvedValue: JsonNode = NullNode.getInstance()

-            if (propertyAssignment != null) {

-                // Resolve the Expressing

-                val propertyAssignmentExpression = PropertyAssignmentService(this)

-                resolvedValue = propertyAssignmentExpression.resolveAssignmentExpression(nodeTemplateName, nodeTypePropertyName, propertyAssignment)

-            } else {

-                // Assign default value to the Operation

-                nodeTypeProperty.defaultValue?.let {

-                    resolvedValue = JacksonUtils.jsonNodeFromObject(nodeTypeProperty.defaultValue!!)

-                }

-            }

-            // Set for Return of method

-            propertyAssignmentValue[nodeTypePropertyName] = resolvedValue

-

-            // Store  operation output values into context

-            setNodeTemplateOperationOutputValue(nodeTemplateName, interfaceName, operationName, nodeTypePropertyName, resolvedValue)

-            log.trace("resolved output assignments for node template ({}), property name ({}), value ({})", nodeTemplateName, nodeTypePropertyName, resolvedValue)

+        // Store  operation output values into context

+        propertyAssignmentValue.forEach { key, value ->

+            setNodeTemplateOperationOutputValue(nodeTemplateName, interfaceName, operationName, key, value)

         }

         return propertyAssignmentValue

     }

@@ -338,12 +323,11 @@
         val nodeTemplate = bluePrintContext.nodeTemplateByName(nodeTemplateName)

 

         return nodeTemplate.artifacts?.get(artifactName)

-                ?: throw BluePrintProcessorException(String.format("failed to get artifat definition {} from the node template"

-                        , artifactName))

+                ?: throw BluePrintProcessorException("failed to get artifat definition($artifactName) from the node " +

+                        "template")

 

     }

 

-

     override fun setInputValue(propertyName: String, propertyDefinition: PropertyDefinition, value: JsonNode) {

         val path = StringBuilder(BluePrintConstants.PATH_INPUTS)

                 .append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()

@@ -351,8 +335,10 @@
         put(path, value)

     }

 

-    override fun setWorkflowInputValue(workflowName: String, propertyName: String, propertyDefinition: PropertyDefinition, value: JsonNode) {

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_WORKFLOWS).append(BluePrintConstants.PATH_DIVIDER).append(workflowName)

+    override fun setWorkflowInputValue(workflowName: String, propertyName: String,

+                                       propertyDefinition: PropertyDefinition, value: JsonNode) {

+        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_WORKFLOWS)

+                .append(BluePrintConstants.PATH_DIVIDER).append(workflowName)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INPUTS)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)

                 .append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()

@@ -361,7 +347,8 @@
 

     override fun setNodeTemplatePropertyValue(nodeTemplateName: String, propertyName: String, value: JsonNode) {

 

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

+        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)

                 .append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()

         put(path, value)

@@ -369,7 +356,8 @@
 

     override fun setNodeTemplateAttributeValue(nodeTemplateName: String, attributeName: String, value: JsonNode) {

 

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

+        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_ATTRIBUTES)

                 .append(BluePrintConstants.PATH_DIVIDER).append(attributeName).toString()

         put(path, value)

@@ -377,31 +365,42 @@
 

     override fun setNodeTemplateOperationPropertyValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String,

                                                        value: JsonNode) {

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES).append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS).append(BluePrintConstants.PATH_DIVIDER).append(operationName)

+        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

+                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)

+                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS)

+                .append(BluePrintConstants.PATH_DIVIDER).append(operationName)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)

                 .append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()

         log.trace("setting operation property path ({}), values ({})", path, value)

         put(path, value)

     }

 

-    override fun setNodeTemplateOperationInputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String,

+    override fun setNodeTemplateOperationInputValue(nodeTemplateName: String, interfaceName: String,

+                                                    operationName: String, propertyName: String,

                                                     value: JsonNode) {

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES).append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS).append(BluePrintConstants.PATH_DIVIDER).append(operationName)

+        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

+                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)

+                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS)

+                .append(BluePrintConstants.PATH_DIVIDER).append(operationName)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INPUTS)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)

                 .append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()

         put(path, value)

     }

 

-    override fun setNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String,

+    override fun setNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String,

+                                                     operationName: String, propertyName: String,

                                                      value: JsonNode) {

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES).append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS).append(BluePrintConstants.PATH_DIVIDER).append(operationName)

+        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

+                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)

+                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS)

+                .append(BluePrintConstants.PATH_DIVIDER).append(operationName)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OUTPUTS)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)

                 .append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()

@@ -415,47 +414,36 @@
         return getJsonNode(path)

     }

 

-    override fun getNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String): JsonNode {

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES).append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS).append(BluePrintConstants.PATH_DIVIDER).append(operationName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OUTPUTS).append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)

+    override fun getNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String,

+                                                     operationName: String, propertyName: String): JsonNode {

+        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

+                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)

+                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS)

+                .append(BluePrintConstants.PATH_DIVIDER).append(operationName)

+                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OUTPUTS)

+                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)

                 .append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()

         return getJsonNode(path)

     }

 

     override fun getNodeTemplatePropertyValue(nodeTemplateName: String, propertyName: String): JsonNode {

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

+        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)

                 .append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()

         return getJsonNode(path)

     }

 

     override fun getNodeTemplateAttributeValue(nodeTemplateName: String, attributeName: String): JsonNode {

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

+        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_ATTRIBUTES)

                 .append(BluePrintConstants.PATH_DIVIDER).append(attributeName).toString()

         return getJsonNode(path)

     }

 

-    override fun getNodeTemplateRequirementPropertyValue(nodeTemplateName: String, requirementName: String, propertyName:

-    String): JsonNode {

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_REQUIREMENTS).append(requirementName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)

-                .append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()

-        return getJsonNode(path)

-    }

-

-    override fun getNodeTemplateCapabilityPropertyValue(nodeTemplateName: String, capabilityName: String, propertyName:

-    String): JsonNode {

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_CAPABILITIES).append(capabilityName)

-                .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)

-                .append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()

-        return getJsonNode(path)

-    }

-

     override fun assignInputs(jsonNode: JsonNode) {

         log.info("assignInputs from input JSON ({})", jsonNode.toString())

         bluePrintContext.inputs?.forEach { propertyName, property ->

@@ -493,7 +481,8 @@
     override fun getJsonForNodeTemplateAttributeProperties(nodeTemplateName: String, keys: List<String>): JsonNode {

 

         val jsonNode: ObjectNode = jacksonObjectMapper().createObjectNode()

-        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

+        val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES)

+                .append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)

                 .append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_ATTRIBUTES)

                 .append(BluePrintConstants.PATH_DIVIDER).toString()

         store.keys.filter {

diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorService.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorService.kt
index 1783737..b33cc3f 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorService.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorService.kt
@@ -523,7 +523,7 @@
 

     @Throws(BluePrintException::class)

     open fun validateImplementation(implementation: Implementation) {

-        checkNotEmptyNThrow(implementation.primary)

+        checkNotEmptyOrThrow(implementation.primary)

     }

 

     @Throws(BluePrintException::class)

diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintArchiveUtils.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintArchiveUtils.kt
index ab5175d..fe7929e 100755
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintArchiveUtils.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintArchiveUtils.kt
@@ -24,13 +24,18 @@
 import org.apache.commons.io.IOUtils
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
-import java.io.*
+import org.slf4j.LoggerFactory
+import java.io.BufferedInputStream
+import java.io.File
+import java.io.FileInputStream
+import java.io.IOException
 import java.nio.charset.Charset
 import java.util.zip.ZipFile
 
 class BluePrintArchiveUtils {
 
     companion object {
+        private val log = LoggerFactory.getLogger(BluePrintArchiveUtils::class.java)
 
         fun getFileContent(fileName: String): String = runBlocking {
             async {
@@ -51,50 +56,20 @@
         /**
          * Create a new Zip from a root directory
          *
-         * @param directory the base directory
-         * @param filename the output filename
+         * @param source the base directory
+         * @param destination the output filename
          * @param absolute store absolute filepath (from directory) or only filename
          * @return True if OK
          */
         fun compress(source: File, destination: File, absolute: Boolean): Boolean {
-            // recursive call
-            val zaos: ZipArchiveOutputStream
             try {
-                zaos = ZipArchiveOutputStream(FileOutputStream(destination))
-            } catch (e: FileNotFoundException) {
-                return false
-            }
-
-            try {
-                recurseFiles(source, source, zaos, absolute)
-            } catch (e2: IOException) {
-                try {
-                    zaos.close()
-                } catch (e: IOException) {
-                    // ignore
+                ZipArchiveOutputStream(destination).use {
+                    recurseFiles(source, source, it, absolute)
                 }
-
+            } catch (e: Exception) {
+                log.error("Fail to compress folder(:$source) to path(${destination.path}", e)
                 return false
             }
-
-            try {
-                zaos.finish()
-            } catch (e1: IOException) {
-                // ignore
-            }
-
-            try {
-                zaos.flush()
-            } catch (e: IOException) {
-                // ignore
-            }
-
-            try {
-                zaos.close()
-            } catch (e: IOException) {
-                // ignore
-            }
-
             return true
         }
 
@@ -113,21 +88,19 @@
             if (file.isDirectory) {
                 // recursive call
                 val files = file.listFiles()
-                for (file2 in files!!) {
-                    recurseFiles(root, file2, zaos, absolute)
+                for (fileChild in files!!) {
+                    recurseFiles(root, fileChild, zaos, absolute)
                 }
             } else if (!file.name.endsWith(".zip") && !file.name.endsWith(".ZIP")) {
-                var filename: String? = null
-                if (absolute) {
-                    filename = file.absolutePath.substring(root.absolutePath.length)
+                val filename = if (absolute) {
+                    file.absolutePath.substring(root.absolutePath.length)
                 } else {
-                    filename = file.name
+                    file.name
                 }
                 val zae = ZipArchiveEntry(filename)
-                zae.setSize(file.length())
+                zae.size = file.length()
                 zaos.putArchiveEntry(zae)
-                val fis = FileInputStream(file)
-                IOUtils.copy(fis, zaos)
+                FileInputStream(file).use { IOUtils.copy(it, zaos) }
                 zaos.closeArchiveEntry()
             }
         }
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt
index 6321a83..2e5a040 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt
@@ -33,9 +33,11 @@
 import org.apache.commons.io.IOUtils

 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants

 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException

+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException

 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes

 import java.io.File

 import java.nio.charset.Charset

+import kotlin.reflect.jvm.internal.impl.load.kotlin.JvmType

 

 /**

  *

@@ -174,8 +176,13 @@
             return getMapFromJson(content, valueType)

         }

 

+        fun <T> getInstanceFromMap(properties: MutableMap<String, JsonNode>, classType: Class<T>): T {

+            return readValue(getJson(properties), classType)

+                    ?: throw BluePrintProcessorException("failed to transform content ($properties) to type ($classType)")

+        }

+

         fun checkJsonNodeValueOfType(type: String, jsonNode: JsonNode): Boolean {

-            if (BluePrintTypes.validPrimitiveTypes().contains(type)) {

+            if (BluePrintTypes.validPrimitiveTypes().contains(type.toLowerCase())) {

                 return checkJsonNodeValueOfPrimitiveType(type, jsonNode)

             } else if (BluePrintTypes.validCollectionTypes().contains(type)) {

                 return checkJsonNodeValueOfCollectionType(type, jsonNode)

@@ -183,59 +190,76 @@
             return false

         }

 

+        fun checkIfPrimitiveType(primitiveType: String): Boolean {

+            return when (primitiveType.toLowerCase()) {

+                BluePrintConstants.DATA_TYPE_STRING -> true

+                BluePrintConstants.DATA_TYPE_BOOLEAN -> true

+                BluePrintConstants.DATA_TYPE_INTEGER -> true

+                BluePrintConstants.DATA_TYPE_FLOAT -> true

+                BluePrintConstants.DATA_TYPE_DOUBLE -> true

+                BluePrintConstants.DATA_TYPE_TIMESTAMP -> true

+                else -> false

+            }

+        }

+

         fun checkJsonNodeValueOfPrimitiveType(primitiveType: String, jsonNode: JsonNode): Boolean {

-            when (primitiveType) {

-                BluePrintConstants.DATA_TYPE_STRING -> return jsonNode.isTextual

-                BluePrintConstants.DATA_TYPE_BOOLEAN -> return jsonNode.isBoolean

-                BluePrintConstants.DATA_TYPE_INTEGER -> return jsonNode.isInt

-                BluePrintConstants.DATA_TYPE_FLOAT -> return jsonNode.isDouble

-                BluePrintConstants.DATA_TYPE_TIMESTAMP -> return jsonNode.isTextual

-                else -> return false

+            return when (primitiveType.toLowerCase()) {

+                BluePrintConstants.DATA_TYPE_STRING -> jsonNode.isTextual

+                BluePrintConstants.DATA_TYPE_BOOLEAN -> jsonNode.isBoolean

+                BluePrintConstants.DATA_TYPE_INTEGER -> jsonNode.isInt

+                BluePrintConstants.DATA_TYPE_FLOAT -> jsonNode.isDouble

+                BluePrintConstants.DATA_TYPE_DOUBLE -> jsonNode.isDouble

+                BluePrintConstants.DATA_TYPE_TIMESTAMP -> jsonNode.isTextual

+                else -> false

             }

         }

 

         fun checkJsonNodeValueOfCollectionType(type: String, jsonNode: JsonNode): Boolean {

-            when (type) {

-                BluePrintConstants.DATA_TYPE_LIST -> return jsonNode.isArray

-                BluePrintConstants.DATA_TYPE_MAP -> return jsonNode.isContainerNode

-                else -> return false

+            return when (type.toLowerCase()) {

+                BluePrintConstants.DATA_TYPE_LIST -> jsonNode.isArray

+                BluePrintConstants.DATA_TYPE_MAP -> jsonNode.isContainerNode

+                else -> false

             }

         }

 

         fun populatePrimitiveValues(key: String, value: Any, primitiveType: String, objectNode: ObjectNode) {

-            when (primitiveType) {

+            when (primitiveType.toLowerCase()) {

                 BluePrintConstants.DATA_TYPE_BOOLEAN -> objectNode.put(key, value as Boolean)

                 BluePrintConstants.DATA_TYPE_INTEGER -> objectNode.put(key, value as Int)

                 BluePrintConstants.DATA_TYPE_FLOAT -> objectNode.put(key, value as Float)

+                BluePrintConstants.DATA_TYPE_DOUBLE -> objectNode.put(key, value as Double)

                 BluePrintConstants.DATA_TYPE_TIMESTAMP -> objectNode.put(key, value as String)

                 else -> objectNode.put(key, value as String)

             }

         }

 

         fun populatePrimitiveValues(value: Any, primitiveType: String, arrayNode: ArrayNode) {

-            when (primitiveType) {

+            when (primitiveType.toLowerCase()) {

                 BluePrintConstants.DATA_TYPE_BOOLEAN -> arrayNode.add(value as Boolean)

                 BluePrintConstants.DATA_TYPE_INTEGER -> arrayNode.add(value as Int)

                 BluePrintConstants.DATA_TYPE_FLOAT -> arrayNode.add(value as Float)

+                BluePrintConstants.DATA_TYPE_DOUBLE -> arrayNode.add(value as Double)

                 BluePrintConstants.DATA_TYPE_TIMESTAMP -> arrayNode.add(value as String)

                 else -> arrayNode.add(value as String)

             }

         }

 

         fun populatePrimitiveDefaultValues(key: String, primitiveType: String, objectNode: ObjectNode) {

-            when (primitiveType) {

+            when (primitiveType.toLowerCase()) {

                 BluePrintConstants.DATA_TYPE_BOOLEAN -> objectNode.put(key, false)

                 BluePrintConstants.DATA_TYPE_INTEGER -> objectNode.put(key, 0)

                 BluePrintConstants.DATA_TYPE_FLOAT -> objectNode.put(key, 0.0)

+                BluePrintConstants.DATA_TYPE_DOUBLE -> objectNode.put(key, 0.0)

                 else -> objectNode.put(key, "")

             }

         }

 

         fun populatePrimitiveDefaultValuesForArrayNode(primitiveType: String, arrayNode: ArrayNode) {

-            when (primitiveType) {

+            when (primitiveType.toLowerCase()) {

                 BluePrintConstants.DATA_TYPE_BOOLEAN -> arrayNode.add(false)

                 BluePrintConstants.DATA_TYPE_INTEGER -> arrayNode.add(0)

                 BluePrintConstants.DATA_TYPE_FLOAT -> arrayNode.add(0.0)

+                BluePrintConstants.DATA_TYPE_DOUBLE -> arrayNode.add(0.0)

                 else -> arrayNode.add("")

             }

         }

@@ -250,13 +274,15 @@
             }

         }

 

-        fun convertPrimitiveResourceValue(type: String, value: String): JsonNode? {

-            when (type) {

-                BluePrintConstants.DATA_TYPE_BOOLEAN -> return JacksonUtils.getJsonNode(value as Boolean)

-                BluePrintConstants.DATA_TYPE_INTEGER -> return JacksonUtils.getJsonNode(value as Int)

-                BluePrintConstants.DATA_TYPE_FLOAT -> return JacksonUtils.getJsonNode(value as Float)

-                else -> return JacksonUtils.getJsonNode(value)

+        fun convertPrimitiveResourceValue(type: String, value: String): JsonNode {

+            return when (type.toLowerCase()) {

+                BluePrintConstants.DATA_TYPE_BOOLEAN -> jsonNodeFromObject(java.lang.Boolean.valueOf(value))

+                BluePrintConstants.DATA_TYPE_INTEGER -> jsonNodeFromObject(Integer.valueOf(value))

+                BluePrintConstants.DATA_TYPE_FLOAT -> jsonNodeFromObject(java.lang.Float.valueOf(value))

+                BluePrintConstants.DATA_TYPE_DOUBLE -> jsonNodeFromObject(java.lang.Double.valueOf(value))

+                else -> getJsonNode(value)

             }

         }

+

     }

 }
\ No newline at end of file
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/validation/BluePrintNodeTypeValidatorImpl.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/validation/BluePrintNodeTypeValidatorImpl.kt
index 2e4a733..1077f34 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/validation/BluePrintNodeTypeValidatorImpl.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/validation/BluePrintNodeTypeValidatorImpl.kt
@@ -20,7 +20,7 @@
 import com.att.eelf.configuration.EELFManager
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes
-import org.onap.ccsdk.apps.controllerblueprints.core.checkNotEmptyNThrow
+import org.onap.ccsdk.apps.controllerblueprints.core.checkNotEmptyOrThrow
 import org.onap.ccsdk.apps.controllerblueprints.core.data.*
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintNodeTypeValidator
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeValidatorService
@@ -149,7 +149,7 @@
     }
 
     open fun validateImplementation(implementation: Implementation) {
-        checkNotEmptyNThrow(implementation.primary)
+        checkNotEmptyOrThrow(implementation.primary)
     }
 
 }
\ No newline at end of file
diff --git a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BluePrintScriptServiceTest.kt b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BluePrintScriptServiceTest.kt
deleted file mode 100644
index 5c5ad3b..0000000
--- a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BluePrintScriptServiceTest.kt
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright © 2017-2018 AT&T Intellectual Property.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onap.ccsdk.apps.controllerblueprints.core.script
-
-import org.junit.Ignore
-import org.junit.Test
-import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BlueprintFunctionNode
-import java.io.File
-import kotlin.test.assertEquals
-import kotlin.test.assertNotNull
-
-class BluePrintScriptServiceTest {
-
-    @Test
-    fun `invoke script`() {
-        val scriptContent = "11 + 11"
-        val value = BluePrintScriptService()
-                .load<Int>(scriptContent)
-        assertEquals(22, value, "failed to execute command")
-    }
-
-    @Test
-    @Ignore
-    fun `invoke script component node`() {
-
-        //println(classpathFromClasspathProperty()?.joinToString("\n"))
-
-        val scriptFile = File("src/test/resources/scripts/SampleBlueprintFunctionNode.kts")
-
-        val functionNode = BluePrintScriptService()
-                .scriptClassNewInstance<BlueprintFunctionNode<String, String>>(scriptFile,
-                        "SampleBlueprintFunctionNode")
-        assertNotNull(functionNode, "failed to get instance from script")
-    }
-}
\ No newline at end of file
diff --git a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeServiceTest.kt b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeServiceTest.kt
index c01b14b..02148f0 100644
--- a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeServiceTest.kt
+++ b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeServiceTest.kt
@@ -39,7 +39,7 @@
     private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())

 

     @Test

-    fun testResolveNodeTemplateProperties() {

+    fun `test Resolve NodeTemplate Properties`() {

         log.info("************************ testResolveNodeTemplateProperties **********************")

 

         val bluePrintRuntimeService = getBluePrintRuntimeService()

@@ -49,25 +49,31 @@
         val inputNode: JsonNode = JacksonUtils.jsonNodeFromFile(inputDataPath)

         bluePrintRuntimeService.assignInputs(inputNode)

 

-        val propContext: MutableMap<String, JsonNode> = bluePrintRuntimeService.resolveNodeTemplateProperties("activate-process")

+        val propContext: MutableMap<String, JsonNode> = bluePrintRuntimeService

+                .resolveNodeTemplateProperties("activate-process")

 

         assertNotNull(propContext, "Failed to populate interface property values")

     }

 

     @Test

-    fun testResolveNodeTemplateCapabilityProperties() {

+    fun `test resolve NodeTemplate Capability Properties`() {

         log.info("************************ testResolveNodeTemplateRequirementProperties **********************")

-        //TODO

+        val bluePrintRuntimeService = getBluePrintRuntimeService()

+

+        val executionContext = bluePrintRuntimeService.getExecutionContext()

+

+        BluePrintRuntimeUtils.assignInputsFromClassPathFile(bluePrintRuntimeService.bluePrintContext(),

+                "data/default-context.json", executionContext)

+

+        val capProperties = bluePrintRuntimeService.resolveNodeTemplateCapabilityProperties("sample-netconf-device",

+                "netconf")

+        assertNotNull(capProperties, "Failed to populate capability property values")

+        assertEquals(capProperties["target-ip-address"], JacksonUtils.jsonNodeFromObject("localhost"), "Failed to populate parameter target-ip-address")

+        assertEquals(capProperties["port-number"], JacksonUtils.jsonNodeFromObject(830), "Failed to populate parameter port-number")

     }

 

     @Test

-    fun testResolveNodeTemplateRequirementProperties() {

-        log.info("************************ testResolveNodeTemplateRequirementProperties **********************")

-        //TODO

-    }

-

-    @Test

-    fun testResolveNodeTemplateInterfaceOperationInputs() {

+    fun `test Resolve NodeTemplate Interface Operation Inputs`() {

         log.info("************************ testResolveNodeTemplateInterfaceOperationInputs **********************")

 

         val bluePrintRuntimeService = getBluePrintRuntimeService()

@@ -77,16 +83,17 @@
         BluePrintRuntimeUtils.assignInputsFromClassPathFile(bluePrintRuntimeService.bluePrintContext(),

                 "data/default-context.json", executionContext)

 

-        val inContext: MutableMap<String, JsonNode> = bluePrintRuntimeService.resolveNodeTemplateInterfaceOperationInputs("resource-assignment",

-                "ResourceAssignmentComponent", "process")

+        val inContext: MutableMap<String, JsonNode> = bluePrintRuntimeService

+                .resolveNodeTemplateInterfaceOperationInputs("resource-assignment",

+                        "ResourceAssignmentComponent", "process")

 

         assertNotNull(inContext, "Failed to populate interface input property values")

         assertEquals(inContext["action-name"], JacksonUtils.jsonNodeFromObject("sample-action"), "Failed to populate parameter action-name")

         assertEquals(inContext["request-id"], JacksonUtils.jsonNodeFromObject("12345"), "Failed to populate parameter action-name")

-      }

+    }

 

     @Test

-    fun testResolveNodeTemplateInterfaceOperationOutputs() {

+    fun `test Resolve NodeTemplate Interface Operation Outputs`() {

         log.info("************************ testResolveNodeTemplateInterfaceOperationOutputs **********************")

 

         val bluePrintRuntimeService = getBluePrintRuntimeService()

@@ -107,7 +114,7 @@
     }

 

     @Test

-    fun testNodeTemplateContextProperty() {

+    fun `test NodeTemplate Context Property`() {

         log.info("************************ testNodeTemplateContextProperty **********************")

         val bluePrintRuntimeService = getBluePrintRuntimeService()

 

diff --git a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintFileUtilsTest.kt b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintFileUtilsTest.kt
index 143c4a8..59a0371 100644
--- a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintFileUtilsTest.kt
+++ b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintFileUtilsTest.kt
@@ -27,7 +27,7 @@
 
     @Test
     fun testNewBlueprint() = runBlocking {
-        val targetPath: String = Paths.get("target").toUri().toURL().path.plus("bp-new-test")
+        val targetPath: String = Paths.get("target").toUri().toURL().path.plus("/bp-new-test")
         BluePrintFileUtils.createEmptyBluePrint(targetPath)
 
     }
@@ -36,7 +36,7 @@
     fun testBlueprintCopy() = runBlocking {
         val sourcePath: String = "./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration"
 
-        val targetPath: String = Paths.get("target").toUri().toURL().path.plus("bp-copy-test")
+        val targetPath: String = Paths.get("target").toUri().toURL().path.plus("/bp-copy-test")
 
         val targetDir = File(targetPath)
         targetDir.deleteOnExit()
diff --git a/components/core/src/test/resources/dictionary/dictionary_schema.json b/components/core/src/test/resources/dictionary/dictionary_schema.json
index f9ef9ee..51db5f5 100644
--- a/components/core/src/test/resources/dictionary/dictionary_schema.json
+++ b/components/core/src/test/resources/dictionary/dictionary_schema.json
@@ -54,7 +54,7 @@
 				"aai": {

 					"type": "any"

 				},

-				"mdsal": {

+				"primary-config-data": {

 					"type": "object",

 					"properties": {

 						"path": {

@@ -188,7 +188,7 @@
 						}

 					}

 				},

-				"mdsal": {

+				"primary-config-data": {

 					"type": "object",

 					"properties": {

 						"names": {

diff --git a/components/model-catalog/api-definition/proto/BluePrintManagement.proto b/components/model-catalog/api-definition/proto/BluePrintManagement.proto
deleted file mode 100644
index 55f9466..0000000
--- a/components/model-catalog/api-definition/proto/BluePrintManagement.proto
+++ /dev/null
@@ -1,56 +0,0 @@
-syntax = "proto3";
-option java_multiple_files = true;
-package org.onap.ccsdk.apps.controllerblueprints.management.api;
-
-message BluePrintUploadInput {
-    CommonHeader commonHeader = 1;
-    string blueprintName = 2;
-    string blueprintVersion = 3;
-    FileChunk fileChunk = 4;
-}
-
-message FileChunk {
-    bytes chunk = 1;
-}
-
-message BluePrintUploadOutput {
-    CommonHeader commonHeader = 1;
-    Status status = 3;
-}
-
-message BluePrintRemoveInput {
-    CommonHeader commonHeader = 1;
-    string blueprintName = 2;
-    string blueprintVersion = 3;
-}
-
-message BluePrintRemoveOutput {
-    CommonHeader commonHeader = 1;
-    Status status = 3;
-}
-
-message CommonHeader {
-    string timestamp = 1;
-    string originatorId = 23;
-    string requestId = 3;
-    string subRequestId = 4;
-}
-
-message ActionIdentifiers {
-    string blueprintName = 1;
-    string blueprintVersion = 2;
-    string actionName = 3;
-    string mode = 4;
-}
-
-message Status {
-    string timestamp = 1;
-    int32 code = 2;
-    string message = 3;
-    string errorMessage = 4;
-}
-
-service BluePrintManagementService {
-    rpc uploadBlueprint (BluePrintUploadInput) returns (BluePrintUploadOutput);
-    rpc removeBlueprint (BluePrintRemoveInput) returns (BluePrintRemoveOutput);
-}
diff --git a/components/model-catalog/api-definition/proto/BluePrintProcessing.proto b/components/model-catalog/api-definition/proto/BluePrintProcessing.proto
deleted file mode 100644
index 8fa4a13..0000000
--- a/components/model-catalog/api-definition/proto/BluePrintProcessing.proto
+++ /dev/null
@@ -1,49 +0,0 @@
-syntax = "proto3";
-import "google/protobuf/struct.proto";
-option java_multiple_files = true;
-package org.onap.ccsdk.apps.controllerblueprints.processing.api;
-
-message ExecutionServiceInput {
-    CommonHeader commonHeader = 1;
-    ActionIdentifiers actionIdentifiers = 2;
-    google.protobuf.Struct payload = 3;
-}
-
-message ExecutionServiceOutput {
-    CommonHeader commonHeader = 1;
-    ActionIdentifiers actionIdentifiers = 2;
-    Status status = 3;
-    google.protobuf.Struct payload = 4;
-}
-
-message CommonHeader {
-    string timestamp = 1;
-    string originatorId = 23;
-    string requestId = 3;
-    string subRequestId = 4;
-    Flag flag = 5;
-}
-
-message Flag {
-    bool isForce = 1;
-    int32 ttl = 2;
-}
-
-message ActionIdentifiers {
-    string blueprintName = 1;
-    string blueprintVersion = 2;
-    string actionName = 3;
-    string mode = 4;
-}
-
-message Status {
-    int32 code = 1;
-    string errorMessage = 2;
-    string message = 3;
-    string eventType = 4;
-    string timestamp = 5;
-}
-
-service BluePrintProcessingService {
-    rpc process (ExecutionServiceInput) returns (stream ExecutionServiceOutput);
-}
diff --git a/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/vFW_spinup.json b/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/vFW_spinup.json
index 13847bb..4484d55 100644
--- a/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/vFW_spinup.json
+++ b/components/model-catalog/blueprint-model/service-blueprint/vFW/Definitions/vFW_spinup.json
@@ -667,7 +667,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "vnf-name",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -982,7 +982,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "image_name",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1007,7 +1007,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "key_name",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1032,7 +1032,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "pub_key",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1057,7 +1057,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "onap_private_net_id",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1082,7 +1082,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "onap_private_subnet_id",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1462,7 +1462,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "vnf-name",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1777,7 +1777,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "image_name",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1802,7 +1802,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "key_name",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1827,7 +1827,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "pub_key",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1852,7 +1852,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "onap_private_net_id",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1877,7 +1877,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "onap_private_subnet_id",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1950,7 +1950,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "vfw_private_ip_0",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -1975,7 +1975,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "vsn_private_ip_0",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -2050,7 +2050,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "vpg_private_ip_0",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -2284,7 +2284,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "vnf-name",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -2574,7 +2574,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "image_name",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -2625,7 +2625,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "key_name",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -2650,7 +2650,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "pub_key",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -2675,7 +2675,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "onap_private_net_id",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -2700,7 +2700,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "onap_private_subnet_id",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -2848,7 +2848,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "vfw_private_ip_1",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
@@ -3250,7 +3250,7 @@
                   },
                   "input-param": false,
                   "dictionary-name": "vnf-name",
-                  "dictionary-source": "mdsal",
+                  "dictionary-source": "primary-config-data",
                   "dependencies": [
                     "service-instance-id",
                     "vnf-id"
diff --git a/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/baseconfig-mapping.json b/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/baseconfig-mapping.json
index c457086..67d2a91 100644
--- a/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/baseconfig-mapping.json
+++ b/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/baseconfig-mapping.json
@@ -27,7 +27,7 @@
       "type": "string"
     },
     "dictionary-name": "vnf_name",
-    "dictionary-source": "mdsal",
+    "dictionary-source": "primary-config-data",
     "dependencies": [
       "service-instance-id",
       "vnf-id"
diff --git a/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/resources_definition_types.json b/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/resources_definition_types.json
index 557f6ef..c887121 100644
--- a/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/resources_definition_types.json
+++ b/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/resources_definition_types.json
@@ -38,7 +38,7 @@
       "type": "string"
     },
     "sources": {
-      "mdsal": {
+      "primary-config-data": {
         "type": "source-rest",
         "properties": {
           "type": "JSON",
diff --git a/components/model-catalog/proto-definition/pom.xml b/components/model-catalog/proto-definition/pom.xml
new file mode 100644
index 0000000..c928939
--- /dev/null
+++ b/components/model-catalog/proto-definition/pom.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Copyright (C) 2019 Bell Canada
+ * Modifications Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.ccsdk.apps.components</groupId>
+        <artifactId>parent</artifactId>
+        <version>0.4.1-SNAPSHOT</version>
+        <relativePath>../../parent</relativePath>
+    </parent>
+
+    <artifactId>proto-definition</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Controller Blueprints Proto Definition</name>
+    <description>Controller Blueprints Proto Definition</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-protobuf</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-stub</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java-util</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <extensions>
+            <extension>
+                <groupId>kr.motd.maven</groupId>
+                <artifactId>os-maven-plugin</artifactId>
+                <version>1.6.1</version>
+            </extension>
+        </extensions>
+        <plugins>
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>0.6.1</version>
+                <configuration>
+                    <protocArtifact>
+                        com.google.protobuf:protoc:3.6.1:exe:${os.detected.classifier}
+                    </protocArtifact>
+                    <pluginId>grpc-java</pluginId>
+                    <pluginArtifact>
+                        io.grpc:protoc-gen-grpc-java:1.18.0:exe:${os.detected.classifier}
+                    </pluginArtifact>
+                    <protoSourceRoot>proto</protoSourceRoot>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>compile-custom</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/components/model-catalog/proto-definition/proto/BluePrintCommon.proto b/components/model-catalog/proto-definition/proto/BluePrintCommon.proto
new file mode 100644
index 0000000..0f17783
--- /dev/null
+++ b/components/model-catalog/proto-definition/proto/BluePrintCommon.proto
@@ -0,0 +1,31 @@
+syntax = "proto3";
+option java_multiple_files = true;
+package org.onap.ccsdk.apps.controllerblueprints.common.api;
+
+message CommonHeader {
+  string timestamp = 1;
+  string originatorId = 23;
+  string requestId = 3;
+  string subRequestId = 4;
+  Flag flag = 5;
+}
+
+message Flag {
+  bool isForce = 1;
+  int32 ttl = 2;
+}
+
+message ActionIdentifiers {
+  string blueprintName = 1;
+  string blueprintVersion = 2;
+  string actionName = 3;
+  string mode = 4;
+}
+
+message Status {
+  int32 code = 1;
+  string errorMessage = 2;
+  string message = 3;
+  string eventType = 4;
+  string timestamp = 5;
+}
\ No newline at end of file
diff --git a/components/model-catalog/proto-definition/proto/BluePrintManagement.proto b/components/model-catalog/proto-definition/proto/BluePrintManagement.proto
new file mode 100644
index 0000000..658cbbb
--- /dev/null
+++ b/components/model-catalog/proto-definition/proto/BluePrintManagement.proto
@@ -0,0 +1,25 @@
+syntax = "proto3";
+import "BluePrintCommon.proto";
+option java_multiple_files = true;
+package org.onap.ccsdk.apps.controllerblueprints.management.api;
+
+message BluePrintManagementInput {
+  org.onap.ccsdk.apps.controllerblueprints.common.api.CommonHeader commonHeader = 1;
+  string blueprintName = 2;
+  string blueprintVersion = 3;
+  FileChunk fileChunk = 4;
+}
+
+message BluePrintManagementOutput {
+  org.onap.ccsdk.apps.controllerblueprints.common.api.CommonHeader commonHeader = 1;
+  org.onap.ccsdk.apps.controllerblueprints.common.api.Status status = 3;
+}
+
+message FileChunk {
+  bytes chunk = 1;
+}
+
+service BluePrintManagementService {
+  rpc uploadBlueprint (BluePrintManagementInput) returns (BluePrintManagementOutput);
+  rpc removeBlueprint (BluePrintManagementInput) returns (BluePrintManagementOutput);
+}
diff --git a/components/model-catalog/proto-definition/proto/BluePrintProcessing.proto b/components/model-catalog/proto-definition/proto/BluePrintProcessing.proto
new file mode 100644
index 0000000..5b91f46
--- /dev/null
+++ b/components/model-catalog/proto-definition/proto/BluePrintProcessing.proto
@@ -0,0 +1,24 @@
+syntax = "proto3";
+import "google/protobuf/struct.proto";
+import "BluePrintCommon.proto";
+option java_multiple_files = true;
+package org.onap.ccsdk.apps.controllerblueprints.processing.api;
+
+
+message ExecutionServiceInput {
+  org.onap.ccsdk.apps.controllerblueprints.common.api.CommonHeader commonHeader = 1;
+  org.onap.ccsdk.apps.controllerblueprints.common.api.ActionIdentifiers actionIdentifiers = 2;
+  google.protobuf.Struct payload = 3;
+}
+
+message ExecutionServiceOutput {
+  org.onap.ccsdk.apps.controllerblueprints.common.api.CommonHeader commonHeader = 1;
+  org.onap.ccsdk.apps.controllerblueprints.common.api.ActionIdentifiers actionIdentifiers = 2;
+  org.onap.ccsdk.apps.controllerblueprints.common.api.Status status = 3;
+  google.protobuf.Struct payload = 4;
+}
+
+
+service BluePrintProcessingService {
+  rpc process (stream ExecutionServiceInput) returns (stream ExecutionServiceOutput);
+}
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/image_name.json b/components/model-catalog/resource-dictionary/starter-dictionary/image_name.json
index 37ef5ae..57a0ef3 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/image_name.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/image_name.json
@@ -10,7 +10,7 @@
     "input": {
       "type": "source-input"
     },
-    "mdsal": {
+    "primary-config-data": {
       "type": "source-rest",
       "properties": {
         "type": "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/key_name.json b/components/model-catalog/resource-dictionary/starter-dictionary/key_name.json
index 1f1b3e6..6eb8d92 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/key_name.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/key_name.json
@@ -10,7 +10,7 @@
     "input": {
       "type": "source-input"
     },
-    "mdsal": {
+    "primary-config-data": {
       "type": "source-rest",
       "properties": {
         "type": "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/mdsal-source.json b/components/model-catalog/resource-dictionary/starter-dictionary/mdsal-source.json
index 300a71f..67661ec 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/mdsal-source.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/mdsal-source.json
@@ -7,7 +7,7 @@
   },
   "updated-by": "brindasanth@onap.com",
   "sources": {
-    "mdsal": {
+    "primary-config-data": {
       "type": "source-rest",
       "properties": {
         "type": "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/onap_private_net_id.json b/components/model-catalog/resource-dictionary/starter-dictionary/onap_private_net_id.json
index bb70fe3..3dd74f7 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/onap_private_net_id.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/onap_private_net_id.json
@@ -10,7 +10,7 @@
     "input": {
       "type": "source-input"
     },
-    "mdsal": {
+    "primary-config-data": {
       "type": "source-rest",
       "properties": {
         "type": "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/onap_private_subnet_id.json b/components/model-catalog/resource-dictionary/starter-dictionary/onap_private_subnet_id.json
index d38ceb4..6cb22c3 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/onap_private_subnet_id.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/onap_private_subnet_id.json
@@ -10,7 +10,7 @@
     "input": {
       "type": "source-input"
     },
-    "mdsal": {
+    "primary-config-data": {
       "type": "source-rest",
       "properties": {
         "type": "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/pub_key.json b/components/model-catalog/resource-dictionary/starter-dictionary/pub_key.json
index ce6c2f2..fe172ca 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/pub_key.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/pub_key.json
@@ -10,7 +10,7 @@
     "input": {
       "type": "source-input"
     },
-    "mdsal": {
+    "primary-config-data": {
       "type": "source-rest",
       "properties": {
         "type": "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/sample-licenses.json b/components/model-catalog/resource-dictionary/starter-dictionary/sample-licenses.json
index 5834dd4..c0f78ac 100644
--- a/components/model-catalog/resource-dictionary/starter-dictionary/sample-licenses.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/sample-licenses.json
@@ -11,7 +11,7 @@
   },

   "updated-by": "brindasanth@onap.com",

   "sources": {

-    "mdsal": {

+    "primary-config-data": {

       "type": "source-rest",

       "properties": {

         "type": "JSON",

diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/sample-mdsal-source.json b/components/model-catalog/resource-dictionary/starter-dictionary/sample-mdsal-source.json
index 25464d3..75d7ca0 100644
--- a/components/model-catalog/resource-dictionary/starter-dictionary/sample-mdsal-source.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/sample-mdsal-source.json
@@ -7,7 +7,7 @@
   },

   "updated-by": "brindasanth@onap.com",

   "sources": {

-    "mdsal": {

+    "primary-config-data": {

       "type": "source-rest",

       "properties": {

         "type": "JSON",

diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/vfw_private_ip_0.json b/components/model-catalog/resource-dictionary/starter-dictionary/vfw_private_ip_0.json
index 71a4df2..4c227f9 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/vfw_private_ip_0.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/vfw_private_ip_0.json
@@ -12,7 +12,7 @@
       "properties" : {
       }
     },
-    "mdsal" : {
+    "primary-config-data" : {
       "type" : "source-rest",
       "properties" : {
         "type" : "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/vfw_private_ip_1.json b/components/model-catalog/resource-dictionary/starter-dictionary/vfw_private_ip_1.json
index 481edae..0df08c0 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/vfw_private_ip_1.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/vfw_private_ip_1.json
@@ -12,7 +12,7 @@
       "properties" : {
       }
     },
-    "mdsal" : {
+    "primary-config-data" : {
       "type" : "source-rest",
       "properties" : {
         "type" : "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/vnf-name.json b/components/model-catalog/resource-dictionary/starter-dictionary/vnf-name.json
index 89b3dc1..4c0320a 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/vnf-name.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/vnf-name.json
@@ -7,7 +7,7 @@
     "type" : "string"
   },
   "sources" : {
-    "mdsal" : {
+    "primary-config-data" : {
       "type" : "source-rest",
       "properties" : {
         "type" : "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/vnf_name.json b/components/model-catalog/resource-dictionary/starter-dictionary/vnf_name.json
index c55f1c1..e9d8a3b 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/vnf_name.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/vnf_name.json
@@ -7,7 +7,7 @@
     "type" : "string"
   },
   "sources" : {
-    "mdsal" : {
+    "primary-config-data" : {
       "type" : "source-rest",
       "properties" : {
         "type" : "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/vpg_private_ip_0.json b/components/model-catalog/resource-dictionary/starter-dictionary/vpg_private_ip_0.json
index 13d8999..586aa0c 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/vpg_private_ip_0.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/vpg_private_ip_0.json
@@ -12,7 +12,7 @@
       "properties" : {
       }
     },
-    "mdsal" : {
+    "primary-config-data" : {
       "type" : "source-rest",
       "properties" : {
         "type" : "JSON",
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/vsn_private_ip_0.json b/components/model-catalog/resource-dictionary/starter-dictionary/vsn_private_ip_0.json
index fcd6d8d..1fe4797 100755
--- a/components/model-catalog/resource-dictionary/starter-dictionary/vsn_private_ip_0.json
+++ b/components/model-catalog/resource-dictionary/starter-dictionary/vsn_private_ip_0.json
@@ -12,7 +12,7 @@
       "properties" : {
       }
     },
-    "mdsal" : {
+    "primary-config-data" : {
       "type" : "source-rest",
       "properties" : {
         "type" : "JSON",
diff --git a/components/parent/pom.xml b/components/parent/pom.xml
index 8ecb2c1..6d5c2c1 100644
--- a/components/parent/pom.xml
+++ b/components/parent/pom.xml
@@ -29,12 +29,12 @@
     <name>Components Parent</name>
     <packaging>pom</packaging>
     <properties>
-        <spring.boot.version>2.1.1.RELEASE</spring.boot.version>
-        <spring.version>5.1.3.RELEASE</spring.version>
-        <kotlin.version>1.3.11</kotlin.version>
-        <kotlin.maven.version>1.3.11</kotlin.maven.version>
-        <kotlin.couroutines.version>1.1.0</kotlin.couroutines.version>
-        <grpc.version>1.17.1</grpc.version>
+        <spring.boot.version>2.1.2.RELEASE</spring.boot.version>
+        <spring.version>5.1.4.RELEASE</spring.version>
+        <kotlin.version>1.3.20</kotlin.version>
+        <kotlin.maven.version>1.3.20</kotlin.maven.version>
+        <kotlin.couroutines.version>1.1.1</kotlin.couroutines.version>
+        <grpc.version>1.18.0</grpc.version>
         <protobuff.java.utils.version>3.6.1</protobuff.java.utils.version>
         <eelf.version>1.0.0</eelf.version>
         <guava.version>27.0.1-jre</guava.version>
@@ -117,6 +117,11 @@
             </dependency>
             <dependency>
                 <groupId>org.jetbrains.kotlin</groupId>
+                <artifactId>kotlin-stdlib-common</artifactId>
+                <version>${kotlin.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.jetbrains.kotlin</groupId>
                 <artifactId>kotlin-scripting-jvm-host</artifactId>
                 <version>${kotlin.version}</version>
             </dependency>
@@ -302,10 +307,6 @@
             <groupId>com.fasterxml.jackson.module</groupId>
             <artifactId>jackson-module-kotlin</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.jetbrains.kotlin</groupId>
-            <artifactId>kotlin-scripting-jvm-host</artifactId>
-        </dependency>
         <!-- GRPC Dependencies -->
         <dependency>
             <groupId>io.grpc</groupId>
diff --git a/components/pom.xml b/components/pom.xml
index 5b8768c..95ffd5c 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -14,7 +14,8 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <parent>
         <groupId>org.onap.ccsdk.apps</groupId>
         <artifactId>ccsdk-apps</artifactId>
@@ -37,5 +38,6 @@
         <module>parent</module>
         <module>core</module>
         <module>resource-dict</module>
+        <module>model-catalog/proto-definition</module>
     </modules>
 </project>
diff --git a/components/resource-dict/load/resource_dictionary/mdsal-source.json b/components/resource-dict/load/resource_dictionary/mdsal-source.json
index b38986a..fa72e5d 100644
--- a/components/resource-dict/load/resource_dictionary/mdsal-source.json
+++ b/components/resource-dict/load/resource_dictionary/mdsal-source.json
@@ -7,7 +7,7 @@
   },

   "updated-by": "brindasanth@onap.com",

   "sources": {

-    "mdsal": {

+    "primary-config-data": {

       "type": "source-rest",

       "properties": {

         "type": "JSON",

diff --git a/components/resource-dict/load/resource_dictionary/vfw_private_ip_0.json b/components/resource-dict/load/resource_dictionary/vfw_private_ip_0.json
index 7c8d4f4..59f5151 100644
--- a/components/resource-dict/load/resource_dictionary/vfw_private_ip_0.json
+++ b/components/resource-dict/load/resource_dictionary/vfw_private_ip_0.json
@@ -13,7 +13,7 @@
         "key" : "vfw_private_ip_0"
       }
     },
-    "mdsal" : {
+    "primary-config-data" : {
       "type" : "source-rest",
       "properties" : {
         "type" : "JSON",
diff --git a/components/resource-dict/load/resource_dictionary/vfw_private_ip_1.json b/components/resource-dict/load/resource_dictionary/vfw_private_ip_1.json
index 0553b8c..6dda72f 100644
--- a/components/resource-dict/load/resource_dictionary/vfw_private_ip_1.json
+++ b/components/resource-dict/load/resource_dictionary/vfw_private_ip_1.json
@@ -13,7 +13,7 @@
         "key" : "vfw_private_ip_1"
       }
     },
-    "mdsal" : {
+    "primary-config-data" : {
       "type" : "source-rest",
       "properties" : {
         "type" : "JSON",
diff --git a/components/resource-dict/load/resource_dictionary/vnf-name.json b/components/resource-dict/load/resource_dictionary/vnf-name.json
index 47371d1..708030e 100644
--- a/components/resource-dict/load/resource_dictionary/vnf-name.json
+++ b/components/resource-dict/load/resource_dictionary/vnf-name.json
@@ -7,7 +7,7 @@
     "type" : "string"

   },

   "sources" : {

-    "mdsal" : {

+    "primary-config-data" : {

       "type" : "source-rest",

       "properties" : {

         "type" : "JSON",

diff --git a/components/resource-dict/load/resource_dictionary/vnf_name.json b/components/resource-dict/load/resource_dictionary/vnf_name.json
index 4617a26..3164367 100644
--- a/components/resource-dict/load/resource_dictionary/vnf_name.json
+++ b/components/resource-dict/load/resource_dictionary/vnf_name.json
@@ -7,7 +7,7 @@
     "type" : "string"

   },

   "sources" : {

-    "mdsal" : {

+    "primary-config-data" : {

       "type" : "source-rest",

       "properties" : {

         "type" : "JSON",

diff --git a/components/resource-dict/load/resource_dictionary/vpg_private_ip_0.json b/components/resource-dict/load/resource_dictionary/vpg_private_ip_0.json
index 912cfb9..9bef3c7 100644
--- a/components/resource-dict/load/resource_dictionary/vpg_private_ip_0.json
+++ b/components/resource-dict/load/resource_dictionary/vpg_private_ip_0.json
@@ -13,7 +13,7 @@
         "key" : "vpg_private_ip_0"
       }
     },
-    "mdsal" : {
+    "primary-config-data" : {
       "type" : "source-rest",
       "properties" : {
         "type" : "JSON",
diff --git a/components/resource-dict/load/resource_dictionary/vsn_private_ip_0.json b/components/resource-dict/load/resource_dictionary/vsn_private_ip_0.json
index bf98738..52a4542 100644
--- a/components/resource-dict/load/resource_dictionary/vsn_private_ip_0.json
+++ b/components/resource-dict/load/resource_dictionary/vsn_private_ip_0.json
@@ -13,7 +13,7 @@
         "key" : "vsn_private_ip_0"
       }
     },
-    "mdsal" : {
+    "primary-config-data" : {
       "type" : "source-rest",
       "properties" : {
         "type" : "JSON",
diff --git a/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/ResourceDictionaryConstants.kt b/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/ResourceDictionaryConstants.kt
index e4219c1..aa06c9d 100644
--- a/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/ResourceDictionaryConstants.kt
+++ b/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/ResourceDictionaryConstants.kt
@@ -15,6 +15,7 @@
  */
 
 package org.onap.ccsdk.apps.controllerblueprints.resource.dict
+
 /**
  * ResourceDictionaryConstants
  *
@@ -23,7 +24,8 @@
 object ResourceDictionaryConstants {
     const val SOURCE_INPUT = "input"
     const val SOURCE_DEFAULT = "default"
-    const val SOURCE_DB = "primary-db"
+    const val SOURCE_PRIMARY_CONFIG_DATA = "primary-config-data"
+    const val SOURCE_PRIMARY_DB = "primary-db"
 
     const val MODEL_DIR_RESOURCE_DEFINITION: String = "resource_dictionary"
 
diff --git a/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceAssignmentUtils.kt b/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceAssignmentUtils.kt
deleted file mode 100644
index a234a89..0000000
--- a/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceAssignmentUtils.kt
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright © 2017-2018 AT&T Intellectual Property.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onap.ccsdk.apps.controllerblueprints.resource.dict.utils
-
-import java.util.Date
-import com.att.eelf.configuration.EELFLogger
-import com.att.eelf.configuration.EELFManager
-import com.fasterxml.jackson.databind.JsonNode
-import com.fasterxml.jackson.databind.ObjectMapper
-import com.fasterxml.jackson.databind.node.NullNode
-import com.fasterxml.jackson.databind.node.ObjectNode
-import org.onap.ccsdk.apps.controllerblueprints.core.*
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
-
-class ResourceAssignmentUtils {
-    companion object {
-
-        private val logger: EELFLogger = EELFManager.getInstance().getLogger(ResourceAssignmentUtils::class.toString())
-
-        @Synchronized
-        @Throws(BluePrintProcessorException::class)
-        fun setResourceDataValue(resourceAssignment: ResourceAssignment, value: Any?) {
-
-            val resourceProp = checkNotNull(resourceAssignment.property) { "Failed in setting resource value for resource mapping $resourceAssignment" }
-            checkNotEmptyNThrow(resourceAssignment.name, "Failed in setting resource value for resource mapping $resourceAssignment")
-
-            if (checkNotEmpty(resourceAssignment.dictionaryName)) {
-                resourceAssignment.dictionaryName = resourceAssignment.name
-                logger.warn("Missing dictionary key, setting with template key (${resourceAssignment.name}) as dictionary key (${resourceAssignment.dictionaryName})")
-            }
-
-            try {
-                if (checkNotEmpty(resourceProp.type)) {
-                    val convertedValue = convertResourceValue(resourceProp.type, value)
-                    logger.info("Setting Resource Value ($convertedValue) for Resource Name (${resourceAssignment.dictionaryName}) of type (${resourceProp.type})")
-                    resourceProp.value = convertedValue
-                    resourceAssignment.updatedDate = Date()
-                    resourceAssignment.updatedBy = BluePrintConstants.USER_SYSTEM
-                    resourceAssignment.status = BluePrintConstants.STATUS_SUCCESS
-                }
-            } catch (e: Exception) {
-                throw BluePrintProcessorException("Failed in setting value for template key (%s) and " +
-                        "dictionary key (${resourceAssignment.name}) of type (${resourceProp.type}) with error message (${e.message})", e)
-            }
-        }
-
-        private fun convertResourceValue(type: String, value: Any?): JsonNode? {
-            var convertedValue: JsonNode?
-
-            if (value == null || value is NullNode) {
-                logger.info("Returning {} value from convertResourceValue", value)
-                return null
-            } else if (BluePrintTypes.validPrimitiveTypes().contains(type) && value is String) {
-                convertedValue = JacksonUtils.convertPrimitiveResourceValue(type, value)
-            } else {
-                // Case where Resource is non-primitive type
-                if (value is String) {
-                    convertedValue = JacksonUtils.jsonNode(value)
-                } else {
-                    convertedValue = JacksonUtils.getJsonNode(value)
-                }
-            }
-            return convertedValue
-        }
-
-        @Synchronized
-        fun setFailedResourceDataValue(resourceAssignment: ResourceAssignment, message: String?) {
-            if (checkNotEmpty(resourceAssignment.name)) {
-                resourceAssignment.updatedDate = Date()
-                resourceAssignment.updatedBy = BluePrintConstants.USER_SYSTEM
-                resourceAssignment.status = BluePrintConstants.STATUS_FAILURE
-                resourceAssignment.message = message
-            }
-        }
-
-        @Synchronized
-        @Throws(BluePrintProcessorException::class)
-        fun assertTemplateKeyValueNotNull(resourceAssignment: ResourceAssignment) {
-            val resourceProp = checkNotNull(resourceAssignment.property) { "Failed to populate mandatory resource resource mapping $resourceAssignment" }
-            if (resourceProp.required != null && resourceProp.required!! && (resourceProp.value == null || resourceProp.value !is NullNode)) {
-                logger.error("failed to populate mandatory resource mapping ($resourceAssignment)")
-                throw BluePrintProcessorException("failed to populate mandatory resource mapping ($resourceAssignment)")
-            }
-        }
-
-        @Synchronized
-        @Throws(BluePrintProcessorException::class)
-        fun generateResourceDataForAssignments(assignments: List<ResourceAssignment>): String {
-            var result = "{}"
-            try {
-                val mapper = ObjectMapper()
-                val root = mapper.readTree(result)
-
-                assignments.forEach {
-                    if (checkNotEmpty(it.name) && it.property != null) {
-
-                        val type = it.property?.type
-                        val value = it.property?.value
-                        logger.info("Generating Resource name ({}), type ({}), value ({})", it.name, type,
-                                value)
-                        if (value == null) {
-                            (root as ObjectNode).set(it.name, null)
-                        } else if (value is JsonNode) {
-                            (root as ObjectNode).put(it.name, value as JsonNode)
-                        } else if (BluePrintConstants.DATA_TYPE_STRING.equals(type, ignoreCase = true)) {
-                            (root as ObjectNode).put(it.name, value as String)
-                        } else if (BluePrintConstants.DATA_TYPE_BOOLEAN.equals(type, ignoreCase = true)) {
-                            (root as ObjectNode).put(it.name, value as Boolean)
-                        } else if (BluePrintConstants.DATA_TYPE_INTEGER.equals(type, ignoreCase = true)) {
-                            (root as ObjectNode).put(it.name, value as Int)
-                        } else if (BluePrintConstants.DATA_TYPE_FLOAT.equals(type, ignoreCase = true)) {
-                            (root as ObjectNode).put(it.name, value as Float)
-                        } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP.equals(type, ignoreCase = true)) {
-                            (root as ObjectNode).put(it.name, value as String)
-                        } else {
-                            val jsonNode = JacksonUtils.getJsonNode(value)
-                            if (jsonNode != null) {
-                                (root as ObjectNode).put(it.name, jsonNode)
-                            } else {
-                                (root as ObjectNode).set(it.name, null)
-                            }
-                        }
-                    }
-                }
-                result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(root)
-                logger.info("Generated Resource Param Data ({})", result)
-            } catch (e: Exception) {
-                throw BluePrintProcessorException("kapil is failing with $e.message", e)
-            }
-
-            return result
-        }
-
-        fun <T> transformResourceSource(properties: MutableMap<String, JsonNode>, classType: Class<T>): T {
-            val content = JacksonUtils.getJson(properties)
-            return JacksonUtils.readValue(content, classType)
-                    ?: throw BluePrintProcessorException("failed to transform content($content) to type($classType)")
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/components/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/factory/ResourceSourceMappingFactoryTest.java b/components/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/factory/ResourceSourceMappingFactoryTest.java
index 3f5aef4..f11638e 100644
--- a/components/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/factory/ResourceSourceMappingFactoryTest.java
+++ b/components/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/factory/ResourceSourceMappingFactoryTest.java
@@ -28,7 +28,7 @@
         ResourceSourceMappingFactory.INSTANCE.registerSourceMapping("primary-db", "source-primary-db");

         ResourceSourceMappingFactory.INSTANCE.registerSourceMapping("input", "source-input");

         ResourceSourceMappingFactory.INSTANCE.registerSourceMapping("default", "source-default");

-        ResourceSourceMappingFactory.INSTANCE.registerSourceMapping("mdsal", "source-rest");

+        ResourceSourceMappingFactory.INSTANCE.registerSourceMapping("primary-config-data", "source-rest");

 

         String nodeTypeName = ResourceSourceMappingFactory.INSTANCE.getRegisterSourceMapping("primary-db");

         Assert.notNull(nodeTypeName, "Failed to get primary-db mapping");

diff --git a/components/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceDictionaryUtilsTest.java b/components/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceDictionaryUtilsTest.java
index fa24138..92bfa73 100644
--- a/components/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceDictionaryUtilsTest.java
+++ b/components/resource-dict/src/test/java/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceDictionaryUtilsTest.java
@@ -59,9 +59,9 @@
         Assert.assertEquals("Expected First source Default, but.", ResourceDictionaryConstants.SOURCE_DEFAULT, resourceAssignment.getDictionarySource());

 

         // To Check Assigned Source

-        resourceAssignment.setDictionarySource(ResourceDictionaryConstants.SOURCE_DB);

+        resourceAssignment.setDictionarySource(ResourceDictionaryConstants.SOURCE_PRIMARY_DB);

         ResourceDictionaryUtils.populateSourceMapping(resourceAssignment, resourceDefinition);

-        Assert.assertEquals("Expected Assigned source DB, but.", ResourceDictionaryConstants.SOURCE_DB, resourceAssignment.getDictionarySource());

+        Assert.assertEquals("Expected Assigned source DB, but.", ResourceDictionaryConstants.SOURCE_PRIMARY_DB, resourceAssignment.getDictionarySource());

 

     }

 

@@ -78,7 +78,7 @@
         Assert.assertEquals("Expected source Input, but.", ResourceDictionaryConstants.SOURCE_INPUT, inputFirstSource);

 

         // TO check the multiple Source

-        sources.put(ResourceDictionaryConstants.SOURCE_DB, new NodeTemplate());

+        sources.put(ResourceDictionaryConstants.SOURCE_PRIMARY_DB, new NodeTemplate());

         String multipleFirstSource = ResourceDictionaryUtils.findFirstSource(sources);

         Assert.assertEquals("Expected source Input, but.", ResourceDictionaryConstants.SOURCE_INPUT, multipleFirstSource);

 

diff --git a/components/resource-dict/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceDictionaryTestUtils.kt b/components/resource-dict/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceDictionaryTestUtils.kt
index 50e5c32..74ef6d6 100644
--- a/components/resource-dict/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceDictionaryTestUtils.kt
+++ b/components/resource-dict/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/utils/ResourceDictionaryTestUtils.kt
@@ -25,6 +25,6 @@
         ResourceSourceMappingFactory.registerSourceMapping("primary-db", "source-primary-db")

         ResourceSourceMappingFactory.registerSourceMapping("input", "source-input")

         ResourceSourceMappingFactory.registerSourceMapping("default", "source-default")

-        ResourceSourceMappingFactory.registerSourceMapping("mdsal", "source-rest")

+        ResourceSourceMappingFactory.registerSourceMapping("primary-config-data", "source-rest")

     }

 }
\ No newline at end of file
diff --git a/components/resource-dict/src/test/resources/validation/cyclic.json b/components/resource-dict/src/test/resources/validation/cyclic.json
index 7e6472f..98cd144 100644
--- a/components/resource-dict/src/test/resources/validation/cyclic.json
+++ b/components/resource-dict/src/test/resources/validation/cyclic.json
@@ -29,7 +29,7 @@
       "required": true

     },

     "dictionary-name": "bundle-id",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "vnf-id"

     ]

@@ -42,7 +42,7 @@
       "required": true

     },

     "dictionary-name": "bundle-ip",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "vnf-id"

     ]

@@ -54,7 +54,7 @@
       "type": "string"

     },

     "dictionary-name": "bundle-mac",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "vnf-id",

       "bundle-id"

@@ -67,7 +67,7 @@
       "type": "string"

     },

     "dictionary-name": "managed-ip",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "loopback-ip"

     ]

@@ -90,7 +90,7 @@
       "type": "string"

     },

     "dictionary-name": "managed-ip1",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "loopback-ip"

     ]

diff --git a/components/resource-dict/src/test/resources/validation/duplicate.json b/components/resource-dict/src/test/resources/validation/duplicate.json
index 28ab71f..7581ff6 100644
--- a/components/resource-dict/src/test/resources/validation/duplicate.json
+++ b/components/resource-dict/src/test/resources/validation/duplicate.json
@@ -29,7 +29,7 @@
       "required": true

     },

     "dictionary-name": "bundle-id",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "vnf-id"

     ]

@@ -42,7 +42,7 @@
       "required": true

     },

     "dictionary-name": "bundle-ip",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "vnf-id"

     ]

@@ -54,7 +54,7 @@
       "type": "string"

     },

     "dictionary-name": "bundle-mac",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "vnf-id",

       "bundle-id"

@@ -67,7 +67,7 @@
       "type": "string"

     },

     "dictionary-name": "bundle-mac",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "loopback-ip"

     ]

@@ -90,7 +90,7 @@
       "type": "string"

     },

     "dictionary-name": "managed-ip1",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "loopback-ip"

     ]

diff --git a/components/resource-dict/src/test/resources/validation/success.json b/components/resource-dict/src/test/resources/validation/success.json
index 5d0e898..486251d 100644
--- a/components/resource-dict/src/test/resources/validation/success.json
+++ b/components/resource-dict/src/test/resources/validation/success.json
@@ -29,7 +29,7 @@
       "required": true

     },

     "dictionary-name": "bundle-id",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "vnf-id"

     ]

@@ -42,7 +42,7 @@
       "required": true

     },

     "dictionary-name": "bundle-ip",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "vnf-id"

     ]

@@ -54,7 +54,7 @@
       "type": "string"

     },

     "dictionary-name": "bundle-mac",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "vnf-id",

       "bundle-id"

@@ -67,7 +67,7 @@
       "type": "string"

     },

     "dictionary-name": "managed-ip",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "loopback-ip"

     ]

@@ -90,7 +90,7 @@
       "type": "string"

     },

     "dictionary-name": "managed-ip1",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": [

       "loopback-ip"

     ]

diff --git a/docs/index.rst b/docs/index.rst
index 16f8684..2c7d9ab 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,13 +1,50 @@
 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright (C) 2019 IBM.
 
 CCSDK APPS DOCUMENTATION REPOSITORY
 ------------------------------------------------
 .. toctree::
    :maxdepth: 1
 
-	Architecture
-	Installation
-	Configuration
-	Development
-	Logging
-	Release Notes
+Introduction:
+=============
+APPS repository which contains all micro services for CCSDK module.
+Also these are application that are intended to run outside of OpenDaylight
+container.Modular feature implementation that is reusable across all controllers.
+
+Microservices:
+=============
+
+Controller BluePrints Studio Processor
+Blueprints processor
+NetworkElementNameGen (NENG)
+Vlan Tag API
+
+
+Installation:
+=============
+
+Steps
+-----
+To compile this code:
+
+1. Make sure your local Maven settings file ($HOME/.m2/settings.xml) contains
+references to the ONAP repositories and OpenDaylight repositories.
+
+2. To compile all of CCSDK apps code
+    - git clone https://(LFID)@gerrit.onap.org/r/a/ccsdk/apps
+    - cd apps ; mvn clean install ; cd ..
+
+
+
+Logging:
+=============
+CCSDK uses slf4j to log messages to the standard OpenDaylight karaf.log
+log file.
+
+Where to Access Information
+---------------------------
+Logs are found within the SDNC docker container, in the directory
+/opt/opendaylight/current/data/logs.
+Release Notes
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
new file mode 100644
index 0000000..174c442
--- /dev/null
+++ b/docs/release-notes.rst
@@ -0,0 +1,14 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. Copyright (C) 2019 IBM.
+
+Release Notes
+#############
+
+Version: 0.4.1
+**************
+
+:Release Date: 2018-11-30
+
+Quick Links:
+
+	Wiki Release note<https://wiki.onap.org/display/DW/CCSDK+%3A+Dublin%3A+Release+Planning+Template>
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/.gitignore b/ms/blueprintsprocessor/.gitignore
index f72f78a..04f991d 100644
--- a/ms/blueprintsprocessor/.gitignore
+++ b/ms/blueprintsprocessor/.gitignore
@@ -28,4 +28,5 @@
 **/transaction.log
 **/*versionsBackup
 **/blackDuckHub*
-**/*.jsonld
\ No newline at end of file
+**/*.jsonld
+/target-ide/
diff --git a/ms/blueprintsprocessor/application/etc/logback.xml b/ms/blueprintsprocessor/application/etc/logback.xml
new file mode 100755
index 0000000..a97bb8c
--- /dev/null
+++ b/ms/blueprintsprocessor/application/etc/logback.xml
@@ -0,0 +1,36 @@
+<!--

+  ~  Copyright © 2017-2018 AT&T Intellectual Property.

+  ~

+  ~  Licensed under the Apache License, Version 2.0 (the "License");

+  ~  you may not use this file except in compliance with the License.

+  ~  You may obtain a copy of the License at

+  ~

+  ~      http://www.apache.org/licenses/LICENSE-2.0

+  ~

+  ~  Unless required by applicable law or agreed to in writing, software

+  ~  distributed under the License is distributed on an "AS IS" BASIS,

+  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+  ~  See the License for the specific language governing permissions and

+  ~  limitations under the License.

+  -->

+

+<configuration>

+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

+        <!-- encoders are assigned the type

+             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->

+        <encoder>

+            <pattern>%d{HH:mm:ss.SSS} %-5level %logger{100} - %msg%n</pattern>

+        </encoder>

+    </appender>

+

+

+    <logger name="org.springframework" level="info"/>

+    <logger name="org.springframework.web" level="info"/>

+    <logger name="org.hibernate" level="error"/>

+    <logger name="org.onap.ccsdk.apps" level="info"/>

+

+    <root level="warn">

+        <appender-ref ref="STDOUT"/>

+    </root>

+

+</configuration>

diff --git a/ms/blueprintsprocessor/application/etc/run.source b/ms/blueprintsprocessor/application/etc/run.source
new file mode 100755
index 0000000..7557ab1
--- /dev/null
+++ b/ms/blueprintsprocessor/application/etc/run.source
@@ -0,0 +1,12 @@
+java -classpath "/etc:${APP_HOME}/lib/*:/lib/*:/src:/schema:/generated-sources:${APP_CONFIG_HOME}:${APP_HOME}" \
+-DappName=${APPLICATIONNAME} -DappVersion=${BUNDLEVERSION} \
+-DrouteOffer=${ROUTEOFFER} \
+-DVERSION_ROUTEOFFER_ENVCONTEXT=${BUNDLEVERSION}/${STICKYSELECTORKEY}/${ENVCONTEXT} \
+-DSecurityFilePath=/etc \
+-DREST_NAME_NORMALIZER_PATTERN_FILE=/etc/PatternInputs.txt \
+-Dms_name=org.onap.ccsdk.apps.blueprintsprocessor \
+-Dlogging.config=${APP_CONFIG_HOME}/logback.xml \
+-Djava.security.egd=file:/dev/./urandom \
+-DAPPNAME=${APP_NAME} -DAPPENV=${APP_ENV} -DAPPVERSION=${APP_VERSION} -DNAMESPACE=${NAMESPACE} \
+-Dspring.config.location=${APP_CONFIG_HOME}/ \
+org.onap.ccsdk.apps.blueprintsprocessor.BlueprintProcessorApplication
diff --git a/ms/blueprintsprocessor/application/opt/app/onap/config/application.properties b/ms/blueprintsprocessor/application/opt/app/onap/config/application.properties
new file mode 100755
index 0000000..c4880b6
--- /dev/null
+++ b/ms/blueprintsprocessor/application/opt/app/onap/config/application.properties
@@ -0,0 +1,36 @@
+#

+#  Copyright � 2017-2018 AT&T Intellectual Property.

+#  Modifications Copyright © 2019 Bell Canada.

+#

+#  Licensed under the Apache License, Version 2.0 (the "License");

+#  you may not use this file except in compliance with the License.

+#  You may obtain a copy of the License at

+#

+#      http://www.apache.org/licenses/LICENSE-2.0

+#

+#  Unless required by applicable law or agreed to in writing, software

+#  distributed under the License is distributed on an "AS IS" BASIS,

+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+#  See the License for the specific language governing permissions and

+#  limitations under the License.

+#

+#logging.level.web=DEBUG

+

+# Web server config

+server.port=8080

+

+blueprintsprocessor.grpcEnable=false

+blueprintsprocessor.httpPort=8080

+blueprintsprocessor.grpcPort=9111

+# Blueprint Processor File Execution and Handling Properties

+blueprintsprocessor.blueprintDeployPath=/opt/app/onap/blueprints/deploy

+blueprintsprocessor.blueprintArchivePath=/opt/app/onap/blueprints/archive

+# Primary Database Configuration

+blueprintsprocessor.db.primary.url=jdbc:mysql://db:3306/sdnctl

+blueprintsprocessor.db.primary.username=sdnctl

+blueprintsprocessor.db.primary.password=sdnctl

+blueprintsprocessor.db.primary.driverClassName=org.mariadb.jdbc.Driver

+blueprintsprocessor.db.primary.hibernateHbm2ddlAuto=validate

+blueprintsprocessor.db.primary.hibernateDDLAuto=none

+blueprintsprocessor.db.primary.hibernateNamingStrategy=org.hibernate.cfg.ImprovedNamingStrategy

+blueprintsprocessor.db.primary.hibernateDialect=org.hibernate.dialect.MySQL5InnoDBDialect
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/application/opt/app/onap/config/logback.xml b/ms/blueprintsprocessor/application/opt/app/onap/config/logback.xml
new file mode 100755
index 0000000..a97bb8c
--- /dev/null
+++ b/ms/blueprintsprocessor/application/opt/app/onap/config/logback.xml
@@ -0,0 +1,36 @@
+<!--

+  ~  Copyright © 2017-2018 AT&T Intellectual Property.

+  ~

+  ~  Licensed under the Apache License, Version 2.0 (the "License");

+  ~  you may not use this file except in compliance with the License.

+  ~  You may obtain a copy of the License at

+  ~

+  ~      http://www.apache.org/licenses/LICENSE-2.0

+  ~

+  ~  Unless required by applicable law or agreed to in writing, software

+  ~  distributed under the License is distributed on an "AS IS" BASIS,

+  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+  ~  See the License for the specific language governing permissions and

+  ~  limitations under the License.

+  -->

+

+<configuration>

+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

+        <!-- encoders are assigned the type

+             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->

+        <encoder>

+            <pattern>%d{HH:mm:ss.SSS} %-5level %logger{100} - %msg%n</pattern>

+        </encoder>

+    </appender>

+

+

+    <logger name="org.springframework" level="info"/>

+    <logger name="org.springframework.web" level="info"/>

+    <logger name="org.hibernate" level="error"/>

+    <logger name="org.onap.ccsdk.apps" level="info"/>

+

+    <root level="warn">

+        <appender-ref ref="STDOUT"/>

+    </root>

+

+</configuration>

diff --git a/ms/blueprintsprocessor/application/pom.xml b/ms/blueprintsprocessor/application/pom.xml
old mode 100644
new mode 100755
index 679a8b9..06752b7
--- a/ms/blueprintsprocessor/application/pom.xml
+++ b/ms/blueprintsprocessor/application/pom.xml
@@ -3,6 +3,7 @@
   ~  Copyright © 2017-2018 AT&T Intellectual Property.
   ~
   ~  Modifications Copyright © 2018 IBM.
+  ~  Modifications Copyright © 2019 Bell Canada.
   ~
   ~  Licensed under the Apache License, Version 2.0 (the "License");
   ~  you may not use this file except in compliance with the License.
@@ -31,6 +32,10 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+            <artifactId>core</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-devtools</artifactId>
             <scope>runtime</scope>
@@ -69,13 +74,91 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
-
     <build>
+        <resources>
+            <resource>
+                <!--config and resource files -->
+                <directory>${basedir}/etc</directory>
+                <targetPath>${basedir}/target/etc</targetPath>
+                <filtering>true</filtering>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+            </resource>
+            <resource>
+                <!--config and resource files -->
+                <directory>${basedir}/src/main/resources</directory>
+                <targetPath>${basedir}/target/src/main/resources</targetPath>
+                <filtering>true</filtering>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <id>copy-dockerfile</id>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals><!-- here the phase you need -->
+                        <phase>validate</phase>
+                        <configuration>
+                            <outputDirectory>${basedir}/target/docker-stage</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/docker</directory>
+                                    <includes>
+                                        <include>*</include>
+                                    </includes>
+                                    <filtering>true</filtering>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>ant-test</id>
+                        <phase>package</phase>
+                        <configuration>
+                            <tasks>
+                                <fixcrlf srcdir="${basedir}" eol="unix" includes="**/*.sh, **/*.source"/>
+                            </tasks>
+                        </configuration>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <!-- <skip>${skip.compile}</skip>-->
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/ms/blueprintsprocessor/application/src/main/resources/application-dev.properties b/ms/blueprintsprocessor/application/src/main/resources/application-dev.properties
new file mode 100755
index 0000000..6bfa240
--- /dev/null
+++ b/ms/blueprintsprocessor/application/src/main/resources/application-dev.properties
@@ -0,0 +1,36 @@
+#

+#  Copyright � 2017-2018 AT&T Intellectual Property.

+#  Modifications Copyright © 2019 IBM, Bell Canada.

+#

+#  Licensed under the Apache License, Version 2.0 (the "License");

+#  you may not use this file except in compliance with the License.

+#  You may obtain a copy of the License at

+#

+#      http://www.apache.org/licenses/LICENSE-2.0

+#

+#  Unless required by applicable law or agreed to in writing, software

+#  distributed under the License is distributed on an "AS IS" BASIS,

+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+#  See the License for the specific language governing permissions and

+#  limitations under the License.

+#

+#logging.level.web=DEBUG

+

+# Web server config

+server.port=8080

+

+blueprintsprocessor.grpcEnable=false

+blueprintsprocessor.httpPort=8080

+blueprintsprocessor.grpcPort=9111

+# Blueprint Processor File Execution and Handling Properties

+blueprintsprocessor.blueprintDeployPath=/opt/app/onap/blueprints/deploy

+blueprintsprocessor.blueprintArchivePath=/opt/app/onap/blueprints/archive

+# Primary Database Configuration

+blueprintsprocessor.db.primary.url=jdbc:mysql://localhost:3306/sdnctl

+blueprintsprocessor.db.primary.username=sdnctl

+blueprintsprocessor.db.primary.password=sdnctl

+blueprintsprocessor.db.primary.driverClassName=org.mariadb.jdbc.Driver

+blueprintsprocessor.db.primary.hibernateHbm2ddlAuto=update

+blueprintsprocessor.db.primary.hibernateDDLAuto=none

+blueprintsprocessor.db.primary.hibernateNamingStrategy=org.hibernate.cfg.ImprovedNamingStrategy

+blueprintsprocessor.db.primary.hibernateDialect=org.hibernate.dialect.MySQL5InnoDBDialect
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/application/src/main/resources/application.properties b/ms/blueprintsprocessor/application/src/main/resources/application.properties
old mode 100644
new mode 100755
index fa1a1e6..6269520
--- a/ms/blueprintsprocessor/application/src/main/resources/application.properties
+++ b/ms/blueprintsprocessor/application/src/main/resources/application.properties
@@ -1,5 +1,6 @@
 #

 #  Copyright � 2017-2018 AT&T Intellectual Property.

+#  Modifications Copyright © 2019 IBM, Bell Canada.

 #

 #  Licensed under the Apache License, Version 2.0 (the "License");

 #  you may not use this file except in compliance with the License.

@@ -14,6 +15,10 @@
 #  limitations under the License.

 #

 #logging.level.web=DEBUG

+

+# Web server config

+server.port=8080

+

 blueprintsprocessor.grpcEnable=false

 blueprintsprocessor.httpPort=8080

 blueprintsprocessor.grpcPort=9111

@@ -21,7 +26,7 @@
 blueprintsprocessor.blueprintDeployPath=/opt/app/onap/blueprints/deploy

 blueprintsprocessor.blueprintArchivePath=/opt/app/onap/blueprints/archive

 # Primary Database Configuration

-blueprintsprocessor.db.primary.url=jdbc:mysql://localhost:3306/sdnctl

+blueprintsprocessor.db.primary.url=jdbc:mysql://db:3306/sdnctl

 blueprintsprocessor.db.primary.username=sdnctl

 blueprintsprocessor.db.primary.password=sdnctl

 blueprintsprocessor.db.primary.driverClassName=org.mariadb.jdbc.Driver

diff --git a/ms/blueprintsprocessor/application/src/test/resources/application.properties b/ms/blueprintsprocessor/application/src/test/resources/application.properties
index f896ee0..d21264c 100644
--- a/ms/blueprintsprocessor/application/src/test/resources/application.properties
+++ b/ms/blueprintsprocessor/application/src/test/resources/application.properties
@@ -13,6 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+# Web server config
+server.port=8080
 # Blueprint Processor File Execution and Handling Properties
 blueprintsprocessor.blueprintDeployPath=/opt/app/onap/blueprints/deploy
 blueprintsprocessor.blueprintArchivePath=/opt/app/onap/blueprints/archive
diff --git a/ms/blueprintsprocessor/distribution/pom.xml b/ms/blueprintsprocessor/distribution/pom.xml
new file mode 100755
index 0000000..fb5e3c1
--- /dev/null
+++ b/ms/blueprintsprocessor/distribution/pom.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~  Copyright © 2019 IBM, Bell Canada.
+  ~
+  ~  Licensed under the Apache License, Version 2.0 (the "License");
+  ~  you may not use this file except in compliance with the License.
+  ~  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~  Unless required by applicable law or agreed to in writing, software
+  ~  distributed under the License is distributed on an "AS IS" BASIS,
+  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~  See the License for the specific language governing permissions and
+  ~  limitations under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
+        <artifactId>parent</artifactId>
+        <version>0.4.1-SNAPSHOT</version>
+        <relativePath>../parent</relativePath>
+    </parent>
+    <artifactId>distribution</artifactId>
+    <packaging>pom</packaging>
+    <name>Blueprints Processor Distribution</name>
+    <properties>
+        <assembly.id>maven</assembly.id>
+        <name.space>org.onap.ccsdk.apps</name.space>     <!-- <name.space>${namespace}</name.space> -->
+        <serviceArtifactName>blueprintsprocessor</serviceArtifactName>
+        <image.name>onap/ccsdk-blueprintsprocessor</image.name>
+        <docker.buildArg.https_proxy>${https_proxy}</docker.buildArg.https_proxy>
+        <docker.push.phase>deploy</docker.push.phase>
+        <docker.verbose>true</docker.verbose>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
+            <artifactId>application</artifactId>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <id>copy-dockerfile</id>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals><!-- here the phase you need -->
+                        <phase>validate</phase>
+                        <configuration>
+                            <outputDirectory>${basedir}/target/docker-stage</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/docker</directory>
+                                    <includes>
+                                        <include>*</include>
+                                    </includes>
+                                    <filtering>true</filtering>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>ant-test</id>
+                        <phase>package</phase>
+                        <configuration>
+                            <tasks>
+                                <fixcrlf srcdir="${basedir}" eol="unix" includes="**/*.sh, **/*.source"/>
+                            </tasks>
+                        </configuration>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <!--build the final artifact for docker deployment -->
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.1.0</version>
+                <configuration>
+                    <!-- <skipAssembly>${skip.assembly}</skipAssembly>-->
+                    <outputDirectory>${basedir}/target/docker-stage</outputDirectory>
+                    <descriptors>
+                        <descriptor>src/main/docker/distribution.xml</descriptor>
+                    </descriptors>
+                    <tarLongFileMode>posix</tarLongFileMode>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>${assembly.id}</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.groovy.maven</groupId>
+                <artifactId>gmaven-plugin</artifactId>
+                <version>1.0</version>
+                <executions>
+                    <execution>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>execute</goal>
+                        </goals>
+                        <configuration>
+                            <source>
+                                println project.properties['ccsdk.project.version']
+                                def versionArray
+                                if (project.properties['ccsdk.project.version'] != null ) {
+                                    versionArray = project.properties['ccsdk.project.version'].split('\\.')
+                                }
+
+                                if (project.properties['ccsdk.project.version'].endsWith("-SNAPSHOT"))
+                                {
+                                    project.properties['project.docker.latesttag.version']=versionArray[0] + '.' + versionArray[1] + "-STAGING-latest"
+                                } else {
+                                    project.properties['project.docker.latesttag.version']=versionArray[0]+'.' + versionArray[1]+"-STAGING-latest"
+                                }
+
+                                println 'New Tag for docker:' + project.properties['project.docker.latesttag.version']
+                            </source>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>docker</id>
+            <build>
+                   <plugins>
+                        <plugin>
+                            <groupId>io.fabric8</groupId>
+                            <artifactId>docker-maven-plugin</artifactId>
+                            <version>0.26.1</version>
+                            <inherited>false</inherited>
+                            <configuration>
+                                <images>
+                                    <image>
+                                        <name>${image.name}</name>
+                                        <build>
+                                             <cleanup>try</cleanup>
+                                             <dockerFileDir>${basedir}/target/docker-stage</dockerFileDir>
+                                             <tags>
+                                                <tag>${project.version}</tag>
+                                                <tag>${project.version}-STAGING-${maven.build.timestamp}</tag>
+                                                <tag>${project.docker.latesttag.version}</tag>
+                                             </tags>
+                                        </build>
+                                    </image>
+                                </images>
+                                <verbose>true</verbose>
+                            </configuration>
+                            <executions>
+                            <execution>
+                                <id>generate-images</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                            </execution>
+                            <execution>
+                                <id>push-images</id>
+                                <phase>${docker.push.phase}</phase>
+                                <goals>
+                                    <goal>build</goal>
+                                    <goal>push</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+    </profiles>
+</project>
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/distribution/src/main/dc/docker-compose.yaml b/ms/blueprintsprocessor/distribution/src/main/dc/docker-compose.yaml
new file mode 100755
index 0000000..c0eade5
--- /dev/null
+++ b/ms/blueprintsprocessor/distribution/src/main/dc/docker-compose.yaml
@@ -0,0 +1,33 @@
+version: '3.3'

+

+services:

+  db:

+    image: mariadb:latest

+    container_name: ccsdk-mariadb

+    ports:

+    - "3306:3306"

+    volumes:

+    - ~/vm_mysql:/var/lib/mysql

+    restart: always

+    environment:

+      MYSQL_ROOT_PASSWORD: sdnctl

+      MYSQL_DATABASE: sdnctl

+      MYSQL_USER: sdnctl

+      MYSQL_PASSWORD: sdnctl

+  blueprints-processor:

+    depends_on:

+    - db

+    image: onap/ccsdk-blueprintsprocessor:latest

+    container_name: bp-rest

+    ports:

+    - "8000:8080"

+    restart: always

+    volumes:

+    - ~/share/vm_ms/blueprintsprocessor/config:/opt/app/onap/config

+    - ~/share/vm_ms/blueprintsprocessor/logs:/logs

+    environment:

+      APPLICATIONNAME: BlueprintsProcessor

+      BUNDLEVERSION: 1.0.0

+      APP_CONFIG_HOME: /opt/app/onap/config

+      STICKYSELECTORKEY:

+      ENVCONTEXT: dev
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/distribution/src/main/docker/Dockerfile b/ms/blueprintsprocessor/distribution/src/main/docker/Dockerfile
new file mode 100755
index 0000000..2136232
--- /dev/null
+++ b/ms/blueprintsprocessor/distribution/src/main/docker/Dockerfile
@@ -0,0 +1,20 @@
+FROM anapsix/alpine-java:8_jdk
+
+ENV HTTP_PROXY  ${HTTP_PROXY}
+ENV HTTPS_PROXY ${HTTPS_PROXY}
+
+RUN apk add --no-cache curl
+
+COPY startService.sh /startService.sh
+RUN chmod 777 /startService.sh && dos2unix /startService.sh
+
+COPY @project.build.finalName@-@assembly.id@.tar.gz /source.tar.gz
+
+RUN (mkdir -p /source /opt/app/onap) && (tar -xzf /source.tar.gz -C /source) \
+&& (mv /source/@project.build.finalName@ /source/app) \
+&& (cp -rf /source/app/opt/app/onap/lib /opt/app/onap/) \
+&& (cp -rf /source/app/etc /) \
+&& (cp -rf /source/app/config /) \
+&& (rm -rf /source)
+
+ENTRYPOINT /startService.sh
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/distribution/src/main/docker/distribution.xml b/ms/blueprintsprocessor/distribution/src/main/docker/distribution.xml
new file mode 100755
index 0000000..b538b73
--- /dev/null
+++ b/ms/blueprintsprocessor/distribution/src/main/docker/distribution.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright © 2018-2019 Bell Canada.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
+    <!-- create a tar.gz file containing the projects dependencies -->
+    <id>${assembly.id}</id>
+    <formats>
+        <format>tar.gz</format>
+    </formats>
+    <dependencySets>
+        <dependencySet>
+            <outputDirectory>/opt/app/onap/lib</outputDirectory>
+            <outputFileNameMapping>${artifact.groupId}-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
+            <excludes>
+            </excludes>
+        </dependencySet>
+    </dependencySets>
+    <fileSets>
+        <fileSet>
+            <directory>${project.basedir}/../application/src/main/resources</directory>
+            <includes>
+                <include>application.properties</include>
+                <include>logback.xml</include>
+            </includes>
+            <outputDirectory>./</outputDirectory>
+            <useDefaultExcludes>true</useDefaultExcludes>
+        </fileSet>
+        <fileSet>
+            <directory>${project.basedir}/src/main/docker</directory>
+            <includes>
+                <include>Dockerfile</include>
+                <include>startService.sh</include>
+            </includes>
+            <outputDirectory>./</outputDirectory>
+            <useDefaultExcludes>true</useDefaultExcludes>
+        </fileSet>
+        <fileSet>
+            <directory>${project.basedir}/../application/src/main/resources</directory>
+            <outputDirectory>src/main/resources</outputDirectory>
+            <useDefaultExcludes>true</useDefaultExcludes>
+        </fileSet>
+        <fileSet>
+            <directory>${project.basedir}/../application/opt/app/onap/config</directory>
+            <outputDirectory>./config</outputDirectory>
+            <useDefaultExcludes>true</useDefaultExcludes>
+        </fileSet>
+        <fileSet>
+            <directory>${project.basedir}/../application/etc</directory>
+            <outputDirectory>./etc</outputDirectory>
+            <useDefaultExcludes>true</useDefaultExcludes>
+        </fileSet>
+    </fileSets>
+</assembly>
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/distribution/src/main/docker/startService.sh b/ms/blueprintsprocessor/distribution/src/main/docker/startService.sh
new file mode 100755
index 0000000..79bcbc0
--- /dev/null
+++ b/ms/blueprintsprocessor/distribution/src/main/docker/startService.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+nodeName=BlueprintsProcessor_1.0.0_$(cat /proc/self/cgroup | grep docker | sed s/\\//\\n/g | tail -1)
+
+echo "APP Config HOME : ${APP_CONFIG_HOME}"
+export APP_HOME=/opt/app/onap
+
+cp -rf /config /opt/app/onap/
+source /etc/run.source
diff --git a/ms/blueprintsprocessor/functions/netconf-executor/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/ComponentNetconfExecutorTest.kt b/ms/blueprintsprocessor/functions/netconf-executor/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/ComponentNetconfExecutorTest.kt
index 05f6a2d..a2c7344 100644
--- a/ms/blueprintsprocessor/functions/netconf-executor/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/ComponentNetconfExecutorTest.kt
+++ b/ms/blueprintsprocessor/functions/netconf-executor/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/ComponentNetconfExecutorTest.kt
@@ -17,6 +17,7 @@
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor
 
 import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.node.JsonNodeFactory
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ActionIdentifiers
@@ -46,6 +47,8 @@
     fun testComponentNetconfExecutor() {
 
         val executionServiceInput = ExecutionServiceInput()
+        executionServiceInput.payload = JsonNodeFactory.instance.objectNode()
+
         val commonHeader = CommonHeader()
         commonHeader.requestId = "1234"
         executionServiceInput.commonHeader = commonHeader
diff --git a/ms/blueprintsprocessor/functions/pom.xml b/ms/blueprintsprocessor/functions/pom.xml
old mode 100644
new mode 100755
diff --git a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutor.kt b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutor.kt
index 5eb4022..9e2ba0b 100644
--- a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutor.kt
+++ b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutor.kt
@@ -22,7 +22,7 @@
 import org.onap.ccsdk.apps.blueprintsprocessor.functions.python.executor.utils.PythonExecutorUtils
 import org.onap.ccsdk.apps.blueprintsprocessor.services.execution.AbstractComponentFunction
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
-import org.onap.ccsdk.apps.controllerblueprints.core.checkNotEmptyNThrow
+import org.onap.ccsdk.apps.controllerblueprints.core.checkNotEmptyOrThrow
 import org.onap.ccsdk.apps.controllerblueprints.core.data.OperationAssignment
 import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
@@ -62,7 +62,7 @@
 
         val content: String? = bluePrintRuntimeService.resolveNodeTemplateArtifact(nodeTemplateName, artifactName)
 
-        checkNotEmptyNThrow(content, "artifact ($artifactName) content is empty")
+        checkNotEmptyOrThrow(content, "artifact ($artifactName) content is empty")
 
         val pythonPath: MutableList<String> = operationAssignment.implementation?.dependencies ?: arrayListOf()
         pythonPath.add(blueprintBasePath)
diff --git a/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutorTest.kt b/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutorTest.kt
index 07591a5..83cf59c 100644
--- a/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutorTest.kt
+++ b/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/python/executor/ComponentJythonExecutorTest.kt
@@ -17,6 +17,7 @@
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.python.executor
 
 import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.node.JsonNodeFactory
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ActionIdentifiers
@@ -26,6 +27,7 @@
 import org.onap.ccsdk.apps.controllerblueprints.core.asJsonNode
 import org.onap.ccsdk.apps.controllerblueprints.core.putJsonElement
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.test.context.ContextConfiguration
 import org.springframework.test.context.TestPropertySource
@@ -43,8 +45,10 @@
 
     @Test
     fun testPythonComponentInjection() {
-
+        /*
         val executionServiceInput = ExecutionServiceInput()
+        executionServiceInput.payload = JsonNodeFactory.instance.objectNode()
+
         val commonHeader = CommonHeader()
         commonHeader.requestId = "1234"
         executionServiceInput.commonHeader = commonHeader
@@ -55,8 +59,12 @@
         actionIdentifiers.actionName = "activate"
         executionServiceInput.actionIdentifiers = actionIdentifiers
 
+        */
 
-        val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime(commonHeader.requestId,
+        val executionServiceInput = JacksonUtils.readValueFromClassPathFile("payload/requests/sample-activate-request.json",
+                ExecutionServiceInput::class.java)!!
+
+        val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime("1234",
                 "./../../../../components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration")
 
         val stepMetaData: MutableMap<String, JsonNode> = hashMapOf()
@@ -68,6 +76,7 @@
         componentJythonExecutor.bluePrintRuntimeService = bluePrintRuntimeService
         componentJythonExecutor.stepName = "activate-jython"
 
+
         componentJythonExecutor.apply(executionServiceInput)
 
     }
diff --git a/ms/blueprintsprocessor/functions/python-executor/src/test/resources/requests/sample-activate-request.json b/ms/blueprintsprocessor/functions/python-executor/src/test/resources/payload/requests/sample-activate-request.json
similarity index 100%
rename from ms/blueprintsprocessor/functions/python-executor/src/test/resources/requests/sample-activate-request.json
rename to ms/blueprintsprocessor/functions/python-executor/src/test/resources/payload/requests/sample-activate-request.json
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/pom.xml b/ms/blueprintsprocessor/functions/resource-resolution/pom.xml
index 2f08c58..925f9e3 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/pom.xml
+++ b/ms/blueprintsprocessor/functions/resource-resolution/pom.xml
@@ -14,7 +14,8 @@
   ~  See the License for the specific language governing permissions and
   ~  limitations under the License.
   -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
@@ -27,4 +28,29 @@
     <name>Blueprints Processor Function - Resource Resolution</name>
     <description>Blueprints Processor Function - Resource Resolution</description>
 
+    <dependencies>
+        <!--<dependency>
+            <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+            <artifactId>db-resources</artifactId>
+            <version>${project.version}</version>
+        </dependency>-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-testing</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
 </project>
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceAssignmentRuntimeService.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceAssignmentRuntimeService.kt
index 9d6f4a6..c4ae139 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceAssignmentRuntimeService.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceAssignmentRuntimeService.kt
@@ -6,53 +6,83 @@
 import org.onap.ccsdk.apps.controllerblueprints.core.service.DefaultBluePrintRuntimeService

 

 class ResourceAssignmentRuntimeService(private var id: String, private var bluePrintContext: BluePrintContext)

-    : DefaultBluePrintRuntimeService(id, bluePrintContext){

+    : DefaultBluePrintRuntimeService(id, bluePrintContext) {

 

-    private var resourceResolutionStore: MutableMap<String, JsonNode> = hashMapOf()

+    private lateinit var resolutionId: String

+    private var resourceStore: MutableMap<String, JsonNode> = hashMapOf()

 

-    override fun getExecutionContext(): MutableMap<String, JsonNode> {

-        return resourceResolutionStore

+    fun createUniqueId(key: String) {

+        resolutionId = "$id-$key"

     }

 

-    @Suppress("UNCHECKED_CAST")

-    override fun setExecutionContext(executionContext: MutableMap<String, JsonNode>) {

-        this.resourceResolutionStore = executionContext

+    fun cleanResourceStore() {

+        resourceStore.clear()

     }

 

-    override fun put(key: String, value: JsonNode) {

-        resourceResolutionStore[key] = value

+    fun putResolutionStore(key: String, value: JsonNode) {

+        resourceStore[key] = value

     }

 

-    override fun get(key: String): JsonNode {

-        return resourceResolutionStore[key] ?: throw BluePrintProcessorException("failed to get execution property($key)")

+    fun getResolutionStore(key: String): JsonNode {

+        return resourceStore[key]

+                ?: throw BluePrintProcessorException("failed to get execution property ($key)")

     }

 

-    override fun check(key: String): Boolean {

-        return resourceResolutionStore.containsKey(key)

+    fun checkResolutionStore(key: String): Boolean {

+        return resourceStore.containsKey(key)

     }

 

-    override fun cleanRuntime() {

-        resourceResolutionStore.clear()

+    fun getJsonNodeFromResolutionStore(key: String): JsonNode {

+        return getResolutionStore(key)

     }

 

-    private fun getJsonNode(key: String): JsonNode {

-        return get(key)

+    fun getStringFromResolutionStore(key: String): String? {

+        return getResolutionStore(key).asText()

     }

 

-    override fun getAsString(key: String): String? {

-        return get(key).asText()

+    fun getBooleanFromResolutionStore(key: String): Boolean? {

+        return getResolutionStore(key).asBoolean()

     }

 

-    override fun getAsBoolean(key: String): Boolean? {

-        return get(key).asBoolean()

+    fun getIntFromResolutionStore(key: String): Int? {

+        return getResolutionStore(key).asInt()

     }

 

-    override fun getAsInt(key: String): Int? {

-        return get(key).asInt()

+    fun getDoubleFromResolutionStore(key: String): Double? {

+        return getResolutionStore(key).asDouble()

     }

 

-    override fun getAsDouble(key: String): Double? {

-        return get(key).asDouble()

+    fun putDictionaryStore(key: String, value: JsonNode) {

+        resourceStore["dictionary-$key"] = value

+    }

+

+    fun getDictionaryStore(key: String): JsonNode {

+        return resourceStore["dictionary-$key"]

+                ?: throw BluePrintProcessorException("failed to get execution property (dictionary-$key)")

+    }

+

+    fun checkDictionaryStore(key: String): Boolean {

+        return resourceStore.containsKey("dictionary-$key")

+    }

+

+    fun getJsonNodeFromDictionaryStore(key: String): JsonNode {

+        return getResolutionStore("dictionary-$key")

+    }

+

+    fun getStringFromDictionaryStore(key: String): String? {

+        return getResolutionStore("dictionary-$key").asText()

+    }

+

+    fun getBooleanFromDictionaryStore(key: String): Boolean? {

+        return getResolutionStore("dictionary-$key").asBoolean()

+    }

+

+    fun getIntFromDictionaryStore(key: String): Int? {

+        return getResolutionStore("dictionary-$key").asInt()

+    }

+

+    fun getDoubleFromDictionaryStore(key: String): Double? {

+        return getResolutionStore("dictionary-$key").asDouble()

     }

 

 }

diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt
index 5a7161d..38e5c95 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt
@@ -18,6 +18,7 @@
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution

 

 import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor.ResourceAssignmentProcessor

+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils

 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants

 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException

 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService

@@ -88,7 +89,7 @@
         val resourceDictionaries: MutableMap<String, ResourceDefinition> = JacksonUtils.getMapFromFile(dictionaryFile, ResourceDefinition::class.java)

                 ?: throw BluePrintProcessorException("couldn't get Dictionary Definitions")

 

-        executeProcessors(bluePrintRuntimeService, resourceDictionaries, resourceAssignments)

+        executeProcessors(bluePrintRuntimeService, resourceDictionaries, resourceAssignments, templateArtifactName)

 

         // Check Template is there

         val templateContent = bluePrintRuntimeService.resolveNodeTemplateArtifact(nodeTemplateName, mappingArtifactName)

@@ -107,11 +108,13 @@
     }

 

 

-    fun executeProcessors(bluePrintRuntimeService: BluePrintRuntimeService<*>,

-                          resourceDictionaries: MutableMap<String, ResourceDefinition>,

-                          resourceAssignments: MutableList<ResourceAssignment>) {

+    private fun executeProcessors(blueprintRuntimeService: BluePrintRuntimeService<*>,

+                                  resourceDictionaries: MutableMap<String, ResourceDefinition>,

+                                  resourceAssignments: MutableList<ResourceAssignment>,

+                                  templateArtifactName: String) {

 

         val bulkSequenced = BulkResourceSequencingUtils.process(resourceAssignments)

+        val resourceAssignmentRuntimeService = ResourceAssignmentUtils.transformToRARuntimeService(blueprintRuntimeService, templateArtifactName)

 

         bulkSequenced.map { batchResourceAssignments ->

             batchResourceAssignments.filter { it.name != "*" && it.name != "start" }

@@ -124,7 +127,7 @@
                                         "for resource assignment(${resourceAssignment.name})")

                         try {

                             // Set BluePrint Runtime Service

-                            resourceAssignmentProcessor.bluePrintRuntimeService = bluePrintRuntimeService

+                            resourceAssignmentProcessor.raRuntimeService = resourceAssignmentRuntimeService

                             // Set Resource Dictionaries

                             resourceAssignmentProcessor.resourceDictionaries = resourceDictionaries

                             // Invoke Apply Method

diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceSourceProperties.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceSourceProperties.kt
index b141025..9bad099 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceSourceProperties.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceSourceProperties.kt
@@ -33,8 +33,8 @@
 open class DatabaseResourceSource : ResourceSourceProperties() {
     lateinit var type: String
     lateinit var query: String
-    var inputKeyMapping: MutableList<String>? = null
-    var outputKeyMapping: MutableList<String>? = null
+    var inputKeyMapping: MutableMap<String, String>? = null
+    var outputKeyMapping: MutableMap<String, String>? = null
     lateinit var keyDependencies: MutableList<String>
 }
 
@@ -43,8 +43,8 @@
     lateinit var urlPath: String
     lateinit var path: String
     lateinit var expressionType: String
-    var inputKeyMapping: MutableList<String>? = null
-    var outputKeyMapping: MutableList<String>? = null
+    var inputKeyMapping: MutableMap<String, String>? = null
+    var outputKeyMapping: MutableMap<String, String>? = null
     lateinit var keyDependencies: MutableList<String>
 }
 
@@ -53,7 +53,7 @@
     lateinit var instanceName: String
     lateinit var path: String
     lateinit var expressionType: String
-    var inputKeyMapping: MutableList<String>? = null
-    var outputKeyMapping: MutableList<String>? = null
+    var inputKeyMapping: MutableMap<String, String>? = null
+    var outputKeyMapping: MutableMap<String, String>? = null
     lateinit var keyDependencies: MutableList<String>
 }
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/CapabilityResourceAssignmentProcessor.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/CapabilityResourceAssignmentProcessor.kt
index 9933849..6c23559 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/CapabilityResourceAssignmentProcessor.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/CapabilityResourceAssignmentProcessor.kt
@@ -18,8 +18,8 @@
 
 import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.CapabilityResourceSource
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.utils.ResourceAssignmentUtils
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.context.ApplicationContext
 import org.springframework.stereotype.Service
@@ -40,17 +40,16 @@
         return "resource-assignment-processor-capability"
     }
 
-    override fun process(executionRequest: ResourceAssignment) {
+    override fun process(resourceAssignment: ResourceAssignment) {
 
-        val resourceDefinition = resourceDictionaries[executionRequest.dictionaryName]
-                ?: throw BluePrintProcessorException("couldn't get resource definition for ${executionRequest.dictionaryName}")
+        val resourceDefinition = resourceDictionaries[resourceAssignment.dictionaryName]
+                ?: throw BluePrintProcessorException("couldn't get resource definition for ${resourceAssignment.dictionaryName}")
 
-        val resourceSource = resourceDefinition.sources[executionRequest.dictionarySource]
-                ?: throw BluePrintProcessorException("couldn't get resource definition ${executionRequest.dictionaryName} source(${executionRequest.dictionarySource})")
+        val resourceSource = resourceDefinition.sources[resourceAssignment.dictionarySource]
+                ?: throw BluePrintProcessorException("couldn't get resource definition ${resourceAssignment.dictionaryName} source(${resourceAssignment.dictionarySource})")
 
-        checkNotNull(resourceSource.properties) { "failed to get ${executionRequest.dictionarySource} properties" }
-
-        val capabilityResourceSourceProperty = ResourceAssignmentUtils.transformResourceSource(resourceSource.properties!!, CapabilityResourceSource::class.java)
+        val resourceSourceProps = checkNotNull(resourceSource.properties) { "failed to get $resourceSource properties" }
+        val capabilityResourceSourceProperty = JacksonUtils.getInstanceFromMap(resourceSourceProps, CapabilityResourceSource::class.java)
 
         val instanceType = capabilityResourceSourceProperty.type
         val instanceName = capabilityResourceSourceProperty.instanceName
@@ -74,14 +73,14 @@
         checkNotNull(componentResourceAssignmentProcessor) { "failed to get capability resource assignment processor($instanceName)" }
 
         // Assign Current Blueprint runtime and ResourceDictionaries
-        componentResourceAssignmentProcessor.bluePrintRuntimeService = bluePrintRuntimeService
+        componentResourceAssignmentProcessor.raRuntimeService = raRuntimeService
         componentResourceAssignmentProcessor.resourceDictionaries = resourceDictionaries
 
         // Invoke componentResourceAssignmentProcessor
-        componentResourceAssignmentProcessor.apply(executionRequest)
+        componentResourceAssignmentProcessor.apply(resourceAssignment)
     }
 
-    override fun recover(runtimeException: RuntimeException, executionRequest: ResourceAssignment) {
+    override fun recover(runtimeException: RuntimeException, resourceAssignment: ResourceAssignment) {
 
         TODO("To Implement")
     }
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/DefaultResourceAssignmentProcessor.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/DefaultResourceAssignmentProcessor.kt
index 1c5455f..e389f36 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/DefaultResourceAssignmentProcessor.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/DefaultResourceAssignmentProcessor.kt
@@ -17,24 +17,50 @@
 
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor
 
+import com.fasterxml.jackson.databind.node.NullNode
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
+import org.slf4j.LoggerFactory
 import org.springframework.stereotype.Service
 
 /**
  * DefaultResourceAssignmentProcessor
  *
- * @author Brinda Santh
+ * @author Kapil Singal
  */
 @Service("resource-assignment-processor-default")
 open class DefaultResourceAssignmentProcessor : ResourceAssignmentProcessor() {
 
+    private val logger = LoggerFactory.getLogger(DefaultResourceAssignmentProcessor::class.java)
+
     override fun getName(): String {
         return "resource-assignment-processor-default"
     }
 
-    override fun process(executionRequest: ResourceAssignment) {
+    override fun process(resourceAssignment: ResourceAssignment) {
+        try {
+            // Check if It has Input
+            var value: Any? = raRuntimeService.getInputValue(resourceAssignment.name)
+
+            // If value is null get it from default source
+            if (value == null || value is NullNode) {
+                logger.info("Looking for defaultValue as couldn't find value in input For template key (${resourceAssignment.name})")
+                value = resourceAssignment.property?.defaultValue
+            }
+
+            logger.info("For template key (${resourceAssignment.name}) setting value as ($value)")
+            ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, value)
+
+            // Check the value has populated for mandatory case
+            ResourceAssignmentUtils.assertTemplateKeyValueNotNull(resourceAssignment)
+        } catch (e: Exception) {
+            ResourceAssignmentUtils.setFailedResourceDataValue(resourceAssignment, e.message)
+            throw BluePrintProcessorException("Failed in template key ($resourceAssignment) assignments with: ${e.message}", e)
+        }
+
     }
 
-    override fun recover(runtimeException: RuntimeException, executionRequest: ResourceAssignment) {
+    override fun recover(runtimeException: RuntimeException, resourceAssignment: ResourceAssignment) {
     }
 }
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/InputResourceAssignmentProcessor.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/InputResourceAssignmentProcessor.kt
index bd9c188..5757de2 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/InputResourceAssignmentProcessor.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/InputResourceAssignmentProcessor.kt
@@ -17,41 +17,46 @@
 
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor
 
-import org.onap.ccsdk.apps.controllerblueprints.core.*
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
-import org.springframework.stereotype.Service
 import com.fasterxml.jackson.databind.node.NullNode
-import org.onap.ccsdk.apps.controllerblueprints.resource.dict.utils.ResourceAssignmentUtils
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.apps.controllerblueprints.core.checkNotEmpty
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
+import org.slf4j.LoggerFactory
+import org.springframework.stereotype.Service
 
 /**
  * InputResourceAssignmentProcessor
  *
- * @author Brinda Santh
+ * @author Kapil Singal
  */
 @Service("resource-assignment-processor-input")
 open class InputResourceAssignmentProcessor : ResourceAssignmentProcessor() {
 
+    private val logger = LoggerFactory.getLogger(InputResourceAssignmentProcessor::class.java)
+
     override fun getName(): String {
         return "resource-assignment-processor-input"
     }
 
-    override fun process(executionRequest: ResourceAssignment) {
+    override fun process(resourceAssignment: ResourceAssignment) {
         try {
-            if (checkNotEmpty(executionRequest.name)) {
-                val value = bluePrintRuntimeService!!.getInputValue(executionRequest.name)
+            if (checkNotEmpty(resourceAssignment.name)) {
+                val value = raRuntimeService.getInputValue(resourceAssignment.name)
                 // if value is null don't call setResourceDataValue to populate the value
                 if (value != null && value !is NullNode) {
-                    ResourceAssignmentUtils.setResourceDataValue(executionRequest, value)
+                    logger.info("input source template key (${resourceAssignment.name}) found from input and value is ($value)")
+                    ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, value)
                 }
             }
             // Check the value has populated for mandatory case
-            ResourceAssignmentUtils.assertTemplateKeyValueNotNull(executionRequest)
+            ResourceAssignmentUtils.assertTemplateKeyValueNotNull(resourceAssignment)
         } catch (e: Exception) {
-            ResourceAssignmentUtils.setFailedResourceDataValue(executionRequest, e.message)
-            throw BluePrintProcessorException("Failed in template key ($executionRequest) assignments with : (${e.message})", e)
+            ResourceAssignmentUtils.setFailedResourceDataValue(resourceAssignment, e.message)
+            throw BluePrintProcessorException("Failed in template key ($resourceAssignment) assignments with : (${e.message})", e)
         }
     }
 
-    override fun recover(runtimeException: RuntimeException, executionRequest: ResourceAssignment) {
+    override fun recover(runtimeException: RuntimeException, resourceAssignment: ResourceAssignment) {
     }
 }
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/PrimaryDataResourceAssignmentProcessor.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/PrimaryDataResourceAssignmentProcessor.kt
index ec98d09..9427183 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/PrimaryDataResourceAssignmentProcessor.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/PrimaryDataResourceAssignmentProcessor.kt
@@ -17,24 +17,147 @@
 
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor
 
+import com.fasterxml.jackson.databind.node.JsonNodeFactory
+import com.fasterxml.jackson.databind.node.NullNode
+import org.onap.ccsdk.apps.blueprintsprocessor.db.primary.service.PrimaryDBLibGenericService
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.DatabaseResourceSource
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils
+import org.onap.ccsdk.apps.controllerblueprints.core.*
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDictionaryConstants
+import org.slf4j.LoggerFactory
 import org.springframework.stereotype.Service
+import java.util.*
 
 /**
  * PrimaryDataResourceAssignmentProcessor
  *
- * @author Brinda Santh
+ * @author Kapil Singal
  */
 @Service("resource-assignment-processor-primary-db")
-open class PrimaryDataResourceAssignmentProcessor : ResourceAssignmentProcessor(){
+open class PrimaryDataResourceAssignmentProcessor(private val primaryDBLibGenericService: PrimaryDBLibGenericService)
+    : ResourceAssignmentProcessor() {
+
+    private val logger = LoggerFactory.getLogger(PrimaryDataResourceAssignmentProcessor::class.java)
 
     override fun getName(): String {
         return "resource-assignment-processor-primary-db"
     }
 
-    override fun process(executionRequest: ResourceAssignment) {
+    override fun process(resourceAssignment: ResourceAssignment) {
+        try {
+            validate(resourceAssignment)
+
+            // Check if It has Input
+            val value = raRuntimeService.getInputValue(resourceAssignment.name)
+            if (value != null && value !is NullNode) {
+                logger.info("primary-db source template key (${resourceAssignment.name}) found from input and value is ($value)")
+                ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, value)
+            } else {
+                val dName = resourceAssignment.dictionaryName
+                val dSource = resourceAssignment.dictionarySource
+                val resourceDefinition = resourceDictionaries[dName]
+                        ?: throw BluePrintProcessorException("couldn't get resource dictionary definition for $dName")
+                val resourceSource = resourceDefinition.sources[dSource]
+                        ?: throw BluePrintProcessorException("couldn't get resource definition $dName source($dSource)")
+                val resourceSourceProperties = checkNotNull(resourceSource.properties) { "failed to get source properties for $dName " }
+                val sourceProperties = JacksonUtils.getInstanceFromMap(resourceSourceProperties, DatabaseResourceSource::class.java)
+
+                val sql = checkNotNull(sourceProperties.query) { "failed to get request query for $dName under $dSource properties" }
+                val inputKeyMapping = checkNotNull(sourceProperties.inputKeyMapping) { "failed to get input-key-mappings for $dName under $dSource properties" }
+
+                logger.info("$dSource dictionary information : ($sql), ($inputKeyMapping), (${sourceProperties.outputKeyMapping})")
+
+                val rows = primaryDBLibGenericService.query(sql, populateNamedParameter(inputKeyMapping))
+                if (rows.isNullOrEmpty()) {
+                    logger.warn("Failed to get $dSource result for dictionary name ($dName) the query ($sql)")
+                } else {
+                    populateResource(resourceAssignment, sourceProperties, rows)
+                }
+            }
+
+            // Check the value has populated for mandatory case
+            ResourceAssignmentUtils.assertTemplateKeyValueNotNull(resourceAssignment)
+        } catch (e: Exception) {
+            ResourceAssignmentUtils.setFailedResourceDataValue(resourceAssignment, e.message)
+            throw BluePrintProcessorException("Failed in template key ($resourceAssignment) assignments with: ${e.message}", e)
+        }
     }
 
-    override fun recover(runtimeException: RuntimeException, executionRequest: ResourceAssignment) {
+    @Throws(BluePrintProcessorException::class)
+    private fun validate(resourceAssignment: ResourceAssignment) {
+        checkNotEmptyOrThrow(resourceAssignment.name, "resource assignment template key is not defined")
+        checkNotEmptyOrThrow(resourceAssignment.dictionaryName, "resource assignment dictionary name is not defined for template key (${resourceAssignment.name})")
+        checkEqualsOrThrow(ResourceDictionaryConstants.SOURCE_PRIMARY_DB, resourceAssignment.dictionarySource) {
+            "resource assignment source is not ${ResourceDictionaryConstants.SOURCE_PRIMARY_DB} but it is ${resourceAssignment.dictionarySource}"
+        }
+    }
+
+    private fun populateNamedParameter(inputKeyMapping: Map<String, String>): Map<String, Any> {
+        val namedParameters = HashMap<String, Any>()
+        inputKeyMapping.forEach {
+            val expressionValue = raRuntimeService.getDictionaryStore(it.value)
+            logger.trace("Reference dictionary key (${it.key}) resulted in value ($expressionValue)")
+            namedParameters[it.key] = expressionValue
+        }
+        logger.info("Parameter information : ({})", namedParameters)
+        return namedParameters
+    }
+
+    @Throws(BluePrintProcessorException::class)
+    private fun populateResource(resourceAssignment: ResourceAssignment, sourceProperties: DatabaseResourceSource, rows: List<Map<String, Any>>) {
+        val dName = resourceAssignment.dictionaryName
+        val dSource = resourceAssignment.dictionarySource
+        val type = nullToEmpty(resourceAssignment.property?.type)
+
+        val outputKeyMapping = checkNotNull(sourceProperties.outputKeyMapping) { "failed to get output-key-mappings for $dName under $dSource properties" }
+        logger.info("Response processing type($type)")
+
+        // Primitive Types
+        when(type) {
+            in BluePrintTypes.validPrimitiveTypes() -> {
+                val dbColumnValue = rows[0][outputKeyMapping[dName]]
+                logger.info("For template key (${resourceAssignment.name}) setting value as ($dbColumnValue)")
+                ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, dbColumnValue)
+            }
+            in BluePrintTypes.validCollectionTypes() -> {
+                val entrySchemaType = returnNotEmptyOrThrow(resourceAssignment.property?.entrySchema?.type) { "Entry schema is not defined for dictionary ($dName) info" }
+                var arrayNode = JsonNodeFactory.instance.arrayNode()
+                rows.forEach {
+                    if (entrySchemaType in BluePrintTypes.validPrimitiveTypes()) {
+                        val dbColumnValue = it[outputKeyMapping[dName]]
+                        // Add Array JSON
+                        JacksonUtils.populatePrimitiveValues(dbColumnValue!!, entrySchemaType, arrayNode)
+                    } else {
+                        val arrayChildNode = JsonNodeFactory.instance.objectNode()
+                        for (mapping in outputKeyMapping.entries) {
+                            val dbColumnValue = checkNotNull(it[mapping.key])
+                            val propertyTypeForDataType = ResourceAssignmentUtils.getPropertyType(raRuntimeService, entrySchemaType, mapping.key)
+                            JacksonUtils.populatePrimitiveValues(mapping.key, dbColumnValue, propertyTypeForDataType, arrayChildNode)
+                        }
+                        arrayNode.add(arrayChildNode)
+                    }
+                }
+                logger.info("For template key (${resourceAssignment.name}) setting value as ($arrayNode)")
+                // Set the List of Complex Values
+                ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, arrayNode)
+            }
+            else -> {
+                // Complex Types
+                val row = rows[0]
+                var objectNode = JsonNodeFactory.instance.objectNode()
+                for (mapping in outputKeyMapping.entries) {
+                    val dbColumnValue = checkNotNull(row[mapping.key])
+                    val propertyTypeForDataType = ResourceAssignmentUtils.getPropertyType(raRuntimeService, type, mapping.key)
+                    JacksonUtils.populatePrimitiveValues(mapping.key, dbColumnValue, propertyTypeForDataType, objectNode)
+                }
+                logger.info("For template key (${resourceAssignment.name}) setting value as ($objectNode)")
+                ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, objectNode)
+            }
+        }
+    }
+
+    override fun recover(runtimeException: RuntimeException, resourceAssignment: ResourceAssignment) {
     }
 }
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/ResourceAssignmentProcessor.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/ResourceAssignmentProcessor.kt
index 11cd3fa..43238a5 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/ResourceAssignmentProcessor.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/ResourceAssignmentProcessor.kt
@@ -17,9 +17,9 @@
 
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor
 
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.ResourceAssignmentRuntimeService
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BlueprintFunctionNode
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition
 import org.slf4j.LoggerFactory
@@ -28,14 +28,12 @@
 
     private val log = LoggerFactory.getLogger(ResourceAssignmentProcessor::class.java)
 
-    lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
-
+    lateinit var raRuntimeService: ResourceAssignmentRuntimeService
     lateinit var resourceDictionaries: Map<String, ResourceDefinition>
 
-
     open fun resourceDefinition(name: String): ResourceDefinition {
         return resourceDictionaries[name]
-                ?: throw BluePrintProcessorException("couldn't get resource definition($name)")
+                ?: throw BluePrintProcessorException("couldn't get resource definition for ($name)")
     }
 
     override fun prepareRequest(resourceAssignment: ResourceAssignment): ResourceAssignment {
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/SimpleRestResourceAssignmentProcessor.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/SimpleRestResourceAssignmentProcessor.kt
index e05261d..f1a4dbb 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/SimpleRestResourceAssignmentProcessor.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/SimpleRestResourceAssignmentProcessor.kt
@@ -17,24 +17,146 @@
 
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor
 
+import com.fasterxml.jackson.databind.node.ArrayNode
+import com.fasterxml.jackson.databind.node.JsonNodeFactory
+import com.fasterxml.jackson.databind.node.NullNode
+import com.fasterxml.jackson.databind.node.ObjectNode
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.RestResourceSource
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils
+import org.onap.ccsdk.apps.blueprintsprocessor.rest.service.BluePrintRestLibPropertyService
+import org.onap.ccsdk.apps.controllerblueprints.core.*
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDictionaryConstants
+import org.slf4j.LoggerFactory
 import org.springframework.stereotype.Service
 
 /**
  * SimpleRestResourceAssignmentProcessor
  *
- * @author Brinda Santh
+ * @author Kapil Singal
  */
-@Service("resource-assignment-processor-mdsal")
-open class SimpleRestResourceAssignmentProcessor : ResourceAssignmentProcessor() {
+@Service("resource-assignment-processor-primary-config-data")
+open class SimpleRestResourceAssignmentProcessor(private val blueprintRestLibPropertyService: BluePrintRestLibPropertyService)
+    : ResourceAssignmentProcessor() {
+
+    private val logger = LoggerFactory.getLogger(SimpleRestResourceAssignmentProcessor::class.java)
 
     override fun getName(): String {
-        return "resource-assignment-processor-mdsal"
+        return "resource-assignment-processor-primary-config-data"
     }
 
-    override fun process(executionRequest: ResourceAssignment) {
+    override fun process(resourceAssignment: ResourceAssignment) {
+        try {
+            validate(resourceAssignment)
+
+            // Check if It has Input
+            val value = raRuntimeService.getInputValue(resourceAssignment.name)
+            if (value != null && value !is NullNode) {
+                logger.info("primary-db source template key (${resourceAssignment.name}) found from input and value is ($value)")
+                ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, value)
+            } else {
+                val dName = resourceAssignment.dictionaryName
+                val dSource = resourceAssignment.dictionarySource
+                val resourceDefinition = resourceDictionaries[dName]
+                        ?: throw BluePrintProcessorException("couldn't get resource dictionary definition for $dName")
+                val resourceSource = resourceDefinition.sources[dSource]
+                        ?: throw BluePrintProcessorException("couldn't get resource definition $dName source($dSource)")
+                val resourceSourceProperties = checkNotNull(resourceSource.properties) { "failed to get source properties for $dName " }
+                val sourceProperties = JacksonUtils.getInstanceFromMap(resourceSourceProperties, RestResourceSource::class.java)
+
+                val urlPath = checkNotNull(sourceProperties.urlPath) { "failed to get request urlPath for $dName under $dSource properties" }
+                val path = nullToEmpty(sourceProperties.path)
+                val inputKeyMapping = checkNotNull(sourceProperties.inputKeyMapping) { "failed to get input-key-mappings for $dName under $dSource properties" }
+
+                logger.info("$dSource dictionary information : ($urlPath), ($inputKeyMapping), (${sourceProperties.outputKeyMapping})")
+
+                val restClientService = blueprintRestLibPropertyService.blueprintWebClientService("primary-config-data")
+                val response = restClientService.getResource(urlPath, String::class.java)
+                if (response.isNotBlank()) {
+                    logger.warn("Failed to get $dSource result for dictionary name ($dName) using urlPath ($urlPath)")
+                } else {
+                    populateResource(resourceAssignment, sourceProperties, response, path)
+                }
+            }
+            // Check the value has populated for mandatory case
+            ResourceAssignmentUtils.assertTemplateKeyValueNotNull(resourceAssignment)
+        } catch (e: Exception) {
+            ResourceAssignmentUtils.setFailedResourceDataValue(resourceAssignment, e.message)
+            throw BluePrintProcessorException("Failed in template key ($resourceAssignment) assignments with: ${e.message}", e)
+        }
     }
 
-    override fun recover(runtimeException: RuntimeException, executionRequest: ResourceAssignment) {
+    @Throws(BluePrintProcessorException::class)
+    private fun populateResource(resourceAssignment: ResourceAssignment, sourceProperties: RestResourceSource, restResponse: String, path: String) {
+        val dName = resourceAssignment.dictionaryName
+        val dSource = resourceAssignment.dictionarySource
+        val type = nullToEmpty(resourceAssignment.property?.type)
+        lateinit var entrySchemaType: String
+
+        val outputKeyMapping = checkNotNull(sourceProperties.outputKeyMapping) { "failed to get output-key-mappings for $dName under $dSource properties" }
+        logger.info("Response processing type($type)")
+
+        val responseNode = checkNotNull(JacksonUtils.jsonNode(restResponse).at(path)) { "Failed to find path ($path) in response ($restResponse)" }
+        logger.info("populating value for output mapping ($outputKeyMapping), from json ($responseNode)")
+
+
+        when (type) {
+            in BluePrintTypes.validPrimitiveTypes() -> {
+                logger.info("For template key (${resourceAssignment.name}) setting value as ($responseNode)")
+                ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, responseNode)
+            }
+            in BluePrintTypes.validCollectionTypes() -> {
+                // Array Types
+                entrySchemaType = returnNotEmptyOrThrow(resourceAssignment.property?.entrySchema?.type) { "Entry schema is not defined for dictionary ($dName) info" }
+                val arrayNode = responseNode as ArrayNode
+
+                if (entrySchemaType !in BluePrintTypes.validPrimitiveTypes()) {
+                    val responseArrayNode = responseNode.toList()
+                    for (responseSingleJsonNode in responseArrayNode) {
+                        val arrayChildNode = JsonNodeFactory.instance.objectNode()
+                        outputKeyMapping.map {
+                            val responseKeyValue = responseSingleJsonNode.get(it.key)
+                            val propertyTypeForDataType = ResourceAssignmentUtils.getPropertyType(raRuntimeService, entrySchemaType, it.key)
+                            logger.info("For List Type Resource: key (${it.key}), value ($responseKeyValue), type  ({$propertyTypeForDataType})")
+                            JacksonUtils.populateJsonNodeValues(it.value, responseKeyValue, propertyTypeForDataType, arrayChildNode)
+                        }
+                        arrayNode.add(arrayChildNode)
+                    }
+                }
+                logger.info("For template key (${resourceAssignment.name}) setting value as ($arrayNode)")
+                // Set the List of Complex Values
+                ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, arrayNode)
+            }
+            else -> {
+                // Complex Types
+                val objectNode = responseNode as ObjectNode
+                outputKeyMapping.map {
+                    val responseKeyValue = responseNode.get(it.key)
+                    val propertyTypeForDataType = ResourceAssignmentUtils.getPropertyType(raRuntimeService, entrySchemaType, it.key)
+                    logger.info("For List Type Resource: key (${it.key}), value ($responseKeyValue), type  ({$propertyTypeForDataType})")
+                    JacksonUtils.populateJsonNodeValues(it.value, responseKeyValue, propertyTypeForDataType, objectNode)
+                }
+
+                logger.info("For template key (${resourceAssignment.name}) setting value as ($objectNode)")
+                // Set the List of Complex Values
+                ResourceAssignmentUtils.setResourceDataValue(resourceAssignment, raRuntimeService, objectNode)
+            }
+        }
     }
+
+    @Throws(BluePrintProcessorException::class)
+    private fun validate(resourceAssignment: ResourceAssignment) {
+        checkNotEmptyOrThrow(resourceAssignment.name, "resource assignment template key is not defined")
+        checkNotEmptyOrThrow(resourceAssignment.dictionaryName, "resource assignment dictionary name is not defined for template key (${resourceAssignment.name})")
+        checkEqualsOrThrow(ResourceDictionaryConstants.SOURCE_PRIMARY_CONFIG_DATA, resourceAssignment.dictionarySource) {
+            "resource assignment source is not ${ResourceDictionaryConstants.SOURCE_PRIMARY_CONFIG_DATA} but it is ${resourceAssignment.dictionarySource}"
+        }
+        checkNotEmptyOrThrow(resourceAssignment.dictionaryName, "resource assignment dictionary name is not defined for template key (${resourceAssignment.name})")
+    }
+
+    override fun recover(runtimeException: RuntimeException, resourceAssignment: ResourceAssignment) {
+    }
+
+
 }
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt
new file mode 100644
index 0000000..ee8911e
--- /dev/null
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt
@@ -0,0 +1,178 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils
+
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
+import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.databind.node.NullNode
+import com.fasterxml.jackson.databind.node.ObjectNode
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.ResourceAssignmentRuntimeService
+import org.onap.ccsdk.apps.controllerblueprints.core.*
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
+import java.util.*
+
+class ResourceAssignmentUtils {
+    companion object {
+
+        private val logger: EELFLogger = EELFManager.getInstance().getLogger(ResourceAssignmentUtils::class.toString())
+
+        @Synchronized
+        @Throws(BluePrintProcessorException::class)
+        fun setResourceDataValue(resourceAssignment: ResourceAssignment, raRuntimeService: ResourceAssignmentRuntimeService, value: Any?) {
+
+            val resourceProp = checkNotNull(resourceAssignment.property) { "Failed in setting resource value for resource mapping $resourceAssignment" }
+            checkNotEmptyOrThrow(resourceAssignment.name, "Failed in setting resource value for resource mapping $resourceAssignment")
+
+            if (checkNotEmpty(resourceAssignment.dictionaryName)) {
+                resourceAssignment.dictionaryName = resourceAssignment.name
+                logger.warn("Missing dictionary key, setting with template key (${resourceAssignment.name}) as dictionary key (${resourceAssignment.dictionaryName})")
+            }
+
+            try {
+                if (checkNotEmpty(resourceProp.type)) {
+                    val convertedValue = convertResourceValue(resourceProp.type, value)
+                    logger.info("Setting Resource Value ($convertedValue) for Resource Name (${resourceAssignment.dictionaryName}) of type (${resourceProp.type})")
+                    setResourceValue(resourceAssignment, raRuntimeService, convertedValue)
+                    resourceAssignment.updatedDate = Date()
+                    resourceAssignment.updatedBy = BluePrintConstants.USER_SYSTEM
+                    resourceAssignment.status = BluePrintConstants.STATUS_SUCCESS
+                }
+            } catch (e: Exception) {
+                throw BluePrintProcessorException("Failed in setting value for template key (${resourceAssignment.name}) and " +
+                        "dictionary key (${resourceAssignment.dictionaryName}) of type (${resourceProp.type}) with error message (${e.message})", e)
+            }
+        }
+
+        private fun setResourceValue(resourceAssignment: ResourceAssignment, raRuntimeService: ResourceAssignmentRuntimeService, value: JsonNode) {
+            raRuntimeService.putResolutionStore(resourceAssignment.name, value)
+            raRuntimeService.putDictionaryStore(resourceAssignment.dictionaryName!!, value)
+            resourceAssignment.property!!.value = value
+        }
+
+        private fun convertResourceValue(type: String, value: Any?): JsonNode {
+
+            return if (value == null || value is NullNode) {
+                logger.info("Returning {} value from convertResourceValue", value)
+                NullNode.instance
+            } else if (BluePrintTypes.validPrimitiveTypes().contains(type) && value is String) {
+                JacksonUtils.convertPrimitiveResourceValue(type, value)
+            } else if (value is String) {
+                JacksonUtils.jsonNode(value)
+            } else {
+                JacksonUtils.getJsonNode(value)
+            }
+
+        }
+
+        @Synchronized
+        fun setFailedResourceDataValue(resourceAssignment: ResourceAssignment, message: String?) {
+            if (checkNotEmpty(resourceAssignment.name)) {
+                resourceAssignment.updatedDate = Date()
+                resourceAssignment.updatedBy = BluePrintConstants.USER_SYSTEM
+                resourceAssignment.status = BluePrintConstants.STATUS_FAILURE
+                resourceAssignment.message = message
+            }
+        }
+
+        @Synchronized
+        @Throws(BluePrintProcessorException::class)
+        fun assertTemplateKeyValueNotNull(resourceAssignment: ResourceAssignment) {
+            val resourceProp = checkNotNull(resourceAssignment.property) { "Failed to populate mandatory resource resource mapping $resourceAssignment" }
+            if (resourceProp.required != null && resourceProp.required!! && (resourceProp.value == null || resourceProp.value !is NullNode)) {
+                logger.error("failed to populate mandatory resource mapping ($resourceAssignment)")
+                throw BluePrintProcessorException("failed to populate mandatory resource mapping ($resourceAssignment)")
+            }
+        }
+
+        @Synchronized
+        @Throws(BluePrintProcessorException::class)
+        fun generateResourceDataForAssignments(assignments: List<ResourceAssignment>): String {
+            var result = "{}"
+            try {
+                val mapper = ObjectMapper()
+                val root = mapper.readTree(result)
+
+                assignments.forEach {
+                    if (checkNotEmpty(it.name) && it.property != null) {
+                        val rName = it.name
+                        val type = nullToEmpty(it.property?.type).toLowerCase()
+                        val value = it.property?.value
+                        logger.info("Generating Resource name ($rName), type ($type), value ($value)")
+
+                        when (value) {
+                            null -> (root as ObjectNode).set(rName, null)
+                            is JsonNode -> (root as ObjectNode).set(rName, value)
+                            else -> {
+                                when (type) {
+                                    BluePrintConstants.DATA_TYPE_TIMESTAMP -> (root as ObjectNode).put(rName, value as String)
+                                    BluePrintConstants.DATA_TYPE_STRING -> (root as ObjectNode).put(rName, value as String)
+                                    BluePrintConstants.DATA_TYPE_BOOLEAN -> (root as ObjectNode).put(rName, value as Boolean)
+                                    BluePrintConstants.DATA_TYPE_INTEGER -> (root as ObjectNode).put(rName, value as Int)
+                                    BluePrintConstants.DATA_TYPE_FLOAT -> (root as ObjectNode).put(rName, value as Float)
+                                    else -> {
+                                        if (JacksonUtils.getJsonNode(value) != null) {
+                                            (root as ObjectNode).set(rName, JacksonUtils.getJsonNode(value))
+                                        } else {
+                                            (root as ObjectNode).set(rName, null)
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(root)
+                logger.info("Generated Resource Param Data ($result)")
+            } catch (e: Exception) {
+                throw BluePrintProcessorException("Resource Assignment is failed with $e.message", e)
+            }
+
+            return result
+        }
+
+        fun transformToRARuntimeService(blueprintRuntimeService: BluePrintRuntimeService<*>, templateArtifactName: String): ResourceAssignmentRuntimeService {
+            val resourceAssignmentRuntimeService = ResourceAssignmentRuntimeService(blueprintRuntimeService.id(), blueprintRuntimeService.bluePrintContext())
+            resourceAssignmentRuntimeService.createUniqueId(templateArtifactName)
+            resourceAssignmentRuntimeService.setExecutionContext(blueprintRuntimeService.getExecutionContext() as MutableMap<String, JsonNode>)
+
+            return resourceAssignmentRuntimeService
+        }
+
+        /*
+         * Populate the Field property type for the Data type
+         */
+        @Synchronized
+        @Throws(BluePrintProcessorException::class)
+        fun getPropertyType(raRuntimeService: ResourceAssignmentRuntimeService, dataTypeName: String, propertyName: String): String {
+            lateinit var type: String
+            try {
+                val dataTypeProps = checkNotNull(raRuntimeService.bluePrintContext().dataTypeByName(dataTypeName)?.properties)
+                val propertyDefinition = checkNotNull(dataTypeProps[propertyName])
+                type = returnNotEmptyOrThrow(propertyDefinition.type) { "Couldn't get data type ($dataTypeName)" }
+                logger.trace("Data type({})'s property ({}) is ({})", dataTypeName, propertyName, type)
+            } catch (e: Exception) {
+                logger.error("couldn't get data type($dataTypeName)'s property ($propertyName), error message $e")
+                throw BluePrintProcessorException("${e.message}", e)
+            }
+            return type
+        }
+    }
+}
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentTest.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentTest.kt
index 8adde86..574d235 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentTest.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentTest.kt
@@ -19,23 +19,36 @@
 import com.fasterxml.jackson.databind.JsonNode
 import org.junit.Test
 import org.junit.runner.RunWith
+import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintProperties
+import org.onap.ccsdk.apps.blueprintsprocessor.core.BlueprintPropertyConfiguration
 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceInput
 import org.onap.ccsdk.apps.blueprintsprocessor.core.utils.PayloadUtils
+import org.onap.ccsdk.apps.blueprintsprocessor.db.BluePrintDBLibConfiguration
+import org.onap.ccsdk.apps.blueprintsprocessor.db.primary.service.PrimaryDBLibGenericService
 import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor.*
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
 import org.onap.ccsdk.apps.controllerblueprints.core.asJsonNode
+import org.onap.ccsdk.apps.controllerblueprints.core.config.BluePrintLoadConfiguration
 import org.onap.ccsdk.apps.controllerblueprints.core.putJsonElement
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration
+import org.springframework.context.annotation.ComponentScan
 import org.springframework.test.context.ContextConfiguration
+import org.springframework.test.context.TestPropertySource
 import org.springframework.test.context.junit4.SpringRunner
 
 @RunWith(SpringRunner::class)
-@ContextConfiguration(classes = [ResourceResolutionComponent::class, ResourceResolutionService::class,
+@ContextConfiguration(classes = [ResourceResolutionService::class,
     InputResourceAssignmentProcessor::class, DefaultResourceAssignmentProcessor::class,
     PrimaryDataResourceAssignmentProcessor::class, SimpleRestResourceAssignmentProcessor::class,
-    CapabilityResourceAssignmentProcessor::class])
+    CapabilityResourceAssignmentProcessor::class, PrimaryDBLibGenericService::class,
+    BlueprintPropertyConfiguration::class, BluePrintProperties::class,
+    BluePrintDBLibConfiguration::class, BluePrintLoadConfiguration::class])
+@TestPropertySource(locations = ["classpath:application-test.properties"])
+@ComponentScan(basePackages = ["org.onap.ccsdk.apps.blueprintsprocessor", "org.onap.ccsdk.apps.controllerblueprints"])
+@EnableAutoConfiguration
 class ResourceResolutionComponentTest {
 
     @Autowired
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt
index 6c68675..ef69eb5 100644
--- a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt
@@ -19,14 +19,22 @@
 import org.junit.Assert
 import org.junit.Test
 import org.junit.runner.RunWith
+import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintProperties
+import org.onap.ccsdk.apps.blueprintsprocessor.core.BlueprintPropertyConfiguration
 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceInput
 import org.onap.ccsdk.apps.blueprintsprocessor.core.utils.PayloadUtils
+import org.onap.ccsdk.apps.blueprintsprocessor.db.BluePrintDBLibConfiguration
+import org.onap.ccsdk.apps.blueprintsprocessor.db.primary.service.PrimaryDBLibGenericService
 import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor.*
+import org.onap.ccsdk.apps.controllerblueprints.core.config.BluePrintLoadConfiguration
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration
+import org.springframework.context.annotation.ComponentScan
 import org.springframework.test.context.ContextConfiguration
+import org.springframework.test.context.TestPropertySource
 import org.springframework.test.context.junit4.SpringRunner
 import kotlin.test.assertNotNull
 import kotlin.test.assertTrue
@@ -40,7 +48,12 @@
 @ContextConfiguration(classes = [ResourceResolutionService::class,
     InputResourceAssignmentProcessor::class, DefaultResourceAssignmentProcessor::class,
     PrimaryDataResourceAssignmentProcessor::class, SimpleRestResourceAssignmentProcessor::class,
-    CapabilityResourceAssignmentProcessor::class])
+    CapabilityResourceAssignmentProcessor::class, PrimaryDBLibGenericService::class,
+    BlueprintPropertyConfiguration::class, BluePrintProperties::class,
+    BluePrintDBLibConfiguration::class, BluePrintLoadConfiguration::class])
+@TestPropertySource(locations = ["classpath:application-test.properties"])
+@ComponentScan(basePackages = ["org.onap.ccsdk.apps.blueprintsprocessor", "org.onap.ccsdk.apps.controllerblueprints"])
+@EnableAutoConfiguration
 class ResourceResolutionServiceTest {
 
     private val log = LoggerFactory.getLogger(ResourceResolutionServiceTest::class.java)
@@ -48,12 +61,11 @@
     @Autowired
     lateinit var resourceResolutionService: ResourceResolutionService
 
-
     @Test
     fun testRegisteredSource() {
         val sources = resourceResolutionService.registeredResourceSources()
         assertNotNull(sources, "failed to get registered sources")
-        assertTrue(sources.containsAll(arrayListOf("input", "default", "primary-db", "mdsal")), "failed to get registered sources")
+        assertTrue(sources.containsAll(arrayListOf("input", "default", "primary-db", "primary-config-data")), "failed to get registered sources")
     }
 
     @Test
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/application-test.properties b/ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/application-test.properties
new file mode 100644
index 0000000..aed61c4
--- /dev/null
+++ b/ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/application-test.properties
@@ -0,0 +1,32 @@
+# suppress inspection "UnusedProperty" for whole file
+#
+# Copyright © 2017-2018 AT&T Intellectual Property.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+blueprintsprocessor.db.primary.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
+blueprintsprocessor.db.primary.username=sa
+blueprintsprocessor.db.primary.password=
+blueprintsprocessor.db.primary.driverClassName=org.h2.Driver
+blueprintsprocessor.db.primary.hibernateHbm2ddlAuto=create-drop
+blueprintsprocessor.db.primary.hibernateDDLAuto=update
+blueprintsprocessor.db.primary.hibernateNamingStrategy=org.hibernate.cfg.ImprovedNamingStrategy
+blueprintsprocessor.db.primary.hibernateDialect=org.hibernate.dialect.H2Dialect
+# Controller Blueprints Core Configuration
+blueprintsprocessor.blueprintDeployPath=./target/blueprints/deploy
+blueprintsprocessor.blueprintArchivePath=./target/blueprints/archive
+
+blueprintsprocessor.restclient.primary-config-data.type=basic-auth
+blueprintsprocessor.restclient.primary-config-data.url=http://127.0.0.1:9111
+blueprintsprocessor.restclient.primary-config-data.userId=sampleuser
+blueprintsprocessor.restclient.primary-config-data.token=sampletoken
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/commons/core/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/core/api/data/BlueprintProcessorData.kt b/ms/blueprintsprocessor/modules/commons/core/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/core/api/data/BlueprintProcessorData.kt
index b0483dc..41bbd1d 100644
--- a/ms/blueprintsprocessor/modules/commons/core/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/core/api/data/BlueprintProcessorData.kt
+++ b/ms/blueprintsprocessor/modules/commons/core/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/core/api/data/BlueprintProcessorData.kt
@@ -1,99 +1,123 @@
-/*

- *  Copyright © 2017-2018 AT&T Intellectual Property.

- *  Modifications Copyright © 2018 IBM.

- *

- *  Licensed under the Apache License, Version 2.0 (the "License");

- *  you may not use this file except in compliance with the License.

- *  You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- *  Unless required by applicable law or agreed to in writing, software

- *  distributed under the License is distributed on an "AS IS" BASIS,

- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- *  See the License for the specific language governing permissions and

- *  limitations under the License.

- */

-

-package org.onap.ccsdk.apps.blueprintsprocessor.core.api.data

-

-import com.fasterxml.jackson.annotation.JsonFormat

-import com.fasterxml.jackson.databind.node.ObjectNode

-import io.swagger.annotations.ApiModelProperty

-import java.util.*

-

-/**

- * BlueprintProcessorData

- * @author Brinda Santh

- * DATE : 8/15/2018

- */

-

-open class ExecutionServiceInput {

-    @get:ApiModelProperty(required = true)

-    lateinit var commonHeader: CommonHeader

-    @get:ApiModelProperty(required = true)

-    lateinit var actionIdentifiers: ActionIdentifiers

-    @get:ApiModelProperty(required = true)

-    lateinit var payload: ObjectNode

-}

-

-open class ExecutionServiceOutput {

-    @get:ApiModelProperty(required = true)

-    lateinit var commonHeader: CommonHeader

-    @get:ApiModelProperty(required = true)

-    lateinit var actionIdentifiers: ActionIdentifiers

-    @get:ApiModelProperty(required = true)

-    var status: Status = Status()

-    @get:ApiModelProperty(required = true)

-    lateinit var payload: ObjectNode

-}

-

-open class ActionIdentifiers {

-    @get:ApiModelProperty(required = false)

-    lateinit var blueprintName: String

-    @get:ApiModelProperty(required = false)

-    lateinit var blueprintVersion: String

-    @get:ApiModelProperty(required = true)

-    lateinit var actionName: String

-    @get:ApiModelProperty(required = true, allowableValues = "sync, async")

-    lateinit var mode: String

-}

-

-open class CommonHeader {

-    @get:ApiModelProperty(required = true, example = "2012-04-23T18:25:43.511Z")

-    @get:JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")

-    var timestamp: Date = Date()

-    @get:ApiModelProperty(required = true)

-    lateinit var originatorId: String

-    @get:ApiModelProperty(required = true)

-    lateinit var requestId: String

-    @get:ApiModelProperty(required = true)

-    lateinit var subRequestId: String

-    @get:ApiModelProperty(required = false)

-    var flags: Flags? = null

-}

-

-open class Flags {

-    var isForce: Boolean = false

-    @get:ApiModelProperty(value = "3600")

-    var ttl: Int = 3600

-}

-

-open class Status {

-    @get:ApiModelProperty(required = true)

-    var code: Int = 200

-    @get:ApiModelProperty(required = true)

-    var eventType: String = "EVENT-ACTION-RESPONSE"

-    @get:ApiModelProperty(required = true, example = "2012-04-23T18:25:43.511Z")

-    @get:JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")

-    var timestamp: Date = Date()

-    @get:ApiModelProperty(required = false)

-    var errorMessage: String? = null

-    @get:ApiModelProperty(required = true)

-    var message: String = "success"

-}

-

-

-

-

-

+/*
+ *  Copyright © 2017-2018 AT&T Intellectual Property.
+ *  Modifications Copyright © 2018 IBM.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.onap.ccsdk.apps.blueprintsprocessor.core.api.data
+
+import com.fasterxml.jackson.annotation.JsonFormat
+import com.fasterxml.jackson.databind.node.ObjectNode
+import io.swagger.annotations.ApiModelProperty
+import java.util.*
+
+/**
+ * BlueprintProcessorData
+ * @author Brinda Santh
+ * DATE : 8/15/2018
+ */
+
+open class ExecutionServiceInput {
+    @get:ApiModelProperty(required = true)
+    lateinit var commonHeader: CommonHeader
+    @get:ApiModelProperty(required = true)
+    lateinit var actionIdentifiers: ActionIdentifiers
+    @get:ApiModelProperty(required = true)
+    lateinit var payload: ObjectNode
+}
+
+open class ExecutionServiceOutput {
+    @get:ApiModelProperty(required = true)
+    lateinit var commonHeader: CommonHeader
+    @get:ApiModelProperty(required = true)
+    lateinit var actionIdentifiers: ActionIdentifiers
+    @get:ApiModelProperty(required = true)
+    var status: Status = Status()
+    @get:ApiModelProperty(required = true)
+    lateinit var payload: ObjectNode
+}
+
+const val ACTION_MODE_ASYNC = "async"
+const val ACTION_MODE_SYNC = "sync"
+
+open class ActionIdentifiers {
+    @get:ApiModelProperty(required = false)
+    lateinit var blueprintName: String
+    @get:ApiModelProperty(required = false)
+    lateinit var blueprintVersion: String
+    @get:ApiModelProperty(required = true)
+    lateinit var actionName: String
+    @get:ApiModelProperty(required = true, allowableValues = "sync, async")
+    lateinit var mode: String
+}
+
+open class CommonHeader {
+    @get:ApiModelProperty(required = true, example = "2012-04-23T18:25:43.511Z")
+    @get:JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
+    var timestamp: Date = Date()
+    @get:ApiModelProperty(required = true)
+    lateinit var originatorId: String
+    @get:ApiModelProperty(required = true)
+    lateinit var requestId: String
+    @get:ApiModelProperty(required = true)
+    lateinit var subRequestId: String
+    @get:ApiModelProperty(required = false)
+    var flags: Flags? = null
+}
+
+open class Flags {
+    var isForce: Boolean = false
+    @get:ApiModelProperty(value = "3600")
+    var ttl: Int = 3600
+}
+
+open class Status {
+    @get:ApiModelProperty(required = true)
+    var code: Int = 200
+    @get:ApiModelProperty(required = true)
+    var eventType: String = "EVENT-ACTION-RESPONSE"
+    @get:ApiModelProperty(required = true, example = "2012-04-23T18:25:43.511Z")
+    @get:JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
+    var timestamp: Date = Date()
+    @get:ApiModelProperty(required = false)
+    var errorMessage: String? = null
+    @get:ApiModelProperty(required = true)
+    var message: String = "success"
+}
+
+open class BluePrintManagementInput {
+    @get:ApiModelProperty(required = true)
+    lateinit var commonHeader: CommonHeader
+    @get:ApiModelProperty(required = false)
+    lateinit var blueprintName: String
+    @get:ApiModelProperty(required = false)
+    lateinit var blueprintVersion: String
+    @get:ApiModelProperty(required = true)
+    lateinit var fileChunk: FileChunk
+}
+
+open class FileChunk {
+    @get:ApiModelProperty(required = true)
+    lateinit var chunk: ByteArray
+}
+
+open class BluePrintManagementOutput {
+    @get:ApiModelProperty(required = true)
+    lateinit var commonHeader: CommonHeader
+    @get:ApiModelProperty(required = true)
+    var status: Status = Status()
+}
+
+
+
diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/pom.xml b/ms/blueprintsprocessor/modules/commons/db-lib/pom.xml
index 53c9b18..590c87f 100644
--- a/ms/blueprintsprocessor/modules/commons/db-lib/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/db-lib/pom.xml
@@ -30,6 +30,10 @@
     <dependencies>
         <dependency>
             <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+            <artifactId>core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
             <artifactId>db-resources</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/BlueprintProcessorCatalogServiceImpl.kt b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/BlueprintProcessorCatalogServiceImpl.kt
index 89b7f64..dee7ae8 100755
--- a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/BlueprintProcessorCatalogServiceImpl.kt
+++ b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/BlueprintProcessorCatalogServiceImpl.kt
@@ -17,77 +17,98 @@
 
 package org.onap.ccsdk.apps.blueprintsprocessor.db
 
+import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintCoreConfiguration
 import org.onap.ccsdk.apps.blueprintsprocessor.db.primary.domain.BlueprintProcessorModel
 import org.onap.ccsdk.apps.blueprintsprocessor.db.primary.domain.BlueprintProcessorModelContent
-import org.onap.ccsdk.apps.blueprintsprocessor.db.primary.repository.BlueprintProcessorModelContentRepository
 import org.onap.ccsdk.apps.blueprintsprocessor.db.primary.repository.BlueprintProcessorModelRepository
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.common.ApplicationConstants
-import org.onap.ccsdk.apps.controllerblueprints.core.config.BluePrintLoadConfiguration
 import org.onap.ccsdk.apps.controllerblueprints.core.data.ErrorCode
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintValidatorService
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintArchiveUtils
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
 import org.onap.ccsdk.apps.controllerblueprints.db.resources.BlueprintCatalogServiceImpl
+import org.slf4j.LoggerFactory
 import org.springframework.dao.DataIntegrityViolationException
 import org.springframework.stereotype.Service
 import java.io.File
 import java.nio.file.Files
+import java.nio.file.Path
+import java.nio.file.Paths
 
 /**
-Similar/Duplicate implementation in [org.onap.ccsdk.apps.controllerblueprints.service.load.ControllerBlueprintCatalogServiceImpl]
+ * Similar/Duplicate implementation in [org.onap.ccsdk.apps.controllerblueprints.service.load.ControllerBlueprintCatalogServiceImpl]
  */
 @Service
-class BlueprintProcessorCatalogServiceImpl(bluePrintLoadConfiguration: BluePrintLoadConfiguration,
-                                           private val bluePrintValidatorService: BluePrintValidatorService,
+class BlueprintProcessorCatalogServiceImpl(bluePrintValidatorService: BluePrintValidatorService,
+                                           private val blueprintConfig: BluePrintCoreConfiguration,
                                            private val blueprintModelRepository: BlueprintProcessorModelRepository)
-    : BlueprintCatalogServiceImpl(bluePrintLoadConfiguration) {
+    : BlueprintCatalogServiceImpl(bluePrintValidatorService) {
 
-    override fun saveToDataBase(extractedDirectory: File, id: String, archiveFile: File, checkValidity: Boolean?) {
-        var valid = false
-        val firstItem = BluePrintArchiveUtils.getFirstItemInDirectory(extractedDirectory)
-        val blueprintBaseDirectory = extractedDirectory.absolutePath + "/" + firstItem
-        // Validate Blueprint
-        val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime(id, blueprintBaseDirectory)
+    private val log = LoggerFactory.getLogger(BlueprintProcessorCatalogServiceImpl::class.toString())
 
-        // Check Validity of blueprint
-        if (checkValidity!!) {
-            valid = bluePrintValidatorService.validateBluePrints(bluePrintRuntimeService)
+    init {
+
+        log.info("BlueprintProcessorCatalogServiceImpl initialized")
+    }
+
+    override fun delete(name: String, version: String) = blueprintModelRepository.deleteByArtifactNameAndArtifactVersion(name, version)
+
+
+    override fun get(name: String, version: String, extract: Boolean): Path? {
+        var path = "${blueprintConfig.archivePath}/$name/$version.zip"
+
+        blueprintModelRepository.findByArtifactNameAndArtifactVersion(name, version)?.also {
+            it.blueprintModelContent.run {
+                val file = File(path)
+                file.parentFile.mkdirs()
+                file.createNewFile()
+                file.writeBytes(this!!.content!!).let {
+                    if (extract) {
+                        path = "${blueprintConfig.archivePath}/$name/$version"
+                        BluePrintArchiveUtils.deCompress(file, path)
+                    }
+                    return Paths.get(path)
+                }
+            }
+        }
+        return null
+    }
+
+    override fun save(metadata: MutableMap<String, String>, archiveFile: File) {
+        val artifactName = metadata[BluePrintConstants.METADATA_TEMPLATE_NAME]
+        val artifactVersion = metadata[BluePrintConstants.METADATA_TEMPLATE_VERSION]
+
+        log.isDebugEnabled.apply {
+            blueprintModelRepository.findByArtifactNameAndArtifactVersion(artifactName!!, artifactVersion!!)?.let {
+                log.debug("Overwriting blueprint model :$artifactName::$artifactVersion")
+            }
         }
 
-        if ((valid && checkValidity!!) || (!valid && !checkValidity!!)) {
-            val metaData = bluePrintRuntimeService.bluePrintContext().metadata!!
-            // FIXME("Check Duplicate for Artifact Name and Artifact Version")
-            val blueprintModel = BlueprintProcessorModel()
-            blueprintModel.id = id
-            blueprintModel.artifactType = ApplicationConstants.ASDC_ARTIFACT_TYPE_SDNC_MODEL
-            blueprintModel.published = ApplicationConstants.ACTIVE_N
-            blueprintModel.artifactName = metaData[BluePrintConstants.METADATA_TEMPLATE_NAME]
-            blueprintModel.artifactVersion = metaData[BluePrintConstants.METADATA_TEMPLATE_VERSION]
-            blueprintModel.updatedBy = metaData[BluePrintConstants.METADATA_TEMPLATE_AUTHOR]
-            blueprintModel.tags = metaData[BluePrintConstants.METADATA_TEMPLATE_TAGS]
-            blueprintModel.artifactDescription = "Controller Blueprint for ${blueprintModel.artifactName}:${blueprintModel.artifactVersion}"
+        val blueprintModel = BlueprintProcessorModel()
+        blueprintModel.id = metadata[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID]
+        blueprintModel.artifactType = ApplicationConstants.ASDC_ARTIFACT_TYPE_SDNC_MODEL
+        blueprintModel.artifactName = artifactName
+        blueprintModel.artifactVersion = artifactVersion
+        blueprintModel.updatedBy = metadata[BluePrintConstants.METADATA_TEMPLATE_AUTHOR]
+        blueprintModel.tags = metadata[BluePrintConstants.METADATA_TEMPLATE_TAGS]
+        blueprintModel.artifactDescription = "Controller Blueprint for $artifactName:$artifactVersion"
 
-            val blueprintModelContent = BlueprintProcessorModelContent()
-            blueprintModelContent.id = id // For quick access both id's are same.always have one to one mapping.
-            blueprintModelContent.contentType = "CBA_ZIP"
-            blueprintModelContent.name = "${blueprintModel.artifactName}:${blueprintModel.artifactVersion}"
-            blueprintModelContent.description = "(${blueprintModel.artifactName}:${blueprintModel.artifactVersion} CBA Zip Content"
-            blueprintModelContent.content = Files.readAllBytes(archiveFile.toPath())
+        val blueprintModelContent = BlueprintProcessorModelContent()
+        blueprintModelContent.id = metadata[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID]
+        blueprintModelContent.contentType = "CBA_ZIP"
+        blueprintModelContent.name = "$artifactName:$artifactVersion"
+        blueprintModelContent.description = "$artifactName:$artifactVersion CBA Zip Content"
+        blueprintModelContent.content = Files.readAllBytes(archiveFile.toPath())
+        blueprintModelContent.blueprintModel = blueprintModel
 
-            // Set the Blueprint Model into blueprintModelContent
-            blueprintModelContent.blueprintModel = blueprintModel
+        blueprintModel.blueprintModelContent = blueprintModelContent
 
-            // Set the Blueprint Model Content into blueprintModel
-            blueprintModel.blueprintModelContent = blueprintModelContent
-
-            try {
-                blueprintModelRepository.saveAndFlush(blueprintModel)
-            } catch (ex: DataIntegrityViolationException) {
-                throw BluePrintException(ErrorCode.CONFLICT_ADDING_RESOURCE.value, "The blueprint entry " +
-                        "is already exist in database: ${ex.message}", ex)
-            }
+        try {
+            blueprintModelRepository.saveAndFlush(blueprintModel)
+        } catch (ex: DataIntegrityViolationException) {
+            throw BluePrintException(ErrorCode.CONFLICT_ADDING_RESOURCE.value, "The blueprint entry " +
+                    "is already exist in database: ${ex.message}", ex)
         }
     }
 }
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/primary/domain/BlueprintProcessorModel.kt b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/primary/domain/BlueprintProcessorModel.kt
index 00d4830..0935d03 100755
--- a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/primary/domain/BlueprintProcessorModel.kt
+++ b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/primary/domain/BlueprintProcessorModel.kt
@@ -40,12 +40,10 @@
 @Table(name = "BLUEPRINT_RUNTIME")
 @Proxy(lazy = false)
 class BlueprintProcessorModel : Serializable {
-    @Id
-    @Column(name = "config_model_id")
-    var id: String? = null
 
-    @Column(name = "artifact_uuid")
-    var artifactUUId: String? = null
+    @Id
+    @Column(name = "blueprint_runtime_id")
+    var id: String? = null
 
     @Column(name = "artifact_type")
     var artifactType: String? = null
@@ -58,9 +56,6 @@
     @Column(name = "artifact_description")
     var artifactDescription: String? = null
 
-    @Column(name = "internal_version")
-    var internalVersion: Int? = null
-
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
     @LastModifiedDate
     @Temporal(TemporalType.TIMESTAMP)
@@ -71,10 +66,6 @@
     @ApiModelProperty(required = true)
     var artifactName: String? = null
 
-    @Column(name = "published", nullable = false)
-    @ApiModelProperty(required = true)
-    var published: String? = null
-
     @Column(name = "updated_by", nullable = false)
     @ApiModelProperty(required = true)
     var updatedBy: String? = null
@@ -90,4 +81,4 @@
     companion object {
         private const val serialVersionUID = 1L
     }
-}
\ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/primary/domain/BlueprintProcessorModelContent.kt b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/primary/domain/BlueprintProcessorModelContent.kt
index d012af5..58bf8a3 100644
--- a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/primary/domain/BlueprintProcessorModelContent.kt
+++ b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/primary/domain/BlueprintProcessorModelContent.kt
@@ -40,7 +40,7 @@
 class BlueprintProcessorModelContent : Serializable {
 
     @Id
-    @Column(name = "config_model_content_id")
+    @Column(name = "blueprint_content_runtime_id")
     var id: String? = null
 
     @Column(name = "name", nullable = false)
@@ -52,7 +52,7 @@
     var contentType: String? = null
 
     @OneToOne
-    @JoinColumn(name = "config_model_id")
+    @JoinColumn(name = "blueprint_runtime_id")
     var blueprintModel: BlueprintProcessorModel? = null
 
     @Lob
@@ -98,4 +98,4 @@
         private const val serialVersionUID = 1L
     }
 
-}
\ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/BlueprintProcessorCatalogServiceImplTest.kt b/ms/blueprintsprocessor/modules/commons/db-lib/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/BlueprintProcessorCatalogServiceImplTest.kt
new file mode 100644
index 0000000..4c95316
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/db-lib/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/db/BlueprintProcessorCatalogServiceImplTest.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2019 Bell Canada.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.ccsdk.apps.blueprintsprocessor.db
+
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintCatalogService
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration
+import org.springframework.context.annotation.ComponentScan
+import org.springframework.test.context.TestPropertySource
+import org.springframework.test.context.junit4.SpringRunner
+import java.io.File
+import java.nio.file.Paths
+import kotlin.test.assertTrue
+
+@RunWith(SpringRunner::class)
+@EnableAutoConfiguration
+@ComponentScan(basePackages = ["org.onap.ccsdk.apps.blueprintsprocessor", "org.onap.ccsdk.apps.controllerblueprints"])
+@TestPropertySource(locations = ["classpath:application-test.properties"])
+class BlueprintProcessorCatalogServiceImplTest {
+
+    @Autowired
+    lateinit var blueprintCatalog: BluePrintCatalogService
+
+    @Test
+    fun `test catalog service`() {
+        val file = Paths.get("./src/test/resources/test-cba.zip").toFile()
+        assertTrue(file.exists(), "couldnt get file ${file.absolutePath}")
+
+        blueprintCatalog.saveToDatabase(file)
+
+        blueprintCatalog.getFromDatabase("baseconfiguration", "1.0.0")
+
+        blueprintCatalog.deleteFromDatabase("baseconfiguration", "1.0.0")
+
+        File("./src/test/resources/baseconfiguration").deleteRecursively()
+    }
+}
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/src/test/resources/application-test.properties b/ms/blueprintsprocessor/modules/commons/db-lib/src/test/resources/application-test.properties
index 6f10626..3ac7ec3 100644
--- a/ms/blueprintsprocessor/modules/commons/db-lib/src/test/resources/application-test.properties
+++ b/ms/blueprintsprocessor/modules/commons/db-lib/src/test/resources/application-test.properties
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-blueprintsprocessor.db.primary.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
+blueprintsprocessor.db.primary.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
 blueprintsprocessor.db.primary.username=sa
 blueprintsprocessor.db.primary.password=
 blueprintsprocessor.db.primary.driverClassName=org.h2.Driver
@@ -22,7 +22,6 @@
 blueprintsprocessor.db.primary.hibernateDDLAuto=update
 blueprintsprocessor.db.primary.hibernateNamingStrategy=org.hibernate.cfg.ImprovedNamingStrategy
 blueprintsprocessor.db.primary.hibernateDialect=org.hibernate.dialect.H2Dialect
-
 # Controller Blueprints Core Configuration
 blueprintsprocessor.blueprintDeployPath=./target/blueprints/deploy
-blueprintsprocessor.blueprintArchivePath=./target/blueprints/archive
\ No newline at end of file
+blueprintsprocessor.blueprintArchivePath=./target/blueprints/archive
diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/src/test/resources/test-cba.zip b/ms/blueprintsprocessor/modules/commons/db-lib/src/test/resources/test-cba.zip
new file mode 100644
index 0000000..a62d4bf
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/db-lib/src/test/resources/test-cba.zip
Binary files differ
diff --git a/ms/blueprintsprocessor/modules/commons/pom.xml b/ms/blueprintsprocessor/modules/commons/pom.xml
old mode 100644
new mode 100755
index 4df8985..8d900a8
--- a/ms/blueprintsprocessor/modules/commons/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/pom.xml
@@ -2,6 +2,8 @@
 <!--
   ~  Copyright © 2017-2018 AT&T Intellectual Property.
   ~
+  ~  Modifications Copyright © 2019 Bell Canada.
+  ~
   ~  Licensed under the Apache License, Version 2.0 (the "License");
   ~  you may not use this file except in compliance with the License.
   ~  You may obtain a copy of the License at
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/pom.xml b/ms/blueprintsprocessor/modules/commons/rest-lib/pom.xml
index 82e8cd7..773746b 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/pom.xml
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/pom.xml
@@ -28,6 +28,10 @@
     <description>Blueprints Processor Rest Lib</description>
     <dependencies>
         <dependency>
+            <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+            <artifactId>core</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
             <artifactId>core</artifactId>
         </dependency>
diff --git a/ms/blueprintsprocessor/modules/inbounds/resource-api/pom.xml b/ms/blueprintsprocessor/modules/inbounds/resource-api/pom.xml
index 6395963..dcf42c2 100644
--- a/ms/blueprintsprocessor/modules/inbounds/resource-api/pom.xml
+++ b/ms/blueprintsprocessor/modules/inbounds/resource-api/pom.xml
@@ -15,16 +15,16 @@
   ~  limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
-		<artifactId>inbounds</artifactId>
-		<version>0.4.1-SNAPSHOT</version>
-	</parent>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
+        <artifactId>inbounds</artifactId>
+        <version>0.4.1-SNAPSHOT</version>
+    </parent>
 
-	<artifactId>resource-api</artifactId>
-	<packaging>jar</packaging>
-	<name>Blueprints Processor Resource API</name>
-	<description>Blueprints Processor Resource API</description>
+    <artifactId>resource-api</artifactId>
+    <packaging>jar</packaging>
+    <name>Blueprints Processor Resource API</name>
+    <description>Blueprints Processor Resource API</description>
 
 </project>
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/pom.xml b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/pom.xml
old mode 100644
new mode 100755
index db6fdd2..818adf9
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/pom.xml
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/pom.xml
@@ -2,6 +2,8 @@
 <!--
   ~  Copyright © 2017-2018 AT&T Intellectual Property.
   ~
+  ~  Modifications Copyright © 2019 Bell Canada.
+  ~
   ~  Licensed under the Apache License, Version 2.0 (the "License");
   ~  you may not use this file except in compliance with the License.
   ~  You may obtain a copy of the License at
@@ -14,7 +16,8 @@
   ~  See the License for the specific language governing permissions and
   ~  limitations under the License.
   -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
@@ -29,44 +32,24 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.onap.ccsdk.apps.components</groupId>
+            <artifactId>proto-definition</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+            <version>${project.version}</version>
+            <artifactId>core</artifactId>
+        </dependency>
+        <dependency>
             <groupId>io.grpc</groupId>
             <artifactId>grpc-testing</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
-    <build>
-        <extensions>
-            <extension>
-                <groupId>kr.motd.maven</groupId>
-                <artifactId>os-maven-plugin</artifactId>
-                <version>1.6.1</version>
-            </extension>
-        </extensions>
-        <plugins>
-            <plugin>
-                <groupId>org.xolstice.maven.plugins</groupId>
-                <artifactId>protobuf-maven-plugin</artifactId>
-                <version>0.6.1</version>
-                <configuration>
-                    <protocArtifact>
-                        com.google.protobuf:protoc:3.5.1-1:exe:${os.detected.classifier}
-                    </protocArtifact>
-                    <pluginId>grpc-java</pluginId>
-                    <pluginArtifact>
-                        io.grpc:protoc-gen-grpc-java:1.16.1:exe:${os.detected.classifier}
-                    </pluginArtifact>
-                    <protoSourceRoot>./../../../../../components/model-catalog/api-definition</protoSourceRoot>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>compile</goal>
-                            <goal>compile-custom</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintManagementGRPCHandler.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintManagementGRPCHandler.kt
index 17191f3..fb0bc56 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintManagementGRPCHandler.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintManagementGRPCHandler.kt
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2019 Bell Canada.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,48 +17,96 @@
 
 package org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api
 
+import io.grpc.StatusException
 import io.grpc.stub.StreamObserver
-import org.apache.commons.io.FileUtils
 import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintCoreConfiguration
-import org.onap.ccsdk.apps.controllerblueprints.management.api.*
+import org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.utils.currentTimestamp
+import org.onap.ccsdk.apps.controllerblueprints.common.api.CommonHeader
+import org.onap.ccsdk.apps.controllerblueprints.common.api.Status
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintCatalogService
+import org.onap.ccsdk.apps.controllerblueprints.management.api.BluePrintManagementInput
+import org.onap.ccsdk.apps.controllerblueprints.management.api.BluePrintManagementOutput
+import org.onap.ccsdk.apps.controllerblueprints.management.api.BluePrintManagementServiceGrpc
 import org.slf4j.LoggerFactory
 import org.springframework.stereotype.Service
 import java.io.File
 
 @Service
-class BluePrintManagementGRPCHandler(private val bluePrintCoreConfiguration: BluePrintCoreConfiguration)
+class BluePrintManagementGRPCHandler(private val bluePrintCoreConfiguration: BluePrintCoreConfiguration,
+                                     private val bluePrintCatalogService: BluePrintCatalogService)
     : BluePrintManagementServiceGrpc.BluePrintManagementServiceImplBase() {
 
     private val log = LoggerFactory.getLogger(BluePrintManagementGRPCHandler::class.java)
 
-    override fun uploadBlueprint(request: BluePrintUploadInput, responseObserver: StreamObserver<BluePrintUploadOutput>) {
-        val response = BluePrintUploadOutput.newBuilder().setCommonHeader(request.commonHeader).build()
+    override fun uploadBlueprint(request: BluePrintManagementInput, responseObserver: StreamObserver<BluePrintManagementOutput>) {
+        val blueprintName = request.blueprintName
+        val blueprintVersion = request.blueprintVersion
+        val blueprint = "blueprint $blueprintName:$blueprintVersion"
+
+        log.info("request(${request.commonHeader.requestId}): Received upload $blueprint")
+
+        val blueprintArchivedFilePath = "${bluePrintCoreConfiguration.archivePath}/$blueprintName/$blueprintVersion/$blueprintName.zip"
         try {
-            val blueprintName = request.blueprintName
-            val blueprintVersion = request.blueprintVersion
-            val filePath = "${bluePrintCoreConfiguration.archivePath}/$blueprintName/$blueprintVersion"
-            val blueprintDir = File(filePath)
+            val blueprintArchivedFile = File(blueprintArchivedFilePath)
 
-            log.info("Re-creating blueprint directory(${blueprintDir.absolutePath})")
-            FileUtils.deleteDirectory(blueprintDir)
-            FileUtils.forceMkdir(blueprintDir)
+            saveToDisk(request, blueprintArchivedFile)
+            val blueprintId = bluePrintCatalogService.saveToDatabase(blueprintArchivedFile)
 
-            val file = File("${blueprintDir.absolutePath}/$blueprintName.zip")
-            log.info("Writing CBA File under :${file.absolutePath}")
+            File("${bluePrintCoreConfiguration.archivePath}/$blueprintName").deleteRecursively()
 
-            val fileChunk = request.fileChunk
-
-            file.writeBytes(fileChunk.chunk.toByteArray()).apply {
-                log.info("CBA file(${file.absolutePath} written successfully")
-            }
+            responseObserver.onNext(successStatus("Successfully uploaded $blueprint with id($blueprintId)", request.commonHeader))
+            responseObserver.onCompleted()
         } catch (e: Exception) {
-            log.error("failed to upload file ", e)
+            failStatus("request(${request.commonHeader.requestId}): Failed to upload $blueprint at path $blueprintArchivedFilePath", e)
         }
-        responseObserver.onNext(response)
-        responseObserver.onCompleted()
     }
 
-    override fun removeBlueprint(request: BluePrintRemoveInput?, responseObserver: StreamObserver<BluePrintRemoveOutput>?) {
-        //TODO
+    override fun removeBlueprint(request: BluePrintManagementInput, responseObserver: StreamObserver<BluePrintManagementOutput>) {
+        val blueprintName = request.blueprintName
+        val blueprintVersion = request.blueprintVersion
+        val blueprint = "blueprint $blueprintName:$blueprintVersion"
+
+        log.info("request(${request.commonHeader.requestId}): Received delete $blueprint")
+
+        try {
+            bluePrintCatalogService.deleteFromDatabase(blueprintName, blueprintVersion)
+            responseObserver.onNext(successStatus("Successfully deleted $blueprint", request.commonHeader))
+            responseObserver.onCompleted()
+        } catch (e: Exception) {
+            failStatus("request(${request.commonHeader.requestId}): Failed to delete $blueprint", e)
+        }
     }
-}
\ No newline at end of file
+
+    private fun saveToDisk(request: BluePrintManagementInput, blueprintDir: File) {
+        log.info("request(${request.commonHeader.requestId}): Writing CBA File under :${blueprintDir.absolutePath}")
+        if (blueprintDir.exists()) {
+            log.info("request(${request.commonHeader.requestId}): Re-creating blueprint directory(${blueprintDir.absolutePath})")
+            //FileUtils.deleteDirectory(blueprintDir.parentFile)
+            blueprintDir.parentFile.deleteRecursively()
+        }
+        blueprintDir.parentFile.mkdirs()
+        //FileUtils.forceMkdir(blueprintDir.parentFile)
+        blueprintDir.writeBytes(request.fileChunk.chunk.toByteArray()).apply {
+            log.info("request(${request.commonHeader.requestId}): CBA file(${blueprintDir.absolutePath} written successfully")
+        }
+
+    }
+
+    private fun successStatus(message: String, header: CommonHeader): BluePrintManagementOutput =
+            BluePrintManagementOutput.newBuilder()
+                    .setCommonHeader(header)
+                    .setStatus(Status.newBuilder()
+                            .setTimestamp(currentTimestamp())
+                            .setMessage(message)
+                            .setCode(200)
+                            .build())
+                    .build()
+
+    private fun failStatus(message: String, e: Exception): StatusException {
+        log.error(message, e)
+        return io.grpc.Status.INTERNAL
+                .withDescription(message)
+                .withCause(e)
+                .asException()
+    }
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintProcessingGRPCHandler.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintProcessingGRPCHandler.kt
index 0668d3c..453306d 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintProcessingGRPCHandler.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintProcessingGRPCHandler.kt
@@ -16,9 +16,10 @@
 
 package org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api
 
-import com.google.protobuf.util.JsonFormat
 import io.grpc.stub.StreamObserver
 import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintCoreConfiguration
+import org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.utils.toJava
+import org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.utils.toProto
 import org.onap.ccsdk.apps.controllerblueprints.processing.api.BluePrintProcessingServiceGrpc
 import org.onap.ccsdk.apps.controllerblueprints.processing.api.ExecutionServiceInput
 import org.onap.ccsdk.apps.controllerblueprints.processing.api.ExecutionServiceOutput
@@ -31,14 +32,29 @@
     : BluePrintProcessingServiceGrpc.BluePrintProcessingServiceImplBase() {
     private val log = LoggerFactory.getLogger(BluePrintProcessingGRPCHandler::class.java)
 
-    override fun process(request: ExecutionServiceInput,
-                         responseObserver: StreamObserver<ExecutionServiceOutput>) {
+    override fun process(responseObserver: StreamObserver<ExecutionServiceOutput>?): StreamObserver<ExecutionServiceInput> {
 
-        //val json = JsonFormat.printer().print(request)
-        //log.info("Received GRPC request ${json}")
-        //TODO( Handle Processing Response")
-        val response = ExecutionServiceOutput.newBuilder().setCommonHeader(request.commonHeader).build()
-        responseObserver.onNext(response)
-        responseObserver.onCompleted()
+        return object : StreamObserver<ExecutionServiceInput> {
+            override fun onNext(executionServiceInput: ExecutionServiceInput) {
+                try {
+                    val output = executionServiceHandler.process(executionServiceInput.toJava())
+                            .toProto(executionServiceInput.payload)
+                    responseObserver?.onNext(output)
+                } catch (e: Exception) {
+                    onError(e)
+                }
+            }
+
+            override fun onError(error: Throwable) {
+                log.debug("Fail to process message", error)
+                responseObserver?.onError(io.grpc.Status.INTERNAL
+                        .withDescription(error.message)
+                        .asException())
+            }
+
+            override fun onCompleted() {
+                responseObserver?.onCompleted()
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceController.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceController.kt
index 0a67e87..e4734c4 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceController.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceController.kt
@@ -21,7 +21,14 @@
 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceOutput
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
-import org.springframework.web.bind.annotation.*
+import org.springframework.http.codec.multipart.FilePart
+import org.springframework.web.bind.annotation.PostMapping
+import org.springframework.web.bind.annotation.RequestBody
+import org.springframework.web.bind.annotation.RequestMapping
+import org.springframework.web.bind.annotation.RequestMethod
+import org.springframework.web.bind.annotation.RequestPart
+import org.springframework.web.bind.annotation.ResponseBody
+import org.springframework.web.bind.annotation.RestController
 import reactor.core.publisher.Mono
 
 @RestController
@@ -31,18 +38,26 @@
     @Autowired
     lateinit var executionServiceHandler: ExecutionServiceHandler
 
-
-    @RequestMapping(path = arrayOf("/ping"), method = arrayOf(RequestMethod.GET), produces = arrayOf(MediaType.APPLICATION_JSON_VALUE))
+    @RequestMapping(path = ["/ping"], method = [RequestMethod.GET], produces = [MediaType.APPLICATION_JSON_VALUE])
     @ResponseBody
     fun ping(): Mono<String> {
         return Mono.just("Success")
     }
 
-    @RequestMapping(path = arrayOf("/process"), method = arrayOf(RequestMethod.POST), produces = arrayOf(MediaType.APPLICATION_JSON_VALUE))
+    @PostMapping(path = ["/upload"], consumes = [MediaType.MULTIPART_FORM_DATA_VALUE])
+    @ApiOperation(value = "Upload CBA", notes = "Takes a File and load it in the runtime database")
+    @ResponseBody
+    fun upload(@RequestPart("file") parts: Mono<FilePart>): Mono<String> {
+        return parts
+                .filter { it is FilePart }
+                .ofType(FilePart::class.java)
+                .flatMap(executionServiceHandler::upload)
+    }
+
+    @RequestMapping(path = ["/process"], method = [RequestMethod.POST], produces = [MediaType.APPLICATION_JSON_VALUE])
     @ApiOperation(value = "Resolve Resource Mappings", notes = "Takes the blueprint information and process as per the payload")
     @ResponseBody
-    fun process(@RequestBody executionServiceInput: ExecutionServiceInput): Mono<ExecutionServiceOutput> {
-        val executionServiceOutput = executionServiceHandler.process(executionServiceInput)
-        return Mono.just(executionServiceOutput)
+    fun process(@RequestBody executionServiceInput: ExecutionServiceInput): ExecutionServiceOutput {
+        return executionServiceHandler.process(executionServiceInput)
     }
 }
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt
index 69758ec..ec605c1 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt
@@ -16,22 +16,61 @@
 
 package org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api
 
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintCoreConfiguration
+import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ACTION_MODE_ASYNC
+import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ACTION_MODE_SYNC
 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceInput
 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceOutput
-import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintCatalogService
+import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.Status
+import org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.utils.saveCBAFile
 import org.onap.ccsdk.apps.blueprintsprocessor.services.workflow.BlueprintDGExecutionService
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintCatalogService
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintFileUtils
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
 import org.slf4j.LoggerFactory
+import org.springframework.http.codec.multipart.FilePart
 import org.springframework.stereotype.Service
+import reactor.core.publisher.Mono
 
 @Service
-class ExecutionServiceHandler(private val bluePrintCatalogService: BluePrintCatalogService,
+class ExecutionServiceHandler(private val bluePrintCoreConfiguration: BluePrintCoreConfiguration,
+                              private val bluePrintCatalogService: BluePrintCatalogService,
                               private val blueprintDGExecutionService: BlueprintDGExecutionService) {
 
     private val log = LoggerFactory.getLogger(ExecutionServiceHandler::class.toString())
 
-    fun process(executionServiceInput: ExecutionServiceInput): ExecutionServiceOutput {
+    fun upload(filePart: FilePart): Mono<String> {
+        try {
+            val archivedPath = BluePrintFileUtils.getCbaStorageDirectory(bluePrintCoreConfiguration.archivePath)
+            val cbaPath = saveCBAFile(filePart, archivedPath)
+            bluePrintCatalogService.saveToDatabase(cbaPath.toFile()).let {
+                return Mono.just("{\"status\": \"Successfully uploaded blueprint with id($it)\"}")
+            }
+        } catch (e: Exception) {
+            return Mono.error<String>(BluePrintException("Error uploading the CBA file.", e))
+        }
+    }
 
+    fun process(executionServiceInput: ExecutionServiceInput): ExecutionServiceOutput {
+        return when {
+            executionServiceInput.actionIdentifiers.mode == ACTION_MODE_ASYNC -> {
+                GlobalScope.launch(Dispatchers.Default) {
+                    // TODO post result in DMaaP
+                    val executionServiceOutput = doProcess(executionServiceInput)
+                }
+                response(executionServiceInput)
+            }
+            executionServiceInput.actionIdentifiers.mode == ACTION_MODE_SYNC -> doProcess(executionServiceInput)
+            else -> response(executionServiceInput, "Failed to process request, 'actionIdentifiers.mode' not specified. Valid value are: 'sync' or 'async'.", true)
+        }
+    }
+
+    private fun doProcess(executionServiceInput: ExecutionServiceInput): ExecutionServiceOutput {
         val requestId = executionServiceInput.commonHeader.requestId
         log.info("processing request id $requestId")
 
@@ -40,13 +79,34 @@
         val blueprintName = actionIdentifiers.blueprintName
         val blueprintVersion = actionIdentifiers.blueprintVersion
 
-        val basePath = bluePrintCatalogService.prepareBluePrint(blueprintName, blueprintVersion)
+        val basePath = bluePrintCatalogService.getFromDatabase(blueprintName, blueprintVersion)
         log.info("blueprint base path $basePath")
 
-        val blueprintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime(requestId, basePath)
+        val blueprintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime(requestId, basePath.toString())
 
         return blueprintDGExecutionService.executeDirectedGraph(blueprintRuntimeService, executionServiceInput)
     }
 
+    fun response(executionServiceInput: ExecutionServiceInput, errorMessage: String = "", failure: Boolean = false): ExecutionServiceOutput {
+        val executionServiceOutput = ExecutionServiceOutput()
+        executionServiceOutput.commonHeader = executionServiceInput.commonHeader
+        executionServiceOutput.actionIdentifiers = executionServiceInput.actionIdentifiers
+        executionServiceOutput.payload = executionServiceInput.payload
 
+        val status = Status()
+        status.errorMessage = errorMessage
+        if (failure) {
+            status.eventType = "EVENT-COMPONENT-FAILURE"
+            status.code = 500
+            status.message = BluePrintConstants.STATUS_FAILURE
+        } else {
+            status.eventType = "EVENT-COMPONENT-PROCESSING"
+            status.code = 200
+            status.message = BluePrintConstants.STATUS_PROCESSING
+        }
+
+        executionServiceOutput.status = status
+
+        return executionServiceOutput
+    }
 }
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/utils/BluePrintMappings.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/utils/BluePrintMappings.kt
new file mode 100644
index 0000000..220a6fd
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/utils/BluePrintMappings.kt
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2019 Bell Canada.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.utils
+
+import com.fasterxml.jackson.databind.node.JsonNodeFactory
+import com.fasterxml.jackson.databind.node.ObjectNode
+import com.google.common.base.Strings
+import com.google.protobuf.Struct
+import com.google.protobuf.Value
+import org.onap.ccsdk.apps.controllerblueprints.common.api.ActionIdentifiers
+import org.onap.ccsdk.apps.controllerblueprints.common.api.CommonHeader
+import org.onap.ccsdk.apps.controllerblueprints.common.api.Flag
+import org.onap.ccsdk.apps.controllerblueprints.common.api.Status
+import org.onap.ccsdk.apps.controllerblueprints.processing.api.ExecutionServiceInput
+import org.onap.ccsdk.apps.controllerblueprints.processing.api.ExecutionServiceOutput
+import java.text.SimpleDateFormat
+import java.util.*
+
+private val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
+
+// STRUCT
+
+fun Struct.toJava(): ObjectNode {
+    val objectNode = JsonNodeFactory.instance.objectNode()
+    return getNode(objectNode)
+}
+
+fun Struct.getNode(objectNode: ObjectNode): ObjectNode {
+    this.fieldsMap.forEach {
+        when (it.value.kindCase.name) {
+            "BOOL_VALUE" -> objectNode.put(it.key, it.value.boolValue)
+            "KIND_NOT_SET" -> objectNode.put(it.key, it.value.toByteArray())
+            "LIST_VALUE" -> {
+                val arrayNode = JsonNodeFactory.instance.arrayNode()
+                it.value.listValue.valuesList.forEach { arrayNode.addPOJO(it.getValue()) }
+                objectNode.put(it.key, arrayNode)
+            }
+            "NULL_VALUE" -> objectNode.put(it.key, JsonNodeFactory.instance.nullNode())
+            "NUMBER_VALUE" -> objectNode.put(it.key, it.value.numberValue)
+            "STRING_VALUE" -> objectNode.put(it.key, it.value.stringValue)
+            "STRUCT_VALUE" -> objectNode.put(it.key, it.value.structValue.getNode(JsonNodeFactory.instance.objectNode()))
+        }
+    }
+    return objectNode
+}
+
+fun Value.getValue(): Any {
+    return when (this.kindCase.name) {
+        "BOOL_VALUE" -> this.boolValue
+        "KIND_NOT_SET" -> this.toByteArray()
+        "LIST_VALUE" -> listOf(this.listValue.valuesList.forEach { it.getValue() })
+        "NULL_VALUE" -> JsonNodeFactory.instance.nullNode()
+        "NUMBER_VALUE" -> this.numberValue
+        "STRING_VALUE" -> this.stringValue
+        "STRUCT_VALUE" -> this.structValue.getNode(JsonNodeFactory.instance.objectNode())
+        else -> {
+            "undefined"
+        }
+    }
+}
+
+// ACTION IDENTIFIER
+
+fun org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ActionIdentifiers.toProto(): ActionIdentifiers {
+    val actionIdentifier = ActionIdentifiers.newBuilder()
+    actionIdentifier.actionName = this.actionName
+    actionIdentifier.blueprintName = this.blueprintName
+    actionIdentifier.blueprintVersion = this.blueprintVersion
+    actionIdentifier.mode = this.mode
+    return actionIdentifier.build()
+}
+
+fun ActionIdentifiers.toJava(): org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ActionIdentifiers {
+    val actionIdentifier = org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ActionIdentifiers()
+    actionIdentifier.actionName = this.actionName
+    actionIdentifier.blueprintName = this.blueprintName
+    actionIdentifier.blueprintVersion = this.blueprintVersion
+    actionIdentifier.mode = this.mode
+    return actionIdentifier
+}
+
+// COMMON HEADER
+
+fun org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.CommonHeader.toProto(): CommonHeader {
+    val commonHeader = CommonHeader.newBuilder()
+    commonHeader.originatorId = this.originatorId
+    commonHeader.requestId = this.requestId
+    commonHeader.subRequestId = this.subRequestId
+    commonHeader.timestamp = this.timestamp.toString()
+    commonHeader.flag = this.flags?.toProto()
+    return commonHeader.build()
+}
+
+fun CommonHeader.toJava(): org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.CommonHeader {
+    val commonHeader = org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.CommonHeader()
+    commonHeader.originatorId = this.originatorId
+    commonHeader.requestId = this.requestId
+    commonHeader.subRequestId = this.subRequestId
+    commonHeader.timestamp = if (!Strings.isNullOrEmpty(this.timestamp)) {
+        formatter.parse(this.timestamp)
+    } else {
+        Date()
+    }
+    commonHeader.flags = this.flag?.toJava()
+    return commonHeader
+}
+
+// FLAG
+
+fun org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.Flags.toProto(): Flag {
+    val flag = Flag.newBuilder()
+    flag.isForce = this.isForce
+    flag.ttl = this.ttl
+    return flag.build()
+}
+
+fun Flag.toJava(): org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.Flags {
+    val flag = org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.Flags()
+    flag.isForce = this.isForce
+    flag.ttl = this.ttl
+    return flag
+}
+
+// STATUS
+
+fun org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.Status.toProto(): Status {
+    val status = Status.newBuilder()
+    status.code = this.code
+    status.errorMessage = this.errorMessage
+    status.message = this.message
+    status.timestamp = this.timestamp.toString()
+    status.eventType = this.eventType
+    return status.build()
+}
+
+// EXECUTION INPUT
+
+fun ExecutionServiceInput.toJava(): org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceInput {
+    val executionServiceInput = org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceInput()
+    executionServiceInput.actionIdentifiers = this.actionIdentifiers.toJava()
+    executionServiceInput.commonHeader = this.commonHeader.toJava()
+    executionServiceInput.payload = this.payload.toJava()
+    return executionServiceInput
+}
+
+// EXECUTION OUPUT
+
+fun org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceOutput.toProto(payload: Struct): ExecutionServiceOutput {
+    val executionServiceOuput = ExecutionServiceOutput.newBuilder()
+    executionServiceOuput.actionIdentifiers = this.actionIdentifiers.toProto()
+    executionServiceOuput.commonHeader = this.commonHeader.toProto()
+    executionServiceOuput.status = this.status.toProto()
+    executionServiceOuput.payload = payload
+    return executionServiceOuput.build()
+}
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/utils/Utils.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/utils/Utils.kt
new file mode 100644
index 0000000..6d22fda
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/utils/Utils.kt
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2019 Bell Canada.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.utils
+
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.springframework.http.codec.multipart.FilePart
+import org.springframework.util.StringUtils
+import java.io.File
+import java.io.IOException
+import java.nio.file.Path
+import java.time.LocalDateTime
+import java.time.ZoneId
+import java.time.format.DateTimeFormatter
+import java.util.*
+
+
+fun currentTimestamp(): String {
+    val now = LocalDateTime.now(ZoneId.systemDefault())
+    val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
+    return formatter.format(now)
+}
+
+
+@Throws(BluePrintException::class, IOException::class)
+fun saveCBAFile(filePart: FilePart, targetDirectory: Path): Path {
+
+    val fileName = StringUtils.cleanPath(filePart.filename())
+
+    if (StringUtils.getFilenameExtension(fileName) != "zip") {
+        throw BluePrintException("Invalid file extension required ZIP")
+    }
+
+    val changedFileName = UUID.randomUUID().toString() + ".zip"
+
+    val targetLocation = targetDirectory.resolve(changedFileName)
+
+    val file = File(targetLocation.toString())
+    if (file.exists()) {
+        file.delete()
+    }
+    file.createNewFile()
+
+    filePart.transferTo(file)
+
+    return targetLocation
+}
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintManagementGRPCHandlerTest.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintManagementGRPCHandlerTest.kt
index c870bf7..264e2ae 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintManagementGRPCHandlerTest.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintManagementGRPCHandlerTest.kt
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2019 Bell Canada.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,34 +19,32 @@
 
 import com.google.protobuf.ByteString
 import io.grpc.testing.GrpcServerRule
-import org.apache.commons.io.FileUtils
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintCoreConfiguration
+import org.onap.ccsdk.apps.controllerblueprints.common.api.CommonHeader
+import org.onap.ccsdk.apps.controllerblueprints.management.api.BluePrintManagementInput
 import org.onap.ccsdk.apps.controllerblueprints.management.api.BluePrintManagementServiceGrpc
-import org.onap.ccsdk.apps.controllerblueprints.management.api.BluePrintUploadInput
-import org.onap.ccsdk.apps.controllerblueprints.management.api.CommonHeader
 import org.onap.ccsdk.apps.controllerblueprints.management.api.FileChunk
-import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.test.context.ContextConfiguration
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration
+import org.springframework.context.annotation.ComponentScan
+import org.springframework.test.annotation.DirtiesContext
 import org.springframework.test.context.TestPropertySource
 import org.springframework.test.context.junit4.SpringRunner
 import java.io.File
-import java.nio.file.Paths
 import kotlin.test.AfterTest
 import kotlin.test.BeforeTest
-import kotlin.test.assertNotNull
+import kotlin.test.assertEquals
 import kotlin.test.assertTrue
 
 @RunWith(SpringRunner::class)
-@ContextConfiguration(classes = [BluePrintManagementGRPCHandler::class, BluePrintCoreConfiguration::class])
+@EnableAutoConfiguration
+@DirtiesContext
+@ComponentScan(basePackages = ["org.onap.ccsdk.apps.blueprintsprocessor", "org.onap.ccsdk.apps.controllerblueprints"])
 @TestPropertySource(locations = ["classpath:application-test.properties"])
 class BluePrintManagementGRPCHandlerTest {
 
-    private val log = LoggerFactory.getLogger(BluePrintProcessingGRPCHandlerTest::class.java)!!
-
     @get:Rule
     val grpcServerRule = GrpcServerRule().directExecutor()
 
@@ -60,33 +59,58 @@
 
     @AfterTest
     fun cleanDir() {
-        FileUtils.deleteDirectory(File("./target/blueprints"))
+        //TODO It's giving fluctuating results, need to look for another way to cleanup
+        // works sometimes otherwise results IO Exception
+        // Most probably bufferReader stream is not getting closed when cleanDir is getting invoked
+        File("./target/blueprints").deleteRecursively()
     }
 
     @Test
-    fun testFileUpload() {
+    fun `test upload blueprint`() {
         val blockingStub = BluePrintManagementServiceGrpc.newBlockingStub(grpcServerRule.channel)
+        val id = "123_upload"
+        val req = createInputRequest(id)
+        val output = blockingStub.uploadBlueprint(req)
 
-        val file = Paths.get("./src/test/resources/test-cba.zip").toFile()
+        assertEquals(200, output.status.code)
+        assertTrue(output.status.message.contains("Successfully uploaded blueprint sample:1.0.0 with id("))
+        assertEquals(id, output.commonHeader.requestId)
+    }
+
+    @Test
+    fun `test delete blueprint`() {
+        val blockingStub = BluePrintManagementServiceGrpc.newBlockingStub(grpcServerRule.channel)
+        val id = "123_delete"
+        val req = createInputRequest(id)
+
+        var output = blockingStub.uploadBlueprint(req)
+        assertEquals(200, output.status.code)
+        assertTrue(output.status.message.contains("Successfully uploaded blueprint sample:1.0.0 with id("))
+        assertEquals(id, output.commonHeader.requestId)
+
+        output = blockingStub.removeBlueprint(req)
+        assertEquals(200, output.status.code)
+    }
+
+    private fun createInputRequest(id: String): BluePrintManagementInput {
+        val file = File("./src/test/resources/test-cba.zip")
         assertTrue(file.exists(), "couldnt get file ${file.absolutePath}")
 
-        val commonHeader = CommonHeader.newBuilder()
+        val commonHeader = CommonHeader
+                .newBuilder()
                 .setTimestamp("2012-04-23T18:25:43.511Z")
                 .setOriginatorId("System")
-                .setRequestId("1234")
+                .setRequestId(id)
                 .setSubRequestId("1234-56").build()
 
         val fileChunk = FileChunk.newBuilder().setChunk(ByteString.copyFrom(file.inputStream().readBytes()))
                 .build()
 
-        val input = BluePrintUploadInput.newBuilder()
+        return BluePrintManagementInput.newBuilder()
                 .setCommonHeader(commonHeader)
                 .setBlueprintName("sample")
                 .setBlueprintVersion("1.0.0")
                 .setFileChunk(fileChunk)
                 .build()
-
-        val output = blockingStub.uploadBlueprint(input)
-        assertNotNull(output, "failed to get upload response")
     }
-}
\ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintProcessingGRPCHandlerTest.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintProcessingGRPCHandlerTest.kt
index cd871b4..01984b2 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintProcessingGRPCHandlerTest.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/BluePrintProcessingGRPCHandlerTest.kt
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2019 Bell Canada.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,33 +19,36 @@
 
 
 import com.google.protobuf.util.JsonFormat
+import io.grpc.stub.StreamObserver
 import io.grpc.testing.GrpcServerRule
+import org.junit.Assert
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintCoreConfiguration
-import org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.mock.MockBluePrintCatalogService
-import org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.mock.MockBlueprintDGExecutionService
+import org.onap.ccsdk.apps.controllerblueprints.common.api.ActionIdentifiers
+import org.onap.ccsdk.apps.controllerblueprints.common.api.CommonHeader
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.onap.ccsdk.apps.controllerblueprints.processing.api.BluePrintProcessingServiceGrpc
-import org.onap.ccsdk.apps.controllerblueprints.processing.api.CommonHeader
 import org.onap.ccsdk.apps.controllerblueprints.processing.api.ExecutionServiceInput
+import org.onap.ccsdk.apps.controllerblueprints.processing.api.ExecutionServiceOutput
 import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.test.context.ContextConfiguration
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration
+import org.springframework.context.annotation.ComponentScan
+import org.springframework.test.annotation.DirtiesContext
 import org.springframework.test.context.TestPropertySource
 import org.springframework.test.context.junit4.SpringRunner
 import kotlin.test.BeforeTest
-import kotlin.test.assertNotNull
 
+@Ignore
 @RunWith(SpringRunner::class)
-@ContextConfiguration(classes = [BluePrintProcessingGRPCHandler::class, ExecutionServiceHandler::class,
-    MockBlueprintDGExecutionService::class, MockBluePrintCatalogService::class,
-    BluePrintCoreConfiguration::class])
+@DirtiesContext
+@EnableAutoConfiguration
+@ComponentScan(basePackages = ["org.onap.ccsdk.apps.blueprintsprocessor", "org.onap.ccsdk.apps.controllerblueprints"])
 @TestPropertySource(locations = ["classpath:application-test.properties"])
 class BluePrintProcessingGRPCHandlerTest {
-
-    private val log = LoggerFactory.getLogger(BluePrintProcessingGRPCHandlerTest::class.java)!!
+    private val log = LoggerFactory.getLogger(BluePrintProcessingGRPCHandlerTest::class.java)
 
     @get:Rule
     val grpcServerRule = GrpcServerRule().directExecutor()
@@ -52,17 +56,35 @@
     @Autowired
     lateinit var bluePrintProcessingGRPCHandler: BluePrintProcessingGRPCHandler
 
+    lateinit var requestObs: StreamObserver<ExecutionServiceInput>
+
     @BeforeTest
     fun init() {
-        // Create a server, add service, start, and register for automatic graceful shutdown.
         grpcServerRule.serviceRegistry.addService(bluePrintProcessingGRPCHandler)
+
+        val blockingStub = BluePrintProcessingServiceGrpc.newStub(grpcServerRule.channel)
+
+        requestObs = blockingStub.process(object : StreamObserver<ExecutionServiceOutput> {
+            override fun onNext(executionServiceOuput: ExecutionServiceOutput) {
+                log.debug("onNext {}", executionServiceOuput)
+                if ("1234".equals(executionServiceOuput.commonHeader.requestId)) {
+                    Assert.assertEquals("Failed to process request, \'actionIdentifiers.mode\' not specified. Valid value are: \'sync\' or \'async\'.", executionServiceOuput.status.errorMessage)
+                }
+            }
+
+            override fun onError(error: Throwable) {
+                log.debug("Fail to process message", error)
+                Assert.assertEquals("INTERNAL: Could not find blueprint : from database", error.message)
+            }
+
+            override fun onCompleted() {
+                log.info("Done")
+            }
+        })
     }
 
     @Test
     fun testSelfServiceGRPCHandler() {
-
-        val blockingStub = BluePrintProcessingServiceGrpc.newBlockingStub(grpcServerRule.channel)
-
         val commonHeader = CommonHeader.newBuilder()
                 .setTimestamp("2012-04-23T18:25:43.511Z")
                 .setOriginatorId("System")
@@ -78,8 +100,25 @@
                 .setPayload(payloadBuilder.build())
                 .build()
 
-        val response = blockingStub.process(input)
-        assertNotNull(response, "Response is null")
+        requestObs.onNext(input)
+
+        val commonHeader2 = CommonHeader.newBuilder()
+                .setTimestamp("2012-04-23T18:25:43.511Z")
+                .setOriginatorId("System")
+                .setRequestId("2345")
+                .setSubRequestId("1234-56").build()
+
+        val actionIdentifier = ActionIdentifiers.newBuilder().setMode("sync").build()
+
+        val input2 = ExecutionServiceInput.newBuilder()
+                .setCommonHeader(commonHeader2)
+                .setActionIdentifiers(actionIdentifier)
+                .setPayload(payloadBuilder.build())
+                .build()
+
+        requestObs.onNext(input2)
+
+        requestObs.onCompleted()
     }
 
 }
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceHandlerTest.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceHandlerTest.kt
index e9e1030..de12014 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceHandlerTest.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/ExecutionServiceHandlerTest.kt
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2019 Bell Canada.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,33 +19,70 @@
 
 import org.junit.Test
 import org.junit.runner.RunWith
+import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintCoreConfiguration
 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceInput
-import org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.mock.MockBluePrintCatalogService
-import org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.mock.MockBlueprintDGExecutionService
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintCatalogService
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest
+import org.springframework.context.annotation.ComponentScan
+import org.springframework.core.io.ByteArrayResource
+import org.springframework.http.client.MultipartBodyBuilder
 import org.springframework.test.context.ContextConfiguration
+import org.springframework.test.context.TestPropertySource
 import org.springframework.test.context.junit4.SpringRunner
+import org.springframework.test.web.reactive.server.WebTestClient
+import org.springframework.web.reactive.function.BodyInserters
+import java.nio.file.Files
+import java.nio.file.Paths
+import kotlin.test.assertTrue
 
 @RunWith(SpringRunner::class)
-@ContextConfiguration(classes = [MockBluePrintCatalogService::class,
-    MockBlueprintDGExecutionService::class, ExecutionServiceHandler::class])
+@WebFluxTest
+@ContextConfiguration(classes = [ExecutionServiceHandler::class, BluePrintCoreConfiguration::class, BluePrintCatalogService::class])
+@ComponentScan(basePackages = ["org.onap.ccsdk.apps.blueprintsprocessor", "org.onap.ccsdk.apps.controllerblueprints"])
+@TestPropertySource(locations = ["classpath:application-test.properties"])
 class ExecutionServiceHandlerTest {
 
     @Autowired
-    lateinit var executionServiceHandler: ExecutionServiceHandler
+    lateinit var blueprintCatalog: BluePrintCatalogService
+    @Autowired
+    lateinit var webTestClient: WebTestClient
+
 
     @Test
-    fun testProcess() {
-        val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime("1234",
-                "./../../../../../components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration")
+    fun `test rest upload blueprint`() {
+        val file = Paths.get("./src/test/resources/test-cba.zip").toFile()
+        assertTrue(file.exists(), "couldnt get file ${file.absolutePath}")
 
-        val executionServiceInput = JacksonUtils.readValueFromClassPathFile("execution-input/default-input.json", ExecutionServiceInput::class.java)!!
-        executionServiceHandler.process(executionServiceInput)
+        val body = MultipartBodyBuilder().apply {
+            part("file", object : ByteArrayResource(Files.readAllBytes(Paths.get("./src/test/resources/test-cba.zip"))) {
+                override fun getFilename(): String {
+                    return "test-cba.zip"
+                }
+            })
+        }.build()
 
+        webTestClient
+                .post()
+                .uri("/api/v1/execution-service/upload")
+                .body(BodyInserters.fromMultipartData(body))
+                .exchange()
+                .expectStatus().isOk
     }
 
-}
+    @Test
+    fun `test rest process`() {
+        val file = Paths.get("./src/test/resources/test-cba.zip").toFile()
+        assertTrue(file.exists(), "couldnt get file ${file.absolutePath}")
+        blueprintCatalog.saveToDatabase(file)
 
-
+        val executionServiceInput = JacksonUtils.readValueFromClassPathFile("execution-input/default-input.json", ExecutionServiceInput::class.java)!!
+        webTestClient
+                .post()
+                .uri("/api/v1/execution-service/process")
+                .body(BodyInserters.fromObject(executionServiceInput))
+                .exchange()
+                .expectStatus().isOk
+    }
+}
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/mock/Mock.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/mock/Mock.kt
new file mode 100644
index 0000000..c54e617
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/mock/Mock.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2019 Bell Canada.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.mock
+
+import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceInput
+import org.onap.ccsdk.apps.blueprintsprocessor.services.execution.AbstractComponentFunction
+import org.onap.ccsdk.apps.controllerblueprints.core.asJsonPrimitive
+import org.slf4j.LoggerFactory
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.Configuration
+
+@Configuration
+open class MockComponentConfiguration {
+
+    @Bean(name = ["component-resource-assignment", "component-netconf-executor", "component-jython-executor"])
+    open fun createComponentFunction(): AbstractComponentFunction {
+        return MockComponentFunction()
+    }
+}
+
+class MockComponentFunction : AbstractComponentFunction() {
+
+    private val log = LoggerFactory.getLogger(MockComponentFunction::class.java)
+
+    override fun process(executionRequest: ExecutionServiceInput) {
+        log.info("Processing component : $operationInputs")
+
+        bluePrintRuntimeService.setNodeTemplateAttributeValue(nodeTemplateName,
+                "assignment-params", "params".asJsonPrimitive())
+    }
+
+    override fun recover(runtimeException: RuntimeException, executionRequest: ExecutionServiceInput) {
+        log.info("Recovering component..")
+    }
+}
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/mock/SelfServiceApiMocks.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/mock/SelfServiceApiMocks.kt
deleted file mode 100755
index 656d92f..0000000
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/mock/SelfServiceApiMocks.kt
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright © 2017-2018 AT&T Intellectual Property.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.mock
-
-import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceInput
-import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ExecutionServiceOutput
-import org.onap.ccsdk.apps.blueprintsprocessor.services.workflow.BlueprintDGExecutionService
-import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintCatalogService
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
-import org.springframework.stereotype.Service
-import kotlin.test.assertNotNull
-
-@Service
-class MockBlueprintDGExecutionService : BlueprintDGExecutionService {
-    override fun executeDirectedGraph(bluePrintRuntimeService: BluePrintRuntimeService<*>, executionServiceInput: ExecutionServiceInput): ExecutionServiceOutput {
-
-        assertNotNull(executionServiceInput, "failed to get executionServiceInput")
-
-        val executionServiceOutput = ExecutionServiceOutput()
-        executionServiceOutput.commonHeader = executionServiceInput.commonHeader
-        return executionServiceOutput
-    }
-}
-
-@Service
-class MockBluePrintCatalogService : BluePrintCatalogService {
-
-    override fun uploadToDataBase(file: String, validate : Boolean): String {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-
-    override fun downloadFromDataBase(name: String, version: String, path: String): String {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-
-    override fun prepareBluePrint(name: String, version: String): String {
-        assertNotNull(name, "failed to get blueprint Name")
-        assertNotNull(version, "failed to get blueprint version")
-        return "./../../../../../components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration"
-    }
-
-    override fun downloadFromDataBase(uuid: String, path: String): String {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
-}
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/utils/BluePrintMappingTests.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/utils/BluePrintMappingTests.kt
new file mode 100644
index 0000000..2e4ba27
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/selfservice/api/utils/BluePrintMappingTests.kt
@@ -0,0 +1,172 @@
+package org.onap.ccsdk.apps.blueprintsprocessor.selfservice.api.utils
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.google.protobuf.ListValue
+import com.google.protobuf.NullValue
+import com.google.protobuf.Struct
+import com.google.protobuf.Value
+import com.google.protobuf.util.JsonFormat
+import org.junit.Assert
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.Flags
+import org.onap.ccsdk.apps.controllerblueprints.common.api.ActionIdentifiers
+import org.onap.ccsdk.apps.controllerblueprints.common.api.CommonHeader
+import org.onap.ccsdk.apps.controllerblueprints.common.api.Flag
+import org.springframework.test.context.junit4.SpringRunner
+import java.text.SimpleDateFormat
+
+@RunWith(SpringRunner::class)
+class BluePrintMappingsTest {
+
+    val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
+    val dateString = "2019-01-16T18:25:43.511Z"
+    val dateForTest = formatter.parse(dateString)
+
+    val flag = Flag.newBuilder().setIsForce(false).setTtl(1).build()
+
+    fun createFlag(): Flags {
+        val flag = Flags()
+        flag.isForce = false
+        flag.ttl = 1
+        return flag
+    }
+
+    @Test
+    fun flagToJavaTest() {
+        val flag2 = flag.toJava()
+
+        Assert.assertEquals(flag.isForce, flag2.isForce)
+        Assert.assertEquals(flag.ttl, flag2.ttl)
+    }
+
+    @Test
+    fun flagToProtoTest() {
+        val flag = createFlag()
+        val flag2 = flag.toProto()
+
+        Assert.assertEquals(flag.isForce, flag2.isForce)
+        Assert.assertEquals(flag.ttl, flag2.ttl)
+    }
+
+    fun createStatus(): org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.Status {
+        val status = org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.Status()
+        status.code = 400
+        status.errorMessage = "Concurrent modification exception"
+        status.eventType = "Update"
+        status.message = "Error uploading data"
+        status.timestamp = dateForTest
+        return status
+    }
+
+    @Test
+    fun statusToProtoTest() {
+        val status = createStatus()
+        val status2 = status.toProto()
+
+        Assert.assertEquals(status.code, status2.code)
+        Assert.assertEquals(status.errorMessage, status2.errorMessage)
+        Assert.assertEquals(status.eventType, status2.eventType)
+        Assert.assertEquals(status.message, status2.message)
+        Assert.assertEquals(status.timestamp.toString(), status2.timestamp)
+    }
+
+    @Test
+    fun commonHeaderToJavaTest() {
+        val flag = Flag.newBuilder().setIsForce(true).setTtl(2).build()
+
+        val commonHeader = CommonHeader.newBuilder().setOriginatorId("Origin").setRequestId("requestID").setSubRequestId("subRequestID").setTimestamp(dateString).setFlag(flag).build()
+        val commonHeader2 = commonHeader.toJava()
+
+        Assert.assertEquals(commonHeader.originatorId, commonHeader2.originatorId)
+        Assert.assertEquals(commonHeader.requestId, commonHeader2.requestId)
+        Assert.assertEquals(commonHeader.subRequestId, commonHeader2.subRequestId)
+        Assert.assertEquals(commonHeader.timestamp, formatter.format(commonHeader2.timestamp))
+    }
+
+    fun createCommonHeader(): org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.CommonHeader {
+        val commonHeader = org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.CommonHeader()
+        commonHeader.flags = createFlag()
+        commonHeader.originatorId = "1234"
+        commonHeader.requestId = "2345"
+        commonHeader.subRequestId = "0123"
+        commonHeader.timestamp = dateForTest
+        return commonHeader
+    }
+
+    @Test
+    fun commonHeaderToProtoTest() {
+        val commonHeader = createCommonHeader()
+        val commonHeader2 = commonHeader.toProto()
+        Assert.assertEquals(commonHeader.originatorId, commonHeader2.originatorId)
+        Assert.assertEquals(commonHeader.requestId, commonHeader2.requestId)
+        Assert.assertEquals(commonHeader.subRequestId, commonHeader2.subRequestId)
+        Assert.assertEquals(commonHeader.timestamp.toString(), commonHeader2.timestamp)
+    }
+
+    @Test
+    fun actionIdentifierToJavaTest() {
+        val actionIdentifiers = ActionIdentifiers.newBuilder().setActionName("Process Action").setBlueprintName("BlueprintName").setBlueprintVersion("3.0").setMode("Execution").build()
+        val actionIdentifiers2 = actionIdentifiers.toJava()
+
+        Assert.assertEquals(actionIdentifiers.actionName, actionIdentifiers2.actionName)
+        Assert.assertEquals(actionIdentifiers.blueprintName, actionIdentifiers2.blueprintName)
+        Assert.assertEquals(actionIdentifiers.blueprintVersion, actionIdentifiers2.blueprintVersion)
+        Assert.assertEquals(actionIdentifiers.mode, actionIdentifiers2.mode)
+    }
+
+    fun createActionIdentifier(): org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ActionIdentifiers {
+        val ac = org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ActionIdentifiers()
+        ac.mode = "mode"
+        ac.blueprintVersion = "version"
+        ac.blueprintName = "name"
+        ac.actionName = "action"
+        return ac
+    }
+
+    @Test
+    fun actionIdentifierToProtoTest() {
+        val actionIdentifiers = createActionIdentifier()
+        val actionIdentifiers2 = actionIdentifiers.toProto()
+
+        Assert.assertEquals(actionIdentifiers.actionName, actionIdentifiers2.actionName)
+        Assert.assertEquals(actionIdentifiers.blueprintName, actionIdentifiers2.blueprintName)
+        Assert.assertEquals(actionIdentifiers.blueprintVersion, actionIdentifiers2.blueprintVersion)
+        Assert.assertEquals(actionIdentifiers.mode, actionIdentifiers2.mode)
+    }
+
+    @Test
+    fun testStructToJava() {
+        val struct = Struct.newBuilder().putAllFields(createValues()).build()
+        val struct2 = struct.toJava()
+
+        val mapper = ObjectMapper()
+
+        Assert.assertEquals(JsonFormat.printer().print(struct).replace(" ", "").replace("\r",""),
+                mapper.writerWithDefaultPrettyPrinter().writeValueAsString(struct2).replace(" ", "").replace("\r",""))
+    }
+
+    fun createValues(): Map<String, Value> {
+        val map = mutableMapOf<String, Value>()
+
+        val boolValue = Value.newBuilder().setBoolValue(true).build()
+        val stringValue = Value.newBuilder().setStringValue("string").build()
+        val doubleValue = Value.newBuilder().setNumberValue(Double.MAX_VALUE).build()
+        val jsonValue = Value.newBuilder().setStringValue("{\"bblah\": \"bbblo\"}").build()
+        val listValue = Value.newBuilder().setListValue(ListValue.newBuilder().addValues(boolValue).addValues(boolValue).build()).build()
+        val nullValue = Value.newBuilder().setNullValue(NullValue.NULL_VALUE).build()
+
+        map.put("bool", boolValue)
+        map.put("string", stringValue)
+        map.put("doublbe", doubleValue)
+        map.put("json", jsonValue)
+        map.put("list", listValue)
+        map.put("null", nullValue)
+
+        val structValue = Value.newBuilder().setStructValue(Struct.newBuilder().putAllFields(map).build()).build()
+
+        map.put("struct", structValue)
+
+        return map
+    }
+}
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/application-test.properties b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/application-test.properties
index edb5102..8a26ee6 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/application-test.properties
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/application-test.properties
@@ -13,5 +13,16 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+blueprintsprocessor.db.primary.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
+blueprintsprocessor.db.primary.username=sa
+blueprintsprocessor.db.primary.password=
+blueprintsprocessor.db.primary.driverClassName=org.h2.Driver
+blueprintsprocessor.db.primary.hibernateHbm2ddlAuto=create-drop
+blueprintsprocessor.db.primary.hibernateDDLAuto=update
+blueprintsprocessor.db.primary.hibernateNamingStrategy=org.hibernate.cfg.ImprovedNamingStrategy
+blueprintsprocessor.db.primary.hibernateDialect=org.hibernate.dialect.H2Dialect
+# Controller Blueprints Core Configuration
 blueprintsprocessor.blueprintDeployPath=./target/blueprints/deploy
 blueprintsprocessor.blueprintArchivePath=./target/blueprints/archive
+# executor
+blueprints.processor.functions.python.executor.executionPath="./target/"
diff --git a/ms/blueprintsprocessor/modules/outbounds/pom.xml b/ms/blueprintsprocessor/modules/outbounds/pom.xml
index e957c88..b6c26e6 100644
--- a/ms/blueprintsprocessor/modules/outbounds/pom.xml
+++ b/ms/blueprintsprocessor/modules/outbounds/pom.xml
@@ -15,16 +15,16 @@
   ~  limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
-		<artifactId>modules</artifactId>
-		<version>0.4.1-SNAPSHOT</version>
-	</parent>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
+        <artifactId>modules</artifactId>
+        <version>0.4.1-SNAPSHOT</version>
+    </parent>
 
-	<artifactId>outbounds</artifactId>
-	<packaging>pom</packaging>
-	<name>Blueprints Processor Outbounds POM</name>
-	<description>Blueprints Processor Outbounds</description>
+    <artifactId>outbounds</artifactId>
+    <packaging>pom</packaging>
+    <name>Blueprints Processor Outbounds POM</name>
+    <description>Blueprints Processor Outbounds</description>
 
 </project>
diff --git a/ms/blueprintsprocessor/modules/services/execution-service/pom.xml b/ms/blueprintsprocessor/modules/services/execution-service/pom.xml
index 035f14d..96bb09f 100644
--- a/ms/blueprintsprocessor/modules/services/execution-service/pom.xml
+++ b/ms/blueprintsprocessor/modules/services/execution-service/pom.xml
@@ -29,6 +29,10 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+            <artifactId>core</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
             <artifactId>core</artifactId>
         </dependency>
diff --git a/ms/blueprintsprocessor/modules/services/execution-service/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/services/execution/AbstractComponentFunction.kt b/ms/blueprintsprocessor/modules/services/execution-service/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/services/execution/AbstractComponentFunction.kt
index c9e147b..f7c901d 100644
--- a/ms/blueprintsprocessor/modules/services/execution-service/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/services/execution/AbstractComponentFunction.kt
+++ b/ms/blueprintsprocessor/modules/services/execution-service/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/services/execution/AbstractComponentFunction.kt
@@ -53,17 +53,17 @@
         return stepName

     }

 

-    override fun prepareRequest(executionServiceInput: ExecutionServiceInput): ExecutionServiceInput {

+    override fun prepareRequest(executionRequest: ExecutionServiceInput): ExecutionServiceInput {
         checkNotNull(bluePrintRuntimeService) { "failed to prepare blueprint runtime" }

 

         check(stepName.isNotEmpty()) { "failed to assign step name" }

 

-        this.executionServiceInput = executionServiceInput

+        this.executionServiceInput = executionRequest
 

-        processId = executionServiceInput.commonHeader.requestId

+        processId = executionRequest.commonHeader.requestId
         check(processId.isNotEmpty()) { "couldn't get process id for step($stepName)" }

 

-        workflowName = executionServiceInput.actionIdentifiers.actionName

+        workflowName = executionRequest.actionIdentifiers.actionName
         check(workflowName.isNotEmpty()) { "couldn't get action name for step($stepName)" }

 

         log.info("preparing request id($processId) for workflow($workflowName) step($stepName)")

@@ -88,12 +88,14 @@
 

         this.operationInputs.putAll(operationResolvedProperties)

 

-        return executionServiceInput

+        return executionRequest
     }

 

     override fun prepareResponse(): ExecutionServiceOutput {

         log.info("Preparing Response...")

         executionServiceOutput.commonHeader = executionServiceInput.commonHeader

+        executionServiceOutput.actionIdentifiers = executionServiceInput.actionIdentifiers
+        executionServiceOutput.payload = executionServiceInput.payload
 

         // Resolve the Output Expression

         val stepOutputs = bluePrintRuntimeService

diff --git a/ms/blueprintsprocessor/modules/services/pom.xml b/ms/blueprintsprocessor/modules/services/pom.xml
old mode 100644
new mode 100755
index 8cb3c6f..469899d
--- a/ms/blueprintsprocessor/modules/services/pom.xml
+++ b/ms/blueprintsprocessor/modules/services/pom.xml
@@ -2,6 +2,8 @@
 <!--
   ~  Copyright © 2017-2018 AT&T Intellectual Property.
   ~
+  ~  Modifications Copyright © 2019 Bell Canada.
+  ~
   ~  Licensed under the Apache License, Version 2.0 (the "License");
   ~  you may not use this file except in compliance with the License.
   ~  You may obtain a copy of the License at
diff --git a/ms/blueprintsprocessor/modules/services/workflow-service/pom.xml b/ms/blueprintsprocessor/modules/services/workflow-service/pom.xml
index 6e3dade..cc2a0e6 100644
--- a/ms/blueprintsprocessor/modules/services/workflow-service/pom.xml
+++ b/ms/blueprintsprocessor/modules/services/workflow-service/pom.xml
@@ -28,6 +28,10 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+            <artifactId>core</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
             <artifactId>execution-service</artifactId>
         </dependency>
diff --git a/ms/blueprintsprocessor/parent/pom.xml b/ms/blueprintsprocessor/parent/pom.xml
old mode 100644
new mode 100755
index 401fef0..472b466
--- a/ms/blueprintsprocessor/parent/pom.xml
+++ b/ms/blueprintsprocessor/parent/pom.xml
@@ -3,6 +3,7 @@
   ~  Copyright © 2017-2018 AT&T Intellectual Property.
   ~
   ~  Modifications Copyright © 2018 IBM.
+  ~  Modifications Copyright © 2019 Bell Canada.
   ~
   ~  Licensed under the Apache License, Version 2.0 (the "License");
   ~  you may not use this file except in compliance with the License.
@@ -16,7 +17,8 @@
   ~  See the License for the specific language governing permissions and
   ~  limitations under the License.
   -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.onap.ccsdk.apps</groupId>
@@ -29,12 +31,12 @@
     <name>Blueprints Processor Parent</name>
     <description>Blueprints Processor Parent</description>
     <properties>
-        <spring.boot.version>2.1.1.RELEASE</spring.boot.version>
-        <spring.version>5.1.3.RELEASE</spring.version>
-        <kotlin.version>1.3.11</kotlin.version>
-        <kotlin.maven.version>1.3.11</kotlin.maven.version>
-        <kotlin.couroutines.version>1.1.0</kotlin.couroutines.version>
-        <grpc.version>1.17.1</grpc.version>
+        <spring.boot.version>2.1.2.RELEASE</spring.boot.version>
+        <spring.version>5.1.4.RELEASE</spring.version>
+        <kotlin.version>1.3.20</kotlin.version>
+        <kotlin.maven.version>1.3.20</kotlin.maven.version>
+        <kotlin.couroutines.version>1.1.1</kotlin.couroutines.version>
+        <grpc.version>1.18.0</grpc.version>
         <protobuff.java.utils.version>3.6.1</protobuff.java.utils.version>
         <eelf.version>1.0.0</eelf.version>
         <sli.version>0.4.1-SNAPSHOT</sli.version>
@@ -125,14 +127,26 @@
             </dependency>
             <dependency>
                 <groupId>org.jetbrains.kotlin</groupId>
+                <artifactId>kotlin-stdlib-common</artifactId>
+                <version>${kotlin.version}</version>
+            </dependency>
+            <!--Use kotlin-compiler-embeddable instead koltin-compiler wrap-->
+            <!--guava dependency inside kotlin-compiler creating classpath issues at runtime-->
+            <dependency>
+                <groupId>org.jetbrains.kotlin</groupId>
                 <artifactId>kotlin-scripting-jvm-host</artifactId>
                 <version>${kotlin.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.jetbrains.kotlin</groupId>
+                        <artifactId>kotlin-compile</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
                 <groupId>org.jetbrains.kotlin</groupId>
                 <artifactId>kotlin-compiler-embeddable</artifactId>
                 <version>${kotlin.version}</version>
-                <scope>runtime</scope>
             </dependency>
             <dependency>
                 <groupId>org.jetbrains.kotlin</groupId>
@@ -246,6 +260,11 @@
             <!-- Application Module Dependencies -->
             <dependency>
                 <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
+                <artifactId>application</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
                 <artifactId>db-lib</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -303,6 +322,11 @@
                 <artifactId>resource-dict</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+                <artifactId>core</artifactId>
+                <version>${project.version}</version>
+            </dependency>
 
             <!-- Database -->
             <dependency>
@@ -400,7 +424,19 @@
         </dependency>
         <dependency>
             <groupId>org.jetbrains.kotlin</groupId>
+            <artifactId>kotlin-compiler-embeddable</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jetbrains.kotlin</groupId>
             <artifactId>kotlin-scripting-jvm-host</artifactId>
+            <!--Use kotlin-compiler-embeddable as koltin-compiler wrap-->
+            <!--guava dependency creating classpath issues at runtime-->
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jetbrains.kotlin</groupId>
+                    <artifactId>kotlin-compiler</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <!-- GRPC Dependencies -->
         <dependency>
diff --git a/ms/blueprintsprocessor/pom.xml b/ms/blueprintsprocessor/pom.xml
old mode 100644
new mode 100755
index df4932c..774e177
--- a/ms/blueprintsprocessor/pom.xml
+++ b/ms/blueprintsprocessor/pom.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~  Copyright © 2017-2018 AT&T Intellectual Property.
+  ~  Modifications Copyright © 2019 Bell Canada.
   ~
   ~  Licensed under the Apache License, Version 2.0 (the "License");
   ~  you may not use this file except in compliance with the License.
@@ -15,34 +16,35 @@
   ~  limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.ccsdk.apps</groupId>
-		<artifactId>ccsdk-apps-ms</artifactId>
-		<version>0.4.1-SNAPSHOT</version>
-	</parent>
-	<artifactId>blueprintsprocessor</artifactId>
-	<packaging>pom</packaging>
-	<name>Blueprints Processor Root</name>
-	<description>Blueprints Processor Root</description>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.ccsdk.apps</groupId>
+        <artifactId>ccsdk-apps-ms</artifactId>
+        <version>0.4.1-SNAPSHOT</version>
+    </parent>
+    <artifactId>blueprintsprocessor</artifactId>
+    <packaging>pom</packaging>
+    <name>Blueprints Processor Root</name>
+    <description>Blueprints Processor Root</description>
 
-	<properties>
-		<service.name>BlueprintsProcessor</service.name>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-		<maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
-		<build.number>${maven.build.timestamp}</build.number>
-		<java.version>1.8</java.version>
-		<maven.compiler.target>1.8</maven.compiler.target>
-		<maven.compiler.source>1.8</maven.compiler.source>
-		<ccsdk.project.version>${project.version}</ccsdk.project.version>
-	</properties>
+    <properties>
+        <service.name>BlueprintsProcessor</service.name>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
+        <build.number>${maven.build.timestamp}</build.number>
+        <java.version>1.8</java.version>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <ccsdk.project.version>${project.version}</ccsdk.project.version>
+    </properties>
 
-	<modules>
-		<module>parent</module>
-		<module>modules</module>
-		<module>functions</module>
-		<module>application</module>
-	</modules>
+    <modules>
+        <module>parent</module>
+        <module>modules</module>
+        <module>functions</module>
+        <module>application</module>
+        <module>distribution</module>
+    </modules>
 
 </project>
diff --git a/ms/controllerblueprints/application/etc/run.source b/ms/controllerblueprints/application/etc/run.source
old mode 100644
new mode 100755
index fc1b4e5..1d0ac07
--- a/ms/controllerblueprints/application/etc/run.source
+++ b/ms/controllerblueprints/application/etc/run.source
@@ -9,8 +9,5 @@
 -Djava.security.egd=file:/dev/./urandom \
 -DAPPNAME=${APP_NAME} -DAPPENV=${APP_ENV} -DAPPVERSION=${APP_VERSION} -DNAMESPACE=${NAMESPACE} \
 -Dspring.config.location=${APP_CONFIG_HOME}/ \
--Dspring.datasource.url=${DB_URL} \
--Dspring.datasource.username=${DB_USER} \
--Dspring.datasource.password=${DB_PASSWORD} \
 -Dblueprints.load.initial-data=${INIT_DATA_LOAD} \
-org.onap.ccsdk.apps.controllerblueprints.ControllerBluprintsApplication
+org.onap.ccsdk.apps.controllerblueprints.ControllerBlueprintsApplication
diff --git a/ms/controllerblueprints/application/opt/app/onap/config/application-dev.properties b/ms/controllerblueprints/application/opt/app/onap/config/application-dev.properties
index e574778..81b3061 100755
--- a/ms/controllerblueprints/application/opt/app/onap/config/application-dev.properties
+++ b/ms/controllerblueprints/application/opt/app/onap/config/application-dev.properties
@@ -49,7 +49,7 @@
 spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
 # Load Resource Source Mappings
-resourceSourceMappings=db=source-db,input=source-input,default=source-default,mdsal=source-rest,capability=source-capability
+resourceSourceMappings=primary-db=source-primary-db,input=source-input,default=source-default,primary-config-data=source-rest,capability=source-capability
 # Controller Blueprints Core Configuration
 controllerblueprints.blueprintDeployPath=/etc/blueprints/deploy
 controllerblueprints.blueprintArchivePath=/etc/blueprints/archive
@@ -64,4 +64,7 @@
 controllerblueprints.loadResourceDictionaryPaths=./../../../components/model-catalog/resource-dictionary/starter-dictionary
 
 # CBA file extension
-controllerblueprints.loadCbaExtension=zip
\ No newline at end of file
+controllerblueprints.loadCbaExtension=zip
+
+# Web server config
+server.port=8080
\ No newline at end of file
diff --git a/ms/controllerblueprints/application/opt/app/onap/config/application.properties b/ms/controllerblueprints/application/opt/app/onap/config/application.properties
index 9179239..5b651e6 100755
--- a/ms/controllerblueprints/application/opt/app/onap/config/application.properties
+++ b/ms/controllerblueprints/application/opt/app/onap/config/application.properties
@@ -1,6 +1,7 @@
 #
 # Copyright © 2017-2018 AT&T Intellectual Property.
 # Modifications Copyright © 2018 IBM.
+# Modifications Copyright © 2019 Bell Canada.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -41,17 +42,17 @@
 spring.jpa.properties.hibernate.format_sql=true
 
 # spring.datasource.url, spring.datasource.username,spring.datasource.password  may be overridden by ENV variables
-spring.datasource.url=jdbc:mysql://localhost:3306/sdnctl
+spring.datasource.url=jdbc:mysql://db:3306/sdnctl
 spring.datasource.username=sdnctl
 spring.datasource.password=sdnctl
 spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
-spring.jpa.show-sql = true
-spring.jpa.hibernate.ddl-auto = none
-spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
-spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
+spring.jpa.show-sql=true
+spring.jpa.hibernate.ddl-auto=none
+spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
 
 # Load Resource Source Mappings
-resourceSourceMappings=db=source-db,input=source-input,default=source-default,mdsal=source-rest,capability=source-capability
+resourceSourceMappings=primary-db=source-primary-db,input=source-input,default=source-default,primary-config-data=source-rest,capability=source-capability
 
 # Controller Blueprints Core Configuration
 controllerblueprints.blueprintDeployPath=/etc/blueprints/deploy
@@ -61,11 +62,14 @@
 # blueprints.load.initial-data may be overridden by ENV variables
 controllerblueprints.loadInitialData=true
 controllerblueprints.loadBluePrint=false
-controllerblueprints.loadBluePrintPaths=model-catalog/blueprint-model/starter-blueprint
+controllerblueprints.loadBluePrintPaths=/model-catalog/blueprint-model/starter-blueprint
 controllerblueprints.loadModelType=true
-controllerblueprints.loadModeTypePaths=model-catalog/definition-type/starter-type
+controllerblueprints.loadModeTypePaths=/model-catalog/definition-type/starter-type
 controllerblueprints.loadResourceDictionary=true
-controllerblueprints.loadResourceDictionaryPaths=model-catalog/resource-dictionary/starter-dictionary
+controllerblueprints.loadResourceDictionaryPaths=/model-catalog/resource-dictionary/starter-dictionary
 
 # CBA file extension
-controllerblueprints.loadCbaExtension=zip
\ No newline at end of file
+controllerblueprints.loadCbaExtension=zip
+
+# Web server config
+server.port=8080
\ No newline at end of file
diff --git a/ms/controllerblueprints/application/opt/app/onap/config/logback.xml b/ms/controllerblueprints/application/opt/app/onap/config/logback.xml
new file mode 100755
index 0000000..01ae4f6
--- /dev/null
+++ b/ms/controllerblueprints/application/opt/app/onap/config/logback.xml
@@ -0,0 +1,44 @@
+<!--

+  ~ Copyright © 2017-2018 AT&T Intellectual Property.

+  ~

+  ~ Licensed under the Apache License, Version 2.0 (the "License");

+  ~ you may not use this file except in compliance with the License.

+  ~ You may obtain a copy of the License at

+  ~

+  ~     http://www.apache.org/licenses/LICENSE-2.0

+  ~

+  ~ Unless required by applicable law or agreed to in writing, software

+  ~ distributed under the License is distributed on an "AS IS" BASIS,

+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+  ~ See the License for the specific language governing permissions and

+  ~ limitations under the License.

+  -->

+

+<configuration>

+

+    <property name="localPattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{100} - %msg%n" />

+

+    <property name="defaultPattern" value="%date{ISO8601,UTC}|%X{RequestID}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{ServerFQDN}|%X{RemoteHost}|%X{ClassName}|%X{Timer}| %msg%n" />

+

+    <property name="debugLoggerPattern" value="%date{ISO8601,UTC}|%X{RequestID}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{ServerFQDN}|%X{RemoteHost}|%X{ClassName}|%X{Timer}|[%caller{3}]| %msg%n" />

+

+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

+        <!-- encoders are assigned the type

+             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->

+        <encoder>

+            <pattern>${defaultPattern}</pattern>

+        </encoder>

+    </appender>

+

+

+    <logger name="org.springframework" level="info"/>

+    <logger name="org.springframework.web" level="info"/>

+    <logger name="org.springframework.security.web.authentication" level="warn"/>

+    <logger name="org.hibernate" level="error"/>

+    <logger name="org.onap.ccsdk.apps" level="info"/>

+

+    <root level="warn">

+        <appender-ref ref="STDOUT"/>

+    </root>

+

+</configuration>

diff --git a/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ApplicationConstants.java b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ApplicationConstants.java
index 2471bd5..c4759b5 100644
--- a/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ApplicationConstants.java
+++ b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ApplicationConstants.java
@@ -17,7 +17,7 @@
 package org.onap.ccsdk.apps.controllerblueprints;

 

 /**

- * ApplicationConstants.java Purpose: Provide ControllerBluprintsApplication Constant Information

+ * ApplicationConstants.java Purpose: Provide ControllerBlueprintsApplication Constant Information

  *

  * @author Brinda Santh

  * @version 1.0

diff --git a/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBluprintsApplication.java b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBlueprintsApplication.java
similarity index 89%
rename from ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBluprintsApplication.java
rename to ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBlueprintsApplication.java
index 6b0efd8..e925c69 100644
--- a/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBluprintsApplication.java
+++ b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBlueprintsApplication.java
@@ -31,12 +31,12 @@
 @EnableWebFlux

 @ComponentScan(basePackages = {"org.onap.ccsdk.apps.controllerblueprints"})

 @EnableAutoConfiguration

-public class ControllerBluprintsApplication {

-    private static EELFLogger log = EELFManager.getInstance().getLogger(ControllerBluprintsApplication.class);

+public class ControllerBlueprintsApplication {

+    private static EELFLogger log = EELFManager.getInstance().getLogger(ControllerBlueprintsApplication.class);

 

     public static void main(String[] args) {

         log.info("****** Starting Controlled Blueprints Application ******");

-        SpringApplication.run(ControllerBluprintsApplication.class, args);

+        SpringApplication.run(ControllerBlueprintsApplication.class, args);

     }

 

 }
\ No newline at end of file
diff --git a/ms/controllerblueprints/application/src/main/resources/application-dev.properties b/ms/controllerblueprints/application/src/main/resources/application-dev.properties
new file mode 100755
index 0000000..30b71fb
--- /dev/null
+++ b/ms/controllerblueprints/application/src/main/resources/application-dev.properties
@@ -0,0 +1,70 @@
+#
+# Copyright © 2017-2018 AT&T Intellectual Property.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+appName=ControllerBluePrints
+ms_name=org.onap.ccsdk.apps.controllerblueprints
+appVersion=1.0.0
+
+# Basic Authentication
+basic-auth.user-name=ccsdkapps
+basic-auth.hashed-pwd={bcrypt}$2a$10$MJxhNiOAffxbyrV9.rrOUewP9Q/ASg5Nit2cmP.yBaXGsVXo8BW3y
+
+#logging.pattern.console=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr($ threadId: {PID:- }){magenta} %clr(---){faint} %clr([ hostname: %X{hostname} serviceName: %X{serviceName} version: %X{version} transactionId: %X{transactionId} requestTimeStamp: %X{requestTimestamp}  responseTimeStamp: %X{responseTimestamp} duration: %X{duration}]){yellow} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex
+
+logging.level.org.springframework.web=INFO
+logging.level.org.hibernate.SQL=warn
+logging.level.org.hibernate.type.descriptor.sql=debug
+
+#To Remove Null in JSON API Response
+spring.jackson.default-property-inclusion=non_null
+
+#Swagger Configuration
+swagger.contact.name=Brinda Santh Muthuramalingam
+swagger.contact.url=www.onap.com
+swagger.contact.email=brindasanth@onap.com
+
+spring.jpa.properties.hibernate.show_sql=true
+spring.jpa.properties.hibernate.use_sql_comments=true
+spring.jpa.properties.hibernate.format_sql=true
+
+# spring.datasource.url, spring.datasource.username,spring.datasource.password  may be overridden by ENV variables
+spring.datasource.url=jdbc:mysql://localhost:3306/sdnctl
+spring.datasource.username=sdnctl
+spring.datasource.password=sdnctl
+spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
+spring.jpa.show-sql=true
+spring.jpa.hibernate.ddl-auto=none
+spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
+# Load Resource Source Mappings
+resourceSourceMappings=db=source-db,input=source-input,default=source-default,mdsal=source-rest,capability=source-capability
+# Controller Blueprints Core Configuration
+controllerblueprints.blueprintDeployPath=/etc/blueprints/deploy
+controllerblueprints.blueprintArchivePath=/etc/blueprints/archive
+controllerblueprints.blueprintEnrichmentPath=/etc/blueprints/enrichment
+# Controller Blueprint Load Configurations
+controllerblueprints.loadInitialData=true
+controllerblueprints.loadBluePrint=false
+controllerblueprints.loadBluePrintPaths=./../../../components/model-catalog/blueprint-model/starter-blueprint
+controllerblueprints.loadModelType=true
+controllerblueprints.loadModeTypePaths=./../../../components/model-catalog/definition-type/starter-type
+controllerblueprints.loadResourceDictionary=true
+controllerblueprints.loadResourceDictionaryPaths=./../../../components/model-catalog/resource-dictionary/starter-dictionary
+
+# CBA file extension
+controllerblueprints.loadCbaExtension=zip
+
+# Web server config
+server.port=8080
\ No newline at end of file
diff --git a/ms/controllerblueprints/application/src/main/resources/application.properties b/ms/controllerblueprints/application/src/main/resources/application.properties
new file mode 100755
index 0000000..ec61be4
--- /dev/null
+++ b/ms/controllerblueprints/application/src/main/resources/application.properties
@@ -0,0 +1,74 @@
+#
+# Copyright © 2017-2018 AT&T Intellectual Property.
+# Modifications Copyright © 2019 Bell Canada.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+appName=ControllerBluePrints
+ms_name=org.onap.ccsdk.apps.controllerblueprints
+appVersion=1.0.0
+
+# Basic Authentication
+basic-auth.user-name=ccsdkapps
+basic-auth.hashed-pwd={bcrypt}$2a$10$MJxhNiOAffxbyrV9.rrOUewP9Q/ASg5Nit2cmP.yBaXGsVXo8BW3y
+
+#logging.pattern.console=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr($ threadId: {PID:- }){magenta} %clr(---){faint} %clr([ hostname: %X{hostname} serviceName: %X{serviceName} version: %X{version} transactionId: %X{transactionId} requestTimeStamp: %X{requestTimestamp}  responseTimeStamp: %X{responseTimestamp} duration: %X{duration}]){yellow} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex
+
+logging.level.org.springframework.web=INFO
+logging.level.org.hibernate.SQL=warn
+logging.level.org.hibernate.type.descriptor.sql=debug
+
+#To Remove Null in JSON API Response
+spring.jackson.default-property-inclusion=non_null
+
+#Swagger Configuration
+swagger.contact.name=Brinda Santh Muthuramalingam
+swagger.contact.url=www.onap.com
+swagger.contact.email=brindasanth@onap.com
+
+spring.jpa.properties.hibernate.show_sql=true
+spring.jpa.properties.hibernate.use_sql_comments=true
+spring.jpa.properties.hibernate.format_sql=true
+
+# spring.datasource.url, spring.datasource.username,spring.datasource.password  may be overridden by ENV variables
+spring.datasource.url=jdbc:mysql://localhost:3306/sdnctl
+spring.datasource.username=sdnctl
+spring.datasource.password=sdnctl
+spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
+spring.jpa.show-sql=true
+spring.jpa.hibernate.ddl-auto=none
+spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
+
+# Load Resource Source Mappings
+resourceSourceMappings=db=source-db,input=source-input,default=source-default,mdsal=source-rest,capability=source-capability
+
+# Controller Blueprints Core Configuration
+controllerblueprints.blueprintDeployPath=/etc/blueprints/deploy
+controllerblueprints.blueprintArchivePath=/etc/blueprints/archive
+controllerblueprints.blueprintEnrichmentPath=/etc/blueprints/enrichment
+# Controller Blueprint Load Configurations
+# blueprints.load.initial-data may be overridden by ENV variables
+controllerblueprints.loadInitialData=true
+controllerblueprints.loadBluePrint=false
+controllerblueprints.loadBluePrintPaths=/model-catalog/blueprint-model/starter-blueprint
+controllerblueprints.loadModelType=true
+controllerblueprints.loadModeTypePaths=/model-catalog/definition-type/starter-type
+controllerblueprints.loadResourceDictionary=true
+controllerblueprints.loadResourceDictionaryPaths=/model-catalog/resource-dictionary/starter-dictionary
+
+# CBA file extension
+controllerblueprints.loadCbaExtension=zip
+
+# Web server config
+server.port=8080
\ No newline at end of file
diff --git a/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBluprintsApplicationTest.java b/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBlueprintsApplicationTest.java
similarity index 97%
rename from ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBluprintsApplicationTest.java
rename to ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBlueprintsApplicationTest.java
index 969f804..cf9b3e7 100644
--- a/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBluprintsApplicationTest.java
+++ b/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBlueprintsApplicationTest.java
@@ -30,7 +30,7 @@
 

 @RunWith(SpringRunner.class)

 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)

-public class ControllerBluprintsApplicationTest {

+public class ControllerBlueprintsApplicationTest {

     @Autowired

     private TestRestTemplate restTemplate;

 

diff --git a/ms/controllerblueprints/application/src/test/resources/application.properties b/ms/controllerblueprints/application/src/test/resources/application.properties
index 1fafd8b..9aebd79 100755
--- a/ms/controllerblueprints/application/src/test/resources/application.properties
+++ b/ms/controllerblueprints/application/src/test/resources/application.properties
@@ -33,7 +33,7 @@
 swagger.contact.email=brindasanth@onap.com

 

 # Load Resource Source Mappings

-resourceSourceMappings=db=source-db,input=source-input,default=source-default,mdsal=source-rest,capability=source-capability

+resourceSourceMappings=primary-db=source-primary-db,input=source-input,default=source-default,primary-config-data=source-rest,capability=source-capability

 

 # Controller Blueprints Core Configuration

 controllerblueprints.blueprintDeployPath=./target/blueprints/deploy

@@ -52,4 +52,7 @@
 controllerblueprints.loadCbaExtension=zip

 

 # CBA examples for tests cases

-controllerblueprints.loadBlueprintsExamplesPath=./../../../../components/model-catalog/blueprint-model/test-blueprints
\ No newline at end of file
+controllerblueprints.loadBlueprintsExamplesPath=./../../../../components/model-catalog/blueprint-model/test-blueprints

+

+# Web server config

+server.port=8080
\ No newline at end of file
diff --git a/ms/controllerblueprints/distribution/pom.xml b/ms/controllerblueprints/distribution/pom.xml
old mode 100644
new mode 100755
index 3057129..91d4bbc
--- a/ms/controllerblueprints/distribution/pom.xml
+++ b/ms/controllerblueprints/distribution/pom.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~  Copyright © 2017-2018 AT&T Intellectual Property.
+  ~  Modifications Copyright © 2019 Bell Canada.
   ~
   ~  Licensed under the Apache License, Version 2.0 (the "License");
   ~  you may not use this file except in compliance with the License.
@@ -30,10 +31,10 @@
         <name.space>org.onap.ccsdk.apps</name.space>     <!-- <name.space>${namespace}</name.space> -->
         <serviceArtifactName>controllerblueprints</serviceArtifactName>
         <image.name>onap/ccsdk-controllerblueprints</image.name>
-		<docker.buildArg.https_proxy>${https_proxy}</docker.buildArg.https_proxy>
-		<docker.push.phase>deploy</docker.push.phase>
-		<docker.verbose>true</docker.verbose>
-	</properties>
+        <docker.buildArg.https_proxy>${https_proxy}</docker.buildArg.https_proxy>
+        <docker.push.phase>deploy</docker.push.phase>
+        <docker.verbose>true</docker.verbose>
+    </properties>
 
     <dependencies>
         <dependency>
@@ -120,20 +121,20 @@
                         </goals>
                         <configuration>
                             <source>
-                                println project.properties['ccsdk.project.version'];
-                                def versionArray;
+                                println project.properties['ccsdk.project.version']
+                                def versionArray
                                 if (project.properties['ccsdk.project.version'] != null ) {
-                                    versionArray = project.properties['ccsdk.project.version'].split('\\.');
+                                    versionArray = project.properties['ccsdk.project.version'].split('\\.')
                                 }
 
                                 if (project.properties['ccsdk.project.version'].endsWith("-SNAPSHOT"))
                                 {
-                                    project.properties['project.docker.latesttag.version']=versionArray[0] + '.' + versionArray[1] + "-STAGING-latest";
+                                    project.properties['project.docker.latesttag.version']=versionArray[0] + '.' + versionArray[1] + "-STAGING-latest"
                                 } else {
-                                    project.properties['project.docker.latesttag.version']=versionArray[0]+'.' + versionArray[1]+"-STAGING-latest";
+                                    project.properties['project.docker.latesttag.version']=versionArray[0]+'.' + versionArray[1]+"-STAGING-latest"
                                 }
 
-                                println 'New Tag for docker:' + project.properties['project.docker.latesttag.version'];
+                                println 'New Tag for docker:' + project.properties['project.docker.latesttag.version']
                             </source>
                         </configuration>
                     </execution>
@@ -143,34 +144,34 @@
         </plugins>
     </build>
 
-	<profiles>
-		<profile>
-			<id>docker</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>io.fabric8</groupId>
-						<artifactId>docker-maven-plugin</artifactId>
-						<version>0.26.1</version>
-						<inherited>false</inherited>
-						<configuration>
-							<images>
-								<image>
-									<name>${image.name}</name>
-									<build>
-										<cleanup>try</cleanup>
-										<dockerFileDir>${basedir}/target/docker-stage</dockerFileDir>
-										<tags>
-											<tag>${project.version}</tag>
-											<tag>${project.version}-STAGING-${maven.build.timestamp}</tag>
-											<tag>${project.docker.latesttag.version}</tag>
-										</tags>
-									</build>
-								</image>
-							</images>
-							<verbose>true</verbose>
-						</configuration>
-						<executions>
+    <profiles>
+        <profile>
+            <id>docker</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>io.fabric8</groupId>
+                        <artifactId>docker-maven-plugin</artifactId>
+                        <version>0.26.1</version>
+                        <inherited>false</inherited>
+                        <configuration>
+                            <images>
+                                <image>
+                                    <name>${image.name}</name>
+                                    <build>
+                                        <cleanup>try</cleanup>
+                                        <dockerFileDir>${basedir}/target/docker-stage</dockerFileDir>
+                                        <tags>
+                                            <tag>${project.version}</tag>
+                                            <tag>${project.version}-STAGING-${maven.build.timestamp}</tag>
+                                            <tag>${project.docker.latesttag.version}</tag>
+                                        </tags>
+                                    </build>
+                                </image>
+                            </images>
+                            <verbose>true</verbose>
+                        </configuration>
+                        <executions>
                             <execution>
                                 <id>generate-images</id>
                                 <phase>package</phase>
@@ -186,11 +187,11 @@
                                     <goal>push</goal>
                                 </goals>
                             </execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
 
-	</profiles>
+    </profiles>
 </project>
diff --git a/ms/controllerblueprints/distribution/src/main/dc/docker-compose.yaml b/ms/controllerblueprints/distribution/src/main/dc/docker-compose.yaml
old mode 100644
new mode 100755
index eae2470..232bfc0
--- a/ms/controllerblueprints/distribution/src/main/dc/docker-compose.yaml
+++ b/ms/controllerblueprints/distribution/src/main/dc/docker-compose.yaml
@@ -1,37 +1,33 @@
-version: '3.3'
-
-services:
-   db:
-     image: mariadb:latest
-     container_name: cb-mariadb
-     ports:
-       - "3306:3306"
-     volumes:
-       - ~/vm_mysql:/var/lib/mysql
-     restart: always
-     environment:
-       MYSQL_ROOT_PASSWORD: sdnctl
-       MYSQL_DATABASE: sdnctl
-       MYSQL_USER: sdnctl
-       MYSQL_PASSWORD: sdnctl
-   controller-blueprints:
-     depends_on:
-       - db
-     image: onap/ccsdk-controllerblueprints:latest
-     container_name: cb-rest
-     ports:
-       - "8080:8080"
-     restart: always
-     volumes:
-       - ~/share/vm_ms/controllerblueprints/config:/opt/app/onap/config
-       - ~/share/vm_ms/controllerblueprints/logs:/logs
-     environment:
-       APPLICATIONNAME : ControllerBluePrints
-       BUNDLEVERSION: 1.0.0
-       APP_CONFIG_HOME: /opt/app/onap/config
-       DB_URL: jdbc:mysql://db:3306/sdnctl
-       DB_USER: sdnctl
-       DB_PASSWORD: sdnctl
-       INIT_DATA_LOAD: "true"
-       STICKYSELECTORKEY:
-       ENVCONTEXT: DEV
\ No newline at end of file
+version: '3.3'

+

+services:

+  db:

+    image: mariadb:latest

+    container_name: ccsdk-mariadb

+    ports:

+    - "3306:3306"

+    volumes:

+    - ~/vm_mysql:/var/lib/mysql

+    restart: always

+    environment:

+      MYSQL_ROOT_PASSWORD: sdnctl

+      MYSQL_DATABASE: sdnctl

+      MYSQL_USER: sdnctl

+      MYSQL_PASSWORD: sdnctl

+  controller-blueprints:

+    depends_on:

+    - db

+    image: onap/ccsdk-controllerblueprints:latest

+    container_name: cb-rest

+    ports:

+    - "8080:8080"

+    restart: always

+    volumes:

+    - ~/share/vm_ms/controllerblueprints/config:/opt/app/onap/config

+    - ~/share/vm_ms/controllerblueprints/logs:/logs

+    environment:

+      APPLICATIONNAME: ControllerBluePrints

+      BUNDLEVERSION: 1.0.0

+      APP_CONFIG_HOME: /opt/app/onap/config

+      STICKYSELECTORKEY:

+      ENVCONTEXT: dev
\ No newline at end of file
diff --git a/ms/controllerblueprints/distribution/src/main/docker/Dockerfile b/ms/controllerblueprints/distribution/src/main/docker/Dockerfile
old mode 100644
new mode 100755
index 6de589d..88577f5
--- a/ms/controllerblueprints/distribution/src/main/docker/Dockerfile
+++ b/ms/controllerblueprints/distribution/src/main/docker/Dockerfile
@@ -15,6 +15,7 @@
 && (cp -rf /source/app/opt/app/onap/lib /opt/app/onap/) \
 && (cp -rf /source/app/etc /) \
 && (cp -rf /source/app/model-catalog /) \
+&& (cp -rf /source/app/config /) \
 && (rm -rf /source)
 
-ENTRYPOINT /startService.sh
+ENTRYPOINT /startService.sh
\ No newline at end of file
diff --git a/ms/controllerblueprints/distribution/src/main/docker/distribution.xml b/ms/controllerblueprints/distribution/src/main/docker/distribution.xml
old mode 100644
new mode 100755
index c929f98..1555b43
--- a/ms/controllerblueprints/distribution/src/main/docker/distribution.xml
+++ b/ms/controllerblueprints/distribution/src/main/docker/distribution.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Copyright © 2017-2018 AT&T Intellectual Property.
+  ~ Modifications Copyright © 2019 Bell Canada.
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
@@ -59,6 +60,11 @@
             <useDefaultExcludes>true</useDefaultExcludes>
         </fileSet>
         <fileSet>
+            <directory>${project.basedir}/../application/opt/app/onap/config</directory>
+            <outputDirectory>./config</outputDirectory>
+            <useDefaultExcludes>true</useDefaultExcludes>
+        </fileSet>
+        <fileSet>
             <directory>${project.basedir}/../../../components/model-catalog</directory>
             <outputDirectory>./model-catalog</outputDirectory>
             <useDefaultExcludes>true</useDefaultExcludes>
diff --git a/ms/controllerblueprints/distribution/src/main/docker/startService.sh b/ms/controllerblueprints/distribution/src/main/docker/startService.sh
old mode 100644
new mode 100755
index 7077c22..84b2e5a
--- a/ms/controllerblueprints/distribution/src/main/docker/startService.sh
+++ b/ms/controllerblueprints/distribution/src/main/docker/startService.sh
@@ -5,4 +5,5 @@
 echo "APP Config HOME : ${APP_CONFIG_HOME}"
 export APP_HOME=/opt/app/onap
 
+cp -rf /config /opt/app/onap/
 source /etc/run.source
diff --git a/ms/controllerblueprints/modules/blueprint-scripts/pom.xml b/ms/controllerblueprints/modules/blueprint-scripts/pom.xml
new file mode 100644
index 0000000..46c88b4
--- /dev/null
+++ b/ms/controllerblueprints/modules/blueprint-scripts/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright © 2017-2018 AT&T Intellectual Property.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>modules</artifactId>
+        <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+        <version>0.4.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>blueprint-scripts</artifactId>
+    <name>Controller Blueprints Scripts</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+            <artifactId>resource-dict</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jetbrains.kotlin</groupId>
+            <artifactId>kotlin-compiler-embeddable</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jetbrains.kotlin</groupId>
+            <artifactId>kotlin-scripting-jvm-host</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jetbrains.kotlin</groupId>
+                    <artifactId>kotlin-compiler</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.jetbrains.kotlin</groupId>
+            <artifactId>kotlin-script-util</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jetbrains.kotlin</groupId>
+            <artifactId>kotlin-script-runtime</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BluePrintCompiledScript.kt b/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BluePrintCompiledScript.kt
new file mode 100644
index 0000000..8ac915b
--- /dev/null
+++ b/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BluePrintCompiledScript.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.ccsdk.apps.controllerblueprints.scripts
+
+import java.io.File
+import java.io.Serializable
+import java.net.URL
+import java.net.URLClassLoader
+import kotlin.reflect.KClass
+import kotlin.script.experimental.api.*
+
+open class BluePrintCompiledScript<out JarFile : File>(
+        private val scriptCompilationConfiguration: ScriptCompilationConfiguration,
+        private val compiledJar: File) :
+        CompiledScript<JarFile>, Serializable {
+
+    lateinit var scriptClassFQName: String
+
+    override val compilationConfiguration: ScriptCompilationConfiguration
+        get() = scriptCompilationConfiguration
+
+    override suspend fun getClass(scriptEvaluationConfiguration: ScriptEvaluationConfiguration?): ResultWithDiagnostics<KClass<*>> = try {
+
+        val baseClassLoader = Thread.currentThread().contextClassLoader
+
+        val urls = arrayListOf<URL>()
+        urls.add(compiledJar.toURI().toURL())
+        val classLoaderWithDependencies = URLClassLoader(urls.toTypedArray(), baseClassLoader)
+
+        val clazz = classLoaderWithDependencies.loadClass(scriptClassFQName).kotlin
+        clazz.asSuccess()
+    } catch (e: Throwable) {
+        ResultWithDiagnostics.Failure(
+                ScriptDiagnostic(
+                        "Unable to instantiate class $scriptClassFQName",
+                        exception = e
+                )
+        )
+    }
+
+}
+
diff --git a/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BluePrintCompilerProxy.kt b/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BluePrintCompilerProxy.kt
new file mode 100644
index 0000000..7e9e868
--- /dev/null
+++ b/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BluePrintCompilerProxy.kt
@@ -0,0 +1,150 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.ccsdk.apps.controllerblueprints.scripts
+
+import org.jetbrains.kotlin.com.intellij.openapi.util.Disposer
+import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
+import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoots
+import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback
+import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
+import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
+import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
+import org.jetbrains.kotlin.cli.common.messages.MessageCollector
+import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
+import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
+import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler
+import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
+import org.jetbrains.kotlin.config.*
+import org.slf4j.LoggerFactory
+import java.io.File
+import kotlin.script.experimental.api.*
+import kotlin.script.experimental.host.ScriptingHostConfiguration
+import kotlin.script.experimental.jvm.util.classpathFromClasspathProperty
+import kotlin.script.experimental.jvmhost.KJvmCompilerProxy
+
+open class BluePrintsCompilerProxy(private val hostConfiguration: ScriptingHostConfiguration) : KJvmCompilerProxy {
+
+    private val log = LoggerFactory.getLogger(BluePrintsCompilerProxy::class.java)!!
+
+    override fun compile(script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration)
+            : ResultWithDiagnostics<CompiledScript<*>> {
+
+        val messageCollector = ScriptDiagnosticsMessageCollector()
+
+        fun failure(vararg diagnostics: ScriptDiagnostic): ResultWithDiagnostics.Failure =
+                ResultWithDiagnostics.Failure(*messageCollector.diagnostics.toTypedArray(), *diagnostics)
+
+        // Compile the Code
+        try {
+
+            log.trace("Scripting Host Configuration : $hostConfiguration")
+
+            setIdeaIoUseFallback()
+
+            val blueprintSourceCode = script as BluePrintSourceCode
+
+            val compiledJarFile = blueprintSourceCode.targetJarFile
+
+            if (!compiledJarFile.exists() || blueprintSourceCode.regenerate) {
+
+                var environment: KotlinCoreEnvironment? = null
+
+                val rootDisposable = Disposer.newDisposable()
+
+                val compilerConfiguration = CompilerConfiguration().apply {
+
+                    put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
+                    put(CommonConfigurationKeys.MODULE_NAME, blueprintSourceCode.moduleName)
+                    put(JVMConfigurationKeys.OUTPUT_JAR, compiledJarFile)
+                    put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, false)
+
+                    // Load Current Class loader to Compilation Class loader
+                    val currentClassLoader = classpathFromClasspathProperty()
+                    currentClassLoader?.forEach {
+                        add(CLIConfigurationKeys.CONTENT_ROOTS, JvmClasspathRoot(it))
+                    }
+
+                    // Add all Kotlin Sources
+                    addKotlinSourceRoots(blueprintSourceCode.blueprintKotlinSources)
+
+                    languageVersionSettings = LanguageVersionSettingsImpl(
+                            LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, mapOf(AnalysisFlags.skipMetadataVersionCheck to true)
+                    )
+                }
+
+                //log.info("Executing with compiler configuration : $compilerConfiguration")
+
+                environment = KotlinCoreEnvironment.createForProduction(rootDisposable, compilerConfiguration,
+                        EnvironmentConfigFiles.JVM_CONFIG_FILES)
+
+                // Compile Kotlin Sources
+                val compiled = KotlinToJVMBytecodeCompiler.compileBunchOfSources(environment)
+
+                log.info("Generated jar(${compiledJarFile.absolutePath}) status : $compiled}")
+
+                val analyzerWithCompilerReport = AnalyzerWithCompilerReport(messageCollector,
+                        environment.configuration.languageVersionSettings)
+
+                if (analyzerWithCompilerReport.hasErrors()) {
+                    return failure()
+                }
+            }
+
+            val res = BluePrintCompiledScript<File>(scriptCompilationConfiguration, compiledJarFile)
+
+            return ResultWithDiagnostics.Success(res, messageCollector.diagnostics)
+
+        } catch (ex: Throwable) {
+            return failure(ex.asDiagnostics())
+        }
+    }
+}
+
+class ScriptDiagnosticsMessageCollector : MessageCollector {
+
+    private val _diagnostics = arrayListOf<ScriptDiagnostic>()
+
+    val diagnostics: List<ScriptDiagnostic> get() = _diagnostics
+
+    override fun clear() {
+        _diagnostics.clear()
+    }
+
+    override fun hasErrors(): Boolean =
+            _diagnostics.any { it.severity == ScriptDiagnostic.Severity.ERROR }
+
+
+    override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) {
+        val mappedSeverity = when (severity) {
+            CompilerMessageSeverity.EXCEPTION,
+            CompilerMessageSeverity.ERROR -> ScriptDiagnostic.Severity.ERROR
+            CompilerMessageSeverity.STRONG_WARNING,
+            CompilerMessageSeverity.WARNING -> ScriptDiagnostic.Severity.WARNING
+            CompilerMessageSeverity.INFO -> ScriptDiagnostic.Severity.INFO
+            CompilerMessageSeverity.LOGGING -> ScriptDiagnostic.Severity.DEBUG
+            else -> null
+        }
+        if (mappedSeverity != null) {
+            val mappedLocation = location?.let {
+                if (it.line < 0 && it.column < 0) null // special location created by CompilerMessageLocation.create
+                else SourceCode.Location(SourceCode.Position(it.line, it.column))
+            }
+            _diagnostics.add(ScriptDiagnostic(message, mappedSeverity, location?.path, mappedLocation))
+        }
+    }
+}
+
diff --git a/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BluePrintScriptConfiguration.kt b/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BluePrintScriptConfiguration.kt
new file mode 100644
index 0000000..3b3a590
--- /dev/null
+++ b/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BluePrintScriptConfiguration.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.ccsdk.apps.controllerblueprints.scripts
+
+import java.io.File
+import kotlin.script.experimental.annotations.KotlinScript
+import kotlin.script.experimental.api.ScriptCompilationConfiguration
+import kotlin.script.experimental.api.SourceCode
+import kotlin.script.experimental.api.defaultImports
+import kotlin.script.experimental.jvm.jvm
+import kotlin.script.experimental.jvm.util.classpathFromClassloader
+
+@KotlinScript(
+        fileExtension = "cba.kts",
+        compilationConfiguration = BluePrintScripCompilationConfiguration::class,
+        displayName = "Controller Blueprint Archive Kotlin Scripts"
+)
+abstract class BluePrintKotlinScript
+
+object BluePrintScripCompilationConfiguration : ScriptCompilationConfiguration(
+        {
+            defaultImports(
+                    "org.onap.ccsdk.apps.controllerblueprints.core.*",
+                    "org.onap.ccsdk.apps.controllerblueprints.core.data.*",
+                    "org.onap.ccsdk.apps.controllerblueprints.core.interfaces.*",
+                    "org.onap.ccsdk.apps.controllerblueprints.core.services.*",
+                    "org.onap.ccsdk.apps.controllerblueprints.core.utils.*")
+            jvm {
+                classpathFromClassloader(BluePrintScripCompilationConfiguration::class.java.classLoader)
+            }
+        }
+)
+
+open class BluePrintSourceCode : SourceCode {
+    lateinit var blueprintKotlinSources: MutableList<String>
+    lateinit var moduleName: String
+    lateinit var targetJarFile: File
+    var regenerate: Boolean = false
+
+    override val text: String
+        get() = ""
+
+    override val locationId: String? = null
+
+    override val name: String?
+        get() = moduleName
+}
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BlueprintScriptingHost.kt b/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BlueprintScriptingHost.kt
similarity index 72%
rename from components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BlueprintScriptingHost.kt
rename to ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BlueprintScriptingHost.kt
index bda20a4..59ce4ab 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/script/BlueprintScriptingHost.kt
+++ b/ms/controllerblueprints/modules/blueprint-scripts/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BlueprintScriptingHost.kt
@@ -14,19 +14,21 @@
  * limitations under the License.
  */
 
-package org.onap.ccsdk.apps.controllerblueprints.core.script
+package org.onap.ccsdk.apps.controllerblueprints.scripts
 
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
 import org.slf4j.LoggerFactory
+import java.util.*
 import kotlin.script.experimental.api.*
 import kotlin.script.experimental.host.BasicScriptingHost
 import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
 import kotlin.script.experimental.jvmhost.JvmScriptCompiler
+import kotlin.script.experimental.jvmhost.impl.withDefaults
 
-val defaultBlueprintScriptCompiler = JvmScriptCompiler(defaultJvmScriptingHostConfiguration)
+val blueprintScriptCompiler = JvmScriptCompiler(defaultJvmScriptingHostConfiguration,
+        BluePrintsCompilerProxy(defaultJvmScriptingHostConfiguration.withDefaults()))
 
-open class BlueprintScriptingHost(evaluator: ScriptEvaluator
-) : BasicScriptingHost(defaultBlueprintScriptCompiler, evaluator) {
+open class BlueprintScriptingHost(evaluator: ScriptEvaluator) : BasicScriptingHost(blueprintScriptCompiler, evaluator) {
 
     override fun eval(
             script: SourceCode,
@@ -44,19 +46,24 @@
 }
 
 
-open class BluePrintScriptEvaluator(private val scriptClassName: String) : ScriptEvaluator {
+open class BluePrintScriptEvaluator<T>(private val scriptClassName: String) : ScriptEvaluator {
 
-    val log = LoggerFactory.getLogger(BluePrintScriptEvaluator::class.java)!!
+    private val log = LoggerFactory.getLogger(BluePrintScriptEvaluator::class.java)!!
 
     override suspend operator fun invoke(
             compiledScript: CompiledScript<*>,
             scriptEvaluationConfiguration: ScriptEvaluationConfiguration?
     ): ResultWithDiagnostics<EvaluationResult> =
             try {
+                log.info("Getting class name($scriptClassName) of type() from the compiled sources ")
+                val bluePrintCompiledScript = compiledScript as BluePrintCompiledScript
+                bluePrintCompiledScript.scriptClassFQName = scriptClassName
+
                 val res = compiledScript.getClass(scriptEvaluationConfiguration)
                 when (res) {
                     is ResultWithDiagnostics.Failure -> res
                     is ResultWithDiagnostics.Success -> {
+
                         val scriptClass = res.value
                         val args = ArrayList<Any?>()
                         scriptEvaluationConfiguration?.get(ScriptEvaluationConfiguration.providedProperties)?.forEach {
@@ -69,21 +76,13 @@
                             args.addAll(it)
                         }
 
-                        val completeScriptClass = "Script\$$scriptClassName"
-                        log.info("Searching for class type($completeScriptClass)")
-                        /**
-                         * Search for Class Name
-                         */
-                        val instanceClass = scriptClass.java.classes
-                                .single { it.name == completeScriptClass }
-                                //.single { it.name == "Script\$SampleBlueprintsFunctionNode" }
-
-
-                        val instance = instanceClass.newInstance()
+                        val instance = scriptClass.java.newInstance() as? T
                                 ?: throw BluePrintProcessorException("failed to create instance from the script")
 
-                        ResultWithDiagnostics.Success(EvaluationResult(ResultValue.Value(completeScriptClass,
-                                instance, instance.javaClass.typeName),
+                        log.info("Created script instance successfully....")
+
+                        ResultWithDiagnostics.Success(EvaluationResult(ResultValue.Value(scriptClass.qualifiedName!!,
+                                instance, "", instance),
                                 scriptEvaluationConfiguration))
                     }
                 }
diff --git a/ms/controllerblueprints/modules/blueprint-scripts/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BlueprintScriptingHostTest.kt b/ms/controllerblueprints/modules/blueprint-scripts/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BlueprintScriptingHostTest.kt
new file mode 100644
index 0000000..4b6f2a4
--- /dev/null
+++ b/ms/controllerblueprints/modules/blueprint-scripts/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/scripts/BlueprintScriptingHostTest.kt
@@ -0,0 +1,88 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.ccsdk.apps.controllerblueprints.scripts
+
+
+import org.apache.commons.io.FileUtils
+import org.junit.Ignore
+import org.junit.Test
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BlueprintFunctionNode
+import java.io.File
+import kotlin.script.experimental.jvm.util.classpathFromClass
+import kotlin.script.experimental.jvm.util.classpathFromClassloader
+import kotlin.script.experimental.jvm.util.classpathFromClasspathProperty
+import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate
+
+class BlueprintScriptingHostTest {
+
+    @Test
+    @Ignore
+    fun `test classpaths`() {
+
+        println(" *********** classpathFromClass  *********** ")
+        classpathFromClass(BlueprintScriptingHostTest::class.java.classLoader,
+                BlueprintScriptingHostTest::class)!!
+                .forEach(::println)
+
+        println(" *********** classpathFromClassloader  *********** ")
+        classpathFromClassloader(BlueprintScriptingHostTest::class.java.classLoader)!!
+                .forEach(::println)
+
+        println(" *********** classpathFromClasspathProperty  *********** ")
+        classpathFromClasspathProperty()!!
+                .forEach(::println)
+    }
+
+    @Test
+    fun `test same script two folders`() {
+
+        FileUtils.forceMkdir(File("target/scripts1/"))
+        FileUtils.forceMkdir(File("target/scripts2/"))
+
+        val scriptSource1 = BluePrintSourceCode()
+        scriptSource1.moduleName = "blueprint-test-script"
+
+        scriptSource1.targetJarFile = File("target/scripts1/blueprint-script-generated.jar")
+        val sources1: MutableList<String> = arrayListOf()
+        sources1.add("src/test/resources/scripts1")
+        scriptSource1.blueprintKotlinSources = sources1
+
+        val scriptClassName = "Simple_cba\$SampleComponentFunction"
+
+        val compilationConfiguration = createJvmCompilationConfigurationFromTemplate<BluePrintKotlinScript>()
+
+        val scriptEvaluator = BluePrintScriptEvaluator<BlueprintFunctionNode<String, String>>(scriptClassName)
+
+        val scriptSource2 = BluePrintSourceCode()
+        scriptSource2.moduleName = "blueprint-test-script"
+
+        scriptSource2.targetJarFile = File("target/scripts2/blueprint-script-generated.jar")
+        val sources2: MutableList<String> = arrayListOf()
+        sources2.add("src/test/resources/scripts2")
+        scriptSource2.blueprintKotlinSources = sources2
+
+        for (i in 1..2) {
+            val evalResponse = BlueprintScriptingHost(scriptEvaluator).eval(scriptSource1, compilationConfiguration,
+                    null)
+        }
+
+        for (i in 1..2) {
+            val evalResponse = BlueprintScriptingHost(scriptEvaluator).eval(scriptSource2, compilationConfiguration,
+                    null)
+        }
+    }
+}
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/blueprint-scripts/src/test/resources/scripts1/simple.cba.kts b/ms/controllerblueprints/modules/blueprint-scripts/src/test/resources/scripts1/simple.cba.kts
new file mode 100644
index 0000000..9f61c64
--- /dev/null
+++ b/ms/controllerblueprints/modules/blueprint-scripts/src/test/resources/scripts1/simple.cba.kts
@@ -0,0 +1,55 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.onap.ccsdk.apps.controllerblueprints.core.asJsonPrimitive
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BlueprintFunctionNode
+import org.springframework.stereotype.Service
+
+@Service
+open class SampleComponentFunction : BlueprintFunctionNode<String, String> {
+
+    override fun getName(): String {
+        println("Printing Name....." + "sample".asJsonPrimitive())
+        return "my Name"
+    }
+
+    override fun prepareRequest(executionRequest: String): String {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun process(executionRequest: String) {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun recover(runtimeException: RuntimeException, executionRequest: String) {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun prepareResponse(): String {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun apply(t: String): String {
+        return "Script 1 response - $t"
+    }
+}
+
+val blueprintFunction = SampleComponentFunction()
+
+val serviceTemplate = ServiceTemplate()
+
+println("Simple script printing....")
diff --git a/ms/controllerblueprints/modules/blueprint-scripts/src/test/resources/scripts2/simple.cba.kts b/ms/controllerblueprints/modules/blueprint-scripts/src/test/resources/scripts2/simple.cba.kts
new file mode 100644
index 0000000..8451725
--- /dev/null
+++ b/ms/controllerblueprints/modules/blueprint-scripts/src/test/resources/scripts2/simple.cba.kts
@@ -0,0 +1,55 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.onap.ccsdk.apps.controllerblueprints.core.asJsonPrimitive
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BlueprintFunctionNode
+import org.springframework.stereotype.Service
+
+@Service
+open class SampleComponentFunction : BlueprintFunctionNode<String, String> {
+
+    override fun getName(): String {
+        println("Printing Name....." + "sample".asJsonPrimitive())
+        return "my Name"
+    }
+
+    override fun prepareRequest(executionRequest: String): String {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun process(executionRequest: String) {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun recover(runtimeException: RuntimeException, executionRequest: String) {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun prepareResponse(): String {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun apply(t: String): String {
+       return "Script 2 response - $t"
+    }
+}
+
+val blueprintFunction = SampleComponentFunction()
+
+val serviceTemplate = ServiceTemplate()
+
+println("Simple script printing....")
diff --git a/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/BlueprintCatalogServiceImpl.kt b/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/BlueprintCatalogServiceImpl.kt
index 881e3bc..3ba729d 100644
--- a/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/BlueprintCatalogServiceImpl.kt
+++ b/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/BlueprintCatalogServiceImpl.kt
@@ -17,66 +17,66 @@
 
 package org.onap.ccsdk.apps.controllerblueprints.db.resources
 
-import org.onap.ccsdk.apps.controllerblueprints.core.config.BluePrintLoadConfiguration
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintCatalogService
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintValidatorService
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintArchiveUtils
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintFileUtils
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
 import java.io.File
+import java.nio.file.Path
+import java.util.*
 import javax.persistence.MappedSuperclass
 
 @MappedSuperclass
-abstract class BlueprintCatalogServiceImpl(private val bluePrintLoadConfiguration: BluePrintLoadConfiguration) : BluePrintCatalogService {
+abstract class BlueprintCatalogServiceImpl(private val blueprintValidator: BluePrintValidatorService)
+    : BluePrintCatalogService {
 
-    override fun uploadToDataBase(file: String, validate: Boolean): String {
-        // The file name provided here is unique as we transform to UUID before storing
-        val blueprintFile = File(file)
-        val fileName = blueprintFile.name
-        val id = BluePrintFileUtils.stripFileExtension(fileName)
-        // If the file is directory
+    override fun saveToDatabase(blueprintFile: File, validate: Boolean): String {
+        val extractedDirectory: File
+        val archivedDirectory: File
+        val toDeleteDirectory: File
+        val blueprintId = UUID.randomUUID().toString()
+
         if (blueprintFile.isDirectory) {
+            extractedDirectory = blueprintFile
+            archivedDirectory = File(":$blueprintFile.zip")
+            toDeleteDirectory = archivedDirectory
 
-            val zipFile = File("${bluePrintLoadConfiguration.blueprintArchivePath}/$fileName")
-            // zip the directory
-            BluePrintArchiveUtils.compress(blueprintFile, zipFile, true)
-
-            // Upload to the Data Base
-            saveToDataBase(blueprintFile, id, zipFile)
-
-            // After Upload to Database delete the zip file
-            zipFile.delete()
-
+            if (!BluePrintArchiveUtils.compress(blueprintFile, archivedDirectory, true)) {
+                throw BluePrintException("Fail to compress blueprint")
+            }
         } else {
-            // If the file is ZIP
-            // unzip the CBA file to validate before store in database
-            val targetDir = "${bluePrintLoadConfiguration.blueprintDeployPath}/$id/"
-            val extractedDirectory = BluePrintArchiveUtils.deCompress(blueprintFile, targetDir)
+            val targetDir = "${blueprintFile.parent}/${BluePrintFileUtils.stripFileExtension(blueprintFile.name)}"
 
-            // Upload to the Data Base
-            saveToDataBase(extractedDirectory, id, blueprintFile)
-
-            // After Upload to Database delete the zip file
-            blueprintFile.delete()
-            extractedDirectory.delete()
+            extractedDirectory = BluePrintArchiveUtils.deCompress(blueprintFile, targetDir)
+            archivedDirectory = blueprintFile
+            toDeleteDirectory = extractedDirectory
         }
 
-        return id
+        if (validate) {
+            blueprintValidator.validateBluePrints(extractedDirectory.path)
+        }
+
+        val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime(blueprintId, extractedDirectory.path)
+        val metadata = bluePrintRuntimeService.bluePrintContext().metadata!!
+        metadata[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID] = blueprintId
+
+        save(metadata, archivedDirectory)
+
+        toDeleteDirectory.deleteRecursively()
+
+        return blueprintId
     }
 
-    override fun downloadFromDataBase(name: String, version: String, path: String): String {
-        // If path ends with zip, then compress otherwise download as extracted folder
+    override fun getFromDatabase(name: String, version: String, extract: Boolean): Path = get(name, version, extract)
+            ?: throw BluePrintException("Could not find blueprint $name:$version from database")
 
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
+    override fun deleteFromDatabase(name: String, version: String) = delete(name, version)
 
-    override fun downloadFromDataBase(uuid: String, path: String): String {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
+    abstract fun save(metadata: MutableMap<String, String>, archiveFile: File)
+    abstract fun get(name: String, version: String, extract: Boolean): Path?
+    abstract fun delete(name: String, version: String)
 
-    override fun prepareBluePrint(name: String, version: String): String {
-        val preparedPath = "${bluePrintLoadConfiguration.blueprintDeployPath}/$name/$version"
-        downloadFromDataBase(name, version, preparedPath)
-        return preparedPath
-    }
-
-    abstract fun saveToDataBase(extractedDirectory: File, id: String, archiveFile: File, checkValidity: Boolean? = false)
 }
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/repository/ModelContentRepository.kt b/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/repository/ModelContentRepository.kt
index 4965677..680f1b2 100644
--- a/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/repository/ModelContentRepository.kt
+++ b/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/repository/ModelContentRepository.kt
@@ -43,25 +43,24 @@
      *
      * @param blueprintModel blueprintModel
      * @param contentType contentType
-     * @return Optional<B>
+     * @return B?
      */
-    fun findTopByBlueprintModelAndContentType(blueprintModel: T,
-                                              contentType: String): Optional<B>
+    fun findTopByBlueprintModelAndContentType(blueprintModel: T, contentType: String): B?
 
     /**
      * This is a findByBlueprintModelAndContentType method
      *
      * @param blueprintModel blueprintModel
      * @param contentType contentType
-     * @return Optional<BlueprintModelContent>
+     * @return List<B>
      */
     fun findByBlueprintModelAndContentType(blueprintModel: T, contentType: String): List<B>
 
     /**
      * This is a findByBlueprintModel method
      *
-     * @param blueprintModel B
-     * @return Optional<T>
+     * @param blueprintModel T
+     * @return List<B>
      */
     fun findByBlueprintModel(blueprintModel: T): List<B>
 
@@ -71,15 +70,14 @@
      * @param blueprintModel blueprintModel
      * @param contentType contentType
      * @param name name
-     * @return Optional<B>
+     * @return B?
      */
-    fun findByBlueprintModelAndContentTypeAndName(blueprintModel: T,
-                                                  contentType: String, name: String): Optional<B>
+    fun findByBlueprintModelAndContentTypeAndName(blueprintModel: T, contentType: String, name: String): B?
 
     /**
      * This is a deleteByMdeleteByBlueprintModelodelName method
      *
-     * @param blueprintModel B
+     * @param blueprintModel T
      */
     fun deleteByBlueprintModel(blueprintModel: T)
 
@@ -90,4 +88,4 @@
      */
     override fun deleteById(@NotNull id: String)
 
-}
\ No newline at end of file
+}
diff --git a/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/repository/ModelRepository.kt b/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/repository/ModelRepository.kt
index c31f009..e796c36 100644
--- a/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/repository/ModelRepository.kt
+++ b/ms/controllerblueprints/modules/db-resources/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/db/resources/repository/ModelRepository.kt
@@ -18,9 +18,10 @@
 package org.onap.ccsdk.apps.controllerblueprints.db.resources.repository
 
 import org.jetbrains.annotations.NotNull
-import java.util.Optional
 import org.springframework.data.jpa.repository.JpaRepository
 import org.springframework.data.repository.NoRepositoryBean
+import java.util.*
+import javax.transaction.Transactional
 
 /**
  * @param <T> Model
@@ -42,23 +43,23 @@
      *
      * @param artifactName artifactName
      * @param artifactVersion artifactVersion
-     * @return Optional<T>
+     * @return T?
      */
-    fun findByArtifactNameAndArtifactVersion(artifactName: String, artifactVersion: String): Optional<T>
+    fun findByArtifactNameAndArtifactVersion(artifactName: String, artifactVersion: String): T?
 
     /**
      * This is a findTopByArtifactNameOrderByArtifactIdDesc method
      *
      * @param artifactName artifactName
-     * @return Optional<T>
+     * @return T?
      */
-    fun findTopByArtifactNameOrderByArtifactVersionDesc(artifactName: String): Optional<T>
+    fun findTopByArtifactNameOrderByArtifactVersionDesc(artifactName: String): T?
 
     /**
      * This is a findTopByArtifactName method
      *
      * @param artifactName artifactName
-     * @return Optional<T>
+     * @return List<T>
      */
     fun findTopByArtifactName(artifactName: String): List<T>
 
@@ -66,7 +67,7 @@
      * This is a findByTagsContainingIgnoreCase method
      *
      * @param tags tags
-     * @return Optional<ModelType>
+     * @return List<T>
      */
     fun findByTagsContainingIgnoreCase(tags: String): List<T>
 
@@ -76,6 +77,7 @@
      * @param artifactName artifactName
      * @param artifactVersion artifactVersion
      */
+    @Transactional
     fun deleteByArtifactNameAndArtifactVersion(artifactName: String, artifactVersion: String)
 
     /**
@@ -85,4 +87,4 @@
      */
     override fun deleteById(@NotNull id: String)
 
-}
+}
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/pom.xml b/ms/controllerblueprints/modules/pom.xml
index 3857ef5..834db24 100644
--- a/ms/controllerblueprints/modules/pom.xml
+++ b/ms/controllerblueprints/modules/pom.xml
@@ -30,6 +30,7 @@
         <module>service</module>
         <module>blueprint-validation</module>
         <module>db-resources</module>
+        <module>blueprint-scripts</module>
     </modules>
 
     <build>
diff --git a/ms/controllerblueprints/modules/service/pom.xml b/ms/controllerblueprints/modules/service/pom.xml
index 9868b17..73fe073 100644
--- a/ms/controllerblueprints/modules/service/pom.xml
+++ b/ms/controllerblueprints/modules/service/pom.xml
@@ -32,10 +32,6 @@
     <dependencies>
         <dependency>
             <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
-            <artifactId>core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
             <artifactId>db-resources</artifactId>
         </dependency>
         <dependency>
@@ -44,7 +40,7 @@
         </dependency>
         <dependency>
             <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
-            <artifactId>resource-dict</artifactId>
+            <artifactId>blueprint-scripts</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.velocity</groupId>
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BlueprintModelService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BlueprintModelService.java
deleted file mode 100644
index e80fa8c..0000000
--- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BlueprintModelService.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*

- * Copyright © 2017-2018 AT&T Intellectual Property.

- * Modifications Copyright © 2019 Bell Canada.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-package org.onap.ccsdk.apps.controllerblueprints.service;

-

-import org.jetbrains.annotations.NotNull;

-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;

-import org.onap.ccsdk.apps.controllerblueprints.core.common.ApplicationConstants;

-import org.onap.ccsdk.apps.controllerblueprints.core.config.BluePrintLoadConfiguration;

-import org.onap.ccsdk.apps.controllerblueprints.core.data.ErrorCode;

-import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintCatalogService;

-import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintFileUtils;

-import org.onap.ccsdk.apps.controllerblueprints.service.domain.BlueprintModel;

-import org.onap.ccsdk.apps.controllerblueprints.service.domain.BlueprintModelSearch;

-import org.onap.ccsdk.apps.controllerblueprints.service.repository.ControllerBlueprintModelContentRepository;

-import org.onap.ccsdk.apps.controllerblueprints.service.repository.ControllerBlueprintModelRepository;

-import org.onap.ccsdk.apps.controllerblueprints.service.repository.ControllerBlueprintModelSearchRepository;

-import org.onap.ccsdk.apps.controllerblueprints.service.utils.BluePrintEnhancerUtils;

-import org.springframework.beans.factory.annotation.Autowired;

-import org.springframework.core.io.ByteArrayResource;

-import org.springframework.core.io.Resource;

-import org.springframework.http.HttpHeaders;

-import org.springframework.http.MediaType;

-import org.springframework.http.ResponseEntity;

-import org.springframework.http.codec.multipart.FilePart;

-import org.springframework.stereotype.Service;

-import org.springframework.transaction.annotation.Transactional;

-import reactor.core.publisher.Mono;

-

-import java.io.IOException;

-import java.nio.file.Path;

-import java.util.List;

-import java.util.Optional;

-

-/**

- * BlueprintModelService.java Purpose: Provide Service Template Service processing BlueprintModelService

- *

- * @author Brinda Santh

- * @version 1.0

- */

-

-@Service

-public class BlueprintModelService {

-

-    @Autowired

-    private BluePrintLoadConfiguration bluePrintLoadConfiguration;

-

-    @Autowired

-    private BluePrintCatalogService bluePrintCatalogService;

-

-    @Autowired

-    private ControllerBlueprintModelSearchRepository blueprintModelSearchRepository;

-

-    @Autowired

-    private ControllerBlueprintModelRepository blueprintModelRepository;

-

-    @Autowired

-    private ControllerBlueprintModelContentRepository blueprintModelContentRepository;

-

-    private static final String BLUEPRINT_MODEL_ID_FAILURE_MSG = "failed to get blueprint model id(%s) from repo";

-    private static final String BLUEPRINT_MODEL_NAME_VERSION_FAILURE_MSG = "failed to get blueprint model by name(%s)" +

-                                                                    " and version(%s) from repo";

-

-    /**

-     * This is a saveBlueprintModel method

-     *

-     * @param filePart filePart

-     * @return Mono<BlueprintModelSearch>

-     * @throws BluePrintException BluePrintException

-     */

-    public Mono<BlueprintModelSearch> saveBlueprintModel(FilePart filePart) throws BluePrintException {

-        try {

-            Path cbaLocation = BluePrintFileUtils.Companion

-                    .getCbaStorageDirectory(bluePrintLoadConfiguration.blueprintArchivePath);

-            return BluePrintEnhancerUtils.Companion.saveCBAFile(filePart, cbaLocation).map(fileName -> {

-                String blueprintId = bluePrintCatalogService

-                        .uploadToDataBase(cbaLocation.resolve(fileName).toString(), false);

-                return blueprintModelSearchRepository.findById(blueprintId).get();

-            });

-        } catch (IOException e) {

-            throw new BluePrintException(ErrorCode.IO_FILE_INTERRUPT.getValue(),

-                    String.format("I/O Error while uploading the CBA file: %s", e.getMessage()), e);

-        }

-    }

-

-    /**

-     * This is a publishBlueprintModel method to change the status published to YES

-     *

-     * @param id id

-     * @return BlueprintModelSearch

-     * @throws BluePrintException BluePrintException

-     */

-    public BlueprintModelSearch publishBlueprintModel(String id) throws BluePrintException {

-        BlueprintModelSearch blueprintModelSearch;

-        Optional<BlueprintModelSearch> dbBlueprintModel = blueprintModelSearchRepository.findById(id);

-        if (dbBlueprintModel.isPresent()) {

-            blueprintModelSearch = dbBlueprintModel.get();

-        } else {

-            String msg = String.format(BLUEPRINT_MODEL_ID_FAILURE_MSG, id);

-            throw new BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.getValue(), msg);

-        }

-        blueprintModelSearch.setPublished(ApplicationConstants.ACTIVE_Y);

-        return blueprintModelSearchRepository.saveAndFlush(blueprintModelSearch);

-    }

-

-    /**

-     * This is a searchBlueprintModels method

-     *

-     * @param tags tags

-     * @return List<BlueprintModelSearch>

-     */

-    public List<BlueprintModelSearch> searchBlueprintModels(String tags) {

-        return blueprintModelSearchRepository.findByTagsContainingIgnoreCase(tags);

-    }

-

-    /**

-     * This is a getBlueprintModelSearchByNameAndVersion method

-     *

-     * @param name name

-     * @param version version

-     * @return BlueprintModelSearch

-     * @throws BluePrintException BluePrintException

-     */

-    public BlueprintModelSearch getBlueprintModelSearchByNameAndVersion(@NotNull String name, @NotNull String version)

-            throws BluePrintException {

-        BlueprintModelSearch blueprintModelSearch;

-        Optional<BlueprintModelSearch> dbBlueprintModel = blueprintModelSearchRepository

-                .findByArtifactNameAndArtifactVersion(name, version);

-        if (dbBlueprintModel.isPresent()) {

-            blueprintModelSearch = dbBlueprintModel.get();

-        } else {

-            throw new BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.getValue(),

-                    String.format(BLUEPRINT_MODEL_NAME_VERSION_FAILURE_MSG, name, version));

-        }

-        return blueprintModelSearch;

-    }

-

-    /**

-     * This is a downloadBlueprintModelFileByNameAndVersion method to download a Blueprint by Name and Version

-     *

-     * @param name    name

-     * @param version version

-     * @return ResponseEntity<Resource>

-     * @throws BluePrintException BluePrintException

-     */

-    public ResponseEntity<Resource> downloadBlueprintModelFileByNameAndVersion(@NotNull String name, @NotNull String version)

-            throws BluePrintException {

-        BlueprintModel blueprintModel;

-        try {

-            blueprintModel = getBlueprintModelByNameAndVersion(name, version);

-        } catch (BluePrintException e) {

-            throw new BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.getValue(), String.format("Error while " +

-                    "downloading the CBA file: %s", e.getMessage()), e);

-        }

-        String fileName = blueprintModel.getId() + ".zip";

-        byte[] file = blueprintModel.getBlueprintModelContent().getContent();

-        return prepareResourceEntity(fileName, file);

-    }

-

-    /**

-     * This is a downloadBlueprintModelFile method to find the target file to download and return a file resource

-     *

-     * @return ResponseEntity<Resource>

-     * @throws BluePrintException BluePrintException

-     */

-    public ResponseEntity<Resource> downloadBlueprintModelFile(@NotNull String id) throws BluePrintException {

-        BlueprintModel blueprintModel;

-        try {

-            blueprintModel = getBlueprintModel(id);

-        } catch (BluePrintException e) {

-            throw new BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.getValue(), String.format("Error while " +

-                    "downloading the CBA file: %s", e.getMessage()), e);

-        }

-        String fileName = blueprintModel.getId() + ".zip";

-        byte[] file = blueprintModel.getBlueprintModelContent().getContent();

-        return prepareResourceEntity(fileName, file);

-    }

-

-    /**

-     *

-     * @param (fileName, file)

-     * @return ResponseEntity<Resource>

-     */

-    private ResponseEntity<Resource> prepareResourceEntity(String fileName, byte[] file) {

-        return ResponseEntity.ok()

-                .contentType(MediaType.parseMediaType("text/plain"))

-                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"")

-                .body(new ByteArrayResource(file));

-    }

-

-    /**

-     * This is a getBlueprintModel method

-     *

-     * @param id id

-     * @return BlueprintModel

-     * @throws BluePrintException BluePrintException

-     */

-    private BlueprintModel getBlueprintModel(@NotNull String id) throws BluePrintException {

-        BlueprintModel blueprintModel;

-        Optional<BlueprintModel> dbBlueprintModel = blueprintModelRepository.findById(id);

-        if (dbBlueprintModel.isPresent()) {

-            blueprintModel = dbBlueprintModel.get();

-        } else {

-            String msg = String.format(BLUEPRINT_MODEL_ID_FAILURE_MSG, id);

-            throw new BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.getValue(), msg);

-        }

-        return blueprintModel;

-    }

-

-    /**

-     * This is a getBlueprintModelByNameAndVersion method

-     *

-     * @param name    name

-     * @param version version

-     * @return BlueprintModel

-     * @throws BluePrintException BluePrintException

-     */

-    private BlueprintModel getBlueprintModelByNameAndVersion(@NotNull String name, @NotNull String version)

-            throws BluePrintException {

-        BlueprintModel blueprintModel;

-        Optional<BlueprintModel> dbBlueprintModel = blueprintModelRepository.findByArtifactNameAndArtifactVersion(name, version);

-        if (dbBlueprintModel.isPresent()) {

-            blueprintModel = dbBlueprintModel.get();

-        } else {

-            String msg = String.format(BLUEPRINT_MODEL_NAME_VERSION_FAILURE_MSG, name, version);

-            throw new BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.getValue(), msg);

-        }

-        return blueprintModel;

-    }

-

-    /**

-     * This is a getBlueprintModelSearch method

-     *

-     * @param id id

-     * @return BlueprintModelSearch

-     * @throws BluePrintException BluePrintException

-     */

-    public BlueprintModelSearch getBlueprintModelSearch(@NotNull String id) throws BluePrintException {

-        BlueprintModelSearch blueprintModelSearch;

-        Optional<BlueprintModelSearch> dbBlueprintModel = blueprintModelSearchRepository.findById(id);

-        if (dbBlueprintModel.isPresent()) {

-            blueprintModelSearch = dbBlueprintModel.get();

-        } else {

-            String msg = String.format(BLUEPRINT_MODEL_ID_FAILURE_MSG, id);

-            throw new BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.getValue(), msg);

-        }

-

-        return blueprintModelSearch;

-    }

-

-    /**

-     * This is a deleteBlueprintModel method

-     *

-     * @param id id

-     * @throws BluePrintException BluePrintException

-     */

-    @Transactional

-    public void deleteBlueprintModel(@NotNull String id) throws BluePrintException {

-        Optional<BlueprintModel> dbBlueprintModel = blueprintModelRepository.findById(id);

-        if (dbBlueprintModel.isPresent()) {

-            blueprintModelContentRepository.deleteByBlueprintModel(dbBlueprintModel.get());

-            blueprintModelRepository.delete(dbBlueprintModel.get());

-        } else {

-            String msg = String.format(BLUEPRINT_MODEL_ID_FAILURE_MSG, id);

-            throw new BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.getValue(), msg);

-        }

-    }

-

-    /**

-     * This is a getAllBlueprintModel method to retrieve all the BlueprintModel in Database

-     *

-     * @return List<BlueprintModelSearch> list of the controller blueprint archives

-     */

-    public List<BlueprintModelSearch> getAllBlueprintModel() {

-        return blueprintModelSearchRepository.findAll();

-    }

-}

diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/rs/BlueprintModelRest.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/rs/BlueprintModelRest.java
deleted file mode 100644
index 255137b..0000000
--- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/rs/BlueprintModelRest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*

- * Copyright © 2017-2018 AT&T Intellectual Property.

- * Modifications Copyright © 2019 Bell Canada.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-package org.onap.ccsdk.apps.controllerblueprints.service.rs;

-

-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;

-import org.onap.ccsdk.apps.controllerblueprints.service.BlueprintModelService;

-import org.onap.ccsdk.apps.controllerblueprints.service.domain.BlueprintModelSearch;

-import org.springframework.beans.factory.annotation.Autowired;

-import org.springframework.core.io.Resource;

-import org.springframework.http.MediaType;

-import org.springframework.http.ResponseEntity;

-import org.springframework.http.codec.multipart.FilePart;

-import org.springframework.web.bind.annotation.*;

-import reactor.core.publisher.Mono;

-

-import java.util.List;

-

-/**

- * {@inheritDoc}

- */

-@RestController

-@RequestMapping(value = "/api/v1/blueprint-model")

-public class BlueprintModelRest {

-

-    @Autowired

-    private BlueprintModelService blueprintModelService;

-

-    @PostMapping(path = "", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

-    public @ResponseBody

-    Mono<BlueprintModelSearch> saveBlueprint(@RequestPart("file") FilePart file) throws BluePrintException{

-        return blueprintModelService.saveBlueprintModel(file);

-    }

-

-    @DeleteMapping(path = "/{id}")

-    public void deleteBlueprint(@PathVariable(value = "id") String id) throws BluePrintException {

-        this.blueprintModelService.deleteBlueprintModel(id);

-    }

-

-    @GetMapping(path = "/by-name/{name}/version/{version}", produces = MediaType.APPLICATION_JSON_VALUE)

-    public @ResponseBody

-    BlueprintModelSearch getBlueprintByNameAndVersion(@PathVariable(value = "name") String name,

-                                                      @PathVariable(value = "version") String version) throws BluePrintException {

-        return this.blueprintModelService.getBlueprintModelSearchByNameAndVersion(name, version);

-    }

-

-    @GetMapping(path = "/download/by-name/{name}/version/{version}", produces = MediaType.APPLICATION_JSON_VALUE)

-    public @ResponseBody

-    ResponseEntity<Resource> downloadBlueprintByNameAndVersion(@PathVariable(value = "name") String name,

-                                                               @PathVariable(value = "version") String version) throws BluePrintException {

-        return this.blueprintModelService.downloadBlueprintModelFileByNameAndVersion(name, version);

-    }

-

-    @GetMapping(path = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)

-    public @ResponseBody

-    BlueprintModelSearch getBlueprintModel(@PathVariable(value = "id") String id) throws BluePrintException {

-        return this.blueprintModelService.getBlueprintModelSearch(id);

-    }

-

-    @GetMapping(path = "", produces = MediaType.APPLICATION_JSON_VALUE)

-    public @ResponseBody

-    List<BlueprintModelSearch> getAllBlueprintModel() {

-        return this.blueprintModelService.getAllBlueprintModel();

-    }

-

-    @GetMapping(path = "/download/{id}", produces = MediaType.APPLICATION_JSON_VALUE)

-    public @ResponseBody

-    ResponseEntity<Resource> downloadBluePrint(@PathVariable(value = "id") String id) throws BluePrintException {

-        return this.blueprintModelService.downloadBlueprintModelFile(id);

-    }

-

-    @PutMapping(path = "/publish/{id}", produces = MediaType.APPLICATION_JSON_VALUE)

-    public @ResponseBody

-    BlueprintModelSearch publishBlueprintModel(@PathVariable(value = "id") String id) throws BluePrintException {

-        return this.blueprintModelService.publishBlueprintModel(id);

-    }

-

-    @GetMapping(path = "/search/{tags}", produces = MediaType.APPLICATION_JSON_VALUE)

-    public @ResponseBody

-    List<BlueprintModelSearch> searchBlueprintModels(@PathVariable(value = "tags") String tags) {

-        return this.blueprintModelService.searchBlueprintModels(tags);

-    }

-}

diff --git a/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/controller/BlueprintModelRest.kt b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/controller/BlueprintModelRest.kt
new file mode 100644
index 0000000..0fca07b
--- /dev/null
+++ b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/controller/BlueprintModelRest.kt
@@ -0,0 +1,100 @@
+/*
+ * Copyright © 2019 Bell Canada Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.ccsdk.apps.controllerblueprints.service.controller
+
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.apps.controllerblueprints.service.domain.BlueprintModelSearch
+import org.onap.ccsdk.apps.controllerblueprints.service.handler.BluePrintModelHandler
+import org.springframework.core.io.Resource
+import org.springframework.http.MediaType
+import org.springframework.http.ResponseEntity
+import org.springframework.http.codec.multipart.FilePart
+import org.springframework.web.bind.annotation.*
+import reactor.core.publisher.Mono
+
+/**
+ * BlueprintModelRest Purpose: Handle controllerBlueprint API request
+ *
+ * @author Vinal Patel
+ * @version 1.0
+ */
+@RestController
+@RequestMapping("/api/v1/blueprint-model")
+open class BlueprintModelRest(private val bluePrintModelHandler: BluePrintModelHandler) {
+
+    @PostMapping("", produces = [MediaType.APPLICATION_JSON_VALUE], consumes = [MediaType.MULTIPART_FORM_DATA_VALUE])
+    @ResponseBody
+    @Throws(BluePrintException::class)
+    fun saveBlueprint(@RequestPart("file") file: FilePart): Mono<BlueprintModelSearch> {
+        return bluePrintModelHandler.saveBlueprintModel(file)
+    }
+
+    @GetMapping("", produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ResponseBody
+    fun allBlueprintModel(): List<BlueprintModelSearch> {
+        return this.bluePrintModelHandler.allBlueprintModel()
+    }
+
+    @DeleteMapping("/{id}")
+    @Throws(BluePrintException::class)
+    fun deleteBlueprint(@PathVariable(value = "id") id: String) {
+        this.bluePrintModelHandler.deleteBlueprintModel(id)
+    }
+
+    @GetMapping("/by-name/{name}/version/{version}", produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ResponseBody
+    @Throws(BluePrintException::class)
+    fun getBlueprintByNameAndVersion(@PathVariable(value = "name") name: String,
+                                     @PathVariable(value = "version") version: String): BlueprintModelSearch {
+        return this.bluePrintModelHandler.getBlueprintModelSearchByNameAndVersion(name, version)
+    }
+
+    @GetMapping("/download/by-name/{name}/version/{version}", produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ResponseBody
+    @Throws(BluePrintException::class)
+    fun downloadBlueprintByNameAndVersion(@PathVariable(value = "name") name: String,
+                                          @PathVariable(value = "version") version: String): ResponseEntity<Resource> {
+        return this.bluePrintModelHandler.downloadBlueprintModelFileByNameAndVersion(name, version)
+    }
+
+    @GetMapping("/{id}", produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ResponseBody
+    @Throws(BluePrintException::class)
+    fun getBlueprintModel(@PathVariable(value = "id") id: String): BlueprintModelSearch {
+        return this.bluePrintModelHandler.getBlueprintModelSearch(id)
+    }
+
+    @GetMapping("/download/{id}", produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ResponseBody
+    @Throws(BluePrintException::class)
+    fun downloadBluePrint(@PathVariable(value = "id") id: String): ResponseEntity<Resource> {
+        return this.bluePrintModelHandler.downloadBlueprintModelFile(id)
+    }
+
+    @PutMapping("/publish/{id}", produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ResponseBody
+    @Throws(BluePrintException::class)
+    fun publishBlueprintModel(@PathVariable(value = "id") id: String): BlueprintModelSearch {
+        return this.bluePrintModelHandler.publishBlueprintModel(id)
+    }
+
+    @GetMapping("/search/{tags}", produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ResponseBody
+    fun searchBlueprintModels(@PathVariable(value = "tags") tags: String): List<BlueprintModelSearch> {
+        return this.bluePrintModelHandler.searchBlueprintModels(tags)
+    }
+}
diff --git a/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/controller/ControllerBlueprintExeptionHandler.kt b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/controller/ControllerBlueprintExeptionHandler.kt
index a0e47d7..0475339 100644
--- a/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/controller/ControllerBlueprintExeptionHandler.kt
+++ b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/controller/ControllerBlueprintExeptionHandler.kt
@@ -25,7 +25,7 @@
 import org.springframework.web.bind.annotation.ExceptionHandler
 
 /**
- * ControllerBlueprintExceptionHandler.java Purpose: Handle exceptions in controllerBlueprint API and provide the wright
+ * ControllerBlueprintExceptionHandler Purpose: Handle exceptions in controllerBlueprint API and provide the right
  * HTTP code status
  *
  * @author Vinal Patel
diff --git a/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/handler/BluePrintModelHandler.kt b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/handler/BluePrintModelHandler.kt
new file mode 100644
index 0000000..907566c
--- /dev/null
+++ b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/handler/BluePrintModelHandler.kt
@@ -0,0 +1,283 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2019 Bell Canada.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.ccsdk.apps.controllerblueprints.service.handler
+
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.apps.controllerblueprints.core.common.ApplicationConstants
+import org.onap.ccsdk.apps.controllerblueprints.core.config.BluePrintLoadConfiguration
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ErrorCode
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintCatalogService
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintFileUtils
+import org.onap.ccsdk.apps.controllerblueprints.service.domain.BlueprintModel
+import org.onap.ccsdk.apps.controllerblueprints.service.domain.BlueprintModelSearch
+import org.onap.ccsdk.apps.controllerblueprints.service.repository.ControllerBlueprintModelContentRepository
+import org.onap.ccsdk.apps.controllerblueprints.service.repository.ControllerBlueprintModelRepository
+import org.onap.ccsdk.apps.controllerblueprints.service.repository.ControllerBlueprintModelSearchRepository
+import org.onap.ccsdk.apps.controllerblueprints.service.utils.BluePrintEnhancerUtils
+import org.springframework.core.io.ByteArrayResource
+import org.springframework.core.io.Resource
+import org.springframework.http.HttpHeaders
+import org.springframework.http.MediaType
+import org.springframework.http.ResponseEntity
+import org.springframework.http.codec.multipart.FilePart
+import org.springframework.stereotype.Service
+import org.springframework.transaction.annotation.Transactional
+import reactor.core.publisher.Mono
+import java.io.IOException
+
+/**
+ * BlueprintModelHandler Purpose: Handler service to handle the request from BlurPrintModelRest
+ *
+ * @author Brinda Santh
+ * @version 1.0
+ */
+
+@Service
+open class BluePrintModelHandler(private val bluePrintCatalogService: BluePrintCatalogService, private val bluePrintLoadConfiguration: BluePrintLoadConfiguration,
+                                 private val blueprintModelSearchRepository: ControllerBlueprintModelSearchRepository,
+                                 private val blueprintModelRepository: ControllerBlueprintModelRepository,
+                                 private val blueprintModelContentRepository: ControllerBlueprintModelContentRepository) {
+
+    /**
+     * This is a getAllBlueprintModel method to retrieve all the BlueprintModel in Database
+     *
+     * @return List<BlueprintModelSearch> list of the controller blueprint archives
+    </BlueprintModelSearch> */
+    open fun allBlueprintModel(): List<BlueprintModelSearch> {
+        return blueprintModelSearchRepository.findAll()
+    }
+
+    /**
+     * This is a saveBlueprintModel method
+     *
+     * @param filePart filePart
+     * @return Mono<BlueprintModelSearch>
+     * @throws BluePrintException BluePrintException
+    </BlueprintModelSearch> */
+    @Throws(BluePrintException::class)
+    open fun saveBlueprintModel(filePart: FilePart): Mono<BlueprintModelSearch> {
+        try {
+            val cbaLocation = BluePrintFileUtils.getCbaStorageDirectory(bluePrintLoadConfiguration.blueprintArchivePath)
+            return BluePrintEnhancerUtils.saveCBAFile(filePart, cbaLocation).map { fileName ->
+                var blueprintId: String? = null
+                try {
+                    blueprintId = bluePrintCatalogService.saveToDatabase(cbaLocation.resolve(fileName).toFile(), false)
+                } catch (e: BluePrintException) {
+                    // FIXME handle expection
+                }
+                blueprintModelSearchRepository.findById(blueprintId!!).get()
+            }
+        } catch (e: IOException) {
+            throw BluePrintException(ErrorCode.IO_FILE_INTERRUPT.value,
+                    String.format("I/O Error while uploading the CBA file: %s", e.message), e)
+        }
+
+    }
+
+    /**
+     * This is a publishBlueprintModel method to change the status published to YES
+     *
+     * @param id id
+     * @return BlueprintModelSearch
+     * @throws BluePrintException BluePrintException
+     */
+    @Throws(BluePrintException::class)
+    open fun publishBlueprintModel(id: String): BlueprintModelSearch {
+        val blueprintModelSearch: BlueprintModelSearch
+        val dbBlueprintModel = blueprintModelSearchRepository.findById(id)
+        if (dbBlueprintModel.isPresent) {
+            blueprintModelSearch = dbBlueprintModel.get()
+        } else {
+            val msg = String.format(BLUEPRINT_MODEL_ID_FAILURE_MSG, id)
+            throw BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.value, msg)
+        }
+        blueprintModelSearch.published = ApplicationConstants.ACTIVE_Y
+        return blueprintModelSearchRepository.saveAndFlush(blueprintModelSearch)
+    }
+
+    /**
+     * This is a searchBlueprintModels method
+     *
+     * @param tags tags
+     * @return List<BlueprintModelSearch>
+    </BlueprintModelSearch> */
+    open fun searchBlueprintModels(tags: String): List<BlueprintModelSearch> {
+        return blueprintModelSearchRepository.findByTagsContainingIgnoreCase(tags)
+    }
+
+    /**
+     * This is a getBlueprintModelSearchByNameAndVersion method
+     *
+     * @param name name
+     * @param version version
+     * @return BlueprintModelSearch
+     * @throws BluePrintException BluePrintException
+     */
+    @Throws(BluePrintException::class)
+    open fun getBlueprintModelSearchByNameAndVersion(name: String, version: String): BlueprintModelSearch {
+        val blueprintModelSearch: BlueprintModelSearch
+        val dbBlueprintModel = blueprintModelSearchRepository
+                .findByArtifactNameAndArtifactVersion(name, version)
+        if (dbBlueprintModel.isPresent) {
+            blueprintModelSearch = dbBlueprintModel.get()
+        } else {
+            throw BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.value,
+                    String.format(BLUEPRINT_MODEL_NAME_VERSION_FAILURE_MSG, name, version))
+        }
+        return blueprintModelSearch
+    }
+
+    /**
+     * This is a downloadBlueprintModelFileByNameAndVersion method to download a Blueprint by Name and Version
+     *
+     * @param name name
+     * @param version version
+     * @return ResponseEntity<Resource>
+     * @throws BluePrintException BluePrintException
+    </Resource> */
+    @Throws(BluePrintException::class)
+    open fun downloadBlueprintModelFileByNameAndVersion(name: String,
+                                                        version: String): ResponseEntity<Resource> {
+        val blueprintModel: BlueprintModel
+        try {
+            blueprintModel = getBlueprintModelByNameAndVersion(name, version)
+        } catch (e: BluePrintException) {
+            throw BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.value, String.format("Error while " + "downloading the CBA file: %s", e.message), e)
+        }
+
+        val fileName = blueprintModel.id + ".zip"
+        val file = blueprintModel.blueprintModelContent.content
+        return prepareResourceEntity(fileName, file)
+    }
+
+    /**
+     * This is a downloadBlueprintModelFile method to find the target file to download and return a file resource
+     *
+     * @return ResponseEntity<Resource>
+     * @throws BluePrintException BluePrintException
+    </Resource> */
+    @Throws(BluePrintException::class)
+    open fun downloadBlueprintModelFile(id: String): ResponseEntity<Resource> {
+        val blueprintModel: BlueprintModel
+        try {
+            blueprintModel = getBlueprintModel(id)
+        } catch (e: BluePrintException) {
+            throw BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.value, String.format("Error while " + "downloading the CBA file: %s", e.message), e)
+        }
+
+        val fileName = blueprintModel.id + ".zip"
+        val file = blueprintModel.blueprintModelContent.content
+        return prepareResourceEntity(fileName, file)
+    }
+
+    /**
+     * @return ResponseEntity<Resource>
+    </Resource> */
+    private fun prepareResourceEntity(fileName: String, file: ByteArray): ResponseEntity<Resource> {
+        return ResponseEntity.ok()
+                .contentType(MediaType.parseMediaType("text/plain"))
+                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"$fileName\"")
+                .body(ByteArrayResource(file))
+    }
+
+    /**
+     * This is a getBlueprintModel method
+     *
+     * @param id id
+     * @return BlueprintModel
+     * @throws BluePrintException BluePrintException
+     */
+    @Throws(BluePrintException::class)
+    open fun getBlueprintModel(id: String): BlueprintModel {
+        val blueprintModel: BlueprintModel
+        val dbBlueprintModel = blueprintModelRepository.findById(id)
+        if (dbBlueprintModel.isPresent) {
+            blueprintModel = dbBlueprintModel.get()
+        } else {
+            val msg = String.format(BLUEPRINT_MODEL_ID_FAILURE_MSG, id)
+            throw BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.value, msg)
+        }
+        return blueprintModel
+    }
+
+    /**
+     * This is a getBlueprintModelByNameAndVersion method
+     *
+     * @param name name
+     * @param version version
+     * @return BlueprintModel
+     * @throws BluePrintException BluePrintException
+     */
+    @Throws(BluePrintException::class)
+    open fun getBlueprintModelByNameAndVersion(name: String, version: String): BlueprintModel {
+        val blueprintModel = blueprintModelRepository
+                .findByArtifactNameAndArtifactVersion(name, version)
+        if (blueprintModel != null) {
+            return blueprintModel
+        } else {
+            val msg = String.format(BLUEPRINT_MODEL_NAME_VERSION_FAILURE_MSG, name, version)
+            throw BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.value, msg)
+        }
+    }
+
+    /**
+     * This is a getBlueprintModelSearch method
+     *
+     * @param id id
+     * @return BlueprintModelSearch
+     * @throws BluePrintException BluePrintException
+     */
+    @Throws(BluePrintException::class)
+    open fun getBlueprintModelSearch(id: String): BlueprintModelSearch {
+        val blueprintModelSearch: BlueprintModelSearch
+        val dbBlueprintModel = blueprintModelSearchRepository.findById(id)
+        if (dbBlueprintModel.isPresent) {
+            blueprintModelSearch = dbBlueprintModel.get()
+        } else {
+            val msg = String.format(BLUEPRINT_MODEL_ID_FAILURE_MSG, id)
+            throw BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.value, msg)
+        }
+
+        return blueprintModelSearch
+    }
+
+    /**
+     * This is a deleteBlueprintModel method
+     *
+     * @param id id
+     * @throws BluePrintException BluePrintException
+     */
+    @Transactional
+    @Throws(BluePrintException::class)
+    open fun deleteBlueprintModel(id: String) {
+        val dbBlueprintModel = blueprintModelRepository.findById(id)
+        if (dbBlueprintModel.isPresent) {
+            blueprintModelContentRepository.deleteByBlueprintModel(dbBlueprintModel.get())
+            blueprintModelRepository.delete(dbBlueprintModel.get())
+        } else {
+            val msg = String.format(BLUEPRINT_MODEL_ID_FAILURE_MSG, id)
+            throw BluePrintException(ErrorCode.RESOURCE_NOT_FOUND.value, msg)
+        }
+    }
+
+    companion object {
+
+        private const val BLUEPRINT_MODEL_ID_FAILURE_MSG = "failed to get blueprint model id(%s) from repo"
+        private const val BLUEPRINT_MODEL_NAME_VERSION_FAILURE_MSG = "failed to get blueprint model by name(%s)" + " and version(%s) from repo"
+    }
+}
diff --git a/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/load/BluePrintCatalogLoadService.kt b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/load/BluePrintCatalogLoadService.kt
index d49bcdf..4fd66ed 100644
--- a/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/load/BluePrintCatalogLoadService.kt
+++ b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/load/BluePrintCatalogLoadService.kt
@@ -59,7 +59,7 @@
 
     open fun loadBluePrintModelCatalog(errorBuilder: StrBuilder, file: File) {
         try {
-            bluePrintCatalogService.uploadToDataBase(file.absolutePath, true)
+            bluePrintCatalogService.saveToDatabase(file)
         } catch (e: Exception) {
             errorBuilder.appendln("Couldn't load DataType(${file.name}: ${e.message}")
         }
diff --git a/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/load/ControllerBlueprintCatalogServiceImpl.kt b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/load/ControllerBlueprintCatalogServiceImpl.kt
index 6b367c4..779be65 100755
--- a/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/load/ControllerBlueprintCatalogServiceImpl.kt
+++ b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/load/ControllerBlueprintCatalogServiceImpl.kt
@@ -18,74 +18,93 @@
 package org.onap.ccsdk.apps.controllerblueprints.service.load
 
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.common.ApplicationConstants
 import org.onap.ccsdk.apps.controllerblueprints.core.config.BluePrintLoadConfiguration
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.data.ErrorCode
 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintValidatorService
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintArchiveUtils
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
 import org.onap.ccsdk.apps.controllerblueprints.db.resources.BlueprintCatalogServiceImpl
 import org.onap.ccsdk.apps.controllerblueprints.service.domain.BlueprintModel
 import org.onap.ccsdk.apps.controllerblueprints.service.domain.BlueprintModelContent
 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ControllerBlueprintModelRepository
+import org.slf4j.LoggerFactory
 import org.springframework.dao.DataIntegrityViolationException
 import org.springframework.stereotype.Service
 import java.io.File
 import java.nio.file.Files
+import java.nio.file.Path
+import java.nio.file.Paths
 
 /**
-Similar implementation in [org.onap.ccsdk.apps.blueprintsprocessor.db.BlueprintProcessorCatalogServiceImpl]
+ * Similar implementation in [org.onap.ccsdk.apps.blueprintsprocessor.db.BlueprintProcessorCatalogServiceImpl]
  */
 @Service
-class ControllerBlueprintCatalogServiceImpl(bluePrintLoadConfiguration: BluePrintLoadConfiguration,
-                                            private val bluePrintValidatorService: BluePrintValidatorService,
+class ControllerBlueprintCatalogServiceImpl(bluePrintValidatorService: BluePrintValidatorService,
+                                            private val bluePrintLoadConfiguration: BluePrintLoadConfiguration,
                                             private val blueprintModelRepository: ControllerBlueprintModelRepository)
-    : BlueprintCatalogServiceImpl(bluePrintLoadConfiguration) {
+    : BlueprintCatalogServiceImpl(bluePrintValidatorService) {
 
-    override fun saveToDataBase(extractedDirectory: File, id: String, archiveFile: File, checkValidity: Boolean?) {
-        var valid = false
-        val firstItem = BluePrintArchiveUtils.getFirstItemInDirectory(extractedDirectory)
-        val blueprintBaseDirectory = extractedDirectory.absolutePath + "/" + firstItem
-        // Validate Blueprint
-        val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime(id, blueprintBaseDirectory)
 
-        // Check Validity of blueprint
-        if (checkValidity!!) {
-            valid = bluePrintValidatorService.validateBluePrints(bluePrintRuntimeService)
+    private val log = LoggerFactory.getLogger(ControllerBlueprintCatalogServiceImpl::class.toString())
+
+    init {
+        log.info("BlueprintProcessorCatalogServiceImpl initialized")
+    }
+
+    override fun delete(name: String, version: String) = blueprintModelRepository.deleteByArtifactNameAndArtifactVersion(name, version)
+
+    override fun get(name: String, version: String, extract: Boolean): Path? {
+        val path = if (extract) {
+            Paths.get("${bluePrintLoadConfiguration.blueprintDeployPath}/$name/$version")
+        } else {
+            Paths.get("${bluePrintLoadConfiguration.blueprintArchivePath}/$name/$version.zip")
+        }
+        blueprintModelRepository.findByArtifactNameAndArtifactVersion(name, version)?.also {
+            it.blueprintModelContent.run {
+                path.toFile().writeBytes(this!!.content!!).let {
+                    return path
+                }
+            }
+        }
+        return null
+    }
+
+    override fun save(metadata: MutableMap<String, String>, archiveFile: File) {
+
+        val artifactName = metadata[BluePrintConstants.METADATA_TEMPLATE_NAME]
+        val artifactVersion = metadata[BluePrintConstants.METADATA_TEMPLATE_VERSION]
+
+        log.isDebugEnabled.apply {
+            blueprintModelRepository.findByArtifactNameAndArtifactVersion(artifactName!!, artifactVersion!!)?.let {
+                log.debug("Overwriting blueprint model :$artifactName::$artifactVersion")
+            }
         }
 
-        if ((valid && checkValidity!!) || (!valid && !checkValidity!!)) {
-            val metaData = bluePrintRuntimeService.bluePrintContext().metadata!!
-            val blueprintModel = BlueprintModel()
-            blueprintModel.id = id
-            blueprintModel.artifactType = ApplicationConstants.ASDC_ARTIFACT_TYPE_SDNC_MODEL
-            blueprintModel.published = ApplicationConstants.ACTIVE_N
-            blueprintModel.artifactName = metaData[BluePrintConstants.METADATA_TEMPLATE_NAME]
-            blueprintModel.artifactVersion = metaData[BluePrintConstants.METADATA_TEMPLATE_VERSION]
-            blueprintModel.updatedBy = metaData[BluePrintConstants.METADATA_TEMPLATE_AUTHOR]
-            blueprintModel.tags = metaData[BluePrintConstants.METADATA_TEMPLATE_TAGS]
-            blueprintModel.artifactDescription = "Controller Blueprint for ${blueprintModel.artifactName}:${blueprintModel.artifactVersion}"
+        val blueprintModel = BlueprintModel()
+        blueprintModel.id = metadata[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID]
+        blueprintModel.artifactType = ApplicationConstants.ASDC_ARTIFACT_TYPE_SDNC_MODEL
+        blueprintModel.published = ApplicationConstants.ACTIVE_N
+        blueprintModel.artifactName = artifactName
+        blueprintModel.artifactVersion = artifactVersion
+        blueprintModel.updatedBy = metadata[BluePrintConstants.METADATA_TEMPLATE_AUTHOR]
+        blueprintModel.tags = metadata[BluePrintConstants.METADATA_TEMPLATE_TAGS]
+        blueprintModel.artifactDescription = "Controller Blueprint for $artifactName:$artifactVersion"
 
-            val blueprintModelContent = BlueprintModelContent()
-            blueprintModelContent.id = id // For quick access both id's are same.always have one to one mapping.
-            blueprintModelContent.contentType = "CBA_ZIP"
-            blueprintModelContent.name = "${blueprintModel.artifactName}:${blueprintModel.artifactVersion}"
-            blueprintModelContent.description = "(${blueprintModel.artifactName}:${blueprintModel.artifactVersion} CBA Zip Content"
-            blueprintModelContent.content = Files.readAllBytes(archiveFile.toPath())
+        val blueprintModelContent = BlueprintModelContent()
+        blueprintModelContent.id = metadata[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID]
+        blueprintModelContent.contentType = "CBA_ZIP"
+        blueprintModelContent.name = "$artifactName:$artifactVersion"
+        blueprintModelContent.description = "$artifactName:$artifactVersion CBA Zip Content"
+        blueprintModelContent.content = Files.readAllBytes(archiveFile.toPath())
+        blueprintModelContent.blueprintModel = blueprintModel
+        // Set the Blueprint Model Content into blueprintModel
+        blueprintModel.blueprintModelContent = blueprintModelContent
 
-            // Set the Blueprint Model into blueprintModelContent
-            blueprintModelContent.blueprintModel = blueprintModel
-
-            // Set the Blueprint Model Content into blueprintModel
-            blueprintModel.blueprintModelContent = blueprintModelContent
-
-            try {
-                blueprintModelRepository.saveAndFlush(blueprintModel)
-            } catch (ex: DataIntegrityViolationException) {
-                throw BluePrintException(ErrorCode.CONFLICT_ADDING_RESOURCE.value, "The blueprint entry " +
-                        "is already exist in database: ${ex.message}", ex)
-            }
+        try {
+            blueprintModelRepository.saveAndFlush(blueprintModel)
+        } catch (ex: DataIntegrityViolationException) {
+            throw BluePrintException(ErrorCode.CONFLICT_ADDING_RESOURCE.value, "The blueprint entry " +
+                    "is already exist in database: ${ex.message}", ex)
         }
     }
 }
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/service/src/test/java/org/onap/ccsdk/apps/controllerblueprints/service/BlueprintModelServiceTest.java b/ms/controllerblueprints/modules/service/src/test/java/org/onap/ccsdk/apps/controllerblueprints/service/BlueprintModelServiceTest.java
deleted file mode 100644
index 0ce93b1..0000000
--- a/ms/controllerblueprints/modules/service/src/test/java/org/onap/ccsdk/apps/controllerblueprints/service/BlueprintModelServiceTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright © 2018 IBM.
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-package org.onap.ccsdk.apps.controllerblueprints.service;
-
-import org.junit.Test;
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;
-import org.springframework.beans.factory.annotation.Autowired;
-
-public class BlueprintModelServiceTest {
-    @Autowired
-    private BlueprintModelService blueprintModelService;
-
-    @Test
-    public void testGetInitialConfigModel() throws BluePrintException {
-    }
-}
diff --git a/ms/controllerblueprints/modules/service/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/controller/BlueprintModelRestTest.kt b/ms/controllerblueprints/modules/service/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/controller/BlueprintModelRestTest.kt
new file mode 100644
index 0000000..f82aace
--- /dev/null
+++ b/ms/controllerblueprints/modules/service/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/controller/BlueprintModelRestTest.kt
@@ -0,0 +1,192 @@
+/*
+ * Copyright © 2019 Bell Canada Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.ccsdk.apps.controllerblueprints.service.controller
+
+import com.google.gson.Gson
+import org.json.JSONException
+import org.json.JSONObject
+import org.junit.After
+import org.junit.Before
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.MethodSorters
+import org.onap.ccsdk.apps.controllerblueprints.TestApplication
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintArchiveUtils
+import org.onap.ccsdk.apps.controllerblueprints.service.domain.BlueprintModelSearch
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration
+import org.springframework.boot.test.context.SpringBootTest
+import org.springframework.context.annotation.ComponentScan
+import org.springframework.core.io.ByteArrayResource
+import org.springframework.http.HttpMethod
+import org.springframework.http.HttpStatus
+import org.springframework.test.context.ContextConfiguration
+import org.springframework.test.context.junit4.SpringRunner
+import org.springframework.test.web.reactive.server.WebTestClient
+import org.springframework.util.Base64Utils
+import org.springframework.web.reactive.function.BodyInserters
+import java.io.File
+import java.io.IOException
+import java.nio.charset.StandardCharsets.UTF_8
+import java.nio.file.Files
+import java.nio.file.Paths
+
+/**
+ * BlueprintModelRestTest Purpose: Integration test at API level
+ *
+ * @author Vinal Patel
+ * @version 1.0
+ */
+
+@RunWith(SpringRunner::class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@ContextConfiguration(classes = [TestApplication::class])
+@ComponentScan(basePackages = ["org.onap.ccsdk.apps.controllerblueprints"])
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@EnableAutoConfiguration
+class BlueprintModelRestTest {
+
+    companion object {
+
+        private var id: String? = null
+        private var name: String? = null
+        private var version: String? = null
+        private var tag: String? = null
+        private var result: String? = null
+    }
+
+    @Value("\${controllerblueprints.loadBluePrintPaths}")
+    private val loadBluePrintPaths: String? = null
+
+    @Autowired
+    private val webTestClient: WebTestClient? = null
+
+    @Value("\${controllerblueprints.loadBlueprintsExamplesPath}")
+    private val blueprintArchivePath: String? = null
+
+    private val filename = "test.zip"
+    private var blueprintFile: File? = null
+    private var zipBlueprintFile: File? = null
+
+    @Before
+    @Throws(Exception::class)
+    fun setUp() {
+        blueprintFile = File(loadBluePrintPaths+"/baseconfiguration")
+        if (blueprintFile!!.isDirectory) {
+            zipBlueprintFile = File(Paths.get(blueprintArchivePath).resolve(filename).toString())
+            BluePrintArchiveUtils.compress(blueprintFile!!, zipBlueprintFile!!, true)
+        }
+    }
+
+    @After
+    @Throws(Exception::class)
+    fun tearDown() {
+        zipBlueprintFile!!.delete()
+    }
+
+    @Test
+    @Throws(IOException::class, JSONException::class)
+    fun test1_saveBluePrint() {
+        webTestClient(HttpMethod.POST,
+                BodyInserters.fromMultipartData("file", object : ByteArrayResource(Files.readAllBytes(zipBlueprintFile!!.toPath())) {
+                    override fun getFilename(): String? {
+                        return "test.zip"
+                    }
+                }),
+                "/api/v1/blueprint-model",
+                HttpStatus.OK, true)
+    }
+
+    @Test
+    @Throws(JSONException::class)
+    fun test2_getBluePrintByNameAndVersion() {
+        webTestClient(HttpMethod.GET, null, "/api/v1/blueprint-model/by-name/$name/version/$version", HttpStatus.OK, false)
+    }
+
+
+    @Test
+    @Throws(JSONException::class)
+    fun test3_getBlueprintModel() {
+        webTestClient(HttpMethod.GET, null, "/api/v1/blueprint-model/$id", HttpStatus.OK, false)
+    }
+
+    @Test
+    @Throws(JSONException::class)
+    fun test4_getAllBlueprintModel() {
+        webTestClient(HttpMethod.GET, null, "/api/v1/blueprint-model", HttpStatus.OK, false)
+    }
+
+    @Test
+    @Throws(JSONException::class)
+    fun test5_downloadBluePrint() {
+        webTestClient(HttpMethod.GET, null, "/api/v1/blueprint-model/download/$id", HttpStatus.OK, false)
+    }
+
+    @Test
+    fun test6_publishBlueprintModel() {
+    }
+
+    @Test
+    @Throws(JSONException::class)
+    fun test7_searchBlueprintModels() {
+        webTestClient(HttpMethod.GET, null, "/api/v1/blueprint-model/search/$name", HttpStatus.OK, false)
+    }
+
+    @Test
+    @Throws(JSONException::class)
+    fun test8_downloadBlueprintByNameAndVersion() {
+        webTestClient(HttpMethod.GET, null, "/api/v1/blueprint-model/download/by-name/$name/version/$version", HttpStatus.OK, false)
+    }
+
+    @Test
+    fun test9_deleteBluePrint() {
+        //TODO: Use webTestClient function
+        //webTestClient(HttpMethod.DELETE, null, "/api/v1/blueprint-model/" + id, HttpStatus.OK, false);
+        webTestClient!!.delete().uri("/api/v1/blueprint-model/$id")
+                .header("Authorization", "Basic " + Base64Utils
+                        .encodeToString(("ccsdkapps" + ":" + "ccsdkapps").toByteArray(UTF_8)))
+                .exchange()
+                .expectStatus().is2xxSuccessful
+    }
+
+    @Throws(JSONException::class)
+    private fun webTestClient(requestMethod: HttpMethod, body: BodyInserters.MultipartInserter?, uri: String, expectedResponceStatus: HttpStatus, setParam: Boolean) {
+
+        result = String(webTestClient!!.method(requestMethod).uri(uri)
+                .header("Authorization", "Basic " + Base64Utils
+                        .encodeToString(("ccsdkapps" + ":" + "ccsdkapps").toByteArray(UTF_8)))
+                .body(body)
+                .exchange()
+                .expectStatus().isEqualTo(expectedResponceStatus)
+                .expectBody()
+                .returnResult().responseBody!!)
+
+        if (setParam) {
+            val jsonResponse = JSONObject(result)
+            val blueprintModelSearchJSON = jsonResponse.getJSONObject("blueprintModel")
+            val gson = Gson()
+            val blueprintModelSearch = gson.fromJson(blueprintModelSearchJSON.toString(), BlueprintModelSearch::class.java)
+            id = blueprintModelSearch.id
+            name = blueprintModelSearch.artifactName
+            version = blueprintModelSearch.artifactVersion
+            tag = blueprintModelSearch.tags
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/service/src/test/resources/application.properties b/ms/controllerblueprints/modules/service/src/test/resources/application.properties
index 24cb23a..1c2c1c0 100755
--- a/ms/controllerblueprints/modules/service/src/test/resources/application.properties
+++ b/ms/controllerblueprints/modules/service/src/test/resources/application.properties
@@ -20,7 +20,7 @@
 logging.level.org.hibernate.SQL=warn
 logging.level.org.hibernate.type.descriptor.sql=debug
 # Load Resource Source Mappings
-resourceSourceMappings=primary-db=source-primary-db,input=source-input,default=source-default,mdsal=source-rest,capability=source-capability
+resourceSourceMappings=primary-db=source-primary-db,input=source-input,default=source-default,primary-config-data=source-rest,capability=source-capability
 # Controller Blueprints Core Configuration
 controllerblueprints.blueprintDeployPath=./target/blueprints/deploy
 controllerblueprints.blueprintArchivePath=./target/blueprints/archive
diff --git a/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhance-resource-assignment.json b/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhance-resource-assignment.json
index 1c81b74..3ed188b 100644
--- a/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhance-resource-assignment.json
+++ b/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhance-resource-assignment.json
@@ -56,7 +56,7 @@
       "required": true

     },

     "dictionary-name": "sample-mdsal-source",

-    "dictionary-source": "mdsal",

+    "dictionary-source": "primary-config-data",

     "dependencies": []

   }

 ]

diff --git a/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhance-template.json b/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhance-template.json
index 42978f8..2e48b6d 100644
--- a/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhance-template.json
+++ b/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhance-template.json
@@ -243,7 +243,7 @@
                   },

                   "input-param": false,

                   "dictionary-name": "sample-mdsal-source",

-                  "dictionary-source": "mdsal",

+                  "dictionary-source": "primary-config-data",

                   "dependencies": [

                     "service-instance-id"

                   ],

@@ -314,7 +314,7 @@
                   },

                   "input-param": false,

                   "dictionary-name": "sample-licenses",

-                  "dictionary-source": "mdsal",

+                  "dictionary-source": "primary-config-data",

                   "dependencies": [

                     "service-instance-id"

                   ],

diff --git a/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhanced-template.json b/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhanced-template.json
index 66f18f8..6937c71 100644
--- a/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhanced-template.json
+++ b/ms/controllerblueprints/modules/service/src/test/resources/enhance/enhanced-template.json
@@ -242,7 +242,7 @@
                 },
                 "input-param" : false,
                 "dictionary-name" : "sample-mdsal-source",
-                "dictionary-source" : "mdsal",
+                "dictionary-source" : "primary-config-data",
                 "dependencies" : [ "service-instance-id" ],
                 "version" : 0
               }, {
@@ -304,7 +304,7 @@
                 },
                 "input-param" : false,
                 "dictionary-name" : "sample-licenses",
-                "dictionary-source" : "mdsal",
+                "dictionary-source" : "primary-config-data",
                 "dependencies" : [ "service-instance-id" ],
                 "version" : 0
               }, {
diff --git a/ms/controllerblueprints/parent/pom.xml b/ms/controllerblueprints/parent/pom.xml
index 9042318..8cbc98e 100644
--- a/ms/controllerblueprints/parent/pom.xml
+++ b/ms/controllerblueprints/parent/pom.xml
@@ -28,12 +28,12 @@
     <name>Controller Blueprints Parent</name>
     <packaging>pom</packaging>
     <properties>
-        <spring.boot.version>2.1.1.RELEASE</spring.boot.version>
-        <spring.version>5.1.3.RELEASE</spring.version>
-        <kotlin.version>1.3.11</kotlin.version>
-        <kotlin.maven.version>1.3.11</kotlin.maven.version>
-        <kotlin.couroutines.version>1.1.0</kotlin.couroutines.version>
-        <grpc.version>1.17.1</grpc.version>
+        <spring.boot.version>2.1.2.RELEASE</spring.boot.version>
+        <spring.version>5.1.4.RELEASE</spring.version>
+        <kotlin.version>1.3.20</kotlin.version>
+        <kotlin.maven.version>1.3.20</kotlin.maven.version>
+        <kotlin.couroutines.version>1.1.1</kotlin.couroutines.version>
+        <grpc.version>1.18.0</grpc.version>
         <protobuff.java.utils.version>3.6.1</protobuff.java.utils.version>
         <eelf.version>1.0.0</eelf.version>
         <guava.version>27.0.1-jre</guava.version>
@@ -110,14 +110,26 @@
             </dependency>
             <dependency>
                 <groupId>org.jetbrains.kotlin</groupId>
+                <artifactId>kotlin-stdlib-common</artifactId>
+                <version>${kotlin.version}</version>
+            </dependency>
+            <!--Use kotlin-compiler-embeddable instead koltin-compiler wrap-->
+            <!--guava dependency inside kotlin-compiler creating classpath issues at runtime-->
+            <dependency>
+                <groupId>org.jetbrains.kotlin</groupId>
                 <artifactId>kotlin-scripting-jvm-host</artifactId>
                 <version>${kotlin.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.jetbrains.kotlin</groupId>
+                        <artifactId>kotlin-compile</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
                 <groupId>org.jetbrains.kotlin</groupId>
                 <artifactId>kotlin-compiler-embeddable</artifactId>
                 <version>${kotlin.version}</version>
-                <scope>runtime</scope>
             </dependency>
             <dependency>
                 <groupId>org.jetbrains.kotlin</groupId>
@@ -198,16 +210,6 @@
             </dependency>
             <dependency>
                 <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
-                <artifactId>service</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
-                <artifactId>application</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
                 <artifactId>resource-dict</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -221,6 +223,21 @@
                 <artifactId>blueprint-validation</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+                <artifactId>blueprint-scripts</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+                <artifactId>service</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+                <artifactId>application</artifactId>
+                <version>${project.version}</version>
+            </dependency>
 
             <!-- Testing Dependencies -->
             <dependency>
@@ -270,6 +287,10 @@
             <artifactId>json-path</artifactId>
         </dependency>
         <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
         </dependency>
diff --git a/ms/vlantag-api/pom.xml b/ms/vlantag-api/pom.xml
index f5da9a6..ea46105 100644
--- a/ms/vlantag-api/pom.xml
+++ b/ms/vlantag-api/pom.xml
@@ -1,110 +1,110 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
+    <modelVersion>4.0.0</modelVersion>
 
-	<groupId>org.onap.ccsdk.apps.ms.vlantagapi</groupId>
-	<artifactId>vlantag-api</artifactId>
-	<version>0.4.1-SNAPSHOT</version>
-	<packaging>jar</packaging>
+    <groupId>org.onap.ccsdk.apps.ms.vlantagapi</groupId>
+    <artifactId>vlantag-api</artifactId>
+    <version>0.4.1-SNAPSHOT</version>
+    <packaging>jar</packaging>
 
-	<name>Vlantag API</name>
-	<description>Vlantag Api Service for Vlantag management of VNFs</description>
+    <name>Vlantag API</name>
+    <description>Vlantag Api Service for Vlantag management of VNFs</description>
 
-	<properties>
-		<swagger.directory>${basedir}/target/main/resources/META-INF/resources/swagger-ui/dist</swagger.directory>
-		<swagger.annotations.version>1.5.8</swagger.annotations.version>
-		<java.version>1.8</java.version>
-		<springboot.version>2.0.4.RELEASE</springboot.version>
-		<mariadb.connector.version>2.1.1</mariadb.connector.version>
-		<docker.registry>TBD:5100</docker.registry>
-		<serviceArtifactName>vlantagapi</serviceArtifactName>
+    <properties>
+        <swagger.directory>${basedir}/target/main/resources/META-INF/resources/swagger-ui/dist</swagger.directory>
+        <swagger.annotations.version>1.5.8</swagger.annotations.version>
+        <java.version>1.8</java.version>
+        <springboot.version>2.0.4.RELEASE</springboot.version>
+        <mariadb.connector.version>2.1.1</mariadb.connector.version>
+        <docker.registry>TBD:5100</docker.registry>
+        <serviceArtifactName>vlantagapi</serviceArtifactName>
 
-		<!-- Sonar -->
-		<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
-		<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
-		<sonar.surefire.reportsPath>${basedir}/target/surefire-reports</sonar.surefire.reportsPath>
-		<sonar.failsafe.reportsPath>${basedir}/target/failsafe-reports</sonar.failsafe.reportsPath>
-		<jacoco.path>${basedir}/target/jacoco_report</jacoco.path>
-		<jacoco.itPath>${basedir}/target/jacoco_itReport</jacoco.itPath>
-		<sonar.jacoco.reportPath>${basedir}/target/jacoco-ut.exec</sonar.jacoco.reportPath>
-		<sonar.jacoco.itReportPath>${basedir}/target/jacoco-it.exec</sonar.jacoco.itReportPath>
-		<sonar.language>java</sonar.language>
-		<ilib.version>2.0.7</ilib.version>
-		<docker.buildArg.https_proxy>${https_proxy}</docker.buildArg.https_proxy>
-		<docker.push.phase>deploy</docker.push.phase>
-		<docker.verbose>true</docker.verbose>
-		<ccsdk.project.version>${project.version}</ccsdk.project.version>
-	</properties>
+        <!-- Sonar -->
+        <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
+        <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
+        <sonar.surefire.reportsPath>${basedir}/target/surefire-reports</sonar.surefire.reportsPath>
+        <sonar.failsafe.reportsPath>${basedir}/target/failsafe-reports</sonar.failsafe.reportsPath>
+        <jacoco.path>${basedir}/target/jacoco_report</jacoco.path>
+        <jacoco.itPath>${basedir}/target/jacoco_itReport</jacoco.itPath>
+        <sonar.jacoco.reportPath>${basedir}/target/jacoco-ut.exec</sonar.jacoco.reportPath>
+        <sonar.jacoco.itReportPath>${basedir}/target/jacoco-it.exec</sonar.jacoco.itReportPath>
+        <sonar.language>java</sonar.language>
+        <ilib.version>2.0.7</ilib.version>
+        <docker.buildArg.https_proxy>${https_proxy}</docker.buildArg.https_proxy>
+        <docker.push.phase>deploy</docker.push.phase>
+        <docker.verbose>true</docker.verbose>
+        <ccsdk.project.version>${project.version}</ccsdk.project.version>
+    </properties>
 
-	<parent>
-		<groupId>org.onap.ccsdk.parent</groupId>
-		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>1.2.1-SNAPSHOT</version>
-		<relativePath/>
-	</parent>
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>1.2.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
 
 
-	<dependencies>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-jersey</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-web</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-test</artifactId>
-			<scope>test</scope>
-		</dependency>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jersey</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
 
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-actuator</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-security</artifactId>
-			<version>2.0.1.RELEASE</version>
-		</dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+            <version>2.0.1.RELEASE</version>
+        </dependency>
 
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sli-common</artifactId>
-			<version>${ccsdk.sli.core.version}</version>
-			<scope>provided</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.adaptors</groupId>
-			<artifactId>resource-assignment-provider</artifactId>
-			<version>${ccsdk.sli.adaptors.version}</version>
-			<exclusions>
-				<exclusion>
-					<groupId>org.slf4j</groupId>
-					<artifactId>slf4j-simple</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.sli.core</groupId>
+            <artifactId>sli-common</artifactId>
+            <version>${ccsdk.sli.core.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+            <artifactId>resource-assignment-provider</artifactId>
+            <version>${ccsdk.sli.adaptors.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-simple</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
 
-		<dependency>
-			<groupId>org.mariadb.jdbc</groupId>
-			<artifactId>mariadb-java-client</artifactId>
-			<version>${mariadb.connector.version}</version>
-		</dependency>
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>${mariadb.connector.version}</version>
+        </dependency>
 
-		<dependency>
-			<groupId>io.swagger</groupId>
-			<artifactId>swagger-annotations</artifactId>
-			<version>1.5.8</version>
-		</dependency>
-	</dependencies>
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.5.8</version>
+        </dependency>
+    </dependencies>
 
 
 
-	<build>
-		<plugins>
+    <build>
+        <plugins>
             <plugin>
                 <groupId>org.codehaus.groovy.maven</groupId>
                 <artifactId>gmaven-plugin</artifactId>
@@ -136,7 +136,7 @@
                     </execution>
                 </executions>
             </plugin>
-		    <plugin>
+            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
@@ -147,154 +147,154 @@
                     </excludes>
                 </configuration>
             </plugin>
-			<plugin>
-				<groupId>org.jacoco</groupId>
-				<artifactId>jacoco-maven-plugin</artifactId>
-				<version>0.7.5.201505241946</version>
-				<executions>
-					<!-- Prepares the property pointing to the JaCoCo runtime agent which 
-						is passed as VM argument when Maven the Surefire plugin is executed. -->
-					<execution>
-						<id>pre-unit-test</id>
-						<goals>
-							<goal>prepare-agent</goal>
-						</goals>
-						<configuration>
-							<!-- Sets the path to the file which contains the execution data. -->
-							<destFile>${sonar.jacoco.reportPath}</destFile>
-							<propertyName>surefireArgLine</propertyName>
-						</configuration>
-					</execution>
-					<!-- Ensures that the code coverage report for unit tests is created 
-						after unit tests have been run. -->
-					<execution>
-						<id>post-unit-test</id>
-						<phase>test</phase>
-						<goals>
-							<goal>report</goal>
-						</goals>
-						<configuration>
-							<!-- Sets the path to the file which contains the execution data. -->
-							<dataFile>${sonar.jacoco.reportPath}</dataFile>
-							<!-- Sets the output directory for the code coverage report. -->
-							<outputDirectory>${jacoco.path}</outputDirectory>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>com.github.kongchen</groupId>
-				<artifactId>swagger-maven-plugin</artifactId>
-				<version>3.1.7</version>
-				<configuration>
-					<apiSources>
-						<apiSource>
-							<schemes>
-								<scheme>http</scheme>
-								<scheme>https</scheme>
-							</schemes>
-							<host>localhost:9091</host>
-							<locations>
-								<location>org.onap.ccsdk.apps.ms.vlantagapi.core.service</location>
-								<location>org.onap.ccsdk.apps.ms.vlantagapi.core.model</location>
-							</locations>
-							<!-- <locations>org.onap.ccsdk.apps.ms.vlantagapi.core.service</locations> -->
-							<basePath>/vlantagapi</basePath>
-							<info>
-								<title>${project.artifactId} Service</title>
-								<version>${project.version}</version>
-							</info>
-							<securityDefinitions>
-								<securityDefinition>
-									<name>basicAuth</name>
-									<type>basic</type>
-								</securityDefinition>
-							</securityDefinitions>
-							<swaggerDirectory>${swagger.directory}</swaggerDirectory>
-						</apiSource>
-					</apiSources>
-				</configuration>
-				<executions>
-					<execution>
-						<!-- <phase>compile</phase> -->
-						<phase>package</phase>
-						<goals>
-							<goal>generate</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>com.spotify</groupId>
-				<artifactId>docker-maven-plugin</artifactId>
-				<version>0.4.11</version>
-				<configuration>
-					<imageName>${docker.registry}/org.onap.ccsdk.apps/${serviceArtifactName}</imageName>
-					<dockerDirectory>src/main/docker</dockerDirectory>
-					<serverId>docker-hub</serverId>
-					<registryUrl>https://${docker.registry}</registryUrl>
-					<imageTags>
-						<imageTag>${project.version}</imageTag>
-						<imageTag>latest</imageTag>
-					</imageTags>
-					<forceTags>true</forceTags>
-					<resources>
-						<resource>
-							<targetPath>/</targetPath>
-							<directory>${project.build.directory}</directory>
-							<include>${project.build.finalName}.jar</include>
-						</resource>
-					</resources>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-				<version>${springboot.version}</version>
-				<executions>
-					<execution>
-						<goals>
-							<goal>repackage</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <version>0.7.5.201505241946</version>
+                <executions>
+                    <!-- Prepares the property pointing to the JaCoCo runtime agent which
+                        is passed as VM argument when Maven the Surefire plugin is executed. -->
+                    <execution>
+                        <id>pre-unit-test</id>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                        <configuration>
+                            <!-- Sets the path to the file which contains the execution data. -->
+                            <destFile>${sonar.jacoco.reportPath}</destFile>
+                            <propertyName>surefireArgLine</propertyName>
+                        </configuration>
+                    </execution>
+                    <!-- Ensures that the code coverage report for unit tests is created
+                        after unit tests have been run. -->
+                    <execution>
+                        <id>post-unit-test</id>
+                        <phase>test</phase>
+                        <goals>
+                            <goal>report</goal>
+                        </goals>
+                        <configuration>
+                            <!-- Sets the path to the file which contains the execution data. -->
+                            <dataFile>${sonar.jacoco.reportPath}</dataFile>
+                            <!-- Sets the output directory for the code coverage report. -->
+                            <outputDirectory>${jacoco.path}</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.github.kongchen</groupId>
+                <artifactId>swagger-maven-plugin</artifactId>
+                <version>3.1.7</version>
+                <configuration>
+                    <apiSources>
+                        <apiSource>
+                            <schemes>
+                                <scheme>http</scheme>
+                                <scheme>https</scheme>
+                            </schemes>
+                            <host>localhost:9091</host>
+                            <locations>
+                                <location>org.onap.ccsdk.apps.ms.vlantagapi.core.service</location>
+                                <location>org.onap.ccsdk.apps.ms.vlantagapi.core.model</location>
+                            </locations>
+                            <!-- <locations>org.onap.ccsdk.apps.ms.vlantagapi.core.service</locations> -->
+                            <basePath>/vlantagapi</basePath>
+                            <info>
+                                <title>${project.artifactId} Service</title>
+                                <version>${project.version}</version>
+                            </info>
+                            <securityDefinitions>
+                                <securityDefinition>
+                                    <name>basicAuth</name>
+                                    <type>basic</type>
+                                </securityDefinition>
+                            </securityDefinitions>
+                            <swaggerDirectory>${swagger.directory}</swaggerDirectory>
+                        </apiSource>
+                    </apiSources>
+                </configuration>
+                <executions>
+                    <execution>
+                        <!-- <phase>compile</phase> -->
+                        <phase>package</phase>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+                <version>0.4.11</version>
+                <configuration>
+                    <imageName>${docker.registry}/org.onap.ccsdk.apps/${serviceArtifactName}</imageName>
+                    <dockerDirectory>src/main/docker</dockerDirectory>
+                    <serverId>docker-hub</serverId>
+                    <registryUrl>https://${docker.registry}</registryUrl>
+                    <imageTags>
+                        <imageTag>${project.version}</imageTag>
+                        <imageTag>latest</imageTag>
+                    </imageTags>
+                    <forceTags>true</forceTags>
+                    <resources>
+                        <resource>
+                            <targetPath>/</targetPath>
+                            <directory>${project.build.directory}</directory>
+                            <include>${project.build.finalName}.jar</include>
+                        </resource>
+                    </resources>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${springboot.version}</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 
-	<profiles>
-		<profile>
-			<id>docker</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>com.spotify</groupId>
-						<artifactId>docker-maven-plugin</artifactId>
-						<version>0.4.11</version>
-						<configuration>
-							<imageName>${docker.registry}/org.onap.ccsdk.apps/${serviceArtifactName}</imageName>
-							<dockerDirectory>src/main/docker</dockerDirectory>
-							<serverId>docker-hub</serverId>
-							<registryUrl>https://${docker.registry}</registryUrl>
-							<imageTags>
-								<imageTag>${project.version}</imageTag>
-								<imageTag>${project.version}-STAGING-${maven.build.timestamp}</imageTag>
-							    <imageTag>${project.docker.latesttag.version}</imageTag>
-							</imageTags>
-							<forceTags>true</forceTags>
-							<resources>
-								<resource>
-									<targetPath>/</targetPath>
-									<directory>${project.build.directory}</directory>
-									<include>${project.build.finalName}.jar</include>
-								</resource>
-							</resources>
-						</configuration>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
+    <profiles>
+        <profile>
+            <id>docker</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>com.spotify</groupId>
+                        <artifactId>docker-maven-plugin</artifactId>
+                        <version>0.4.11</version>
+                        <configuration>
+                            <imageName>${docker.registry}/org.onap.ccsdk.apps/${serviceArtifactName}</imageName>
+                            <dockerDirectory>src/main/docker</dockerDirectory>
+                            <serverId>docker-hub</serverId>
+                            <registryUrl>https://${docker.registry}</registryUrl>
+                            <imageTags>
+                                <imageTag>${project.version}</imageTag>
+                                <imageTag>${project.version}-STAGING-${maven.build.timestamp}</imageTag>
+                                <imageTag>${project.docker.latesttag.version}</imageTag>
+                            </imageTags>
+                            <forceTags>true</forceTags>
+                            <resources>
+                                <resource>
+                                    <targetPath>/</targetPath>
+                                    <directory>${project.build.directory}</directory>
+                                    <include>${project.build.finalName}.jar</include>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 
 
 </project>
diff --git a/pom.xml b/pom.xml
index 54fd6f2..b1addce 100755
--- a/pom.xml
+++ b/pom.xml
@@ -1,102 +1,102 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
+    <modelVersion>4.0.0</modelVersion>
 
-	<parent>
-		<groupId>org.onap.ccsdk.parent</groupId>
-		<artifactId>odlparent-lite</artifactId>
-		<version>1.2.1-SNAPSHOT</version>
-		<relativePath/>
-	</parent>
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.2.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
 
-	<groupId>org.onap.ccsdk.apps</groupId>
-	<artifactId>ccsdk-apps</artifactId>
-	<version>0.4.1-SNAPSHOT</version>
-	<packaging>pom</packaging>
+    <groupId>org.onap.ccsdk.apps</groupId>
+    <artifactId>ccsdk-apps</artifactId>
+    <version>0.4.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
 
-	<name>ccsdk-apps</name>
-	<description>CCSDK applications</description>
-	<url>https://wiki.onap.org</url>
-	<organization>
-		<name>ONAP</name>
-	</organization>
+    <name>ccsdk-apps</name>
+    <description>CCSDK applications</description>
+    <url>https://wiki.onap.org</url>
+    <organization>
+        <name>ONAP</name>
+    </organization>
 
-	<properties>
-		<!--Don't set any language to let sonar enable multi-language support-->
-		<sonar.language/>
-		<!--Provide src/main as source path so both src/main/java and src/main/kotlin are scanned-->
-		<sonar.sources>src/main</sonar.sources>
-		<!--Provide src/test as source path for test so both src/test/java and src/test/kotlin are scanned-->
-		<sonar.tests>src/test</sonar.tests>
-		<!--Only include java and kt files to the scan-->
-		<sonar.inclusions>**/*.java,**/*.kt</sonar.inclusions>
-		<!--Specify path to load jacoco XLM report, as Sonar can't load Kotlin coverage from binary report.
-		Note: coverage for now is invalid and is failing to load because of:
-		"Cannot import coverage information for file '{file}', coverage data is invalid."
-		see https://github.com/jacoco/jacoco/issues/763
-		That issue has been fixed in 0.8.3 but haven't yet been release. -->
-		<sonar.coverage.jacoco.xmlReportPaths>${project.reporting.outputDirectory}/jacoco-ut/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
-	</properties>
+    <properties>
+        <!--Don't set any language to let sonar enable multi-language support-->
+        <sonar.language/>
+        <!--Provide src/main as source path so both src/main/java and src/main/kotlin are scanned-->
+        <sonar.sources>src/main</sonar.sources>
+        <!--Provide src/test as source path for test so both src/test/java and src/test/kotlin are scanned-->
+        <sonar.tests>src/test</sonar.tests>
+        <!--Only include java and kt files to the scan-->
+        <sonar.inclusions>**/*.java,**/*.kt</sonar.inclusions>
+        <!--Specify path to load jacoco XLM report, as Sonar can't load Kotlin coverage from binary report.
+        Note: coverage for now is invalid and is failing to load because of:
+        "Cannot import coverage information for file '{file}', coverage data is invalid."
+        see https://github.com/jacoco/jacoco/issues/763
+        That issue has been fixed in 0.8.3 but haven't yet been release. -->
+        <sonar.coverage.jacoco.xmlReportPaths>${project.reporting.outputDirectory}/jacoco-ut/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
+    </properties>
 
-	<modules>
-		<module>components</module>
-		<module>ms</module>
-	</modules>
+    <modules>
+        <module>components</module>
+        <module>ms</module>
+    </modules>
 
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.jacoco</groupId>
-				<artifactId>jacoco-maven-plugin</artifactId>
-				<!--Change version to 0.8.3 when released-->
-				<version>${jacoco.version}</version>
-			</plugin>
-		</plugins>
-	</build>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <!--Change version to 0.8.3 when released-->
+                <version>${jacoco.version}</version>
+            </plugin>
+        </plugins>
+    </build>
 
-	<scm>
-		<connection>scm:git:ssh://git@${onap.git.host}/apps.git</connection>
-		<developerConnection>scm:git:ssh://${onap.git.host}:${onap.git.port}/${onap.git.project}/apps.git</developerConnection>
-		<url>${onap.git.protocol}://${onap.git.host}/projects/${onap.git.project}/repos/apps/browse</url>
-	</scm>
+    <scm>
+        <connection>scm:git:ssh://git@${onap.git.host}/apps.git</connection>
+        <developerConnection>scm:git:ssh://${onap.git.host}:${onap.git.port}/${onap.git.project}/apps.git</developerConnection>
+        <url>${onap.git.protocol}://${onap.git.host}/projects/${onap.git.project}/repos/apps/browse</url>
+    </scm>
 
-	<profiles>
-		<profile>
-			<id>blackduck</id>
-			<activation>
-				<property>
-					<name>blackduck-scan</name>
-				</property>
-			</activation>
-			<build>
-					<plugins>
-						<plugin>
-							<groupId>com.blackducksoftware.integration</groupId>
-							<artifactId>hub-maven-plugin</artifactId>
-							<version>1.4.0</version>
-							<inherited>false</inherited>
-							<configuration>
-								<hubProjectName>${project.name}</hubProjectName>
-								<outputDirectory>${project.basedir}</outputDirectory>
-							</configuration>
-							<executions>
-								<execution>
-									<id>create-bdio-file</id>
-									<phase>package</phase>
-									<goals>
-										<goal>createHubOutput</goal>
-									</goals>
-								</execution>
-							</executions>
-						</plugin>
-					</plugins>
+    <profiles>
+        <profile>
+            <id>blackduck</id>
+            <activation>
+                <property>
+                    <name>blackduck-scan</name>
+                </property>
+            </activation>
+            <build>
+                    <plugins>
+                        <plugin>
+                            <groupId>com.blackducksoftware.integration</groupId>
+                            <artifactId>hub-maven-plugin</artifactId>
+                            <version>1.4.0</version>
+                            <inherited>false</inherited>
+                            <configuration>
+                                <hubProjectName>${project.name}</hubProjectName>
+                                <outputDirectory>${project.basedir}</outputDirectory>
+                            </configuration>
+                            <executions>
+                                <execution>
+                                    <id>create-bdio-file</id>
+                                    <phase>package</phase>
+                                    <goals>
+                                        <goal>createHubOutput</goal>
+                                    </goals>
+                                </execution>
+                            </executions>
+                        </plugin>
+                    </plugins>
 
 
 
-			</build>
+            </build>
 
-		</profile>
+        </profile>
 
-	</profiles>
+    </profiles>
 
 </project>