Add dynamic resource source mapping rest service.
Change-Id: I59274a4c0162bc6718c4248788c0e7f36830a129
Issue-ID: CCSDK-556
Signed-off-by: Muthuramalingam, Brinda Santh(bs2796) <bs2796@att.com>
--- /dev/null
+{\r
+ "tags": "v4-ip-type, tosca.datatypes.Root, data_type, brindasanth@onap.com",\r
+ "name": "default-source",\r
+ "property" :{\r
+ "description": "name of the ",\r
+ "type": "string"\r
+ },\r
+ "updated-by": "brindasanth@onap.com",\r
+ "sources": {\r
+ "default": {\r
+ "type": "source-default",\r
+ "properties": {\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file
load.nodeTypePath=load/model_type/node_type
load.artifactTypePath=load/model_type/artifact_type
load.resourceDictionaryPath=load/resource_dictionary
-load.blueprintsPath=load/blueprints
\ No newline at end of file
+load.blueprintsPath=load/blueprints
+
+# Load Resource Source Mappings
+resourceSourceMappings=db=source-db,input=source-input,default=source-default,mdsal=source-rest
\ No newline at end of file
load.nodeTypePath=load/model_type/node_type\r
load.artifactTypePath=load/model_type/artifact_type\r
load.resourceDictionaryPath=load/resource_dictionary\r
-load.blueprintsPath=load/blueprints
\ No newline at end of file
+load.blueprintsPath=load/blueprints\r
+\r
+# Load Resource Source Mappings\r
+resourceSourceMappings=db=source-db,input=source-input,default=source-default,mdsal=source-rest
\ No newline at end of file
\r
package org.onap.ccsdk.apps.controllerblueprints.service;\r
\r
+import com.att.eelf.configuration.EELFLogger;\r
+import com.att.eelf.configuration.EELFManager;\r
+import org.apache.commons.collections.CollectionUtils;\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.factory.ResourceSourceMappingFactory;\r
+import org.springframework.beans.factory.annotation.Value;\r
import org.springframework.stereotype.Component;\r
\r
import javax.annotation.PostConstruct;\r
+import java.util.List;\r
\r
@Component\r
@SuppressWarnings("unused")\r
public class ApplicationRegistrationService {\r
+ private static EELFLogger log = EELFManager.getInstance().getLogger(ApplicationRegistrationService.class);\r
+\r
+ @Value("#{'${resourceSourceMappings}'.split(',')}")\r
+ private List<String> resourceSourceMappings;\r
\r
@PostConstruct\r
- public void register(){\r
+ public void register() {\r
registerDictionarySources();\r
}\r
\r
- public void registerDictionarySources(){\r
-\r
+ public void registerDictionarySources() {\r
+ log.info("Registering Dictionary Sources : {}", resourceSourceMappings);\r
+ if (CollectionUtils.isNotEmpty(resourceSourceMappings)) {\r
+ resourceSourceMappings.forEach(resourceSourceMapping -> {\r
+ String[] mappingKeyValue = resourceSourceMapping.split("=");\r
+ if (mappingKeyValue != null && mappingKeyValue.length == 2) {\r
+ ResourceSourceMappingFactory.INSTANCE.registerSourceMapping(mappingKeyValue[0].trim(), mappingKeyValue[1].trim());\r
+ } else {\r
+ log.warn("failed to get resource source mapping {}", resourceSourceMapping);\r
+ }\r
+ });\r
+ }\r
}\r
}\r
import org.apache.commons.lang3.StringUtils;\r
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;\r
import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition;\r
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;\r
import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition;\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceSourceMapping;\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.factory.ResourceSourceMappingFactory;\r
import org.onap.ccsdk.apps.controllerblueprints.service.domain.ResourceDictionary;\r
import org.onap.ccsdk.apps.controllerblueprints.service.repository.ResourceDictionaryRepository;\r
import org.onap.ccsdk.apps.controllerblueprints.service.validator.ResourceDictionaryValidator;\r
*/\r
public ResourceDictionary saveResourceDictionary(ResourceDictionary resourceDictionary) {\r
Preconditions.checkNotNull(resourceDictionary, "Resource Dictionary information is missing");\r
- Preconditions.checkNotNull(resourceDictionary.getDefinition(),"Resource Dictionary definition information is missing");\r
+ Preconditions.checkNotNull(resourceDictionary.getDefinition(), "Resource Dictionary definition information is missing");\r
\r
ResourceDefinition resourceDefinition = resourceDictionary.getDefinition();\r
Preconditions.checkNotNull(resourceDefinition, "failed to get resource definition from content");\r
Preconditions.checkArgument(StringUtils.isNotBlank(name), "Resource dictionary Name Information is missing.");\r
resourceDictionaryRepository.deleteByName(name);\r
}\r
+\r
+ /**\r
+ * This is a getResourceSourceMapping service\r
+ *\r
+ */\r
+ public ResourceSourceMapping getResourceSourceMapping() {\r
+ return ResourceSourceMappingFactory.INSTANCE.getRegisterSourceMapping();\r
+ }\r
}\r
package org.onap.ccsdk.apps.controllerblueprints.service.rs;\r
\r
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceSourceMapping;\r
import org.onap.ccsdk.apps.controllerblueprints.service.ResourceDictionaryService;\r
import org.onap.ccsdk.apps.controllerblueprints.service.domain.ResourceDictionary;\r
import org.springframework.http.MediaType;\r
\r
}\r
\r
+ @GetMapping(path = "/source-mapping", produces = MediaType.APPLICATION_JSON_VALUE)\r
+ public @ResponseBody\r
+ ResourceSourceMapping getResourceSourceMapping() {\r
+ return resourceDictionaryService.getResourceSourceMapping();\r
+ }\r
+\r
}\r
--- /dev/null
+/*\r
+ * Copyright © 2017-2018 AT&T Intellectual Property.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package org.onap.ccsdk.apps.controllerblueprints.service.enhancer\r
+\r
+import com.att.eelf.configuration.EELFLogger\r
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException\r
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate\r
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintEnhancerDefaultService\r
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintEnhancerService\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition\r
+import com.att.eelf.configuration.EELFManager\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.service.ResourceAssignmentValidationDefaultService\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.service.ResourceDefinitionRepoService\r
+\r
+/**\r
+ * ResourceAssignmentEnhancerService.\r
+ *\r
+ * @author Brinda Santh\r
+ */\r
+interface ResourceAssignmentEnhancerService {\r
+\r
+ @Throws(BluePrintException::class)\r
+ fun enhanceBluePrint(bluePrintEnhancerService: BluePrintEnhancerService,\r
+ resourceAssignments: List<ResourceAssignment>)\r
+\r
+ @Throws(BluePrintException::class)\r
+ fun enhanceBluePrint(resourceAssignments: List<ResourceAssignment>): ServiceTemplate\r
+}\r
+\r
+/**\r
+ * ResourceAssignmentEnhancerDefaultService.\r
+ *\r
+ * @author Brinda Santh\r
+ */\r
+open class ResourceAssignmentEnhancerDefaultService(private val resourceDefinitionRepoService: ResourceDefinitionRepoService)\r
+ : ResourceAssignmentEnhancerService {\r
+ private val log: EELFLogger = EELFManager.getInstance().getLogger(ResourceAssignmentValidationDefaultService::class.java)\r
+\r
+ /**\r
+ * Get the defined source instance from the ResourceAssignment,\r
+ * then get the NodeType of the Sources assigned\r
+ */\r
+ override fun enhanceBluePrint(bluePrintEnhancerService: BluePrintEnhancerService,\r
+ resourceAssignments: List<ResourceAssignment>) {\r
+\r
+ // Iterate the Resource Assignment and\r
+ resourceAssignments.map { resourceAssignment ->\r
+ val dictionaryName = resourceAssignment.dictionaryName!!\r
+ val dictionarySource = resourceAssignment.dictionarySource!!\r
+ log.info("Enriching Assignment name({}), dictionary name({}), source({})", resourceAssignment.name,\r
+ dictionaryName, dictionarySource)\r
+ // Get the Resource Definition from Repo\r
+ val resourceDefinition: ResourceDefinition = getResourceDefinition(dictionaryName)\r
+\r
+ val sourceNodeTemplate = resourceDefinition.sources.get(dictionarySource)\r
+\r
+ // Enrich as NodeTemplate\r
+ bluePrintEnhancerService.enrichNodeTemplate(dictionarySource, sourceNodeTemplate!!)\r
+ }\r
+ }\r
+\r
+ override fun enhanceBluePrint(resourceAssignments: List<ResourceAssignment>): ServiceTemplate {\r
+ val bluePrintEnhancerService = BluePrintEnhancerDefaultService(resourceDefinitionRepoService)\r
+ bluePrintEnhancerService.serviceTemplate = ServiceTemplate()\r
+ bluePrintEnhancerService.initialCleanUp()\r
+ enhanceBluePrint(bluePrintEnhancerService, resourceAssignments)\r
+ return bluePrintEnhancerService.serviceTemplate\r
+ }\r
+\r
+ private fun getResourceDefinition(name: String): ResourceDefinition {\r
+ return resourceDefinitionRepoService.getResourceDefinition(name).block()!!\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright © 2017-2018 AT&T Intellectual Property.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package org.onap.ccsdk.apps.controllerblueprints.service.enhancer;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;\r
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate;\r
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonReactorUtils;\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment;\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.service.ResourceDefinitionFileRepoService;\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.service.ResourceDefinitionRepoService;\r
+\r
+import java.util.List;\r
+\r
+/**\r
+ * ResourceAssignmentEnhancerService.\r
+ *\r
+ * @author Brinda Santh\r
+ */\r
+public class ResourceAssignmentEnhancerServiceTest {\r
+\r
+ @Test\r
+ public void testEnhanceBluePrint() throws BluePrintException {\r
+\r
+ List<ResourceAssignment> resourceAssignments = JacksonReactorUtils\r
+ .getListFromClassPathFile("enhance/simple-enrich.json", ResourceAssignment.class).block();\r
+ Assert.assertNotNull("Failed to get Resource Assignment", resourceAssignments);\r
+ ResourceDefinitionRepoService resourceDefinitionRepoService = new ResourceDefinitionFileRepoService("./../../application/load");\r
+ ResourceAssignmentEnhancerService resourceAssignmentEnhancerService =\r
+ new ResourceAssignmentEnhancerDefaultService(resourceDefinitionRepoService);\r
+ ServiceTemplate serviceTemplate = resourceAssignmentEnhancerService.enhanceBluePrint(resourceAssignments);\r
+ Assert.assertNotNull("Failed to get Enriched service Template", serviceTemplate);\r
+ }\r
+}\r
+\r
import org.onap.ccsdk.apps.controllerblueprints.TestApplication;\r
import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;\r
import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition;\r
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceSourceMapping;\r
import org.onap.ccsdk.apps.controllerblueprints.service.domain.ResourceDictionary;\r
import com.att.eelf.configuration.EELFLogger;\r
import com.att.eelf.configuration.EELFManager;\r
\r
}\r
\r
+ @Test\r
+ public void test03GetResourceSourceMapping() {\r
+ ResourceSourceMapping resourceSourceMapping = resourceDictionaryRest.getResourceSourceMapping();\r
+ org.springframework.util.Assert.notNull(resourceSourceMapping, "Failed to get resource source mapping");\r
+ org.springframework.util.Assert.notNull(resourceSourceMapping.getResourceSourceMappings(), "Failed to get resource source mappings");\r
+ }\r
+\r
}\r
load.nodeTypePath=./../../application/load/model_type/node_type
load.artifactTypePath=./../../application/load/model_type/artifact_type
load.resourceDictionaryPath=./../../application/load/resource_dictionary
-load.blueprintsPath=./../../application/load/blueprints
\ No newline at end of file
+load.blueprintsPath=./../../application/load/blueprints
+
+# Load Resource Source Mappings
+resourceSourceMappings=db=source-db,input=source-input,default=source-default,mdsal=source-rest
\ No newline at end of file
--- /dev/null
+[\r
+ {\r
+ "name": "rs-db-source",\r
+ "input-param": true,\r
+ "property": {\r
+ "type": "string",\r
+ "required": true\r
+ },\r
+ "dictionary-name": "db-source",\r
+ "dictionary-source": "db",\r
+ "dependencies": [\r
+ "input-source"\r
+ ]\r
+ },\r
+ {\r
+ "name": "ra-default-source",\r
+ "input-param": true,\r
+ "property": {\r
+ "type": "string",\r
+ "required": true\r
+ },\r
+ "dictionary-name": "default-source",\r
+ "dictionary-source": "default",\r
+ "dependencies": []\r
+ },\r
+ {\r
+ "name": "ra-input-source",\r
+ "input-param": true,\r
+ "property": {\r
+ "type": "string",\r
+ "required": true\r
+ },\r
+ "dictionary-name": "input-source",\r
+ "dictionary-source": "input",\r
+ "dependencies": []\r
+ }\r
+]\r