import org.apache.commons.io.FileUtils
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ImportDefinition
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate
import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
import java.io.File
import java.io.FileFilter
}
}
+ 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
+ writeBluePrintTypes(blueprintContext)
+ // Re Populate the Imports
+ populateDefaultImports(blueprintContext)
+ // Rewrite the Entry Definition Files
+ writeEntryDefinitionFile(blueprintContext)
+
+ }
+
fun writeBluePrintTypes(blueprintContext: BluePrintContext) {
val basePath = blueprintContext.rootPath
}
}
+ fun writeEntryDefinitionFile(blueprintContext: BluePrintContext) {
+
+ val absoluteEntryDefinitionFile = blueprintContext.rootPath.plus(File.separator).plus(blueprintContext.entryDefinition)
+
+ val serviceTemplate = blueprintContext.serviceTemplate
+
+ // Clone the Service Template
+ val writeServiceTemplate = serviceTemplate.clone()
+ writeServiceTemplate.dataTypes = null
+ writeServiceTemplate.artifactTypes = null
+ writeServiceTemplate.policyTypes = null
+ writeServiceTemplate.nodeTypes = null
+
+ // Write the Serivice Template
+ writeDefinitionFile(absoluteEntryDefinitionFile, JacksonUtils.getJson(writeServiceTemplate, true))
+ }
+
fun writeDefinitionFile(definitionFile: String, content: String) = runBlocking {
val definitionFile = File(definitionFile)
+ // Delete the File If exists
+ Files.deleteIfExists(definitionFile.toPath())
- Files.write(definitionFile.toPath(), content.toByteArray(), StandardOpenOption.CREATE)
+ Files.write(definitionFile.toPath(), content.toByteArray(), StandardOpenOption.CREATE_NEW)
check(definitionFile.exists()) {
throw BluePrintException("couldn't write definition file under path(${definitionFile.absolutePath})")
}
import java.io.File\r
import java.nio.charset.Charset\r
\r
-object BluePrintMetadataUtils {\r
- private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())\r
+class BluePrintMetadataUtils {\r
+ companion object {\r
+ private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())\r
\r
- @JvmStatic\r
- fun toscaMetaData(basePath: String): ToscaMetaData {\r
- val toscaMetaPath = basePath.plus(BluePrintConstants.PATH_DIVIDER).plus("TOSCA-Metadata/TOSCA.meta")\r
- return toscaMetaDataFromMetaFile(toscaMetaPath)\r
- }\r
\r
- @JvmStatic\r
- fun toscaMetaDataFromMetaFile(metaFilePath: String): ToscaMetaData {\r
- val toscaMetaData = ToscaMetaData()\r
- val lines: MutableList<String> = FileUtils.readLines(File(metaFilePath), Charset.defaultCharset())\r
- lines.forEach { line ->\r
- if (line.contains(":")) {\r
- val keyValue = line.split(":")\r
- if (keyValue.size == 2) {\r
- val value: String = keyValue[1].trim()\r
- when (keyValue[0]) {\r
- "TOSCA-Meta-File-Version" -> toscaMetaData.toscaMetaFileVersion = value\r
- "CSAR-Version" -> toscaMetaData.csarVersion = value\r
- "Created-By" -> toscaMetaData.createdBy = value\r
- "Entry-Definitions" -> toscaMetaData.entityDefinitions = value\r
- "Template-Tags" -> toscaMetaData.templateTags = value\r
+ fun toscaMetaData(basePath: String): ToscaMetaData {\r
+ val toscaMetaPath = basePath.plus(BluePrintConstants.PATH_DIVIDER)\r
+ .plus(BluePrintConstants.TOSCA_METADATA_ENTRY_DEFINITION_FILE)\r
+ return toscaMetaDataFromMetaFile(toscaMetaPath)\r
+ }\r
+\r
+ fun entryDefinitionFile(basePath: String): String {\r
+ val toscaMetaPath = basePath.plus(BluePrintConstants.PATH_DIVIDER)\r
+ .plus(BluePrintConstants.TOSCA_METADATA_ENTRY_DEFINITION_FILE)\r
+ return toscaMetaDataFromMetaFile(toscaMetaPath).entityDefinitions\r
+ }\r
+\r
+ fun toscaMetaDataFromMetaFile(metaFilePath: String): ToscaMetaData {\r
+ val toscaMetaData = ToscaMetaData()\r
+ val lines: MutableList<String> = FileUtils.readLines(File(metaFilePath), Charset.defaultCharset())\r
+ lines.forEach { line ->\r
+ if (line.contains(":")) {\r
+ val keyValue = line.split(":")\r
+ if (keyValue.size == 2) {\r
+ val value: String = keyValue[1].trim()\r
+ when (keyValue[0]) {\r
+ "TOSCA-Meta-File-Version" -> toscaMetaData.toscaMetaFileVersion = value\r
+ "CSAR-Version" -> toscaMetaData.csarVersion = value\r
+ "Created-By" -> toscaMetaData.createdBy = value\r
+ "Entry-Definitions" -> toscaMetaData.entityDefinitions = value\r
+ "Template-Tags" -> toscaMetaData.templateTags = value\r
+ }\r
}\r
}\r
- }\r
\r
+ }\r
+ return toscaMetaData\r
}\r
- return toscaMetaData\r
- }\r
\r
- @JvmStatic\r
- fun getBluePrintRuntime(id: String, blueprintBasePath: String): BluePrintRuntimeService<MutableMap<String, JsonNode>> {\r
+ fun getBluePrintRuntime(id: String, blueprintBasePath: String): BluePrintRuntimeService<MutableMap<String, JsonNode>> {\r
\r
- val bluePrintContext: BluePrintContext = getBluePrintContext(blueprintBasePath)\r
+ val bluePrintContext: BluePrintContext = getBluePrintContext(blueprintBasePath)\r
\r
- val context: MutableMap<String, JsonNode> = hashMapOf()\r
- context[BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH] = blueprintBasePath.asJsonPrimitive()\r
- context[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID] = id.asJsonPrimitive()\r
+ val context: MutableMap<String, JsonNode> = hashMapOf()\r
+ context[BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH] = blueprintBasePath.asJsonPrimitive()\r
+ context[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID] = id.asJsonPrimitive()\r
\r
- val bluePrintRuntimeService = DefaultBluePrintRuntimeService(id, bluePrintContext)\r
- bluePrintRuntimeService.setExecutionContext(context)\r
+ val bluePrintRuntimeService = DefaultBluePrintRuntimeService(id, bluePrintContext)\r
+ bluePrintRuntimeService.setExecutionContext(context)\r
\r
- return bluePrintRuntimeService\r
- }\r
+ return bluePrintRuntimeService\r
+ }\r
\r
- @JvmStatic\r
- fun getBaseEnhancementBluePrintRuntime(id: String, blueprintBasePath: String): BluePrintRuntimeService<MutableMap<String, JsonNode>> {\r
+ fun getBaseEnhancementBluePrintRuntime(id: String, blueprintBasePath: String): BluePrintRuntimeService<MutableMap<String, JsonNode>> {\r
\r
- val bluePrintContext: BluePrintContext = getBaseEnhancementBluePrintContext(blueprintBasePath)\r
- val context: MutableMap<String, JsonNode> = hashMapOf()\r
- context[BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH] = blueprintBasePath.asJsonPrimitive()\r
- context[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID] = id.asJsonPrimitive()\r
+ val bluePrintContext: BluePrintContext = getBaseEnhancementBluePrintContext(blueprintBasePath)\r
+ val context: MutableMap<String, JsonNode> = hashMapOf()\r
+ context[BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH] = blueprintBasePath.asJsonPrimitive()\r
+ context[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID] = id.asJsonPrimitive()\r
\r
- val bluePrintRuntimeService = DefaultBluePrintRuntimeService(id, bluePrintContext)\r
- bluePrintRuntimeService.setExecutionContext(context)\r
+ val bluePrintRuntimeService = DefaultBluePrintRuntimeService(id, bluePrintContext)\r
+ bluePrintRuntimeService.setExecutionContext(context)\r
\r
- return bluePrintRuntimeService\r
- }\r
+ return bluePrintRuntimeService\r
+ }\r
\r
- @JvmStatic\r
- fun getBluePrintRuntime(id: String, blueprintBasePath: String, executionContext: MutableMap<String, JsonNode>): BluePrintRuntimeService<MutableMap<String, JsonNode>> {\r
- val bluePrintContext: BluePrintContext = getBluePrintContext(blueprintBasePath)\r
- val bluePrintRuntimeService = DefaultBluePrintRuntimeService(id, bluePrintContext)\r
- bluePrintRuntimeService.setExecutionContext(executionContext)\r
- return bluePrintRuntimeService\r
- }\r
+ fun getBluePrintRuntime(id: String, blueprintBasePath: String, executionContext: MutableMap<String, JsonNode>): BluePrintRuntimeService<MutableMap<String, JsonNode>> {\r
+ val bluePrintContext: BluePrintContext = getBluePrintContext(blueprintBasePath)\r
+ val bluePrintRuntimeService = DefaultBluePrintRuntimeService(id, bluePrintContext)\r
+ bluePrintRuntimeService.setExecutionContext(executionContext)\r
+ return bluePrintRuntimeService\r
+ }\r
\r
- @JvmStatic\r
- fun getBluePrintContext(blueprintBasePath: String): BluePrintContext {\r
+ fun getBluePrintContext(blueprintBasePath: String): BluePrintContext {\r
\r
- val toscaMetaData: ToscaMetaData = toscaMetaData(blueprintBasePath)\r
+ val toscaMetaData: ToscaMetaData = toscaMetaData(blueprintBasePath)\r
\r
- log.info("Processing blueprint base path ($blueprintBasePath) and entry definition file (${toscaMetaData.entityDefinitions})")\r
+ log.info("Reading blueprint path($blueprintBasePath) and entry definition file (${toscaMetaData.entityDefinitions})")\r
\r
- return readBlueprintFile(toscaMetaData.entityDefinitions, blueprintBasePath)\r
- }\r
+ return readBlueprintFile(toscaMetaData.entityDefinitions, blueprintBasePath)\r
+ }\r
\r
- fun getBaseEnhancementBluePrintContext(blueprintBasePath: String): BluePrintContext {\r
- val toscaMetaData: ToscaMetaData = toscaMetaData(blueprintBasePath)\r
- // Clean Type files\r
- BluePrintFileUtils.deleteBluePrintTypes(blueprintBasePath)\r
- val rootFilePath: String = blueprintBasePath.plus(File.separator).plus(toscaMetaData.entityDefinitions)\r
- val rootServiceTemplate = ServiceTemplateUtils.getServiceTemplate(rootFilePath)\r
+ private fun getBaseEnhancementBluePrintContext(blueprintBasePath: String): BluePrintContext {\r
+ val toscaMetaData: ToscaMetaData = toscaMetaData(blueprintBasePath)\r
+ // Clean Type files\r
+ BluePrintFileUtils.deleteBluePrintTypes(blueprintBasePath)\r
+ val rootFilePath: String = blueprintBasePath.plus(File.separator).plus(toscaMetaData.entityDefinitions)\r
+ val rootServiceTemplate = ServiceTemplateUtils.getServiceTemplate(rootFilePath)\r
\r
- // Clean the Import Definitions\r
- rootServiceTemplate.imports?.clear()\r
+ // Clean the Import Definitions\r
+ BluePrintFileUtils.cleanImportTypes(rootServiceTemplate)\r
\r
- val blueprintContext = BluePrintContext(rootServiceTemplate)\r
- blueprintContext.rootPath = blueprintBasePath\r
- return blueprintContext\r
- }\r
+ val blueprintContext = BluePrintContext(rootServiceTemplate)\r
+ blueprintContext.rootPath = blueprintBasePath\r
+ blueprintContext.entryDefinition = toscaMetaData.entityDefinitions\r
+ return blueprintContext\r
+ }\r
\r
- @JvmStatic\r
- fun readBlueprintFile(entityDefinitions: String, basePath: String): BluePrintContext {\r
- val rootFilePath: String = basePath.plus(File.separator).plus(entityDefinitions)\r
- val rootServiceTemplate = ServiceTemplateUtils.getServiceTemplate(rootFilePath)\r
- // Recursively Import Template files\r
- val schemaImportResolverUtils = BluePrintImportService(rootServiceTemplate, basePath)\r
- val completeServiceTemplate = schemaImportResolverUtils.getImportResolvedServiceTemplate()\r
- val blueprintContext = BluePrintContext(completeServiceTemplate)\r
- blueprintContext.rootPath = basePath\r
- return blueprintContext\r
+ private fun readBlueprintFile(entityDefinitions: String, basePath: String): BluePrintContext {\r
+ val rootFilePath: String = basePath.plus(File.separator).plus(entityDefinitions)\r
+ val rootServiceTemplate = ServiceTemplateUtils.getServiceTemplate(rootFilePath)\r
+ // Recursively Import Template files\r
+ val schemaImportResolverUtils = BluePrintImportService(rootServiceTemplate, basePath)\r
+ val completeServiceTemplate = schemaImportResolverUtils.getImportResolvedServiceTemplate()\r
+ val blueprintContext = BluePrintContext(completeServiceTemplate)\r
+ blueprintContext.rootPath = basePath\r
+ blueprintContext.entryDefinition = entityDefinitions\r
+ return blueprintContext\r
+ }\r
}\r
}
\ No newline at end of file