summaryrefslogtreecommitdiffstats
path: root/ms/blueprintsprocessor/modules/commons/nats-lib/src
diff options
context:
space:
mode:
authorBrinda Santh <bs2796@att.com>2019-12-26 16:26:25 -0500
committerKAPIL SINGAL <ks220y@att.com>2019-12-30 18:18:38 +0000
commit41712e142c8d2b2bff9bc9e094f45306a60d7cb9 (patch)
tree1a6578a40b45235c8486a179b84b2e5932d164cf /ms/blueprintsprocessor/modules/commons/nats-lib/src
parent730c940a84b9056fed993ccef08dc5ec4053db21 (diff)
Relationship Type and Templates models
Enrichment Support for Relationship Types and Templates. Relationship DSL support for ConnectTo connections ( RestClient, SshClient, MessageProducer, MessageConsume, Nats) Moved datatype map from collection to complex type Issue-ID: CCSDK-1054 Signed-off-by: Brinda Santh <bs2796@att.com> Change-Id: I0f18db2cb52e1e93dfab04498b8298587cba2540
Diffstat (limited to 'ms/blueprintsprocessor/modules/commons/nats-lib/src')
-rw-r--r--ms/blueprintsprocessor/modules/commons/nats-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSL.kt112
-rw-r--r--ms/blueprintsprocessor/modules/commons/nats-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSLTest.kt63
2 files changed, 175 insertions, 0 deletions
diff --git a/ms/blueprintsprocessor/modules/commons/nats-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSL.kt b/ms/blueprintsprocessor/modules/commons/nats-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSL.kt
new file mode 100644
index 000000000..5c4301b38
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/nats-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSL.kt
@@ -0,0 +1,112 @@
+/*
+ * Copyright © 2018-2019 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.cds.blueprintsprocessor.nats
+
+import com.fasterxml.jackson.databind.JsonNode
+import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants
+import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes
+import org.onap.ccsdk.cds.controllerblueprints.core.asJsonNode
+import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive
+import org.onap.ccsdk.cds.controllerblueprints.core.data.RelationshipType
+import org.onap.ccsdk.cds.controllerblueprints.core.dsl.PropertiesAssignmentBuilder
+import org.onap.ccsdk.cds.controllerblueprints.core.dsl.RelationshipTemplateBuilder
+import org.onap.ccsdk.cds.controllerblueprints.core.dsl.TopologyTemplateBuilder
+import org.onap.ccsdk.cds.controllerblueprints.core.dsl.relationshipType
+
+/** Relationships Types DSL for NATS Producer */
+fun BluePrintTypes.relationshipTypeConnectsToNats(): RelationshipType {
+ return relationshipType(
+ id = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_NATS,
+ version = BluePrintConstants.DEFAULT_VERSION_NUMBER,
+ derivedFrom = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO,
+ description = "Relationship connects to through NATS Client."
+ ) {
+ property(
+ BluePrintConstants.PROPERTY_CONNECTION_CONFIG,
+ BluePrintConstants.DATA_TYPE_MAP,
+ true,
+ "Connection Config details."
+ )
+ validTargetTypes(arrayListOf(BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT))
+ }
+}
+
+/** Relationships Templates for Nats */
+fun TopologyTemplateBuilder.relationshipTemplateNats(
+ name: String,
+ description: String,
+ block: NatsRelationshipTemplateBuilder.() -> Unit
+) {
+ if (relationshipTemplates == null) relationshipTemplates = hashMapOf()
+ val relationshipTemplate = NatsRelationshipTemplateBuilder(name, description).apply(block).build()
+ relationshipTemplates!![relationshipTemplate.id!!] = relationshipTemplate
+}
+
+class NatsRelationshipTemplateBuilder(name: String, description: String) :
+ RelationshipTemplateBuilder(
+ name,
+ BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_NATS, description
+ ) {
+
+ fun tokenAuth(block: NatsTokenAuthPropertiesAssignmentBuilder.() -> Unit) {
+ property(BluePrintConstants.PROPERTY_CONNECTION_CONFIG, BluePrintTypes.tokenAuthNatsProperties(block))
+ }
+
+ fun tlsAuth(block: NatsTLSAuthPropertiesAssignmentBuilder.() -> Unit) {
+ property(BluePrintConstants.PROPERTY_CONNECTION_CONFIG, BluePrintTypes.tlsAuthNatsProperties(block))
+ }
+}
+
+fun BluePrintTypes.tokenAuthNatsProperties(block: NatsTokenAuthPropertiesAssignmentBuilder.() -> Unit): JsonNode {
+ val assignments = NatsTokenAuthPropertiesAssignmentBuilder().apply(block).build()
+ assignments[NatsConnectionProperties::type.name] = NatsLibConstants.TYPE_TOKEN_AUTH.asJsonPrimitive()
+ return assignments.asJsonNode()
+}
+
+fun BluePrintTypes.tlsAuthNatsProperties(block: NatsTLSAuthPropertiesAssignmentBuilder.() -> Unit): JsonNode {
+ val assignments = NatsTLSAuthPropertiesAssignmentBuilder().apply(block).build()
+ assignments[NatsConnectionProperties::type.name] = NatsLibConstants.TYPE_TLS_AUTH.asJsonPrimitive()
+ return assignments.asJsonNode()
+}
+
+open class NatsConnectionPropertiesAssignmentBuilder : PropertiesAssignmentBuilder() {
+
+ fun clusterId(clusterId: String) = clusterId(clusterId.asJsonPrimitive())
+
+ fun clusterId(clusterId: JsonNode) = property(NatsConnectionProperties::clusterId, clusterId)
+
+ fun clientId(clientId: String) = clientId(clientId.asJsonPrimitive())
+
+ fun clientId(clientId: JsonNode) = property(NatsConnectionProperties::clientId, clientId)
+
+ fun host(host: String) = host(host.asJsonPrimitive())
+
+ fun host(host: JsonNode) = property(NatsConnectionProperties::host, host)
+
+ fun monitoringSelector(monitoringSelector: String) = monitoringSelector(monitoringSelector.asJsonPrimitive())
+
+ fun monitoringSelector(monitoringSelector: JsonNode) =
+ property(NatsConnectionProperties::monitoringSelector, monitoringSelector)
+}
+
+class NatsTokenAuthPropertiesAssignmentBuilder : NatsConnectionPropertiesAssignmentBuilder() {
+ fun token(selector: String) = token(selector.asJsonPrimitive())
+
+ fun token(selector: JsonNode) = property(TokenAuthNatsConnectionProperties::token, selector)
+}
+
+class NatsTLSAuthPropertiesAssignmentBuilder : NatsConnectionPropertiesAssignmentBuilder()
diff --git a/ms/blueprintsprocessor/modules/commons/nats-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSLTest.kt b/ms/blueprintsprocessor/modules/commons/nats-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSLTest.kt
new file mode 100644
index 000000000..4cf474b93
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/nats-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSLTest.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright © 2018-2019 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.cds.blueprintsprocessor.nats
+
+import org.junit.Test
+import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes
+import org.onap.ccsdk.cds.controllerblueprints.core.dsl.getInput
+import org.onap.ccsdk.cds.controllerblueprints.core.dsl.relationshipTypeConnectsTo
+import org.onap.ccsdk.cds.controllerblueprints.core.dsl.serviceTemplate
+import kotlin.test.assertEquals
+import kotlin.test.assertNotNull
+
+class NatsPropertiesDSLTest {
+
+ @Test
+ fun testNatsPropertiesDSL() {
+ val serviceTemplate = serviceTemplate("nats-dsl", "1.0.0", "xx@xx.com", "nats") {
+ topologyTemplate {
+ relationshipTemplateNats("sample-token-auth", "Nats TokenAuth endpoint") {
+ tokenAuth {
+ host("nats://localhost:4222")
+ token("tokenAuth")
+ monitoringSelector(getInput("monitoringUrl"))
+ }
+ }
+ relationshipTemplateNats("sample-tls-auth", "Nats TLS endpoint.") {
+ tlsAuth {
+ host("nats://localhost:4222")
+ }
+ }
+ }
+
+ relationshipTypes(
+ arrayListOf(
+ BluePrintTypes.relationshipTypeConnectsToNats(),
+ BluePrintTypes.relationshipTypeConnectsTo()
+ )
+ )
+ }
+
+ assertNotNull(serviceTemplate, "failed to create service template")
+ val relationshipTemplates = serviceTemplate.topologyTemplate?.relationshipTemplates
+ assertNotNull(relationshipTemplates, "failed to get relationship templates")
+ assertEquals(2, relationshipTemplates.size, "relationshipTemplates doesn't match")
+ assertNotNull(relationshipTemplates["sample-token-auth"], "failed to get sample-token-auth")
+ assertNotNull(relationshipTemplates["sample-tls-auth"], "failed to get sample-tls-auth")
+ // println(serviceTemplate.asJsonString(true))
+ }
+}