Resource Resolution Service : 2
authorSingal, Kapil (ks220y) <ks220y@att.com>
Fri, 11 Jan 2019 18:58:38 +0000 (13:58 -0500)
committerKAPIL SINGAL <ks220y@att.com>
Fri, 11 Jan 2019 20:39:43 +0000 (20:39 +0000)
Changes for Primary-DB Resource Resolution Processor Service

Change-Id: Iaf6ad6277d36787d87881819ae530de1d7038a2e
Issue-ID: CCSDK-942
Signed-off-by: Singal, Kapil (ks220y) <ks220y@att.com>
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/CapabilityResourceAssignmentProcessor.kt
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/InputResourceAssignmentProcessor.kt
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/PrimaryDataResourceAssignmentProcessor.kt [moved from ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/processor/DataBaseResourceAssignmentProcessor.kt with 82% similarity]
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/utils/ResourceResolutionUtils.kt [deleted file]
ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentTest.kt
ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt
ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/mapping/primary-db/dt-location.json [moved from ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/mapping/db/dt-location.json with 100% similarity]
ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/mapping/primary-db/primary-db-array.json [moved from ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/mapping/db/db-array.json with 88% similarity]
ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/mapping/primary-db/primary-db-complex.json [moved from ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/mapping/db/db-complex.json with 91% similarity]
ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/mapping/primary-db/primary-db-simple.json [moved from ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/mapping/db/db-simple.json with 90% similarity]
ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/mapping/primary-db/resource-assignments-simple.json [moved from ms/blueprintsprocessor/functions/resource-resolution/src/test/resources/mapping/db/resource-assignments-simple.json with 85% similarity]

index f1de8f7..a6c8a3f 100644 (file)
@@ -17,9 +17,9 @@
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor
 
 import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.CapabilityResourceSource
-import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils.ResourceResolutionUtils
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
 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
@@ -49,7 +49,7 @@ open class CapabilityResourceAssignmentProcessor : ResourceAssignmentProcessor()
 
         checkNotNull(resourceSource.properties) { "failed to get ${executionRequest.dictionarySource} properties" }
 
-        val capabilityResourceSourceProperty = ResourceResolutionUtils.transformResourceSource(resourceSource.properties!!, CapabilityResourceSource::class.java)
+        val capabilityResourceSourceProperty = ResourceAssignmentUtils.transformResourceSource(resourceSource.properties!!, CapabilityResourceSource::class.java)
 
         val instanceType = capabilityResourceSourceProperty.type
         val instanceName = capabilityResourceSourceProperty.instanceName
index ccf3aee..bd9c188 100644 (file)
 
 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor
 
-import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.utils.ResourceResolutionUtils
 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
 
 /**
  * InputResourceAssignmentProcessor
@@ -41,13 +41,13 @@ open class InputResourceAssignmentProcessor : ResourceAssignmentProcessor() {
                 val value = bluePrintRuntimeService!!.getInputValue(executionRequest.name)
                 // if value is null don't call setResourceDataValue to populate the value
                 if (value != null && value !is NullNode) {
-                    ResourceResolutionUtils.setResourceDataValue(executionRequest, value)
+                    ResourceAssignmentUtils.setResourceDataValue(executionRequest, value)
                 }
             }
             // Check the value has populated for mandatory case
-            ResourceResolutionUtils.assertTemplateKeyValueNotNull(executionRequest)
+            ResourceAssignmentUtils.assertTemplateKeyValueNotNull(executionRequest)
         } catch (e: Exception) {
-            ResourceResolutionUtils.setFailedResourceDataValue(executionRequest, e.message)
+            ResourceAssignmentUtils.setFailedResourceDataValue(executionRequest, e.message)
             throw BluePrintProcessorException("Failed in template key ($executionRequest) assignments with : (${e.message})", e)
         }
     }
@@ -21,15 +21,15 @@ import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
 import org.springframework.stereotype.Service
 
 /**
- * DataBaseResourceAssignmentProcessor
+ * PrimaryDataResourceAssignmentProcessor
  *
  * @author Brinda Santh
  */
-@Service("resource-assignment-processor-db")
-open class DataBaseResourceAssignmentProcessor : ResourceAssignmentProcessor(){
+@Service("resource-assignment-processor-primary-db")
+open class PrimaryDataResourceAssignmentProcessor : ResourceAssignmentProcessor(){
 
     override fun getName(): String {
-        return "resource-assignment-processor-db"
+        return "resource-assignment-processor-primary-db"
     }
 
     override fun process(executionRequest: ResourceAssignment) {
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/utils/ResourceResolutionUtils.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/resource/resolution/utils/ResourceResolutionUtils.kt
deleted file mode 100644 (file)
index 7c59088..0000000
+++ /dev/null
@@ -1,157 +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.functions.resource.resolution.utils
-
-import java.util.Date
-import org.apache.commons.lang3.StringUtils
-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 ResourceResolutionUtils {
-    companion object {
-
-        private val logger: EELFLogger = EELFManager.getInstance().getLogger(ResourceResolutionUtils::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
index ef84960..8adde86 100644 (file)
@@ -34,7 +34,7 @@ import org.springframework.test.context.junit4.SpringRunner
 @RunWith(SpringRunner::class)
 @ContextConfiguration(classes = [ResourceResolutionComponent::class, ResourceResolutionService::class,
     InputResourceAssignmentProcessor::class, DefaultResourceAssignmentProcessor::class,
-    DataBaseResourceAssignmentProcessor::class, SimpleRestResourceAssignmentProcessor::class,
+    PrimaryDataResourceAssignmentProcessor::class, SimpleRestResourceAssignmentProcessor::class,
     CapabilityResourceAssignmentProcessor::class])
 class ResourceResolutionComponentTest {
 
index 46ccb97..6c68675 100644 (file)
@@ -39,7 +39,7 @@ import kotlin.test.assertTrue
 @RunWith(SpringRunner::class)
 @ContextConfiguration(classes = [ResourceResolutionService::class,
     InputResourceAssignmentProcessor::class, DefaultResourceAssignmentProcessor::class,
-    DataBaseResourceAssignmentProcessor::class, SimpleRestResourceAssignmentProcessor::class,
+    PrimaryDataResourceAssignmentProcessor::class, SimpleRestResourceAssignmentProcessor::class,
     CapabilityResourceAssignmentProcessor::class])
 class ResourceResolutionServiceTest {
 
@@ -53,7 +53,7 @@ class ResourceResolutionServiceTest {
     fun testRegisteredSource() {
         val sources = resourceResolutionService.registeredResourceSources()
         assertNotNull(sources, "failed to get registered sources")
-        assertTrue(sources.containsAll(arrayListOf("input", "default", "db", "mdsal")), "failed to get registered sources")
+        assertTrue(sources.containsAll(arrayListOf("input", "default", "primary-db", "mdsal")), "failed to get registered sources")
     }
 
     @Test
@@ -4,7 +4,7 @@
                "data-type": "list",\r
                "entry-schema": "dt-location",\r
                "source": {\r
-                       "db": {\r
+                       "primary-db": {\r
                                "query": "SELECT db-country, db-state FROM DEVICE_PROFILE WHERE profile_name = :profile_name",\r
                                "input-key-mapping": {\r
                                        "profile_name": "profile_name"\r
@@ -16,7 +16,7 @@
                        }\r
                },\r
                "candidate-dependency": {\r
-                       "db": {\r
+                       "primary-db": {\r
                                "names": [\r
                                        "profile_name"\r
                                ]\r
@@ -3,7 +3,7 @@
                "name": "location",\r
                "data-type": "dt-location",\r
                "source": {\r
-                       "db": {\r
+                       "primary-db": {\r
                                "query": "SELECT db-country, db-state FROM DEVICE_PROFILE WHERE profile_name = :profile_name",\r
                                "input-key-mapping": {\r
                                        "profile_name": "profile_name"\r
@@ -3,7 +3,7 @@
                "name": "country",\r
                "data-type": "string",\r
                "source": {\r
-                       "db": {\r
+                       "primary-db": {\r
                                "query": "SELECT country FROM DEVICE_PROFILE WHERE profile_name = :profile_name",\r
                                "input-key-mapping": {\r
                                        "profile_name": "profile_name"\r