Add relationships type enhancement logic.
authorMuthuramalingam, Brinda Santh <bs2796@att.com>
Wed, 9 Jan 2019 01:59:31 +0000 (20:59 -0500)
committerBrinda Santh Muthuramalingam <bs2796@att.com>
Thu, 10 Jan 2019 19:59:45 +0000 (19:59 +0000)
Change-Id: If8f072f49ccc74502052055bce0c90dd43ebd495
Issue-ID: CCSDK-920
Signed-off-by: Muthuramalingam, Brinda Santh <bs2796@att.com>
components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintConstants.kt
components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/data/BluePrintModel.kt
components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintImportService.kt
components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintFileUtils.kt
components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/activation-blueprint.json
components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/relationship_types.json [new file with mode: 0644]
components/model-catalog/definition-type/starter-type/relationship_type/tosca.relationships.AttachesTo.json [new file with mode: 0644]
components/model-catalog/definition-type/starter-type/relationship_type/tosca.relationships.HostedOn.json [new file with mode: 0644]
components/model-catalog/definition-type/starter-type/relationship_type/tosca.relationships.RoutesTo.json [new file with mode: 0644]

index fd6a8db..102e2eb 100644 (file)
@@ -45,17 +45,13 @@ object BluePrintConstants {
 \r
     const val USER_SYSTEM: String = "System"\r
 \r
-    const val MODEL_CONTENT_TYPE_JSON: String = "JSON"\r
-    const val MODEL_CONTENT_TYPE_YAML: String = "YAML"\r
-    const val MODEL_CONTENT_TYPE_YANG: String = "YANG"\r
-    const val MODEL_CONTENT_TYPE_SCHEMA: String = "SCHEMA"\r
-\r
     const val PATH_DIVIDER: String = "/"\r
     const val PATH_SERVICE_TEMPLATE: String = "service_template"\r
     const val PATH_TOPOLOGY_TEMPLATE: String = "topology_template"\r
     const val PATH_METADATA: String = "metadata"\r
     const val PATH_NODE_TYPES: String = "node_types"\r
     const val PATH_POLICY_TYPES: String = "policy_types"\r
+    const val PATH_RELATIONSHIP_TYPES: String = "relationship_types"\r
     const val PATH_ARTIFACT_TYPES: String = "artifact_types"\r
     const val PATH_DATA_TYPES: String = "data_types"\r
     const val PATH_INPUTS: String = "inputs"\r
index 19f0943..9767b2e 100644 (file)
@@ -598,6 +598,8 @@ class ServiceTemplate : Cloneable {
     var artifactTypes: MutableMap<String, ArtifactType>? = null\r
     @get:JsonProperty("data_types")\r
     var dataTypes: MutableMap<String, DataType>? = null\r
+    @get:JsonProperty("relationship_types")\r
+    var relationshipTypes: MutableMap<String, RelationshipType>? = null\r
     @get:JsonProperty("node_types")\r
     var nodeTypes: MutableMap<String, NodeType>? = null\r
     @get:JsonProperty("policy_types")\r
index fce06f3..26eb19d 100644 (file)
@@ -28,11 +28,13 @@ import java.net.URLDecoder
 import java.nio.charset.Charset
 
 class BluePrintImportService(private val parentServiceTemplate: ServiceTemplate, private val blueprintBasePath: String) {
+    companion object {
+        private const val PARENT_SERVICE_TEMPLATE: String = "parent"
+    }
 
     private val log: Logger = LoggerFactory.getLogger(this::class.toString())
-    val PARENT_SERVICE_TEMPLATE: String = "parent"
 
-    var importServiceTemplateMap: MutableMap<String, ServiceTemplate> = hashMapOf()
+    private var importServiceTemplateMap: MutableMap<String, ServiceTemplate> = hashMapOf()
 
 
     fun getImportResolvedServiceTemplate(): ServiceTemplate {
index 18896f5..5a10e43 100755 (executable)
@@ -33,12 +33,6 @@ import java.nio.file.Files
 import java.nio.file.Path
 import java.nio.file.Paths
 import java.nio.file.StandardOpenOption
-import java.text.MessageFormat
-import java.time.Instant
-import java.time.temporal.ChronoUnit
-import java.time.ZoneId
-import java.time.format.DateTimeFormatter
-
 
 
 class BluePrintFileUtils {
@@ -56,8 +50,9 @@ class BluePrintFileUtils {
             val metaDataDir = File(blueprintDir.absolutePath.plus(File.separator).plus(BluePrintConstants.TOSCA_METADATA_DIR))
             Files.createDirectories(metaDataDir.toPath())
 
-            val metafile = File(blueprintDir.absolutePath.plus(File.separator).plus(BluePrintConstants.TOSCA_METADATA_ENTRY_DEFINITION_FILE))
-            Files.write(metafile.toPath(), getMetaDataContent().toByteArray(), StandardOpenOption.CREATE_NEW)
+            val metaFile = File(blueprintDir.absolutePath.plus(File.separator).plus(BluePrintConstants
+                    .TOSCA_METADATA_ENTRY_DEFINITION_FILE))
+            Files.write(metaFile.toPath(), getMetaDataContent().toByteArray(), StandardOpenOption.CREATE_NEW)
 
             val definitionsDir = File(blueprintDir.absolutePath.plus(File.separator).plus(BluePrintConstants.TOSCA_DEFINITIONS_DIR))
             Files.createDirectories(definitionsDir.toPath())
@@ -92,35 +87,6 @@ class BluePrintFileUtils {
             }
         }
 
-        fun populateDefaultImports(blueprintContext: BluePrintContext) {
-            // Get the Default Types
-            val types = arrayListOf(BluePrintConstants.PATH_DATA_TYPES, BluePrintConstants.PATH_ARTIFACT_TYPES,
-                    BluePrintConstants.PATH_NODE_TYPES, BluePrintConstants.PATH_POLICY_TYPES)
-
-            // Clean Type Imports
-            cleanImportTypes(blueprintContext.serviceTemplate)
-
-            val imports = mutableListOf<ImportDefinition>()
-            types.forEach { typeName ->
-                val import = ImportDefinition()
-                import.file = BluePrintConstants.TOSCA_DEFINITIONS_DIR.plus("/$typeName.json")
-                imports.add(import)
-            }
-
-            blueprintContext.serviceTemplate.imports = imports
-        }
-
-        fun cleanImportTypes(serviceTemplate: ServiceTemplate) {
-            // Clean the Type imports
-            val toDeleteTypes = serviceTemplate.imports?.filter {
-                it.file.endsWith("_types.json")
-            }
-
-            if (toDeleteTypes != null && toDeleteTypes.isNotEmpty()) {
-                serviceTemplate.imports?.removeAll(toDeleteTypes)
-            }
-        }
-
         fun writeEnhancedBluePrint(blueprintContext: BluePrintContext) {
 
             // Write Blueprint Types
@@ -147,6 +113,11 @@ class BluePrintFileUtils {
                 writeTypeFile(definitionDir.absolutePath, BluePrintConstants.PATH_DATA_TYPES, dataTypesContent)
             }
 
+            blueprintContext.serviceTemplate.relationshipTypes?.let {
+                val nodeTypesContent = JacksonUtils.getWrappedJson(BluePrintConstants.PATH_RELATIONSHIP_TYPES, it.toSortedMap(), true)
+                writeTypeFile(definitionDir.absolutePath, BluePrintConstants.PATH_RELATIONSHIP_TYPES, nodeTypesContent)
+            }
+
             blueprintContext.serviceTemplate.artifactTypes?.let {
                 val artifactTypesContent = JacksonUtils.getWrappedJson(BluePrintConstants.PATH_ARTIFACT_TYPES, it.toSortedMap(), true)
                 writeTypeFile(definitionDir.absolutePath, BluePrintConstants.PATH_ARTIFACT_TYPES, artifactTypesContent)
@@ -163,7 +134,40 @@ class BluePrintFileUtils {
             }
         }
 
-        fun writeEntryDefinitionFile(blueprintContext: BluePrintContext) {
+        private fun populateDefaultImports(blueprintContext: BluePrintContext) {
+            // Get the Default Types
+            val types = arrayListOf(BluePrintConstants.PATH_DATA_TYPES, BluePrintConstants.PATH_RELATIONSHIP_TYPES,
+                    BluePrintConstants.PATH_ARTIFACT_TYPES, BluePrintConstants.PATH_NODE_TYPES,
+                    BluePrintConstants.PATH_POLICY_TYPES)
+
+            // Clean Type Imports
+            cleanImportTypes(blueprintContext.serviceTemplate)
+
+            val imports = mutableListOf<ImportDefinition>()
+            types.forEach { typeName ->
+                val import = ImportDefinition()
+                import.file = BluePrintConstants.TOSCA_DEFINITIONS_DIR.plus("/$typeName.json")
+                imports.add(import)
+            }
+
+            blueprintContext.serviceTemplate.imports = imports
+        }
+
+        fun cleanImportTypes(serviceTemplate: ServiceTemplate) {
+            // Clean the Type imports
+            val toDeleteTypes = serviceTemplate.imports?.filter {
+                it.file.endsWith("_types.json")
+            }
+
+            if (toDeleteTypes != null && toDeleteTypes.isNotEmpty()) {
+                serviceTemplate.imports?.removeAll(toDeleteTypes)
+            }
+        }
+
+        /**
+         * Re Generate the Blueprint Service Template Definition file based on BluePrint Context.
+         */
+        private fun writeEntryDefinitionFile(blueprintContext: BluePrintContext) {
 
             val absoluteEntryDefinitionFile = blueprintContext.rootPath.plus(File.separator).plus(blueprintContext.entryDefinition)
 
@@ -174,14 +178,15 @@ class BluePrintFileUtils {
             writeServiceTemplate.dataTypes = null
             writeServiceTemplate.artifactTypes = null
             writeServiceTemplate.policyTypes = null
+            writeServiceTemplate.relationshipTypes = null
             writeServiceTemplate.nodeTypes = null
 
-            // Write the Serivice Template
+            // Write the Service Template
             writeDefinitionFile(absoluteEntryDefinitionFile, JacksonUtils.getJson(writeServiceTemplate, true))
         }
 
-        fun writeDefinitionFile(definitionFile: String, content: String) = runBlocking {
-            val definitionFile = File(definitionFile)
+        fun writeDefinitionFile(definitionFileName: String, content: String) = runBlocking {
+            val definitionFile = File(definitionFileName)
             // Delete the File If exists
             Files.deleteIfExists(definitionFile.toPath())
 
@@ -207,22 +212,6 @@ class BluePrintFileUtils {
                     "\nEntry-Definitions: Definitions/<BLUEPRINT_NAME>.json" +
                     "\nTemplate-Tags: <TAGS>"
         }
-       
-        fun getBluePrintFile(fileName: String, targetPath: Path) : File {
-            val filePath = targetPath.resolve(fileName).toString()
-            val file = File(filePath)
-            check(file.exists()) {
-                throw BluePrintException("couldn't get definition file under path(${file.absolutePath})")
-            }
-            return file
-        }
-
-        fun getCBAGeneratedFileName(fileName: String, prefix: String): String {
-            val DATE_FORMAT = "yyyyMMddHHmmss"
-            val formatter = DateTimeFormatter.ofPattern(DATE_FORMAT)
-            val datePrefix = Instant.now().atZone(ZoneId.systemDefault()).toLocalDateTime().format(formatter)
-            return MessageFormat.format(prefix, datePrefix, fileName)
-        }
 
         fun getCbaStorageDirectory(path: String): Path {
             check(StringUtils.isNotBlank(path)) {
diff --git a/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/relationship_types.json b/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/relationship_types.json
new file mode 100644 (file)
index 0000000..87d2dc5
--- /dev/null
@@ -0,0 +1,9 @@
+{
+  "relationship_types": {
+    "tosca.relationships.ConnectsTo": {
+      "description": "Relationship tosca.relationships.ConnectsTo",
+      "version": "1.0.0",
+      "derived_from": "tosca.relationships.Root"
+    }
+  }
+}
\ No newline at end of file
diff --git a/components/model-catalog/definition-type/starter-type/relationship_type/tosca.relationships.AttachesTo.json b/components/model-catalog/definition-type/starter-type/relationship_type/tosca.relationships.AttachesTo.json
new file mode 100644 (file)
index 0000000..bcfb65e
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "description": "Relationship tosca.relationships.AttachesTo",
+  "version": "1.0.0",
+  "derived_from": "tosca.relationships.Root"
+}
\ No newline at end of file
diff --git a/components/model-catalog/definition-type/starter-type/relationship_type/tosca.relationships.HostedOn.json b/components/model-catalog/definition-type/starter-type/relationship_type/tosca.relationships.HostedOn.json
new file mode 100644 (file)
index 0000000..a8337cd
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "description": "Relationship tosca.relationships.HostedOn",
+  "version": "1.0.0",
+  "derived_from": "tosca.relationships.Root"
+}
\ No newline at end of file
diff --git a/components/model-catalog/definition-type/starter-type/relationship_type/tosca.relationships.RoutesTo.json b/components/model-catalog/definition-type/starter-type/relationship_type/tosca.relationships.RoutesTo.json
new file mode 100644 (file)
index 0000000..1da73cd
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "description": "Relationship tosca.relationships.RoutesTo",
+  "version": "1.0.0",
+  "derived_from": "tosca.relationships.Root"
+}
\ No newline at end of file