-<?xml version="1.0" encoding="UTF-8"?>\r
-<!--\r
- ~ Copyright © 2017-2018 AT&T Intellectual Property.\r
- ~ Modifications Copyright © 2018 IBM.\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
-<project\r
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"\r
- xmlns="http://maven.apache.org/POM/4.0.0"\r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r
- <modelVersion>4.0.0</modelVersion>\r
- <parent>\r
- <groupId>org.onap.ccsdk.apps.components</groupId>\r
- <artifactId>parent</artifactId>\r
- <version>0.4.0-SNAPSHOT</version>\r
- <relativePath>../parent</relativePath>\r
- </parent>\r
- <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>\r
- <artifactId>core</artifactId>\r
- <name>Controller Blueprints Core</name>\r
-\r
- <dependencies>\r
- <dependency>\r
- <groupId>com.fasterxml.jackson.dataformat</groupId>\r
- <artifactId>jackson-dataformat-xml</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>com.fasterxml.jackson.dataformat</groupId>\r
- <artifactId>jackson-dataformat-yaml</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>com.fasterxml.jackson.module</groupId>\r
- <artifactId>jackson-module-jsonSchema</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>io.projectreactor</groupId>\r
- <artifactId>reactor-core</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>org.yaml</groupId>\r
- <artifactId>snakeyaml</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>org.jetbrains.kotlin</groupId>\r
- <artifactId>kotlin-test-junit</artifactId>\r
- <scope>test</scope>\r
- </dependency>\r
- </dependencies>\r
-\r
-</project>\r
-\r
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <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>
+ <groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
+ <artifactId>core</artifactId>
+ <name>Controller Blueprints Core</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <artifactId>jackson-dataformat-xml</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <artifactId>jackson-dataformat-yaml</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.module</groupId>
+ <artifactId>jackson-module-jsonSchema</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.projectreactor</groupId>
+ <artifactId>reactor-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.yaml</groupId>
+ <artifactId>snakeyaml</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.velocity</groupId>
+ <artifactId>velocity</artifactId>
+ </dependency>
+ <!--Testing dependencies-->
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-test-junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.mockk</groupId>
+ <artifactId>mockk</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlinx</groupId>
+ <artifactId>kotlinx-coroutines-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
+
-/*\r
- * Copyright © 2017-2018 AT&T Intellectual Property.\r
- * Modifications Copyright © 2018 IBM.\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.core\r
-\r
-/**\r
- * BluePrintConstants\r
- *\r
- * @author Brinda Santh\r
- */\r
-object BluePrintConstants {\r
-\r
- const val RESPONSE_HEADER_TRANSACTION_ID: String = "X-ONAP-RequestID"\r
- const val RESPONSE_HEADER_MINOR_VERSION: String = "X-MinorVersion"\r
- const val RESPONSE_HEADER_PATCH_VERSION: String = "X-PatchVersion"\r
- const val RESPONSE_HEADER_LATEST_VERSION: String = "X-LatestVersion"\r
-\r
- const val STATUS_SUCCESS: String = "success"\r
- const val STATUS_FAILURE: String = "failure"\r
-\r
- const val TYPE_DEFAULT: String = "default"\r
-\r
- const val DATA_TYPE_STRING: String = "string"\r
- const val DATA_TYPE_INTEGER: String = "integer"\r
- const val DATA_TYPE_FLOAT: String = "float"\r
- const val DATA_TYPE_BOOLEAN: String = "boolean"\r
- const val DATA_TYPE_TIMESTAMP: String = "timestamp"\r
- const val DATA_TYPE_NULL: String = "null"\r
- const val DATA_TYPE_LIST: String = "list"\r
- const val DATA_TYPE_MAP: String = "map"\r
-\r
- const val USER_SYSTEM: String = "System"\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
- const val PATH_NODE_WORKFLOWS: String = "workflows"\r
- const val PATH_NODE_TEMPLATES: String = "node_templates"\r
- const val PATH_CAPABILITIES: String = "capabilities"\r
- const val PATH_REQUIREMENTS: String = "requirements"\r
- const val PATH_INTERFACES: String = "interfaces"\r
- const val PATH_OPERATIONS: String = "operations"\r
- const val PATH_OUTPUTS: String = "outputs"\r
- const val PATH_PROPERTIES: String = "properties"\r
- const val PATH_ATTRIBUTES: String = "attributes"\r
- const val PATH_ARTIFACTS: String = "artifacts"\r
-\r
- const val MODEL_DIR_MODEL_TYPE: String = "definition-type"\r
-\r
- const val MODEL_DEFINITION_TYPE_NODE_TYPE: String = "node_type"\r
- const val MODEL_DEFINITION_TYPE_ARTIFACT_TYPE: String = "artifact_type"\r
- const val MODEL_DEFINITION_TYPE_CAPABILITY_TYPE: String = "capability_type"\r
- const val MODEL_DEFINITION_TYPE_RELATIONSHIP_TYPE: String = "relationship_type"\r
- const val MODEL_DEFINITION_TYPE_DATA_TYPE: String = "data_type"\r
-\r
- const val MODEL_TYPE_DATATYPES_ROOT: String = "tosca.datatypes.Root"\r
- const val MODEL_TYPE_NODES_ROOT: String = "tosca.nodes.Root"\r
- const val MODEL_TYPE_GROUPS_ROOT: String = "tosca.groups.Root"\r
- const val MODEL_TYPE_RELATIONSHIPS_ROOT: String = "tosca.relationships.Root"\r
- const val MODEL_TYPE_ARTIFACTS_ROOT: String = "tosca.artifacts.Root"\r
- const val MODEL_TYPE_CAPABILITIES_ROOT: String = "tosca.capabilities.Root"\r
- const val MODEL_TYPE_INTERFACES_ROOT: String = "tosca.interfaces.Root"\r
-\r
- const val MODEL_TYPE_RELATIONSHIPS_DEPENDS_ON = "tosca.relationships.DependsOn"\r
- const val MODEL_TYPE_RELATIONSHIPS_HOSTED_ON = "tosca.relationships.HostedOn"\r
- const val MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO = "tosca.relationships.ConnectsTo"\r
- const val MODEL_TYPE_RELATIONSHIPS_ATTACH_TO = "tosca.relationships.AttachesTo"\r
- const val MODEL_TYPE_RELATIONSHIPS_ROUTES_TO = "tosca.relationships.RoutesTo"\r
-\r
- const val MODEL_TYPE_NODE_DG = "tosca.nodes.DG"\r
- const val MODEL_TYPE_NODE_COMPONENT = "tosca.nodes.Component"\r
- const val MODEL_TYPE_NODE_VNF = "tosca.nodes.Vnf"\r
- @Deprecated("Artifacts will be attached to Node Template")\r
- const val MODEL_TYPE_NODE_ARTIFACT = "tosca.nodes.Artifact"\r
- const val MODEL_TYPE_NODE_RESOURCE_SOURCE = "tosca.nodes.ResourceSource"\r
-\r
- const val MODEL_TYPE_NODES_COMPONENT_JAVA: String = "tosca.nodes.component.Java"\r
- const val MODEL_TYPE_NODES_COMPONENT_BUNDLE: String = "tosca.nodes.component.Bundle"\r
- const val MODEL_TYPE_NODES_COMPONENT_SCRIPT: String = "tosca.nodes.component.Script"\r
- const val MODEL_TYPE_NODES_COMPONENT_PYTHON: String = "tosca.nodes.component.Python"\r
- const val MODEL_TYPE_NODES_COMPONENT_JYTHON: String = "tosca.nodes.component.Jython"\r
- const val MODEL_TYPE_NODES_COMPONENT_JAVA_SCRIPT: String = "tosca.nodes.component.JavaScript"\r
-\r
- const val MODEL_TYPE_ARTIFACT_TYPE_IMPLEMENTATION = "tosca.artifacts.Implementation"\r
-\r
- const val MODEL_TYPE_DATA_TYPE_DYNAMIC = "tosca.datatypes.Dynamic"\r
-\r
- const val MODEL_TYPE_CAPABILITY_TYPE_NODE = "tosca.capabilities.Node"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_COMPUTE = "tosca.capabilities.Compute"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_NETWORK = "tosca.capabilities.Network"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_STORAGE = "tosca.capabilities.Storage"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT = "tosca.capabilities.Endpoint"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_PUBLIC = "tosca.capabilities.Endpoint.Public"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_ADMIN = "tosca.capabilities.Endpoint.Admin"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_DATABASE = "tosca.capabilities.Endpoint.Database"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_ATTACHMENT = "tosca.capabilities.Attachment"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_OPERATION_SYSTEM = "tosca.capabilities.OperatingSystem"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_BINDABLE = "tosca.capabilities.network.Bindable"\r
- // Custom capabilities\r
- const val MODEL_TYPE_CAPABILITY_TYPE_CONTENT = "tosca.capabilities.Content"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_MAPPING = "tosca.capabilities.Mapping"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_NETCONF = "tosca.capabilities.Netconf"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_SSH = "tosca.capabilities.Ssh"\r
- const val MODEL_TYPE_CAPABILITY_TYPE_SFTP = "tosca.capabilities.Sftp"\r
-\r
- const val EXPRESSION_GET_INPUT: String = "get_input"\r
- const val EXPRESSION_GET_ATTRIBUTE: String = "get_attribute"\r
- const val EXPRESSION_GET_ARTIFACT: String = "get_artifact"\r
- const val EXPRESSION_GET_PROPERTY: String = "get_property"\r
- const val EXPRESSION_GET_OPERATION_OUTPUT: String = "get_operation_output"\r
- const val EXPRESSION_GET_NODE_OF_TYPE: String = "get_nodes_of_type"\r
-\r
- const val PROPERTY_BLUEPRINT_PROCESS_ID: String = "blueprint-process-id"\r
- const val PROPERTY_BLUEPRINT_BASE_PATH: String = "blueprint-basePath"\r
- const val PROPERTY_BLUEPRINT_RUNTIME: String = "blueprint-runtime"\r
- const val PROPERTY_BLUEPRINT_INPUTS_DATA: String = "blueprint-inputs-data"\r
- const val PROPERTY_BLUEPRINT_CONTEXT: String = "blueprint-context"\r
- const val PROPERTY_BLUEPRINT_NAME: String = "template_name"\r
- const val PROPERTY_BLUEPRINT_VERSION: String = "template_version"\r
-\r
- const val TOSCA_METADATA_DIR: String = "TOSCA-Metadata"\r
- const val TOSCA_METADATA_ENTRY_DEFINITION_FILE: String = "TOSCA-Metadata/TOSCA.meta"\r
- const val TOSCA_DEFINITIONS_DIR: String = "Definitions"\r
- const val TOSCA_PLANS_DIR: String = "Plans"\r
- const val TOSCA_SCRIPTS_DIR: String = "Scripts"\r
- const val TOSCA_MAPPINGS_DIR: String = "Mappings"\r
- const val TOSCA_TEMPLATES_DIR: String = "Templates"\r
-\r
- const val METADATA_USER_GROUPS = "user-groups"\r
- const val METADATA_TEMPLATE_NAME = "template_name"\r
- const val METADATA_TEMPLATE_VERSION = "template_version"\r
- const val METADATA_TEMPLATE_AUTHOR = "template_author"\r
- const val METADATA_TEMPLATE_TAGS = "template_tags"\r
- const val METADATA_WORKFLOW_NAME = "workflow_name"\r
-\r
- const val PAYLOAD_DATA = "payload-data"\r
- const val PROPERTY_CURRENT_STEP = "current-step"\r
- const val PROPERTY_CURRENT_NODE_TEMPLATE = "current-node-template"\r
- const val PROPERTY_CURRENT_INTERFACE = "current-interface"\r
- const val PROPERTY_CURRENT_OPERATION = "current-operation"\r
- const val PROPERTY_CURRENT_IMPLEMENTATION = "current-implementation"\r
- const val PROPERTY_EXECUTION_REQUEST = "execution-request"\r
-\r
- const val OPERATION_PROCESS = "process"\r
- const val OPERATION_PREPARE = "prepare"\r
-\r
- const val BLUEPRINT_RETRIEVE_TYPE_DB = "db"\r
- const val BLUEPRINT_RETRIEVE_TYPE_FILE = "file"\r
- const val BLUEPRINT_RETRIEVE_TYPE_REPO = "repo"\r
-\r
+/*
+ * 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_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"
+
}
\ No newline at end of file
A Node Template specifies the occurrence of a manageable software component as part of an application’s topology model which is defined in a TOSCA Service Template. A Node template is an instance of a specified Node Type and can provide customized properties, constraints or operations which override the defaults provided by its Node Type and its implementations.\r
*/\r
\r
-class NodeTemplate {\r
+open class NodeTemplate {
@get:JsonIgnore\r
var id: String? = null\r
var description: String? = null\r
--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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)
+}
--- /dev/null
+/*
+ * 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 org.slf4j.LoggerFactory
+import kotlin.script.experimental.api.*
+import kotlin.script.experimental.host.BasicScriptingHost
+import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
+import kotlin.script.experimental.jvmhost.JvmScriptCompiler
+
+val defaultBlueprintScriptCompiler = JvmScriptCompiler(defaultJvmScriptingHostConfiguration)
+
+open class BlueprintScriptingHost(evaluator: ScriptEvaluator
+) : BasicScriptingHost(defaultBlueprintScriptCompiler, evaluator) {
+
+ override fun eval(
+ script: SourceCode,
+ scriptCompilationConfiguration: ScriptCompilationConfiguration,
+ configuration: ScriptEvaluationConfiguration?
+ ): ResultWithDiagnostics<EvaluationResult> =
+
+ runInCoroutineContext {
+
+ compiler(script, scriptCompilationConfiguration)
+ .onSuccess {
+ evaluator(it, configuration)
+ }
+ }
+}
+
+
+open class BluePrintScriptEvaluator(private val scriptClassName: String) : ScriptEvaluator {
+
+ val log = LoggerFactory.getLogger(BluePrintScriptEvaluator::class.java)!!
+
+ override suspend operator fun invoke(
+ compiledScript: CompiledScript<*>,
+ scriptEvaluationConfiguration: ScriptEvaluationConfiguration?
+ ): ResultWithDiagnostics<EvaluationResult> =
+ try {
+ 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 {
+ args.add(it.value)
+ }
+ scriptEvaluationConfiguration?.get(ScriptEvaluationConfiguration.implicitReceivers)?.let {
+ args.addAll(it)
+ }
+ scriptEvaluationConfiguration?.get(ScriptEvaluationConfiguration.constructorArgs)?.let {
+ 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()
+ ?: throw BluePrintProcessorException("failed to create instance from the script")
+
+ ResultWithDiagnostics.Success(EvaluationResult(ResultValue.Value(completeScriptClass,
+ instance, instance.javaClass.typeName),
+ scriptEvaluationConfiguration))
+ }
+ }
+ } catch (e: Throwable) {
+ ResultWithDiagnostics.Failure(e.asDiagnostics("Error evaluating script"))
+ }
+}
\ No newline at end of file
val nodeTemplates: MutableMap<String, NodeTemplate>? = serviceTemplate.topologyTemplate?.nodeTemplates\r
\r
fun nodeTemplateByName(name: String): NodeTemplate =\r
- nodeTemplates?.get(name) ?: throw BluePrintException("could't get node template for the name($name) ")\r
+ nodeTemplates?.get(name) ?: throw BluePrintException("could't get node template for the name($name)")
\r
fun nodeTemplateForNodeType(name: String): MutableMap<String, NodeTemplate>? {\r
return nodeTemplates?.filterValues { nodeTemplate -> nodeTemplate.type == name }?.toMutableMap()\r
--- /dev/null
+/*
+ * 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.service
+
+import com.fasterxml.jackson.core.io.CharTypes
+import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.databind.node.JsonNodeFactory
+import com.fasterxml.jackson.databind.node.TextNode
+import org.apache.commons.lang3.BooleanUtils
+import org.apache.commons.lang3.StringUtils
+import org.apache.velocity.VelocityContext
+import org.apache.velocity.app.Velocity
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
+import java.io.StringWriter
+
+open class BluePrintTemplateService {
+
+ companion object {
+
+ /**
+ * Generate Content from Velocity Template and JSON Content.
+ */
+ fun generateContent(template: String, json: String,
+ ignoreJsonNull: Boolean = false,
+ additionalContext: MutableMap<String, Any> = hashMapOf()): String {
+ Velocity.init()
+ val mapper = ObjectMapper()
+ val nodeFactory = BluePrintJsonNodeFactory()
+ mapper.setNodeFactory(nodeFactory)
+
+ val jsonNode = mapper.readValue<JsonNode>(json, JsonNode::class.java)
+ ?: throw BluePrintProcessorException("couldn't get json node from json")
+
+ if (ignoreJsonNull)
+ JacksonUtils.removeJsonNullNode(jsonNode)
+
+ val velocityContext = VelocityContext()
+ velocityContext.put("StringUtils", StringUtils::class.java)
+ velocityContext.put("BooleanUtils", BooleanUtils::class.java)
+ /**
+ * Add the Custom Velocity Context API
+ */
+ additionalContext.forEach { name, value -> velocityContext.put(name, value) }
+ /**
+ * Add the JSON Data to the context
+ */
+ jsonNode.fields().forEach { entry ->
+ velocityContext.put(entry.key, entry.value)
+ }
+
+ val stringWriter = StringWriter()
+ Velocity.evaluate(velocityContext, stringWriter, "TemplateData", template)
+ stringWriter.flush()
+ return stringWriter.toString()
+ }
+ }
+}
+
+/**
+ * Customise JsonNodeFactory adn TextNode, Since it introduces quotes for string data.
+ */
+open class BluePrintJsonNodeFactory : JsonNodeFactory() {
+ override fun textNode(text: String): TextNode {
+ return BluePrintTextNode(text)
+ }
+}
+
+open class BluePrintTextNode(v: String) : TextNode(v) {
+ override fun toString(): String {
+ var len = this._value.length
+ len = len + 2 + (len shr 4)
+ val sb = StringBuilder(len)
+ CharTypes.appendQuoted(sb, this._value)
+ return sb.toString()
+ }
+
+}
+
* See the License for the specific language governing permissions and\r
* limitations under the License.\r
*/\r
-\r
package org.onap.ccsdk.apps.controllerblueprints.core.utils\r
\r
import com.att.eelf.configuration.EELFLogger\r
import com.fasterxml.jackson.core.type.TypeReference\r
import com.fasterxml.jackson.databind.JsonNode\r
import com.fasterxml.jackson.databind.SerializationFeature\r
+import com.fasterxml.jackson.databind.node.ArrayNode\r
+import com.fasterxml.jackson.databind.node.NullNode\r
+import com.fasterxml.jackson.databind.node.ObjectNode\r
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper\r
import kotlinx.coroutines.Dispatchers\r
import kotlinx.coroutines.async\r
*\r
* @author Brinda Santh\r
*/\r
-object JacksonUtils {\r
- private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())\r
-\r
- inline fun <reified T : Any> readValue(content: String): T =\r
- jacksonObjectMapper().readValue(content, T::class.java)\r
+class JacksonUtils {\r
+ companion object {\r
+ private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())\r
+ inline fun <reified T : Any> readValue(content: String): T =\r
+ jacksonObjectMapper().readValue(content, T::class.java)\r
\r
- @JvmStatic\r
- fun <T> readValue(content: String, valueType: Class<T>): T? {\r
- return jacksonObjectMapper().readValue(content, valueType)\r
- }\r
+ fun <T> readValue(content: String, valueType: Class<T>): T? {\r
+ return jacksonObjectMapper().readValue(content, valueType)\r
+ }\r
\r
- @JvmStatic\r
- fun <T> readValue(node: JsonNode, valueType: Class<T>): T? {\r
- return jacksonObjectMapper().treeToValue(node, valueType)\r
- }\r
+ fun <T> readValue(node: JsonNode, valueType: Class<T>): T? {\r
+ return jacksonObjectMapper().treeToValue(node, valueType)\r
+ }\r
\r
- @JvmStatic\r
- fun getContent(fileName: String): String = runBlocking {\r
- async {\r
- try {\r
- File(fileName).readText(Charsets.UTF_8)\r
- } catch (e: Exception) {\r
- throw BluePrintException("couldn't get file ($fileName) content : ${e.message}")\r
+ fun removeJsonNullNode(node: JsonNode) {\r
+ val it = node.iterator()\r
+ while (it.hasNext()) {\r
+ val child = it.next()\r
+ if (child.isNull) {\r
+ it.remove()\r
+ } else {\r
+ removeJsonNullNode(child)\r
+ }\r
}\r
- }.await()\r
- }\r
+ }\r
\r
- @JvmStatic\r
- fun getClassPathFileContent(fileName: String): String {\r
- return runBlocking {\r
- withContext(Dispatchers.Default) {\r
- IOUtils.toString(JacksonUtils::class.java.classLoader\r
- .getResourceAsStream(fileName), Charset.defaultCharset())\r
+ fun getContent(fileName: String): String = runBlocking {\r
+ async {\r
+ try {\r
+ File(fileName).readText(Charsets.UTF_8)\r
+ } catch (e: Exception) {\r
+ throw BluePrintException("couldn't get file ($fileName) content : ${e.message}")\r
+ }\r
+ }.await()\r
+ }\r
+\r
+ fun getClassPathFileContent(fileName: String): String {\r
+ return runBlocking {\r
+ withContext(Dispatchers.Default) {\r
+ IOUtils.toString(JacksonUtils::class.java.classLoader\r
+ .getResourceAsStream(fileName), Charset.defaultCharset())\r
+ }\r
}\r
}\r
- }\r
\r
- @JvmStatic\r
- fun <T> readValueFromFile(fileName: String, valueType: Class<T>): T? {\r
- val content: String = getContent(fileName)\r
- return readValue(content, valueType)\r
- }\r
+ fun <T> readValueFromFile(fileName: String, valueType: Class<T>): T? {\r
+ val content: String = getContent(fileName)\r
+ return readValue(content, valueType)\r
+ }\r
\r
- @JvmStatic\r
- fun <T> readValueFromClassPathFile(fileName: String, valueType: Class<T>): T? {\r
- val content: String = getClassPathFileContent(fileName)\r
- return readValue(content, valueType)\r
- }\r
+ fun <T> readValueFromClassPathFile(fileName: String, valueType: Class<T>): T? {\r
+ val content: String = getClassPathFileContent(fileName)\r
+ return readValue(content, valueType)\r
+ }\r
\r
- @JvmStatic\r
- fun jsonNodeFromObject(from: kotlin.Any): JsonNode = jacksonObjectMapper().convertValue(from, JsonNode::class.java)\r
+ fun jsonNodeFromObject(from: kotlin.Any): JsonNode {\r
+ return jacksonObjectMapper().convertValue(from, JsonNode::class.java)\r
+ }\r
\r
- @JvmStatic\r
- fun jsonNodeFromClassPathFile(fileName: String): JsonNode {\r
- val content: String = getClassPathFileContent(fileName)\r
- return jsonNode(content)\r
- }\r
+ fun jsonNodeFromClassPathFile(fileName: String): JsonNode {\r
+ val content: String = getClassPathFileContent(fileName)\r
+ return jsonNode(content)\r
+ }\r
\r
- @JvmStatic\r
- fun jsonNodeFromFile(fileName: String): JsonNode {\r
- val content: String = getContent(fileName)\r
- return jsonNode(content)\r
- }\r
+ fun jsonNodeFromFile(fileName: String): JsonNode {\r
+ val content: String = getContent(fileName)\r
+ return jsonNode(content)\r
+ }\r
\r
- @JvmStatic\r
- fun jsonNode(content: String): JsonNode {\r
- return jacksonObjectMapper().readTree(content)\r
- }\r
+ fun jsonNode(content: String): JsonNode {\r
+ return jacksonObjectMapper().readTree(content)\r
+ }\r
\r
- @JvmStatic\r
- fun getJson(any: kotlin.Any): String {\r
- return getJson(any, false)\r
- }\r
+ fun getJson(any: kotlin.Any): String {\r
+ return getJson(any, false)\r
+ }\r
\r
- @JvmStatic\r
- fun getWrappedJson(wrapper: String, any: kotlin.Any, pretty: Boolean = false): String {\r
- val wrapperMap = hashMapOf<String, Any>()\r
- wrapperMap[wrapper] = any\r
- return getJson(wrapperMap, pretty)\r
- }\r
+ fun getWrappedJson(wrapper: String, any: kotlin.Any, pretty: Boolean = false): String {\r
+ val wrapperMap = hashMapOf<String, Any>()\r
+ wrapperMap[wrapper] = any\r
+ return getJson(wrapperMap, pretty)\r
+ }\r
\r
- @JvmStatic\r
- fun getJson(any: kotlin.Any, pretty: Boolean = false): String {\r
- val objectMapper = jacksonObjectMapper()\r
- objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)\r
- if (pretty) {\r
- objectMapper.enable(SerializationFeature.INDENT_OUTPUT)\r
+ fun getJson(any: kotlin.Any, pretty: Boolean = false): String {\r
+ val objectMapper = jacksonObjectMapper()\r
+ objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)\r
+ if (pretty) {\r
+ objectMapper.enable(SerializationFeature.INDENT_OUTPUT)\r
+ }\r
+ return objectMapper.writeValueAsString(any)\r
}\r
- return objectMapper.writeValueAsString(any)\r
- }\r
\r
- @JvmStatic\r
- fun <T> getListFromJsonNode(node: JsonNode, valueType: Class<T>): List<T>? {\r
- return getListFromJson(node.toString(), valueType)\r
- }\r
+ fun getJsonNode(any: kotlin.Any?, pretty: Boolean = false): JsonNode {\r
+ val objectMapper = jacksonObjectMapper()\r
+ objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)\r
+ if (pretty) {\r
+ objectMapper.enable(SerializationFeature.INDENT_OUTPUT)\r
+ }\r
+ return objectMapper.valueToTree(any)\r
+ }\r
\r
- @JvmStatic\r
- fun <T> getListFromJson(content: String, valueType: Class<T>): List<T>? {\r
- val objectMapper = jacksonObjectMapper()\r
- val javaType = objectMapper.typeFactory.constructCollectionType(List::class.java, valueType)\r
- return objectMapper.readValue<List<T>>(content, javaType)\r
- }\r
+ fun <T> getListFromJsonNode(node: JsonNode, valueType: Class<T>): List<T>? {\r
+ return getListFromJson(node.toString(), valueType)\r
+ }\r
\r
- @JvmStatic\r
- fun <T> getListFromFile(fileName: String, valueType: Class<T>): List<T>? {\r
- val content: String = getContent(fileName)\r
- return getListFromJson(content, valueType)\r
- }\r
+ fun <T> getListFromJson(content: String, valueType: Class<T>): List<T>? {\r
+ val objectMapper = jacksonObjectMapper()\r
+ val javaType = objectMapper.typeFactory.constructCollectionType(List::class.java, valueType)\r
+ return objectMapper.readValue<List<T>>(content, javaType)\r
+ }\r
\r
- @JvmStatic\r
- fun <T> getListFromClassPathFile(fileName: String, valueType: Class<T>): List<T>? {\r
- val content: String = getClassPathFileContent(fileName)\r
- return getListFromJson(content, valueType)\r
- }\r
+ fun <T> getListFromFile(fileName: String, valueType: Class<T>): List<T>? {\r
+ val content: String = getContent(fileName)\r
+ return getListFromJson(content, valueType)\r
+ }\r
\r
- @JvmStatic\r
- fun <T> getMapFromJson(content: String, valueType: Class<T>): MutableMap<String, T>? {\r
- val objectMapper = jacksonObjectMapper()\r
- val typeRef = object : TypeReference<MutableMap<String, T>>() {}\r
- return objectMapper.readValue(content, typeRef)\r
- }\r
+ fun <T> getListFromClassPathFile(fileName: String, valueType: Class<T>): List<T>? {\r
+ val content: String = getClassPathFileContent(fileName)\r
+ return getListFromJson(content, valueType)\r
+ }\r
\r
- @JvmStatic\r
- fun <T> getMapFromFile(fileName: String, valueType: Class<T>): MutableMap<String, T>? {\r
- val content: String = getContent(fileName)\r
- return getMapFromJson(content, valueType)\r
- }\r
+ fun <T> getMapFromJson(content: String, valueType: Class<T>): MutableMap<String, T>? {\r
+ val objectMapper = jacksonObjectMapper()\r
+ val typeRef = object : TypeReference<MutableMap<String, T>>() {}\r
+ return objectMapper.readValue(content, typeRef)\r
+ }\r
\r
- @JvmStatic\r
- fun checkJsonNodeValueOfType(type: String, jsonNode: JsonNode): Boolean {\r
- if (BluePrintTypes.validPrimitiveTypes().contains(type)) {\r
- return checkJsonNodeValueOfPrimitiveType(type, jsonNode)\r
- } else if (BluePrintTypes.validCollectionTypes().contains(type)) {\r
- return checkJsonNodeValueOfCollectionType(type, jsonNode)\r
+ fun <T> getMapFromFile(fileName: String, valueType: Class<T>): MutableMap<String, T>? {\r
+ val content: String = getContent(fileName)\r
+ return getMapFromJson(content, valueType)\r
}\r
- return false\r
- }\r
\r
- @JvmStatic\r
- fun checkJsonNodeValueOfPrimitiveType(primitiveType: String, jsonNode: JsonNode): Boolean {\r
- when (primitiveType) {\r
- BluePrintConstants.DATA_TYPE_STRING -> return jsonNode.isTextual\r
- BluePrintConstants.DATA_TYPE_BOOLEAN -> return jsonNode.isBoolean\r
- BluePrintConstants.DATA_TYPE_INTEGER -> return jsonNode.isInt\r
- BluePrintConstants.DATA_TYPE_FLOAT -> return jsonNode.isDouble\r
- BluePrintConstants.DATA_TYPE_TIMESTAMP -> return jsonNode.isTextual\r
- else -> return false\r
+ fun checkJsonNodeValueOfType(type: String, jsonNode: JsonNode): Boolean {\r
+ if (BluePrintTypes.validPrimitiveTypes().contains(type)) {\r
+ return checkJsonNodeValueOfPrimitiveType(type, jsonNode)\r
+ } else if (BluePrintTypes.validCollectionTypes().contains(type)) {\r
+ return checkJsonNodeValueOfCollectionType(type, jsonNode)\r
+ }\r
+ return false\r
}\r
- }\r
\r
- @JvmStatic\r
- fun checkJsonNodeValueOfCollectionType(type: String, jsonNode: JsonNode): Boolean {\r
- when (type) {\r
- BluePrintConstants.DATA_TYPE_LIST -> return jsonNode.isArray\r
- BluePrintConstants.DATA_TYPE_MAP -> return jsonNode.isContainerNode\r
- else -> return false\r
+ fun checkJsonNodeValueOfPrimitiveType(primitiveType: String, jsonNode: JsonNode): Boolean {\r
+ when (primitiveType) {\r
+ BluePrintConstants.DATA_TYPE_STRING -> return jsonNode.isTextual\r
+ BluePrintConstants.DATA_TYPE_BOOLEAN -> return jsonNode.isBoolean\r
+ BluePrintConstants.DATA_TYPE_INTEGER -> return jsonNode.isInt\r
+ BluePrintConstants.DATA_TYPE_FLOAT -> return jsonNode.isDouble\r
+ BluePrintConstants.DATA_TYPE_TIMESTAMP -> return jsonNode.isTextual\r
+ else -> return false\r
+ }\r
}\r
\r
- }\r
-/*\r
- @JvmStatic\r
- fun populatePrimitiveValues(key: String, value: Any, primitiveType: String, objectNode: ObjectNode) {\r
- if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
- objectNode.put(key, value as Boolean)\r
- } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
- objectNode.put(key, value as Int)\r
- } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
- objectNode.put(key, value as Float)\r
- } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {\r
- objectNode.put(key, value as String)\r
- } else {\r
- objectNode.put(key, value as String)\r
+ fun checkJsonNodeValueOfCollectionType(type: String, jsonNode: JsonNode): Boolean {\r
+ when (type) {\r
+ BluePrintConstants.DATA_TYPE_LIST -> return jsonNode.isArray\r
+ BluePrintConstants.DATA_TYPE_MAP -> return jsonNode.isContainerNode\r
+ else -> return false\r
+ }\r
}\r
- }\r
\r
- @JvmStatic\r
- fun populatePrimitiveValues(value: Any, primitiveType: String, objectNode: ArrayNode) {\r
- if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
- objectNode.add(value as Boolean)\r
- } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
- objectNode.add(value as Int)\r
- } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
- objectNode.add(value as Float)\r
- } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {\r
- objectNode.add(value as String)\r
- } else {\r
- objectNode.add(value as String)\r
+ fun populatePrimitiveValues(key: String, value: Any, primitiveType: String, objectNode: ObjectNode) {\r
+ when (primitiveType) {\r
+ BluePrintConstants.DATA_TYPE_BOOLEAN -> objectNode.put(key, value as Boolean)\r
+ BluePrintConstants.DATA_TYPE_INTEGER -> objectNode.put(key, value as Int)\r
+ BluePrintConstants.DATA_TYPE_FLOAT -> objectNode.put(key, value as Float)\r
+ BluePrintConstants.DATA_TYPE_TIMESTAMP -> objectNode.put(key, value as String)\r
+ else -> objectNode.put(key, value as String)\r
+ }\r
}\r
- }\r
\r
- @JvmStatic\r
- fun populatePrimitiveDefaultValues(key: String, primitiveType: String, objectNode: ObjectNode) {\r
- if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
- objectNode.put(key, false)\r
- } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
- objectNode.put(key, 0)\r
- } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
- objectNode.put(key, 0.0)\r
- } else {\r
- objectNode.put(key, "")\r
+ fun populatePrimitiveValues(value: Any, primitiveType: String, arrayNode: ArrayNode) {\r
+ when (primitiveType) {\r
+ BluePrintConstants.DATA_TYPE_BOOLEAN -> arrayNode.add(value as Boolean)\r
+ BluePrintConstants.DATA_TYPE_INTEGER -> arrayNode.add(value as Int)\r
+ BluePrintConstants.DATA_TYPE_FLOAT -> arrayNode.add(value as Float)\r
+ BluePrintConstants.DATA_TYPE_TIMESTAMP -> arrayNode.add(value as String)\r
+ else -> arrayNode.add(value as String)\r
+ }\r
}\r
- }\r
\r
- @JvmStatic\r
- fun populatePrimitiveDefaultValuesForArrayNode(primitiveType: String, arrayNode: ArrayNode) {\r
- if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {\r
- arrayNode.add(false)\r
- } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {\r
- arrayNode.add(0)\r
- } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {\r
- arrayNode.add(0.0)\r
- } else {\r
- arrayNode.add("")\r
+ fun populatePrimitiveDefaultValues(key: String, primitiveType: String, objectNode: ObjectNode) {\r
+ when (primitiveType) {\r
+ BluePrintConstants.DATA_TYPE_BOOLEAN -> objectNode.put(key, false)\r
+ BluePrintConstants.DATA_TYPE_INTEGER -> objectNode.put(key, 0)\r
+ BluePrintConstants.DATA_TYPE_FLOAT -> objectNode.put(key, 0.0)\r
+ else -> objectNode.put(key, "")\r
+ }\r
+ }\r
+\r
+ fun populatePrimitiveDefaultValuesForArrayNode(primitiveType: String, arrayNode: ArrayNode) {\r
+ when (primitiveType) {\r
+ BluePrintConstants.DATA_TYPE_BOOLEAN -> arrayNode.add(false)\r
+ BluePrintConstants.DATA_TYPE_INTEGER -> arrayNode.add(0)\r
+ BluePrintConstants.DATA_TYPE_FLOAT -> arrayNode.add(0.0)\r
+ else -> arrayNode.add("")\r
+ }\r
}\r
- }\r
\r
- @JvmStatic\r
- fun populateJsonNodeValues(key: String, nodeValue: JsonNode?, type: String, objectNode: ObjectNode) {\r
- if (nodeValue == null || nodeValue is NullNode) {\r
- objectNode.set(key, nodeValue)\r
- } else if (BluePrintTypes.validPrimitiveTypes().contains(type)) {\r
- if (BluePrintConstants.DATA_TYPE_BOOLEAN == type) {\r
- objectNode.put(key, nodeValue.asBoolean())\r
- } else if (BluePrintConstants.DATA_TYPE_INTEGER == type) {\r
- objectNode.put(key, nodeValue.asInt())\r
- } else if (BluePrintConstants.DATA_TYPE_FLOAT == type) {\r
- objectNode.put(key, nodeValue.floatValue())\r
- } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == type) {\r
- objectNode.put(key, nodeValue.asText())\r
+ fun populateJsonNodeValues(key: String, nodeValue: JsonNode?, type: String, objectNode: ObjectNode) {\r
+ if (nodeValue == null || nodeValue is NullNode) {\r
+ objectNode.set(key, nodeValue)\r
+ } else if (BluePrintTypes.validPrimitiveTypes().contains(type)) {\r
+ populatePrimitiveValues(key, nodeValue, type, objectNode)\r
} else {\r
- objectNode.put(key, nodeValue.asText())\r
+ objectNode.set(key, nodeValue)\r
+ }\r
+ }\r
+\r
+ fun convertPrimitiveResourceValue(type: String, value: String): JsonNode? {\r
+ when (type) {\r
+ BluePrintConstants.DATA_TYPE_BOOLEAN -> return JacksonUtils.getJsonNode(value as Boolean)\r
+ BluePrintConstants.DATA_TYPE_INTEGER -> return JacksonUtils.getJsonNode(value as Int)\r
+ BluePrintConstants.DATA_TYPE_FLOAT -> return JacksonUtils.getJsonNode(value as Float)\r
+ else -> return JacksonUtils.getJsonNode(value)\r
}\r
- } else {\r
- objectNode.set(key, nodeValue)\r
}\r
}\r
- */\r
}
\ No newline at end of file
import com.att.eelf.configuration.EELFLogger
import com.att.eelf.configuration.EELFManager
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeTemplate
import org.onap.ccsdk.apps.controllerblueprints.core.data.Workflow
+import org.onap.ccsdk.apps.controllerblueprints.core.format
import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeValidatorService
import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintWorkflowValidator
import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
// Step Validation Start
paths.add("steps")
- workflow.steps?.forEach { stepName, _ ->
+ workflow.steps?.forEach { stepName, step ->
paths.add(stepName)
paths.joinToString(BluePrintConstants.PATH_DIVIDER)
- // TODO("Step Validation")
+
+ // Validate target
+ step.target?.let {
+ try {
+ val nodeTemplate = bluePrintRuntimeService.bluePrintContext().nodeTemplateByName(it)
+
+ val nodeTypeDerivedFrom = bluePrintRuntimeService.bluePrintContext().nodeTemplateNodeType(it).derivedFrom
+
+ check(nodeTypeDerivedFrom == BluePrintConstants.MODEL_TYPE_NODE_DG) {
+ "NodeType(${nodeTemplate.type}) derived from is '$nodeTypeDerivedFrom', Expected is " +
+ "'${BluePrintConstants.MODEL_TYPE_NODE_DG}'"
+ }
+ } catch (e: Exception) {
+ bluePrintRuntimeService.getBluePrintError()
+ .addError("Failed to validate Workflow($workflowName)'s step($stepName)'s " +
+ "definition", paths.joinToString(BluePrintConstants.PATH_DIVIDER), e.message!!)
+ }
+ }
paths.removeAt(paths.lastIndex)
}
paths.removeAt(paths.lastIndex)
// Step Validation Ends
paths.removeAt(paths.lastIndex)
+
+ workflow.inputs?.let {
+ bluePrintTypeValidatorService.validatePropertyDefinitions(bluePrintRuntimeService, workflow.inputs!!)
+ }
}
}
\ No newline at end of file
--- /dev/null
+#
+# 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.
+#
+
+org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngineFactory
\ No newline at end of file
--- /dev/null
+/*
+ * 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
import org.onap.ccsdk.apps.controllerblueprints.core.asJsonPrimitive\r
import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils\r
import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintRuntimeUtils\r
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils.jsonNodeFromFile\r
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils.jsonNodeFromObject\r
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils\r
import kotlin.test.assertEquals\r
import kotlin.test.assertNotNull\r
\r
\r
val inputDataPath = "src/test/resources/data/default-context.json"\r
\r
- val inputNode: JsonNode = jsonNodeFromFile(inputDataPath)\r
+ val inputNode: JsonNode = JacksonUtils.jsonNodeFromFile(inputDataPath)\r
bluePrintRuntimeService.assignInputs(inputNode)\r
\r
val propContext: MutableMap<String, JsonNode> = bluePrintRuntimeService.resolveNodeTemplateProperties("activate-process")\r
"ResourceAssignmentComponent", "process")\r
\r
assertNotNull(inContext, "Failed to populate interface input property values")\r
- assertEquals(inContext["action-name"], jsonNodeFromObject("sample-action"), "Failed to populate parameter action-name")\r
- assertEquals(inContext["request-id"], jsonNodeFromObject("12345"), "Failed to populate parameter action-name")\r
- }\r
+ assertEquals(inContext["action-name"], JacksonUtils.jsonNodeFromObject("sample-action"), "Failed to populate parameter action-name")\r
+ assertEquals(inContext["request-id"], JacksonUtils.jsonNodeFromObject("12345"), "Failed to populate parameter action-name")\r
+ }\r
\r
@Test\r
fun testResolveNodeTemplateInterfaceOperationOutputs() {\r
val bluePrintRuntimeService = getBluePrintRuntimeService()\r
\r
bluePrintRuntimeService.setNodeTemplateAttributeValue("resource-assignment-ra-component", "context1",\r
- jsonNodeFromObject("context1-value"))\r
+ JacksonUtils.jsonNodeFromObject("context1-value"))\r
bluePrintRuntimeService.setNodeTemplateAttributeValue("resource-assignment-ra-component", "context2",\r
- jsonNodeFromObject("context2-value"))\r
+ JacksonUtils.jsonNodeFromObject("context2-value"))\r
\r
val keys = listOf("context1", "context2")\r
\r
--- /dev/null
+/*
+ * 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.service
+
+import org.junit.Test
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
+import kotlin.test.assertNotNull
+
+class BluePrintTemplateServiceTest {
+
+ @Test
+ fun testGenerateContent() {
+
+ val template = JacksonUtils.getClassPathFileContent("templates/base-config-template.vtl")
+ val json = JacksonUtils.getClassPathFileContent("templates/base-config-data.json")
+
+ val content = BluePrintTemplateService.generateContent(template, json)
+ assertNotNull(content, "failed to generate content for velocity template")
+
+ }
+}
\ 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.core.utils\r
-\r
-import com.att.eelf.configuration.EELFLogger\r
-import com.att.eelf.configuration.EELFManager\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 kotlin.test.assertEquals\r
-import kotlin.test.assertNotNull\r
-\r
-@Deprecated("Reactor will be replacecd by coroutines by default.")\r
-class JacksonReactorUtilsTest {\r
- private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())\r
- @Test\r
- fun testReadValues() {\r
-\r
- val serviceTemplate = JacksonReactorUtils.readValueFromFile("./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/activation-blueprint.json",\r
- ServiceTemplate::class.java).block()\r
-\r
- assertNotNull(serviceTemplate, "Failed to simple transform Service Template")\r
- assertEquals(true, serviceTemplate is ServiceTemplate, "failed to get Service Template instance")\r
-\r
- val jsonContent = JacksonReactorUtils.getJson(serviceTemplate, true).block()\r
- assertNotNull(jsonContent, "Failed to get json content")\r
-\r
- val jsonNode = JacksonReactorUtils.jsonNodeFromFile("./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/activation-blueprint.json")\r
- .block()\r
- assertNotNull(jsonContent, "Failed to get json Node")\r
- }\r
-\r
- @Test(expected = BluePrintException::class)\r
- fun testReadValuesFailure() {\r
- JacksonReactorUtils.jsonNodeFromFile("load/blueprints/not-found.json")\r
- .block()\r
- }\r
-}
\ No newline at end of file
package org.onap.ccsdk.apps.controllerblueprints.core.validation
+import io.mockk.every
+import io.mockk.mockk
+import org.junit.Ignore
import org.junit.Test
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError
+import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeTemplate
+import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeType
+import org.onap.ccsdk.apps.controllerblueprints.core.data.Step
+import org.onap.ccsdk.apps.controllerblueprints.core.data.Workflow
import org.onap.ccsdk.apps.controllerblueprints.core.mock.MockBluePrintTypeValidatorService
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
+import org.onap.ccsdk.apps.controllerblueprints.core.service.DefaultBluePrintRuntimeService
import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
+import kotlin.test.assertEquals
import kotlin.test.assertTrue
class BluePrintValidatorServiceImplTest {
- val blueprintBasePath: String = ("./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration")
-
+ private val blueprintBasePath: String = ("./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration")
+ private val bluePrintRuntime = BluePrintMetadataUtils.getBluePrintRuntime("1234", blueprintBasePath)
+ private val mockBluePrintTypeValidatorService = MockBluePrintTypeValidatorService()
+ private val defaultBluePrintValidatorService = BluePrintValidatorServiceImpl(mockBluePrintTypeValidatorService)
+ private val workflowValidator = BluePrintWorkflowValidatorImpl(mockBluePrintTypeValidatorService)
@Test
fun testValidateOfType() {
- val bluePrintRuntime = BluePrintMetadataUtils.getBluePrintRuntime("1234", blueprintBasePath)
+ val valid = defaultBluePrintValidatorService.validateBluePrints(bluePrintRuntime)
+ assertTrue(valid, "failed in blueprint Validation")
+ }
+
+ @Test
+ fun testValidateWorkflowFailToFoundNodeTemplate() {
+ val workflowName = "resource-assignment"
- val mockBluePrintTypeValidatorService = MockBluePrintTypeValidatorService()
+ val step = Step()
+ step.target = "TestCaseFailNoNodeTemplate"
+ val workflow = Workflow()
+ workflow.steps = mutableMapOf("test" to step)
+ workflowValidator.validate(bluePrintRuntime, workflowName, workflow)
- val defaultBluePrintValidatorService = BluePrintValidatorServiceImpl(mockBluePrintTypeValidatorService)
+ assertEquals(1, bluePrintRuntime.getBluePrintError().errors.size)
+ assertEquals("Failed to validate Workflow(resource-assignment)'s step(test)'s definition : resource-assignment/steps/test : could't get node template for the name(TestCaseFailNoNodeTemplate)", bluePrintRuntime.getBluePrintError().errors[0])
+ }
- val valid = defaultBluePrintValidatorService.validateBluePrints(bluePrintRuntime)
+ @Test
+ fun testValidateWorkflowFailNodeTemplateNotDgGeneric() {
+ val workflowName = "resource-assignment"
+ val nodeTemplateName = "resource-assignment-process"
- assertTrue(valid, "failed in blueprint Validation")
+ val nodeTemplate = mockk<NodeTemplate>()
+ every { nodeTemplate.type } returns "TestNodeType"
+ val nodeType = mockk<NodeType>()
+ every { nodeType.derivedFrom } returns "tosca.nodes.TEST"
+
+ val blueprintContext = mockk<BluePrintContext>()
+ every { blueprintContext.nodeTemplateByName(nodeTemplateName) } returns nodeTemplate
+ every { blueprintContext.nodeTemplateNodeType(nodeTemplateName) } returns nodeType
+
+ val bluePrintRuntime = mockk<DefaultBluePrintRuntimeService>("1234")
+
+ every { bluePrintRuntime.getBluePrintError() } returns BluePrintError()
+ every { bluePrintRuntime.bluePrintContext() } returns blueprintContext
+
+ val step = Step()
+ step.target = nodeTemplateName
+ val workflow = Workflow()
+ workflow.steps = mutableMapOf("test" to step)
+ workflowValidator.validate(bluePrintRuntime, workflowName, workflow)
+
+ assertEquals(1, bluePrintRuntime.getBluePrintError().errors.size)
+ assertEquals("Failed to validate Workflow(resource-assignment)'s step(test)'s definition : resource-assignment/steps/test : NodeType(TestNodeType) derived from is 'tosca.nodes.TEST', Expected is 'tosca.nodes.DG'", bluePrintRuntime.getBluePrintError().errors[0])
}
+
+ @Test
+ fun testValidateWorkflowSuccess() {
+ val workflowName = "resource-assignment"
+ workflowValidator.validate(bluePrintRuntime, workflowName, bluePrintRuntime.bluePrintContext().workflowByName(workflowName))
+ }
+
}
}\r
}\r
},\r
- "db": {\r
+ "primary-db": {\r
"type": "object",\r
"properties": {\r
"query": {\r
}\r
}\r
},\r
- "db": {\r
+ "primary-db": {\r
"type": "object",\r
"properties": {\r
"names": {\r
--- /dev/null
+/*
+ * 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.interfaces.BlueprintFunctionNode
+
+open class SampleBlueprintFunctionNode : BlueprintFunctionNode<String, String>{
+
+ override fun getName(): String {
+ return "Kotlin-Script-Function-Node"
+ }
+
+ 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 "$t-status"
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "node0_hostname": "sdnc-host",
+ "node0_backup_router_address": "2001:1890:1253::192:168:100:1",
+ "servers": [
+ "Server1",
+ "Server2",
+ "Server3"
+ ],
+ "tacplus-servers": [
+ {
+ "tacplus-server-name": "tacplus-server-name1",
+ "tacplus-server-source-address": "enc-dsdsasa1"
+ },
+ {
+ "tacplus-server-name": "tacplus-server-name2",
+ "tacplus-server-source-address": "enc-dsdsasa2"
+ }
+ ],
+ "classes": [
+ {
+ "name": "superuser-class",
+ "idle-timeout": 5,
+ "permissions": "all"
+ },
+ {
+ "name": "tacacs-adv-class",
+ "idle-timeout": 5
+ },
+ {
+ "name": "tacacs-base-class",
+ "idle-timeout": 5
+ }
+ ],
+ "system-password": "teamops-system-password",
+ "root-password": "teamops-root-password"
+}
--- /dev/null
+<configuration xmlns="http://xml.juniper.net/xnm/1.1/xnm"
+xmlns:a="http://xml.juniper.net/junos/15.1X49/junos">
+ <version>15.1X49-D50.3</version>
+ <groups>
+ <name>node0</name>
+ <system>
+ #foreach($server in ${servers})
+ <server-host-name>$StringUtils.upperCase("$server")</server-host-name>
+ #end
+ </system>
+ <system>
+ <host-name>${node0_hostname}</host-name>
+ <backup-router>
+ <address>${node0_backup_router_address}</address>
+ <destination>$node0_backup_router_address</destination>
+ </backup-router>
+ #foreach($tacplus-server in ${tacplus-servers})
+ <tacplus-server>
+ <name>$tacplus-server.tacplus-server-name</name>
+ <source-address>$tacplus-server.tacplus-server-source-address</source-address>
+ </tacplus-server>
+ #end
+ <login>
+ <message>ONAP information assets</message>
+ #foreach($class in ${classes})
+ <class>
+ <name>$class.name</name>
+ <idle-timeout>$class.idle-timeout</idle-timeout>
+ #if ($class.permissions)
+ <permissions>$class.permissions</permissions>
+ #end
+ </class>
+ #end
+ <user>
+ <name>readonly</name>
+ <full-name>Read Only Account Access</full-name>
+ <uid>1001</uid>
+ <class>tacacs-base-class</class>
+ </user>
+ <user>
+ <name>readwrite</name>
+ <full-name>Read - Write Account Access</full-name>
+ <uid>1002</uid>
+ <class>tacacs-adv-class</class>
+ <authentication>
+ <encrypted-password>${system-password}</encrypted-password>
+ </authentication>
+ </user>
+ <user>
+ <name>readwrite</name>
+ <full-name>Emergency Access Only</full-name>
+ <uid>1000</uid>
+ <class>superuser-class</class>
+ <authentication>
+ <encrypted-password>${root-password}</encrypted-password>
+ </authentication>
+ </user>
+ </login>
+ </system>
+ </groups>
+</configuration>
\ No newline at end of file
},
"input-param": false,
"dictionary-name": "nf-role",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vnf-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "protected-prefix-id",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "unprotected-prefix-id",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "vf-nf-code",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vnf-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "vf-module-type",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vf-module-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "vfccustomizationuuid",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vf-module-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "vm-type",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "vnfc-model-invariant-uuid",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vfccustomizationuuid"
],
},
"input-param": false,
"dictionary-name": "vnfc-model-version",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vfccustomizationuuid"
],
},
"input-param": false,
"dictionary-name": "nfc-naming-code",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vfccustomizationuuid"
],
},
"input-param": false,
"dictionary-name": "unprotected_private_net_cidr",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "protected_private_net_cidr",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "onap_private_net_cidr",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "vf-module-label",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vf-module-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "private-prefix-id",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "vf-module-type",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vf-module-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "vfccustomizationuuid",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vf-module-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "vm-type",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "vnfc-model-invariant-uuid",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vfccustomizationuuid"
],
},
"input-param": false,
"dictionary-name": "vnfc-model-version",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vfccustomizationuuid"
],
},
"input-param": false,
"dictionary-name": "nfc-naming-code",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vfccustomizationuuid"
],
},
"input-param": false,
"dictionary-name": "unprotected_private_net_cidr",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "onap_private_net_cidr",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "vf-module-label",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vf-module-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "private-prefix-id",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "vf-module-type",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vf-module-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "vfccustomizationuuid",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vf-module-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "vm-type",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "vnfc-model-invariant-uuid",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vfccustomizationuuid"
],
},
"input-param": false,
"dictionary-name": "vnfc-model-version",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vfccustomizationuuid"
],
},
"input-param": false,
"dictionary-name": "nfc-naming-code",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vfccustomizationuuid"
],
},
"input-param": false,
"dictionary-name": "unprotected_private_net_cidr",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "protected_private_net_cidr",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "onap_private_net_cidr",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "vf-module-label",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vf-module-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "private-prefix-id",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "protected-prefix-id",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "vf-module-type",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vf-module-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "nf-role",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
"vnf-model-customization-uuid"
],
},
"input-param": false,
"dictionary-name": "unprotected_private_net_cidr",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
},
"input-param": false,
"dictionary-name": "protected_private_net_cidr",
- "dictionary-source": "db",
+ "dictionary-source": "primary-db",
"dependencies": [
],
"required": true,
"type": "string"
},
+ "service-instance-id": {
+ "required": true,
+ "type": "string"
+ },
+ "vnf-id": {
+ "required": true,
+ "type": "string"
+ },
"action-name": {
"required": true,
"type": "string"
"hostname": {
"required": true,
"type": "string"
+ },
+ "vnf_name": {
+ "required": true,
+ "type": "string"
}
},
"derived_from": "tosca.datatypes.Dynamic"
--- /dev/null
+{
+ "description": "Kotlin Script file",
+ "version": "1.0.0",
+ "file_ext": [
+ "kts"
+ ],
+ "derived_from": "tosca.artifacts.Implementation"
+}
\ No newline at end of file
"type": {
"required": true,
"type": "string",
- "default": "JAVA-COMPONENT",
+ "default": "KOTLIN-COMPONENT",
"constraints": [
{
"valid_values": [
+ "KOTLIN-COMPONENT",
"JAVA-COMPONENT",
"JYTHON-COMPONENT"
]
--- /dev/null
+{
+ "description": "This is Kotlin Component",
+ "version": "1.0.0",
+ "derived_from": "tosca.nodes.Root"
+}
\ No newline at end of file
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.VF_MODEL.nf_role as vf_model_role from sdnctl.VF_MODEL where sdnctl.VF_MODEL.customization_uuid=:vnfmodelcustomizationuuid",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select nfc_naming_code as nfc_naming_code from sdnctl.VFC_MODEL where customization_uuid=:vfccustomizationuuid",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.IPAM_IP_POOL.prefix as prefix from sdnctl.IPAM_IP_POOL where description = \"private\"",
-{\r
- "name": "db-source",\r
- "property" :{\r
- "description": "name of the ",\r
- "type": "string"\r
- },\r
- "updated-by": "brindasanth@onap.com",\r
- "tags": "bundle-id, brindasanth@onap.com",\r
- "sources": {\r
- "db": {\r
- "type": "source-db",\r
- "properties": {\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
- },\r
- "output-key-mapping": {\r
- "db-country": "country",\r
- "db-state": "state"\r
- }\r
- }\r
- }\r
- }\r
+{
+ "name": "primary-db-source",
+ "property" :{
+ "description": "name of the ",
+ "type": "string"
+ },
+ "updated-by": "brindasanth@onap.com",
+ "tags": "bundle-id, brindasanth@onap.com",
+ "sources": {
+ "primary-db": {
+ "type": "source-primary-db",
+ "properties": {
+ "query": "SELECT db-country, db-state FROM DEVICE_PROFILE WHERE profile_name = :profile_name",
+ "input-key-mapping": {
+ "profile_name": "profile_name"
+ },
+ "output-key-mapping": {
+ "db-country": "country",
+ "db-state": "state"
+ }
+ }
+ }
+ }
}
\ No newline at end of file
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.IPAM_IP_POOL.prefix_id as prefix_id from sdnctl.IPAM_IP_POOL where description = \"private\"",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.IPAM_IP_POOL.prefix_id as prefix_id from sdnctl.IPAM_IP_POOL where description = \"protected\"",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.IPAM_IP_POOL.prefix as prefix from sdnctl.IPAM_IP_POOL where description = \"protected\"",
"type": "string"\r
},\r
"updated-by": "brindasanth@onap.com",\r
- "tags": "db-source, brindasanth@onap.com",\r
+ "tags": "primary-db-source, brindasanth@onap.com",\r
"sources": {\r
- "db": {\r
- "type": "source-db",\r
+ "primary-db": {\r
+ "type": "source-primary-db",\r
"properties": {\r
"query": "SELECT db-country, db-state FROM DEVICE_PROFILE WHERE profile_name = :profile_name",\r
"input-key-mapping": {\r
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.IPAM_IP_POOL.prefix_id as prefix_id from sdnctl.IPAM_IP_POOL where description = \"unprotected\"",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.IPAM_IP_POOL.prefix as prefix from sdnctl.IPAM_IP_POOL where description = \"unprotected\"",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.VF_MODULE_MODEL.vf_module_label as vf_module_label from sdnctl.VF_MODULE_MODEL where sdnctl.VF_MODULE_MODEL.customization_uuid=:customizationid",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select vf_module_type as vf_module_type from sdnctl.VF_MODULE_MODEL where customization_uuid=:customizationid",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.VF_MODEL.naming_policy as vf_naming_policy from sdnctl.VF_MODEL where sdnctl.VF_MODEL.customization_uuid=:vnf_model_customization_uuid",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.VF_MODEL.nf_code as vf_nf_code from sdnctl.VF_MODEL where sdnctl.VF_MODEL.customization_uuid=:customizationid",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.VF_MODULE_TO_VFC_MAPPING.vfc_customization_uuid as vnf_customid from sdnctl.VF_MODULE_TO_VFC_MAPPING where vm_count = 1 and sdnctl.VF_MODULE_TO_VFC_MAPPING.vf_module_customization_uuid=:vfmodulecustomizationuuid",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select VFC_MODEL.vm_type as vm_type from VFC_MODEL where customization_uuid=:vfccustomizationuuid",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select VFC_MODEL.invariant_uuid as vfc_invariant_uuid from VFC_MODEL where customization_uuid=:vfccustomizationuuid",
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select VFC_MODEL.version as vnfc_model_version from VFC_MODEL where customization_uuid=:vfccustomizationuuid",
~ 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>
<artifactId>components</artifactId>
- <version>0.4.0-SNAPSHOT</version>
+ <version>0.4.1-SNAPSHOT</version>
</parent>
<groupId>org.onap.ccsdk.apps.components</groupId>
<artifactId>parent</artifactId>
<properties>
<spring.boot.version>2.1.1.RELEASE</spring.boot.version>
<spring.version>5.1.3.RELEASE</spring.version>
- <kotlin.version>1.3.10</kotlin.version>
- <kotlin.maven.version>1.3.10</kotlin.maven.version>
- <kotlin.couroutines.version>1.0.1</kotlin.couroutines.version>
- <grpc.version>1.16.1</grpc.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>
<protobuff.java.utils.version>3.6.1</protobuff.java.utils.version>
<eelf.version>1.0.0</eelf.version>
- <guava.version>26.0-jre</guava.version>
+ <guava.version>27.0.1-jre</guava.version>
<springfox.swagger2.version>2.9.2</springfox.swagger2.version>
<h2database.version>1.4.197</h2database.version>
<onap.logger.slf4j>1.2.2</onap.logger.slf4j>
- <powermock.version>1.7.4</powermock.version>
+ <mockk.version>1.9</mockk.version>
</properties>
<dependencyManagement>
<dependencies>
<version>${springfox.swagger2.version}</version>
</dependency>
+ <!-- Common Utils Dependencies -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-scripting-jvm-host</artifactId>
+ <version>${kotlin.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-compiler-embeddable</artifactId>
+ <version>${kotlin.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-script-util</artifactId>
+ <version>${kotlin.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-script-runtime</artifactId>
+ <version>${kotlin.version}</version>
+ </dependency>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-core</artifactId>
<!-- Testing Dependencies -->
<dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-api-mockito2</artifactId>
- <version>${powermock.version}</version>
+ <groupId>io.mockk</groupId>
+ <artifactId>mockk</artifactId>
+ <version>${mockk.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<version>${kotlin.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlinx</groupId>
+ <artifactId>kotlinx-coroutines-test</artifactId>
+ <version>${kotlin.couroutines.version}</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-testing</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-script-util</artifactId>
+ </dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<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>
<parent>
<groupId>org.onap.ccsdk.apps</groupId>
<artifactId>ccsdk-apps</artifactId>
- <version>0.4.0-SNAPSHOT</version>
+ <version>0.4.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>components</artifactId>
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select sdnctl.VF_MODEL.nf_role as vf_model_role from sdnctl.VF_MODEL where sdnctl.VF_MODEL.customization_uuid=:vnfmodelcustomizationuuid",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select nfc_naming_code as nfc_naming_code from sdnctl.VFC_MODEL where customization_uuid=:vfccustomizationuuid",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select sdnctl.IPAM_IP_POOL.prefix as prefix from sdnctl.IPAM_IP_POOL where description = private",\r
-{
- "name": "db-source",
- "property" :{
- "description": "name of the ",
- "type": "string"
- },
- "updated-by": "brindasanth@onap.com",
- "tags": "bundle-id, brindasanth@onap.com",
- "sources": {
- "db": {
- "type": "source-db",
- "properties": {
- "query": "SELECT db-country, db-state FROM DEVICE_PROFILE WHERE profile_name = :profile_name",
- "input-key-mapping": {
- "profile_name": "profile_name"
- },
- "output-key-mapping": {
- "db-country": "country",
- "db-state": "state"
- }
- }
- }
- }
+{\r
+ "name": "primary-db-source",\r
+ "property" :{\r
+ "description": "name of the ",\r
+ "type": "string"\r
+ },\r
+ "updated-by": "brindasanth@onap.com",\r
+ "tags": "bundle-id, brindasanth@onap.com",\r
+ "sources": {\r
+ "primary-db": {\r
+ "type": "source-primary-db",\r
+ "properties": {\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
+ },\r
+ "output-key-mapping": {\r
+ "db-country": "country",\r
+ "db-state": "state"\r
+ }\r
+ }\r
+ }\r
+ }\r
}
\ No newline at end of file
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select sdnctl.IPAM_IP_POOL.prefix_id as prefix_id from sdnctl.IPAM_IP_POOL where description = private",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select sdnctl.IPAM_IP_POOL.prefix_id as prefix_id from sdnctl.IPAM_IP_POOL where description = protected",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select sdnctl.IPAM_IP_POOL.prefix as prefix from sdnctl.IPAM_IP_POOL where description = protected",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select sdnctl.IPAM_IP_POOL.prefix_id as prefix_id from sdnctl.IPAM_IP_POOL where description = unprotected",\r
"type" : "string"
},
"sources" : {
- "db" : {
- "type" : "source-db",
+ "primary-db" : {
+ "type" : "source-primary-db",
"properties" : {
"type" : "SQL",
"query" : "select sdnctl.IPAM_IP_POOL.prefix as prefix from sdnctl.IPAM_IP_POOL where description = unprotected",
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select sdnctl.VF_MODULE_MODEL.vf_module_label as vf_module_label from sdnctl.VF_MODULE_MODEL where sdnctl.VF_MODULE_MODEL.customization_uuid=:customizationid",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select vf_module_type as vf_module_type from sdnctl.VF_MODULE_MODEL where customization_uuid=:customizationid",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select sdnctl.VF_MODEL.naming_policy as vf_naming_policy from sdnctl.VF_MODEL where sdnctl.VF_MODEL.customization_uuid=:vnf_model_customization_uuid",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select sdnctl.VF_MODEL.nf_code as vf_nf_code from sdnctl.VF_MODEL where sdnctl.VF_MODEL.customization_uuid=:customizationid",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select sdnctl.VF_MODULE_TO_VFC_MAPPING.vfc_customization_uuid as vnf_customid from sdnctl.VF_MODULE_TO_VFC_MAPPING where vm_count = 1 and sdnctl.VF_MODULE_TO_VFC_MAPPING.vf_module_customization_uuid=:vfmodulecustomizationuuid",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select vfc_model.vm_type as vm_type from VFC_MODEL where customization_uuid=:vfccustomizationuuid",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select vfc_model.invariant_uuid as vfc_invariant_uuid from VFC_MODEL where customization_uuid=:vfccustomizationuuid",\r
"type" : "string"\r
},\r
"sources" : {\r
- "db" : {\r
- "type" : "source-db",\r
+ "primary-db" : {\r
+ "type" : "source-primary-db",\r
"properties" : {\r
"type" : "SQL",\r
"query" : "select vfc_model.version as vnfc_model_version from VFC_MODEL where customization_uuid=:vfccustomizationuuid",\r
<parent>
<groupId>org.onap.ccsdk.apps.components</groupId>
<artifactId>parent</artifactId>
- <version>0.4.0-SNAPSHOT</version>
+ <version>0.4.1-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<groupId>org.onap.ccsdk.apps.controllerblueprints</groupId>
object ResourceDictionaryConstants {
const val SOURCE_INPUT = "input"
const val SOURCE_DEFAULT = "default"
- const val SOURCE_DB = "db"
+ const val SOURCE_DB = "primary-db"
const val MODEL_DIR_RESOURCE_DEFINITION: String = "resource_dictionary"
--- /dev/null
+/*
+ * 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
public void testDictionaryDefinitionInputSource(){\r
\r
String fileName = basePath + "/input-source.json";\r
- ResourceDefinition resourceDefinition = JacksonUtils.readValueFromFile(fileName, ResourceDefinition.class);\r
+ ResourceDefinition resourceDefinition = JacksonUtils.Companion.readValueFromFile(fileName, ResourceDefinition.class);\r
Assert.assertNotNull("Failed to populate dictionaryDefinition for input type", resourceDefinition);\r
}\r
\r
public void testDictionaryDefinitionDefaultSource(){\r
\r
String fileName = basePath + "/default-source.json";\r
- ResourceDefinition resourceDefinition = JacksonUtils.readValueFromFile(fileName, ResourceDefinition.class);\r
+ ResourceDefinition resourceDefinition = JacksonUtils.Companion.readValueFromFile(fileName, ResourceDefinition.class);\r
Assert.assertNotNull("Failed to populate dictionaryDefinition for default type", resourceDefinition);\r
}\r
\r
@Test\r
public void testDictionaryDefinitionDBSource(){\r
\r
- String fileName = basePath + "/db-source.json";\r
- ResourceDefinition resourceDefinition = JacksonUtils.readValueFromFile(fileName, ResourceDefinition.class);\r
- Assert.assertNotNull("Failed to populate dictionaryDefinition for db type", resourceDefinition);\r
+ String fileName = basePath + "/primary-db-source.json";\r
+ ResourceDefinition resourceDefinition = JacksonUtils.Companion.readValueFromFile(fileName, ResourceDefinition.class);\r
+ Assert.assertNotNull("Failed to populate dictionaryDefinition for primary-db type", resourceDefinition);\r
}\r
\r
@Test\r
public void testDictionaryDefinitionMDSALSource(){\r
String fileName = basePath + "/mdsal-source.json";\r
- ResourceDefinition resourceDefinition = JacksonUtils.readValueFromFile(fileName, ResourceDefinition.class);\r
+ ResourceDefinition resourceDefinition = JacksonUtils.Companion.readValueFromFile(fileName, ResourceDefinition.class);\r
Assert.assertNotNull("Failed to populate dictionaryDefinition for mdsal type", resourceDefinition);\r
}\r
}\r
@Test\r
public void testRegisterResourceMapping() {\r
\r
- ResourceSourceMappingFactory.INSTANCE.registerSourceMapping("db", "source-db");\r
+ ResourceSourceMappingFactory.INSTANCE.registerSourceMapping("primary-db", "source-primary-db");\r
ResourceSourceMappingFactory.INSTANCE.registerSourceMapping("input", "source-input");\r
ResourceSourceMappingFactory.INSTANCE.registerSourceMapping("default", "source-default");\r
ResourceSourceMappingFactory.INSTANCE.registerSourceMapping("mdsal", "source-rest");\r
\r
- String nodeTypeName = ResourceSourceMappingFactory.INSTANCE.getRegisterSourceMapping("db");\r
- Assert.notNull(nodeTypeName, "Failed to get db mapping");\r
+ String nodeTypeName = ResourceSourceMappingFactory.INSTANCE.getRegisterSourceMapping("primary-db");\r
+ Assert.notNull(nodeTypeName, "Failed to get primary-db mapping");\r
\r
ResourceSourceMapping resourceSourceMapping = ResourceSourceMappingFactory.INSTANCE.getRegisterSourceMapping();\r
Assert.notNull(resourceSourceMapping, "Failed to get resource source mapping");\r
@Test
public void testValidateSource() throws Exception {
- String inputFileName = dictionaryPath + "/db-source.json";
+ String inputFileName = dictionaryPath + "/input-source.json";
testValidate(inputFileName);
- String dbFileName = dictionaryPath + "/db-source.json";
+ String dbFileName = dictionaryPath + "/primary-db-source.json";
testValidate(dbFileName);
String defaultFileName = dictionaryPath + "/default-source.json";
private void testValidate(String fileName) throws Exception {
- ResourceDefinition resourceDefinition = JacksonUtils.readValueFromFile(fileName, ResourceDefinition.class);
+ ResourceDefinition resourceDefinition = JacksonUtils.Companion.readValueFromFile(fileName, ResourceDefinition.class);
Assert.assertNotNull("Failed to populate dictionaryDefinition for type", resourceDefinition);
ResourceDefinitionValidationService resourceDictionaryValidationService =
\r
@Test\r
public void testProcess(){\r
- List<ResourceAssignment> assignments = JacksonUtils.getListFromClassPathFile("validation/success.json", ResourceAssignment.class);\r
+ List<ResourceAssignment> assignments = JacksonUtils.Companion.getListFromClassPathFile("validation/success.json", ResourceAssignment.class);\r
Assert.assertNotNull("failed to get ResourceAssignment from validation/success.json ", assignments);\r
BulkResourceSequencingUtils.process(assignments);\r
}\r
\r
@Test\r
public void testAssignInputs() {\r
- JsonNode data = JacksonUtils.jsonNodeFromClassPathFile("data/resource-assignment-input.json");\r
+ JsonNode data = JacksonUtils.Companion.jsonNodeFromClassPathFile("data/resource-assignment-input.json");\r
Map<String, Object> context = new HashMap<>();\r
ResourceDictionaryUtils.assignInputs(data, context);\r
String path = BluePrintConstants.PATH_INPUTS.concat(BluePrintConstants.PATH_DIVIDER).concat("mapValue");\r
\r
@JvmStatic\r
fun setUpResourceSourceMapping() {\r
- ResourceSourceMappingFactory.registerSourceMapping("db", "source-db")\r
+ ResourceSourceMappingFactory.registerSourceMapping("primary-db", "source-primary-db")\r
ResourceSourceMappingFactory.registerSourceMapping("input", "source-input")\r
ResourceSourceMappingFactory.registerSourceMapping("default", "source-default")\r
ResourceSourceMappingFactory.registerSourceMapping("mdsal", "source-rest")\r
"type": "string"\r
},\r
"dictionary-name": "loopback-ip",\r
- "dictionary-source": "db",\r
+ "dictionary-source": "primary-db",\r
"dependencies": [\r
"bundle-mac",\r
"managed-ip1"\r
"type": "string"\r
},\r
"dictionary-name": "loopback-ip",\r
- "dictionary-source": "db",\r
+ "dictionary-source": "primary-db",\r
"dependencies": [\r
"bundle-mac"\r
]\r
"type": "string"\r
},\r
"dictionary-name": "loopback-ip",\r
- "dictionary-source": "db",\r
+ "dictionary-source": "primary-db",\r
"dependencies": [\r
"bundle-mac"\r
]\r