aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models-examples/src/main/resources/policies/vDNS.policy.monitoring.input.tosca.json82
-rw-r--r--models-examples/src/main/resources/policies/vFirewall.policy.monitoring.input.tosca.json79
-rw-r--r--models-examples/src/main/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml31
-rw-r--r--models-examples/src/main/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml7
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaConstraint.java41
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaDataType.java47
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaEntrySchema.java41
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaPolicy.java45
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaPolicyType.java47
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaProperty.java50
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaServiceTemplate.java49
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaTopologyTemplate.java40
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/package-info.java31
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapper.java56
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/package-info.java31
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaConstraintValidValues.java121
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaProperty.java11
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaTopologyTemplate.java3
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypeJsonAdapter.java139
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypesJsonAdapter.java93
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPoliciesJsonAdapter.java2
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyJsonAdapter.java2
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypeJsonAdapter.java138
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypesJsonAdapter.java94
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPropertiesJsonAdapter.java284
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateJsonAdapter.java59
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateMessageBodyHandler.java8
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaTopologyTemplateJsonAdapter.java10
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java52
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapperTest.java94
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPolicyTest.java4
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPropertyTest.java14
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java247
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java424
34 files changed, 2329 insertions, 147 deletions
diff --git a/models-examples/src/main/resources/policies/vDNS.policy.monitoring.input.tosca.json b/models-examples/src/main/resources/policies/vDNS.policy.monitoring.input.tosca.json
index 2188cb2e8..bd4bdc433 100644
--- a/models-examples/src/main/resources/policies/vDNS.policy.monitoring.input.tosca.json
+++ b/models-examples/src/main/resources/policies/vDNS.policy.monitoring.input.tosca.json
@@ -1,48 +1,50 @@
{
- "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+ "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+ "topology_template": {
"policies": [
- {
- "onap.scaleout.tca": {
- "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
- "version": "1.0.0",
- "metadata": {
- "policy-id": "onap.scaleout.tca"
- },
- "properties": {
- "tca_policy": {
- "domain": "measurementsForVfScaling",
- "metricsPerEventName": [
- {
- "eventName": "vLoadBalancer",
- "controlLoopSchemaType": "VNF",
- "policyScope": "type=configuration",
- "policyName": "onap.scaleout.tca",
- "policyVersion": "v0.0.1",
- "thresholds": [
- {
- "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
- "closedLoopEventStatus": "ONSET",
- "version": "1.0.2",
- "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
- "thresholdValue": 500,
- "direction": "LESS_OR_EQUAL",
- "severity": "MAJOR"
- },
- {
- "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
- "closedLoopEventStatus": "ONSET",
- "version": "1.0.2",
- "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
- "thresholdValue": 5000,
- "direction": "GREATER_OR_EQUAL",
- "severity": "CRITICAL"
- }
- ]
- }
- ]
+ {
+ "onap.scaleout.tca": {
+ "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
+ "version": "1.0.0",
+ "metadata": {
+ "policy-id": "onap.scaleout.tca"
+ },
+ "properties": {
+ "tca_policy": {
+ "domain": "measurementsForVfScaling",
+ "metricsPerEventName": [
+ {
+ "eventName": "vLoadBalancer",
+ "controlLoopSchemaType": "VNF",
+ "policyScope": "type=configuration",
+ "policyName": "onap.scaleout.tca",
+ "policyVersion": "v0.0.1",
+ "thresholds": [
+ {
+ "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
+ "closedLoopEventStatus": "ONSET",
+ "version": "1.0.2",
+ "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+ "thresholdValue": 500,
+ "direction": "LESS_OR_EQUAL",
+ "severity": "MAJOR"
+ },
+ {
+ "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
+ "closedLoopEventStatus": "ONSET",
+ "version": "1.0.2",
+ "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+ "thresholdValue": 5000,
+ "direction": "GREATER_OR_EQUAL",
+ "severity": "CRITICAL"
}
+ ]
}
+ ]
}
+ }
}
+ }
]
+ }
} \ No newline at end of file
diff --git a/models-examples/src/main/resources/policies/vFirewall.policy.monitoring.input.tosca.json b/models-examples/src/main/resources/policies/vFirewall.policy.monitoring.input.tosca.json
index 93545a0dd..dc3131de3 100644
--- a/models-examples/src/main/resources/policies/vFirewall.policy.monitoring.input.tosca.json
+++ b/models-examples/src/main/resources/policies/vFirewall.policy.monitoring.input.tosca.json
@@ -1,45 +1,50 @@
{
- "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+ "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+ "topology_template": {
"policies": [
- {
- "onap.vfirewall.tca": {
- "type": "onap.policy.monitoring.cdap.tca.hi.lo.app",
- "version": "1.0.0",
- "properties": {
- "tca_policy": {
- "domain": "measurementsForVfScaling",
- "metricsPerEventName": [
- {
- "eventName": "vLoadBalancer",
- "controlLoopSchemaType": "VNF",
- "policyScope": "resource=vLoadBalancer;type=configuration",
- "policyName": "onap.vfirewall.tca",
- "policyVersion": "v0.0.1",
- "thresholds": [
- {
- "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
- "closedLoopEventStatus": "ONSET",
- "version": "1.0.2",
- "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
- "thresholdValue": 500,
- "direction": "LESS_OR_EQUAL",
- "severity": "MAJOR"
- },
- {
- "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
- "closedLoopEventStatus": "ONSET",
- "version": "1.0.2",
- "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
- "thresholdValue": 5000,
- "direction": "GREATER_OR_EQUAL",
- "severity": "CRITICAL"
- }
- ]
- }
- ]
+ {
+ "onap.vfirewall.tca": {
+ "type": "onap.policy.monitoring.cdap.tca.hi.lo.app",
+ "version": "1.0.0",
+ "metadata": {
+ "policy-id": "onap.vfirewall.tca"
+ },
+ "properties": {
+ "tca_policy": {
+ "domain": "measurementsForVfScaling",
+ "metricsPerEventName": [
+ {
+ "eventName": "vLoadBalancer",
+ "controlLoopSchemaType": "VNF",
+ "policyScope": "resource=vLoadBalancer;type=configuration",
+ "policyName": "onap.vfirewall.tca",
+ "policyVersion": "v0.0.1",
+ "thresholds": [
+ {
+ "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
+ "closedLoopEventStatus": "ONSET",
+ "version": "1.0.2",
+ "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+ "thresholdValue": 500,
+ "direction": "LESS_OR_EQUAL",
+ "severity": "MAJOR"
+ },
+ {
+ "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
+ "closedLoopEventStatus": "ONSET",
+ "version": "1.0.2",
+ "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+ "thresholdValue": 5000,
+ "direction": "GREATER_OR_EQUAL",
+ "severity": "CRITICAL"
}
+ ]
}
+ ]
}
+ }
}
+ }
]
+ }
} \ No newline at end of file
diff --git a/models-examples/src/main/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml b/models-examples/src/main/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml
index 5a093ddbf..63796fa3f 100644
--- a/models-examples/src/main/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml
+++ b/models-examples/src/main/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml
@@ -1,17 +1,18 @@
tosca_definitions_version: tosca_simple_yaml_1_0_0
policy_types:
- version: 1.0.0
- onap.policies.Monitoring:
- derived_from: tosca.policies.Root
- description: a base policy type for all policies that govern monitoring provision
- version: 1.0.0
- onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:
- derived_from: policy.nodes.Root
- version: 1.0.0
- properties:
- buscontroller_feed_publishing_endpoint:
- type: string
- description: DMAAP Bus Controller feed endpoint
- datafile.policy:
- type: string
- description: datafile Policy JSON as string
+ -
+ onap.policies.Monitoring:
+ derived_from: tosca.policies.Root
+ description: a base policy type for all policies that govern monitoring provision
+ version: 1.0.0
+ -
+ onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:
+ derived_from: policy.nodes.Root
+ version: 1.0.0
+ properties:
+ buscontroller_feed_publishing_endpoint:
+ type: string
+ description: DMAAP Bus Controller feed endpoint
+ datafile.policy:
+ type: string
+ description: datafile Policy JSON as string \ No newline at end of file
diff --git a/models-examples/src/main/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml b/models-examples/src/main/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml
index 699cffd7e..f8e9b7521 100644
--- a/models-examples/src/main/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml
+++ b/models-examples/src/main/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml
@@ -1,8 +1,10 @@
tosca_definitions_version: tosca_simple_yaml_1_0_0
policy_types:
+ -
onap.policies.Monitoring:
derived_from: tosca.policies.Root
description: a base policy type for all policies that governs monitoring provisioning
+ -
onap.policy.monitoring.cdap.tca.hi.lo.app:
derived_from: onap.policies.Monitoring
version: 1.0.0
@@ -13,6 +15,7 @@ policy_types:
entry_schema:
type: onap.datatypes.monitoring.tca_policy
data_types:
+ -
onap.datatypes.monitoring.metricsPerEventName:
derived_from: tosca.datatypes.Root
properties:
@@ -46,6 +49,7 @@ data_types:
description: Thresholds associated with eventName
entry_schema:
type: onap.datatypes.monitoring.thresholds
+ -
onap.datatypes.monitoring.tca_policy:
derived_from: tosca.datatypes.Root
properties:
@@ -62,6 +66,7 @@ data_types:
description: Contains eventName and threshold details that need to be applied to given eventName
entry_schema:
type: onap.datatypes.monitoring.metricsPerEventName
+ -
onap.datatypes.monitoring.thresholds:
derived_from: tosca.datatypes.Root
properties:
@@ -155,4 +160,4 @@ data_types:
version:
type: string
required: true
- description: Version number associated with the threshold
+ description: Version number associated with the threshold \ No newline at end of file
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaConstraint.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaConstraint.java
new file mode 100644
index 000000000..85d0b5009
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaConstraint.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import com.google.gson.annotations.SerializedName;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * Class to represent TOSCA constraint matching input/output from/to client.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+@Data
+public class PlainToscaConstraint {
+
+ @SerializedName("valid_values")
+ private List<String> validValues;
+
+ private String equal;
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaDataType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaDataType.java
new file mode 100644
index 000000000..0581a7da1
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaDataType.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import com.google.gson.annotations.SerializedName;
+import java.util.Map;
+import lombok.Data;
+
+/**
+ * Class to represent TOSCA data type matching input/output from/to client.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+@Data
+public class PlainToscaDataType {
+
+ @SerializedName("derived_from")
+ private String derivedFrom;
+
+ private String version;
+
+ private Map<String, String> metadata;
+
+ private String description;
+
+ private Map<String, PlainToscaProperty> properties;
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaEntrySchema.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaEntrySchema.java
new file mode 100644
index 000000000..ab9051aa9
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaEntrySchema.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import java.util.List;
+import lombok.Data;
+
+/**
+ * Class to represent TOSCA entry schema matching input/output from/to client.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+@Data
+public class PlainToscaEntrySchema {
+
+ private String type;
+
+ private String description;
+
+ private List<PlainToscaConstraint> constraints;
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaPolicy.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaPolicy.java
new file mode 100644
index 000000000..02ebe6537
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaPolicy.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import java.util.Map;
+import lombok.Data;
+
+/**
+ * Class to represent TOSCA policy matching input/output from/to client.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+@Data
+public class PlainToscaPolicy {
+
+ private String type;
+
+ private String version;
+
+ private String description;
+
+ private Map<String, String> metadata;
+
+ private Map<String, Object> properties;
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaPolicyType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaPolicyType.java
new file mode 100644
index 000000000..499e2dd25
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaPolicyType.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import com.google.gson.annotations.SerializedName;
+import java.util.Map;
+import lombok.Data;
+
+/**
+ * Class to represent TOSCA policy type matching input/output from/to client.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+@Data
+public class PlainToscaPolicyType {
+
+ @SerializedName("derived_from")
+ private String derivedFrom;
+
+ private String version;
+
+ private Map<String, String> metadata;
+
+ private String description;
+
+ private Map<String, PlainToscaProperty> properties;
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaProperty.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaProperty.java
new file mode 100644
index 000000000..e5e282a95
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaProperty.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import com.google.gson.annotations.SerializedName;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * Class to represent TOSCA property matching input/output from/to client.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+@Data
+public class PlainToscaProperty {
+
+ private String type;
+
+ private String description;
+
+ private boolean required = false;
+
+ @SerializedName("default")
+ private String defaultValue;
+
+ @SerializedName("entry_schema")
+ private PlainToscaEntrySchema entrySchema;
+
+ private List<PlainToscaConstraint> constraints;
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaServiceTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaServiceTemplate.java
new file mode 100644
index 000000000..cf5e2d9d6
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaServiceTemplate.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import com.google.gson.annotations.SerializedName;
+import java.util.List;
+import java.util.Map;
+import lombok.Data;
+
+/**
+ * Class to represent TOSCA service template matching input/output from/to client.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+@Data
+public class PlainToscaServiceTemplate {
+
+ @SerializedName("tosca_definitions_version")
+ private String toscaDefinitionsVersion;
+
+ @SerializedName("topology_template")
+ private PlainToscaTopologyTemplate toscaTopologyTemplate;
+
+ @SerializedName("policy_types")
+ private List<Map<String, PlainToscaPolicyType>> policyTypes;
+
+ @SerializedName("data_types")
+ private List<Map<String, PlainToscaDataType>> dataTypes;
+} \ No newline at end of file
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaTopologyTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaTopologyTemplate.java
new file mode 100644
index 000000000..16c1da05e
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/PlainToscaTopologyTemplate.java
@@ -0,0 +1,40 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import java.util.List;
+import java.util.Map;
+import lombok.Data;
+
+/**
+ * Class to represent TOSCA topology template matching input/output from/to client.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+@Data
+public class PlainToscaTopologyTemplate {
+
+ private String description;
+
+ private List<Map<String, PlainToscaPolicy>> policies;
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/package-info.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/package-info.java
new file mode 100644
index 000000000..2b98f9bc7
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/package-info.java
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+/**
+ * This package includes all TOSCA concept POJOs that can be parsed correctly by swagger-core and rendered
+ * as expected in swagger-ui.
+ */
+/**
+ * @author Chenfei Gao (cgao@research.att.com)
+ *
+ */
+package org.onap.policy.models.tosca.authorative.concepts; \ No newline at end of file
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapper.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapper.java
new file mode 100644
index 000000000..aa7ca23b2
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapper.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.mapping;
+
+import com.google.gson.Gson;
+import org.onap.policy.models.tosca.authorative.concepts.PlainToscaServiceTemplate;
+import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.simple.mapping.ToscaServiceTemplateMapper;
+import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler;
+
+/**
+ * This class maps a TOSCA service template from client input form to internal representation and vice verse.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+public class PlainToscaServiceTemplateMapper
+ implements ToscaServiceTemplateMapper<PlainToscaServiceTemplate, PlainToscaServiceTemplate> {
+
+ private Gson defaultGson = new Gson();
+ private Gson customGson = new ToscaServiceTemplateMessageBodyHandler().getGson();
+
+ @Override
+ public ToscaServiceTemplate toToscaServiceTemplate(PlainToscaServiceTemplate otherPolicy) {
+
+ String serializedServiceTemplate = defaultGson.toJson(otherPolicy);
+ return customGson.fromJson(serializedServiceTemplate, ToscaServiceTemplate.class);
+
+ }
+
+ @Override
+ public PlainToscaServiceTemplate fromToscaServiceTemplate(ToscaServiceTemplate serviceTemplate) {
+
+ String serializedServiceTemplate = customGson.toJson(serviceTemplate);
+ return defaultGson.fromJson(serializedServiceTemplate, PlainToscaServiceTemplate.class);
+ }
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/package-info.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/package-info.java
new file mode 100644
index 000000000..e9b87c6ab
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/package-info.java
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+/**
+ * This package includes all the mappers used to transform plain TOSCA POJOs into internal representation
+ * of TOSCA concepts with JPA annotations added.
+ */
+/**
+ * @author Chenfei Gao (cgao@research.att.com)
+ *
+ */
+package org.onap.policy.models.tosca.authorative.mapping; \ No newline at end of file
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaConstraintValidValues.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaConstraintValidValues.java
new file mode 100644
index 000000000..98629a603
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaConstraintValidValues.java
@@ -0,0 +1,121 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.simple.concepts;
+
+import com.google.gson.annotations.SerializedName;
+
+import java.util.LinkedList;
+import java.util.List;
+import javax.persistence.ElementCollection;
+import javax.ws.rs.core.Response;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConcept;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.base.PfReferenceKey;
+
+/**
+ * This class represents valid_values TOSCA constraint.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+@EqualsAndHashCode(callSuper = false)
+@Data
+public class ToscaConstraintValidValues extends ToscaConstraint {
+ private static final long serialVersionUID = 3152323457560746844L;
+
+ @SerializedName("valid_values")
+ @NonNull
+ @ElementCollection
+ private final List<String> validValues;
+
+ /**
+ * The Default Constructor creates a {@link ToscaConstraintValidValues} object with a null key.
+ */
+ public ToscaConstraintValidValues() {
+ this(new PfReferenceKey());
+ }
+
+ /**
+ * The Key Constructor creates a {@link ToscaConstraintValidValues} object with the given concept key.
+ *
+ * @param key the key of the constraint
+ */
+ public ToscaConstraintValidValues(final PfReferenceKey key) {
+ super(key);
+ validValues = new LinkedList<>();
+ }
+
+ /**
+ * The Key Constructor creates a {@link ToscaConstraintLogical} object with the given concept key
+ * and valid values list.
+ *
+ * @param key the key of the constraint
+ * @param validValues the valid values list of the constraint
+ *
+ */
+ public ToscaConstraintValidValues(final PfReferenceKey key, @NonNull final List<String> validValues) {
+ super(key);
+ this.validValues = validValues;
+ }
+
+ /**
+ * Copy constructor.
+ *
+ * @param copyConcept the concept to copy from
+ */
+ public ToscaConstraintValidValues(@NonNull final ToscaConstraintValidValues copyConcept) {
+ throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint");
+ }
+
+ @Override
+ public int compareTo(final PfConcept otherConcept) {
+ if (otherConcept == null) {
+ return -1;
+ }
+ if (this == otherConcept) {
+ return 0;
+ }
+ if (getClass() != otherConcept.getClass()) {
+ return this.hashCode() - otherConcept.hashCode();
+ }
+
+ final ToscaConstraintValidValues other = (ToscaConstraintValidValues) otherConcept;
+
+ int result = super.compareTo(other);
+ if (result != 0) {
+ return result;
+ }
+
+ if (validValues.equals(other.validValues)) {
+ return 0;
+ }
+ return -1;
+ }
+
+ @Override
+ public PfConcept copyTo(@NonNull final PfConcept target) {
+ throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint");
+ }
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaProperty.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaProperty.java
index da13877c6..bc454c996 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaProperty.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaProperty.java
@@ -23,6 +23,7 @@
package org.onap.policy.models.tosca.simple.concepts;
+import com.google.gson.JsonElement;
import com.google.gson.annotations.SerializedName;
import java.util.List;
@@ -82,7 +83,7 @@ public class ToscaProperty extends PfConcept {
@Column(name = "default")
@SerializedName("default")
- private PfKey defaultValue;
+ private String defaultValue;
@Column
@NonNull
@@ -137,10 +138,6 @@ public class ToscaProperty extends PfConcept {
keyList.addAll(type.getKeys());
- if (defaultValue != null) {
- keyList.addAll(defaultValue.getKeys());
- }
-
if (constraints != null) {
for (ToscaConstraint constraint : constraints) {
keyList.addAll(constraint.getKeys());
@@ -165,7 +162,7 @@ public class ToscaProperty extends PfConcept {
}
if (defaultValue != null) {
- defaultValue.clean();
+ defaultValue = defaultValue.trim();
}
if (constraints != null) {
@@ -212,7 +209,7 @@ public class ToscaProperty extends PfConcept {
"property description may not be blank"));
}
- if (defaultValue != null && defaultValue.isNullKey()) {
+ if (defaultValue != null && defaultValue.trim().length() == 0) {
result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
"property default value may not be null"));
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaTopologyTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaTopologyTemplate.java
index 35381ec49..5b21ca0c1 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaTopologyTemplate.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/ToscaTopologyTemplate.java
@@ -78,7 +78,8 @@ public class ToscaTopologyTemplate extends PfConcept {
}
/**
- * The Key Constructor creates a {@link ToscaTopologyTemplate} object with the given concept key.
+ * The Key Constructor creates a {@link ToscaTopologyTemplate} object with the given concept
+ * key.
*
* @param key the key
*/
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypeJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypeJsonAdapter.java
new file mode 100644
index 000000000..65e3d4ebf
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypeJsonAdapter.java
@@ -0,0 +1,139 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.simple.serialization;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import java.lang.reflect.Type;
+import javax.ws.rs.core.Response;
+
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.tosca.simple.concepts.ToscaDataType;
+import org.onap.policy.models.tosca.simple.concepts.ToscaProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * GSON type adapter for TOSCA data types.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+public class ToscaDataTypeJsonAdapter implements JsonSerializer<ToscaDataType>, JsonDeserializer<ToscaDataType> {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ToscaDataTypeJsonAdapter.class);
+
+ private static final String DERIVED_FROM = "derived_from";
+ private static final String DESCRIPTION = "description";
+ private static final String VERSION = "version";
+ private static final String PROPERTIES = "properties";
+ private static final String DEFAULT_VERSION = "1.0.0";
+
+ @Override
+ public ToscaDataType deserialize(@NonNull final JsonElement dataTypeElement, @NonNull final Type type,
+ @NonNull final JsonDeserializationContext context) {
+
+ // The incoming JSON
+ final JsonObject dataTypeJsonMapObject = dataTypeElement.getAsJsonObject();
+
+ // We should only have a single entry for the policy type
+ if (dataTypeJsonMapObject.entrySet().size() != 1) {
+ String errorMessage = "a policy type list entry may only contain one and only one policy type";
+ LOGGER.debug(errorMessage);
+ throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+ }
+
+ final String dataTypeName = dataTypeJsonMapObject.entrySet().iterator().next().getKey();
+ final JsonObject dataTypeJsonObject = dataTypeJsonMapObject.entrySet().iterator().next()
+ .getValue().getAsJsonObject();
+
+ // Set keys
+ PfConceptKey dataTypeKey;
+ if (dataTypeJsonObject.get(VERSION) == null) {
+ dataTypeKey = new PfConceptKey(dataTypeName, DEFAULT_VERSION);
+ } else {
+ dataTypeKey = new PfConceptKey(dataTypeName, dataTypeJsonObject.get(VERSION).getAsString());
+ }
+ ToscaDataType dataType = new ToscaDataType(dataTypeKey);
+
+ // Set derived_from
+ dataType.setDerivedFrom(new PfConceptKey(dataTypeJsonObject.get(DERIVED_FROM).getAsString(),
+ DEFAULT_VERSION));
+
+ // Set description
+ if (dataTypeJsonObject.has(DESCRIPTION)) {
+ final String dataTypeDescription = dataTypeJsonObject.get(DESCRIPTION).getAsString();
+ dataType.setDescription(dataTypeDescription);
+ }
+
+ // Set properties
+ if (dataTypeJsonObject.has(PROPERTIES)) {
+ dataType.setProperties(
+ new ToscaPropertiesJsonAdapter().deserializeProperties(dataTypeJsonObject.get(PROPERTIES)));
+ for (ToscaProperty property : dataType.getProperties()) {
+ property.getKey().setParentConceptKey(dataTypeKey);
+ property.getType().setVersion(dataType.getKey().getVersion());
+ }
+ }
+
+ return dataType;
+ }
+
+ @Override
+ public JsonElement serialize(@NonNull final ToscaDataType dataType, @NonNull final Type type,
+ @NonNull final JsonSerializationContext context) {
+
+ JsonObject dataTypeValJsonObject = new JsonObject();
+
+ // Add derived_from
+ if (dataType.getDerivedFrom() != null) {
+ dataTypeValJsonObject.addProperty(DERIVED_FROM, dataType.getDerivedFrom().getName());
+ }
+
+ // Add description
+ if (dataType.getDescription() != null) {
+ dataTypeValJsonObject.addProperty(DESCRIPTION, dataType.getDescription());
+ }
+
+ // Add version
+ if (dataType.getKey().getVersion() != null) {
+ dataTypeValJsonObject.addProperty(VERSION, dataType.getKey().getVersion());
+ }
+
+ // Add properties
+ if (dataType.getProperties() != null) {
+ JsonElement propertiesJsonElement = new ToscaPropertiesJsonAdapter()
+ .serializeProperties(dataType.getProperties());
+ dataTypeValJsonObject.add(PROPERTIES, propertiesJsonElement);
+ }
+
+ JsonObject dataTypeJsonObject = new JsonObject();
+ dataTypeJsonObject.add(dataType.getKey().getName(), dataTypeValJsonObject);
+ return dataTypeJsonObject;
+ }
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypesJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypesJsonAdapter.java
new file mode 100644
index 000000000..387b499cf
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypesJsonAdapter.java
@@ -0,0 +1,93 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.simple.serialization;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import java.lang.reflect.Type;
+import java.util.Iterator;
+import javax.ws.rs.core.Response;
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.tosca.simple.concepts.ToscaDataType;
+import org.onap.policy.models.tosca.simple.concepts.ToscaDataTypes;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * GSON type adapter for TOSCA data types.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+public class ToscaDataTypesJsonAdapter implements JsonSerializer<ToscaDataTypes>, JsonDeserializer<ToscaDataTypes> {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ToscaDataTypesJsonAdapter.class);
+
+ @Override
+ public ToscaDataTypes deserialize(@NonNull final JsonElement dataTypesElement, @NonNull final Type type,
+ @NonNull final JsonDeserializationContext context) {
+
+ // The incoming JSON
+ final JsonArray dataTypesJsonArray = dataTypesElement.getAsJsonArray();
+
+ // The outgoing object
+ final PfConceptKey dataTypesKey = new PfConceptKey("IncomingDataTypes", "0.0.1");
+ final ToscaDataTypes dataTypes = new ToscaDataTypes(dataTypesKey);
+
+ // Get the dataTypes
+ Iterator<JsonElement> dataTypesIterator = dataTypesJsonArray.iterator();
+ while (dataTypesIterator.hasNext()) {
+ ToscaDataType dataType = new ToscaDataTypeJsonAdapter()
+ .deserialize(dataTypesIterator.next(), ToscaDataType.class, context);
+
+ dataTypes.getConceptMap().put(dataType.getKey(), dataType);
+ }
+
+ return dataTypes;
+ }
+
+ @Override
+ public JsonElement serialize(@NonNull final ToscaDataTypes dataTypes, @NonNull final Type type,
+ @NonNull final JsonSerializationContext context) {
+
+ JsonArray dataTypesJsonArray = new JsonArray();
+
+ if (dataTypes.getConceptMap().isEmpty()) {
+ String errorMessage = "data type list is empty";
+ LOGGER.debug(errorMessage);
+ throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage);
+ }
+
+ for (ToscaDataType dataType: dataTypes.getConceptMap().values()) {
+ JsonElement dataTypeEntry = new ToscaDataTypeJsonAdapter().serialize(dataType, type, context);
+ dataTypesJsonArray.add(dataTypeEntry);
+ }
+
+ return dataTypesJsonArray;
+ }
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPoliciesJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPoliciesJsonAdapter.java
index 53088d637..4b1b53c79 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPoliciesJsonAdapter.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPoliciesJsonAdapter.java
@@ -43,6 +43,7 @@ import org.onap.policy.models.tosca.simple.concepts.ToscaPolicy;
* @author Chenfei Gao (cgao@research.att.com)
*/
public class ToscaPoliciesJsonAdapter implements JsonSerializer<ToscaPolicies>, JsonDeserializer<ToscaPolicies> {
+
@Override
public ToscaPolicies deserialize(@NonNull final JsonElement policiesElement, @NonNull final Type type,
@NonNull final JsonDeserializationContext context) {
@@ -73,7 +74,6 @@ public class ToscaPoliciesJsonAdapter implements JsonSerializer<ToscaPolicies>,
for (ToscaPolicy policy: policies.getConceptMap().values()) {
policiesJsonArray.add(new ToscaPolicyJsonAdapter().serialize(policy, type, context));
}
-
return policiesJsonArray;
}
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyJsonAdapter.java
index 95b4b3bba..b52634b83 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyJsonAdapter.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyJsonAdapter.java
@@ -151,7 +151,7 @@ public class ToscaPolicyJsonAdapter implements JsonSerializer<ToscaPolicy>, Json
JsonObject propertiesMapObject = new JsonObject();
for (Entry<String, String> entry : policy.getProperties().entrySet()) {
// TODO: This is the other direction of the HACK
- JsonObject valueObject = gson.fromJson(entry.getValue(), JsonObject.class);
+ JsonElement valueObject = gson.fromJson(entry.getValue(), JsonElement.class);
propertiesMapObject.add(entry.getKey(), valueObject);
}
policyValJsonObject.add(PROPERTIES, propertiesMapObject);
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypeJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypeJsonAdapter.java
new file mode 100644
index 000000000..3bf98572f
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypeJsonAdapter.java
@@ -0,0 +1,138 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.simple.serialization;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import java.lang.reflect.Type;
+import javax.ws.rs.core.Response;
+
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.simple.concepts.ToscaProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * GSON type adapter for TOSCA policy types.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+public class ToscaPolicyTypeJsonAdapter implements JsonSerializer<ToscaPolicyType>, JsonDeserializer<ToscaPolicyType> {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPolicyTypeJsonAdapter.class);
+
+ private static final String DERIVED_FROM = "derived_from";
+ private static final String DESCRIPTION = "description";
+ private static final String VERSION = "version";
+ private static final String PROPERTIES = "properties";
+ private static final String DEFAULT_VERSION = "1.0.0";
+
+ @Override
+ public ToscaPolicyType deserialize(@NonNull final JsonElement policyTypeElement, @NonNull final Type type,
+ @NonNull final JsonDeserializationContext context) {
+
+ // The incoming JSON
+ final JsonObject policyTypeJsonMapObject = policyTypeElement.getAsJsonObject();
+
+ // We should only have a single entry for the policy type
+ if (policyTypeJsonMapObject.entrySet().size() != 1) {
+ String errorMessage = "a policy type list entry may only contain one and only one policy type";
+ LOGGER.debug(errorMessage);
+ throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+ }
+
+ final String policyTypeName = policyTypeJsonMapObject.entrySet().iterator().next().getKey();
+ final JsonObject policyTypeJsonObject = policyTypeJsonMapObject.entrySet().iterator().next()
+ .getValue().getAsJsonObject();
+
+ // Set keys
+ PfConceptKey policyTypeKey;
+ if (policyTypeJsonObject.get(VERSION) == null) {
+ policyTypeKey = new PfConceptKey(policyTypeName, DEFAULT_VERSION);
+ } else {
+ policyTypeKey = new PfConceptKey(policyTypeName, policyTypeJsonObject.get(VERSION).getAsString());
+ }
+ ToscaPolicyType policyType = new ToscaPolicyType(policyTypeKey);
+
+ // Set derived_from
+ policyType.setDerivedFrom(new PfConceptKey(policyTypeJsonObject.get(DERIVED_FROM).getAsString(),
+ DEFAULT_VERSION));
+
+ // Set description
+ if (policyTypeJsonObject.has(DESCRIPTION)) {
+ final String policyTypeDescription = policyTypeJsonObject.get(DESCRIPTION).getAsString();
+ policyType.setDescription(policyTypeDescription);
+ }
+
+ // Set properties
+ if (policyTypeJsonObject.has(PROPERTIES)) {
+ policyType.setProperties(
+ new ToscaPropertiesJsonAdapter().deserializeProperties(policyTypeJsonObject.get(PROPERTIES)));
+ for (ToscaProperty property : policyType.getProperties()) {
+ property.getKey().setParentConceptKey(policyTypeKey);
+ property.getType().setVersion(policyType.getKey().getVersion());
+ }
+ }
+
+ return policyType;
+ }
+
+ @Override
+ public JsonElement serialize(@NonNull final ToscaPolicyType policyType, @NonNull final Type type,
+ @NonNull final JsonSerializationContext context) {
+
+ JsonObject policyTypeValJsonObject = new JsonObject();
+
+ // Add derived_from
+ if (policyType.getDerivedFrom() != null) {
+ policyTypeValJsonObject.addProperty(DERIVED_FROM, policyType.getDerivedFrom().getName());
+ }
+
+ // Add description
+ if (policyType.getDescription() != null) {
+ policyTypeValJsonObject.addProperty(DESCRIPTION, policyType.getDescription());
+ }
+
+ // Add version
+ if (policyType.getKey().getVersion() != null) {
+ policyTypeValJsonObject.addProperty(VERSION, policyType.getKey().getVersion());
+ }
+
+ // Add properties
+ if (policyType.getProperties() != null) {
+ JsonElement propertiesJsonElement = new ToscaPropertiesJsonAdapter()
+ .serializeProperties(policyType.getProperties());
+ policyTypeValJsonObject.add(PROPERTIES, propertiesJsonElement);
+ }
+
+ JsonObject policyTypeJsonObject = new JsonObject();
+ policyTypeJsonObject.add(policyType.getKey().getName(), policyTypeValJsonObject);
+ return policyTypeJsonObject;
+ }
+} \ No newline at end of file
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypesJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypesJsonAdapter.java
new file mode 100644
index 000000000..c9e65117e
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypesJsonAdapter.java
@@ -0,0 +1,94 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.simple.serialization;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import java.lang.reflect.Type;
+import java.util.Iterator;
+import javax.ws.rs.core.Response;
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicyTypes;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * GSON type adapter for TOSCA policy types.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+public class ToscaPolicyTypesJsonAdapter implements JsonSerializer<ToscaPolicyTypes>,
+ JsonDeserializer<ToscaPolicyTypes> {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPolicyTypesJsonAdapter.class);
+
+ @Override
+ public ToscaPolicyTypes deserialize(@NonNull final JsonElement policyTypesElement, @NonNull final Type type,
+ @NonNull final JsonDeserializationContext context) {
+
+ // The incoming JSON
+ final JsonArray policyTypesJsonArray = policyTypesElement.getAsJsonArray();
+
+ // The outgoing object
+ final PfConceptKey policyTypesKey = new PfConceptKey("IncomingPolicyTypes", "0.0.1");
+ final ToscaPolicyTypes policyTypes = new ToscaPolicyTypes(policyTypesKey);
+
+ // Get the policyTypes
+ Iterator<JsonElement> policyTypesIterator = policyTypesJsonArray.iterator();
+ while (policyTypesIterator.hasNext()) {
+ ToscaPolicyType policyType = new ToscaPolicyTypeJsonAdapter()
+ .deserialize(policyTypesIterator.next(), ToscaPolicyType.class, context);
+
+ policyTypes.getConceptMap().put(policyType.getKey(), policyType);
+ }
+
+ return policyTypes;
+ }
+
+ @Override
+ public JsonElement serialize(@NonNull final ToscaPolicyTypes policyTypes, @NonNull final Type type,
+ @NonNull final JsonSerializationContext context) {
+
+ JsonArray policyTypesJsonArray = new JsonArray();
+
+ if (policyTypes.getConceptMap().isEmpty()) {
+ String errorMessage = "policy type list is empty";
+ LOGGER.debug(errorMessage);
+ throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage);
+ }
+
+ for (ToscaPolicyType policyType: policyTypes.getConceptMap().values()) {
+ JsonElement policyTypeEntry = new ToscaPolicyTypeJsonAdapter().serialize(policyType, type, context);
+ policyTypesJsonArray.add(policyTypeEntry);
+ }
+
+ return policyTypesJsonArray;
+ }
+} \ No newline at end of file
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPropertiesJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPropertiesJsonAdapter.java
new file mode 100644
index 000000000..da15a800f
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPropertiesJsonAdapter.java
@@ -0,0 +1,284 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.simple.serialization;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map.Entry;
+import javax.ws.rs.core.Response;
+
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.base.PfReferenceKey;
+import org.onap.policy.models.tosca.simple.concepts.ToscaConstraint;
+import org.onap.policy.models.tosca.simple.concepts.ToscaConstraintLogical.Operation;
+import org.onap.policy.models.tosca.simple.concepts.ToscaConstraintLogicalString;
+import org.onap.policy.models.tosca.simple.concepts.ToscaConstraintValidValues;
+import org.onap.policy.models.tosca.simple.concepts.ToscaEntrySchema;
+import org.onap.policy.models.tosca.simple.concepts.ToscaProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * GSON type adapter for TOSCA properties.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+public class ToscaPropertiesJsonAdapter {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPropertiesJsonAdapter.class);
+
+ private static final String DESCRIPTION = "description";
+ private static final String REQUIRED = "required";
+ private static final String DEFAULT = "default";
+ private static final String TYPE = "type";
+ private static final String ENTRY_SCHEMA = "entry_schema";
+ private static final String CONSTRAINTS = "constraints";
+ private static final String EQUAL = "equal";
+ private static final String VALID_VALUES = "valid_values";
+ private static final String DEFAULT_VERSION = "1.0.0";
+
+ /**
+ * Deserializes the properties.
+ *
+ * @param propertiesElement the properties in JsonElement
+ *
+ * @return deserialized ToscaProperty list
+ */
+ public List<ToscaProperty> deserializeProperties(JsonElement propertiesElement) {
+
+ final JsonObject propertiesMapObject = propertiesElement.getAsJsonObject();
+ List<ToscaProperty> properties = new LinkedList<>();
+
+ for (Entry<String, JsonElement> entry : propertiesMapObject.entrySet()) {
+ final String propertyEntryKey = entry.getKey();
+ final JsonElement propertyEntryVal = entry.getValue();
+
+ // Set property: key and type
+ ToscaProperty property = new ToscaProperty(
+ new PfReferenceKey(new PfConceptKey(), propertyEntryKey),
+ new PfConceptKey(propertyEntryVal.getAsJsonObject().get(TYPE).getAsString(), DEFAULT_VERSION));
+
+ // Set property: description
+ JsonObject propertyJsonObject = propertyEntryVal.getAsJsonObject();
+ if (propertyJsonObject.has(DESCRIPTION)) {
+ property.setDescription(propertyJsonObject.get(DESCRIPTION).getAsString());
+ }
+
+ // Set property: required
+ if (propertyJsonObject.has(REQUIRED)) {
+ property.setRequired(propertyJsonObject.get(REQUIRED).getAsBoolean());
+ }
+
+ // Set property: default
+ if (propertyJsonObject.has(DEFAULT)) {
+ property.setDefaultValue(propertyJsonObject.get(DEFAULT).getAsString());
+ }
+
+ // Set property: entry_schema
+ if (propertyJsonObject.has(ENTRY_SCHEMA)) {
+ checkEntrySchemaCompatibility(property.getType().getName());
+ property.setEntrySchema(deserializeEntrySchema(propertyJsonObject.get(ENTRY_SCHEMA)));
+ property.getEntrySchema().getKey().setParentConceptKey(property.getType());
+ property.getEntrySchema().getType().setVersion(property.getType().getVersion());
+ }
+
+ // Set property: constraints
+ if (propertyJsonObject.has(CONSTRAINTS)) {
+ property.setConstraints(deserializeConstraints(propertyJsonObject.get(CONSTRAINTS)));
+ for (ToscaConstraint c : property.getConstraints()) {
+ c.getKey().setParentConceptKey(property.getType());
+ }
+ }
+
+ // Add property to properties list
+ properties.add(property);
+ }
+
+ return properties;
+ }
+
+ /**
+ * Serializes the properties.
+ *
+ * @param properties the list of ToscaProperty
+ *
+ * @return serialized JsonElement
+ */
+ public JsonElement serializeProperties(List<ToscaProperty> properties) {
+
+ JsonObject propertiesJsonObject = new JsonObject();
+
+ for (ToscaProperty property : properties) {
+ JsonObject propertyValJsonObject = new JsonObject();
+
+ // Add type
+ propertyValJsonObject.addProperty(TYPE, property.getType().getName());
+
+ // Add description
+ if (property.getDescription() != null) {
+ propertyValJsonObject.addProperty(DESCRIPTION, property.getDescription());
+ }
+
+ // Add required
+ propertyValJsonObject.addProperty(REQUIRED, property.isRequired());
+
+ // Add defaultValue
+ if (property.getDefaultValue() != null) {
+ propertyValJsonObject.addProperty(DEFAULT, property.getDefaultValue());
+ }
+
+ // Add constraints
+ if (property.getConstraints() != null) {
+ propertyValJsonObject.add(CONSTRAINTS, serializeConstraints(property.getConstraints()));
+ }
+
+ // Add entry_schema
+ if (property.getEntrySchema() != null) {
+ propertyValJsonObject.add(ENTRY_SCHEMA, serializeEntrySchema(property.getEntrySchema()));
+ }
+
+ propertiesJsonObject.add(property.getKey().getLocalName(), propertyValJsonObject);
+ }
+
+ return propertiesJsonObject;
+ }
+
+ private JsonElement serializeConstraints(List<ToscaConstraint> constraints) {
+
+ JsonArray constraintsValJsonArray = new JsonArray();
+
+ for (ToscaConstraint c : constraints) {
+ JsonObject constraintJsonObject = new JsonObject();
+
+ // Check which type of constraint it is
+ // TODO: here we only support valid_values and equal
+ if (c instanceof ToscaConstraintValidValues) {
+ JsonArray validValuesJsonArray = new JsonArray();
+ for (String validValue : ((ToscaConstraintValidValues)c).getValidValues()) {
+ validValuesJsonArray.add(validValue);
+ }
+ constraintJsonObject.add(VALID_VALUES, validValuesJsonArray);
+ } else if (c instanceof ToscaConstraintLogicalString) {
+ constraintJsonObject.addProperty(EQUAL, ((ToscaConstraintLogicalString)c).getCompareToString());
+ } else {
+ String errorMessage = "constraint is neither valid_values nor equal";
+ LOGGER.debug(errorMessage);
+ throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage);
+ }
+
+ constraintsValJsonArray.add(constraintJsonObject);
+ }
+
+ return constraintsValJsonArray;
+ }
+
+ private JsonElement serializeEntrySchema(ToscaEntrySchema entrySchema) {
+
+ JsonObject entrySchemaValJsonObject = new JsonObject();
+
+ // Add type
+ entrySchemaValJsonObject.addProperty(TYPE, entrySchema.getType().getName());
+
+ // Add description
+ if (entrySchema.getDescription() != null) {
+ entrySchemaValJsonObject.addProperty(DESCRIPTION, entrySchema.getDescription());
+ }
+
+ // Add constraints
+ if (entrySchema.getConstraints() != null) {
+ entrySchemaValJsonObject.add(CONSTRAINTS, serializeConstraints(entrySchema.getConstraints()));
+ }
+
+ return entrySchemaValJsonObject;
+ }
+
+ private ToscaEntrySchema deserializeEntrySchema(JsonElement entrySchemaElement) {
+
+ JsonObject entrySchemaJsonObject = entrySchemaElement.getAsJsonObject();
+
+ // Set entry_schema: key and type
+ ToscaEntrySchema entrySchema = new ToscaEntrySchema(
+ new PfReferenceKey(new PfConceptKey(), ENTRY_SCHEMA),
+ new PfConceptKey(entrySchemaJsonObject.get(TYPE).getAsString(), DEFAULT_VERSION));
+
+ // Set entry_schema: description
+ if (entrySchemaJsonObject.has(DESCRIPTION)) {
+ entrySchema.setDescription(entrySchemaJsonObject.get(DESCRIPTION).getAsString());
+ }
+
+ // Set entry_schema: constraints
+ if (entrySchemaJsonObject.has(CONSTRAINTS)) {
+ entrySchema.setConstraints(deserializeConstraints(entrySchemaJsonObject.get(CONSTRAINTS)));
+ for (ToscaConstraint c : entrySchema.getConstraints()) {
+ c.getKey().setParentConceptKey(entrySchema.getType());
+ }
+ }
+
+ return entrySchema;
+ }
+
+ private List<ToscaConstraint> deserializeConstraints(JsonElement constraintsElement) {
+
+ JsonArray constraintsJsonArray = constraintsElement.getAsJsonArray();
+ List<ToscaConstraint> constraints = new LinkedList<>();
+
+ for (Iterator<JsonElement> constraintsIter = constraintsJsonArray.iterator(); constraintsIter.hasNext(); ) {
+ JsonObject constraintJsonObject = constraintsIter.next().getAsJsonObject();
+ // Check which type of constraint it is
+ // TODO: here we only check 'valid_values' and 'equal'
+ if (constraintJsonObject.get(VALID_VALUES) != null) {
+ List<String> validValues = new LinkedList<>();
+ for (Iterator<JsonElement> validValuesIter = constraintJsonObject.get(VALID_VALUES).getAsJsonArray()
+ .iterator(); validValuesIter.hasNext(); ) {
+ validValues.add(validValuesIter.next().getAsString());
+ }
+ ToscaConstraint constraint = new ToscaConstraintValidValues(
+ new PfReferenceKey(new PfConceptKey(), VALID_VALUES), validValues);
+ constraints.add(constraint);
+ } else if (constraintJsonObject.get(EQUAL) != null) {
+ ToscaConstraint constraint = new ToscaConstraintLogicalString(new PfReferenceKey(
+ new PfConceptKey(), EQUAL), Operation.EQ, constraintJsonObject.get(EQUAL).getAsString());
+ constraints.add(constraint);
+ } else {
+ String errorMessage = "specified constraint is neither valid_values nor equal";
+ LOGGER.debug(errorMessage);
+ throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+ }
+ }
+
+ return constraints;
+ }
+
+ private void checkEntrySchemaCompatibility(String type) {
+ if (!("list".equalsIgnoreCase(type)) && !("map".equalsIgnoreCase(type))) {
+ String errorMessage = "entry schema can only be specified for list or map property";
+ LOGGER.debug(errorMessage);
+ throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+ }
+ }
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateJsonAdapter.java
index 40fe63c74..e25adfd3e 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateJsonAdapter.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateJsonAdapter.java
@@ -32,8 +32,13 @@ import java.lang.reflect.Type;
import lombok.NonNull;
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.tosca.simple.concepts.ToscaDataTypes;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicyTypes;
import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
import org.onap.policy.models.tosca.simple.concepts.ToscaTopologyTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* GSON type adapter for TOSCA policies.
@@ -44,8 +49,12 @@ import org.onap.policy.models.tosca.simple.concepts.ToscaTopologyTemplate;
public class ToscaServiceTemplateJsonAdapter
implements JsonSerializer<ToscaServiceTemplate>, JsonDeserializer<ToscaServiceTemplate> {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ToscaServiceTemplateJsonAdapter.class);
+
private static final String TOPOLOGY_TEMPLATE = "topology_template";
private static final String TOSCA_DEFINITIONS_VERSION = "tosca_definitions_version";
+ private static final String POLICY_TYPES = "policy_types";
+ private static final String DATA_TYPES = "data_types";
@Override
public ToscaServiceTemplate deserialize(@NonNull final JsonElement serviceTemplateElement, @NonNull final Type type,
@@ -55,17 +64,31 @@ public class ToscaServiceTemplateJsonAdapter
final JsonObject serviceTemplateJsonObject = serviceTemplateElement.getAsJsonObject();
// The outgoing object
- final ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
+ final PfConceptKey serviceTemplateKey = new PfConceptKey("IncomingServiceTemplate", "0.0.1");
+ final ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate(serviceTemplateKey);
+
+ // Set tosca_definitions_version
serviceTemplate
.setToscaDefinitionsVersion(serviceTemplateJsonObject.get(TOSCA_DEFINITIONS_VERSION).getAsString());
+ // Set topology_template
if (serviceTemplateJsonObject.has(TOPOLOGY_TEMPLATE)) {
serviceTemplate.setTopologyTemplate(new ToscaTopologyTemplateJsonAdapter().deserialize(
serviceTemplateJsonObject.get(TOPOLOGY_TEMPLATE), ToscaTopologyTemplate.class, context));
+ serviceTemplate.getTopologyTemplate().getKey().setParentConceptKey(serviceTemplateKey);
+ }
+
+ // Set policy_types
+ if (serviceTemplateJsonObject.has(POLICY_TYPES)) {
+ serviceTemplate.setPolicyTypes(new ToscaPolicyTypesJsonAdapter().deserialize(
+ serviceTemplateJsonObject.get(POLICY_TYPES), ToscaPolicyTypes.class, context));
}
- // Set the parent key of the topology template to be this service template
- serviceTemplate.getTopologyTemplate().getKey().setParentConceptKey(serviceTemplate.getKey());
+ // Set data_types
+ if (serviceTemplateJsonObject.has(DATA_TYPES)) {
+ serviceTemplate.setDataTypes(new ToscaDataTypesJsonAdapter().deserialize(
+ serviceTemplateJsonObject.get(DATA_TYPES), ToscaDataTypes.class, context));
+ }
return serviceTemplate;
}
@@ -75,11 +98,33 @@ public class ToscaServiceTemplateJsonAdapter
@NonNull final JsonSerializationContext context) {
JsonObject serviceTemplateJsonObject = new JsonObject();
- JsonElement topologyTemplateJsonElement = new ToscaTopologyTemplateJsonAdapter()
- .serialize(serviceTemplate.getTopologyTemplate(), type, context);
- serviceTemplateJsonObject.addProperty(TOSCA_DEFINITIONS_VERSION, serviceTemplate.getToscaDefinitionsVersion());
- serviceTemplateJsonObject.add(TOPOLOGY_TEMPLATE, topologyTemplateJsonElement);
+ // Serialize tosca_definitions_version
+ if (serviceTemplate.getToscaDefinitionsVersion() != null) {
+ serviceTemplateJsonObject.addProperty(
+ TOSCA_DEFINITIONS_VERSION, serviceTemplate.getToscaDefinitionsVersion());
+ }
+
+ // Serialize topoligy_template
+ if (serviceTemplate.getTopologyTemplate() != null) {
+ JsonElement topologyTemplateJsonElement = new ToscaTopologyTemplateJsonAdapter()
+ .serialize(serviceTemplate.getTopologyTemplate(), type, context);
+ serviceTemplateJsonObject.add(TOPOLOGY_TEMPLATE, topologyTemplateJsonElement);
+ }
+
+ // Serialize policy_types
+ if (serviceTemplate.getPolicyTypes() != null) {
+ JsonElement policyTypesJsonElement = new ToscaPolicyTypesJsonAdapter()
+ .serialize(serviceTemplate.getPolicyTypes(), type, context);
+ serviceTemplateJsonObject.add(POLICY_TYPES, policyTypesJsonElement);
+ }
+
+ // Serialize data_types
+ if (serviceTemplate.getDataTypes() != null) {
+ JsonElement dataTypesJsonElement = new ToscaDataTypesJsonAdapter()
+ .serialize(serviceTemplate.getDataTypes(), type, context);
+ serviceTemplateJsonObject.add(DATA_TYPES, dataTypesJsonElement);
+ }
return serviceTemplateJsonObject;
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateMessageBodyHandler.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateMessageBodyHandler.java
index cf3e668b3..c7e78a524 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateMessageBodyHandler.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateMessageBodyHandler.java
@@ -21,8 +21,12 @@ package org.onap.policy.models.tosca.simple.serialization;
import com.google.gson.GsonBuilder;
import org.onap.policy.common.gson.GsonMessageBodyHandler;
+import org.onap.policy.models.tosca.simple.concepts.ToscaDataType;
+import org.onap.policy.models.tosca.simple.concepts.ToscaDataTypes;
import org.onap.policy.models.tosca.simple.concepts.ToscaPolicies;
import org.onap.policy.models.tosca.simple.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicyTypes;
import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
import org.onap.policy.models.tosca.simple.concepts.ToscaTopologyTemplate;
import org.slf4j.Logger;
@@ -56,6 +60,10 @@ public class ToscaServiceTemplateMessageBodyHandler extends GsonMessageBodyHandl
.registerTypeAdapter(ToscaTopologyTemplate.class, new ToscaTopologyTemplateJsonAdapter())
.registerTypeAdapter(ToscaPolicies.class, new ToscaPoliciesJsonAdapter())
.registerTypeAdapter(ToscaPolicy.class, new ToscaPolicyJsonAdapter())
+ .registerTypeAdapter(ToscaPolicyTypes.class, new ToscaPolicyTypesJsonAdapter())
+ .registerTypeAdapter(ToscaPolicyType.class, new ToscaPolicyTypeJsonAdapter())
+ .registerTypeAdapter(ToscaDataTypes.class, new ToscaDataTypesJsonAdapter())
+ .registerTypeAdapter(ToscaDataType.class, new ToscaDataTypeJsonAdapter())
.setPrettyPrinting()
.create()
);
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaTopologyTemplateJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaTopologyTemplateJsonAdapter.java
index a2974fdbd..d302b7e6c 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaTopologyTemplateJsonAdapter.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaTopologyTemplateJsonAdapter.java
@@ -47,6 +47,7 @@ public class ToscaTopologyTemplateJsonAdapter
implements JsonSerializer<ToscaTopologyTemplate>, JsonDeserializer<ToscaTopologyTemplate> {
private static final String POLICIES = "policies";
+ private static final String DESCRIPTION = "description";
@Override
public ToscaTopologyTemplate deserialize(@NonNull final JsonElement toplogyTemplateElement,
@@ -59,6 +60,10 @@ public class ToscaTopologyTemplateJsonAdapter
final PfReferenceKey topologyTemplateKey = new PfReferenceKey(new PfConceptKey(), "IncomingTopologyTemplate");
final ToscaTopologyTemplate topologyTemplate = new ToscaTopologyTemplate(topologyTemplateKey);
+ if (topologyTemplateJsonObject.has(DESCRIPTION)) {
+ topologyTemplate.setDescription(topologyTemplateJsonObject.get(DESCRIPTION).getAsString());
+ }
+
if (topologyTemplateJsonObject.has(POLICIES)) {
topologyTemplate.setPolicies(new ToscaPoliciesJsonAdapter()
.deserialize(topologyTemplateJsonObject.get(POLICIES), ToscaPolicies.class, context));
@@ -76,6 +81,11 @@ public class ToscaTopologyTemplateJsonAdapter
.serialize(topologyTemplate.getPolicies(), type, context);
topologyTemplateJsonObject.add(POLICIES, policiesJsonElement);
+
+ if (topologyTemplate.getDescription() != null) {
+ topologyTemplateJsonObject.addProperty(DESCRIPTION, topologyTemplate.getDescription());
+ }
+
return topologyTemplateJsonObject;
}
}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java
new file mode 100644
index 000000000..4dd55d562
--- /dev/null
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import com.openpojo.reflection.filters.FilterPackageInfo;
+import com.openpojo.validation.Validator;
+import com.openpojo.validation.ValidatorBuilder;
+import com.openpojo.validation.rule.impl.GetterMustExistRule;
+import com.openpojo.validation.rule.impl.SetterMustExistRule;
+import com.openpojo.validation.test.impl.GetterTester;
+import com.openpojo.validation.test.impl.SetterTester;
+import org.junit.Test;
+import org.onap.policy.common.utils.validation.ToStringTester;
+
+/**
+ * Class to perform unit tests of all pojos
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ *
+ */
+public class TestPojos {
+
+ private static final String POJO_PACKAGE = "org.onap.policy.models.tosca.authorative.concepts";
+
+ @Test
+ public void testPojos() {
+ final Validator validator = ValidatorBuilder.create().with(new ToStringTester())
+ .with(new SetterMustExistRule()).with(new GetterMustExistRule()).with(new SetterTester())
+ .with(new GetterTester()).build();
+ validator.validate(POJO_PACKAGE, new FilterPackageInfo());
+ }
+}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapperTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapperTest.java
new file mode 100644
index 000000000..bd6b26bb9
--- /dev/null
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapperTest.java
@@ -0,0 +1,94 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Model
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.mapping;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonSyntaxException;
+import java.io.IOException;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.base.PfValidationResult;
+import org.onap.policy.models.tosca.authorative.concepts.PlainToscaServiceTemplate;
+import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
+import org.yaml.snakeyaml.Yaml;
+
+/**
+ * This class performs unit test of {@link PlainToscaServiceTemplateMapper}}
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+public class PlainToscaServiceTemplateMapperTest {
+
+ private Gson defaultGson;
+ private PlainToscaServiceTemplateMapper mapper;
+
+ @Before
+ public void setUp() {
+ defaultGson = new Gson();
+ mapper = new PlainToscaServiceTemplateMapper();
+ }
+
+ @Test
+ public void testPlainToscaPolicies() throws JsonSyntaxException, IOException {
+ try {
+ String inputJson = ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json");
+
+ PlainToscaServiceTemplate plainPolicies = defaultGson.fromJson(inputJson, PlainToscaServiceTemplate.class);
+ ToscaServiceTemplate internalPolicies = mapper.toToscaServiceTemplate(plainPolicies);
+ assertTrue(internalPolicies.validate(new PfValidationResult()).isValid());
+ PlainToscaServiceTemplate plainPolicies2 = mapper.fromToscaServiceTemplate(internalPolicies);
+ assertTrue(plainPolicies.equals(plainPolicies2));
+
+ } catch (Exception e) {
+ fail("no exception should be thrown");
+ }
+ }
+
+ @Test
+ public void testPlainToscaPolicyTypes() throws JsonSyntaxException, IOException {
+ try {
+ Yaml yaml = new Yaml();
+ String inputYaml = ResourceUtils.getResourceAsString(
+ "policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml");
+ Object yamlObject = yaml.load(inputYaml);
+ String yamlAsJsonString = defaultGson.toJson(yamlObject);
+
+ PlainToscaServiceTemplate plainPolicyTypes = defaultGson.fromJson(yamlAsJsonString,
+ PlainToscaServiceTemplate.class);
+ ToscaServiceTemplate internalPolicyTypes = mapper.toToscaServiceTemplate(plainPolicyTypes);
+ assertTrue(internalPolicyTypes.validate(new PfValidationResult()).isValid());
+ PlainToscaServiceTemplate plainPolicyTypes2 = mapper.fromToscaServiceTemplate(internalPolicyTypes);
+ ToscaServiceTemplate internalPolicyTypes2 = mapper.toToscaServiceTemplate(plainPolicyTypes2);
+ assertTrue(internalPolicyTypes2.validate(new PfValidationResult()).isValid());
+ assertTrue(internalPolicyTypes.compareTo(internalPolicyTypes2) == 0);
+
+ } catch (Exception e) {
+ fail("no exception should be thrown");
+ }
+
+ }
+}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPolicyTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPolicyTest.java
index 807f33ed2..01c1377b9 100644
--- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPolicyTest.java
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPolicyTest.java
@@ -37,7 +37,7 @@ import org.onap.policy.models.base.PfValidationResult;
import org.onap.policy.models.tosca.simple.concepts.ToscaPolicy;
/**
- * DAO test for ToscaDatatype.
+ * DAO test for ToscaPolicy.
*
* @author Liam Fallon (liam.fallon@est.tech)
*/
@@ -171,4 +171,4 @@ public class ToscaPolicyTest {
assertEquals("resultIn is marked @NonNull but is null", exc.getMessage());
}
}
-}
+} \ No newline at end of file
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPropertyTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPropertyTest.java
index a33da605e..0fcf96a89 100644
--- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPropertyTest.java
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPropertyTest.java
@@ -99,8 +99,7 @@ public class ToscaPropertyTest {
tp.setRequired(false);
assertFalse(tp.isRequired());
- PfConceptKey tdefaultKey = new PfConceptKey("defaultKey", "0.0.1");
- tp.setDefaultValue(tdefaultKey);
+ tp.setDefaultValue("defaultKey");
tp.setStatus(ToscaProperty.Status.SUPPORTED);
@@ -141,7 +140,7 @@ public class ToscaPropertyTest {
assertFalse(tp.compareTo(otherDt) == 0);
otherDt.setRequired(false);
assertFalse(tp.compareTo(otherDt) == 0);
- otherDt.setDefaultValue(tdefaultKey);
+ otherDt.setDefaultValue("defaultKey");
assertFalse(tp.compareTo(otherDt) == 0);
otherDt.setStatus(ToscaProperty.Status.SUPPORTED);
assertFalse(tp.compareTo(otherDt) == 0);
@@ -168,7 +167,7 @@ public class ToscaPropertyTest {
assertEquals("target is marked @NonNull but is null", exc.getMessage());
}
- assertEquals(6, tp.getKeys().size());
+ assertEquals(5, tp.getKeys().size());
assertEquals(2, new ToscaProperty().getKeys().size());
new ToscaProperty().clean();
@@ -197,12 +196,7 @@ public class ToscaPropertyTest {
tp.setDefaultValue(null);
assertTrue(tp.validate(new PfValidationResult()).isValid());
- tp.setDefaultValue(tdefaultKey);
- assertTrue(tp.validate(new PfValidationResult()).isValid());
-
- tp.setDefaultValue(PfConceptKey.getNullKey());
- assertFalse(tp.validate(new PfValidationResult()).isValid());
- tp.setDefaultValue(tdefaultKey);
+ tp.setDefaultValue("defaultKey");
assertTrue(tp.validate(new PfValidationResult()).isValid());
tp.getConstraints().add(null);
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java
index 95f0ac971..e49156330 100644
--- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java
@@ -1,6 +1,7 @@
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2019 Nordix Foundation.
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,17 +24,22 @@ package org.onap.policy.models.tosca.simple.serialization;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
import java.io.IOException;
-
+import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.base.PfConceptKey;
import org.onap.policy.models.base.PfValidationResult;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicy;
import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler;
import org.slf4j.Logger;
@@ -44,11 +50,19 @@ import org.yaml.snakeyaml.Yaml;
* Test serialization of monitoring policies.
*
* @author Liam Fallon (liam.fallon@est.tech)
+ * @author Chenfei Gao (cgao@research.att.com)
*/
public class MonitoringPolicySerializationTest {
- // Logger for this class
+
private static final Logger LOGGER = LoggerFactory.getLogger(MonitoringPolicySerializationTest.class);
+ private static final String VCPE_MONITORING_INPUT_JSON = "policies/vCPE.policy.monitoring.input.tosca.json";
+ private static final String VCPE_MONITORING_INPUT_YAML = "policies/vCPE.policy.monitoring.input.tosca.yaml";
+ private static final String VDNS_MONITORING_INPUT_JSON = "policies/vDNS.policy.monitoring.input.tosca.json";
+ private static final String VDNS_MONITORING_INPUT_YAML = "policies/vDNS.policy.monitoring.input.tosca.yaml";
+ private static final String VFW_MONITORING_INPUT_JSON = "policies/vFirewall.policy.monitoring.input.tosca.json";
+ private static final String VFW_MONITORING_INPUT_YAML = "policies/vFirewall.policy.monitoring.input.tosca.yaml";
+
private Gson gson;
@Before
@@ -57,48 +71,231 @@ public class MonitoringPolicySerializationTest {
}
@Test
- public void testJsonDeserialization() throws JsonSyntaxException, IOException {
- String vcpePolicyJson = ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json");
+ public void testDeserialization() {
+ try {
+ // vCPE
+ ToscaServiceTemplate serviceTemplateFromJson = deserializeMonitoringInputJson(VCPE_MONITORING_INPUT_JSON);
+ verifyVcpeMonitoringInputDeserialization(serviceTemplateFromJson);
+ ToscaServiceTemplate serviceTemplateFromYaml = deserializeMonitoringInputYaml(VCPE_MONITORING_INPUT_YAML);
+ assertTrue(serviceTemplateFromJson.compareTo(serviceTemplateFromYaml) == 0);
+
+ // vDNS
+ serviceTemplateFromJson = deserializeMonitoringInputJson(VDNS_MONITORING_INPUT_JSON);
+ verifyVdnsMonitoringInputDeserialization(serviceTemplateFromJson);
+ serviceTemplateFromYaml = deserializeMonitoringInputYaml(VDNS_MONITORING_INPUT_YAML);
+ assertTrue(serviceTemplateFromJson.compareTo(serviceTemplateFromYaml) == 0);
+
+ // vFirewall
+ serviceTemplateFromJson = deserializeMonitoringInputJson(VFW_MONITORING_INPUT_JSON);
+ verifyVfwMonitoringInputDeserialization(serviceTemplateFromJson);
+ serviceTemplateFromYaml = deserializeMonitoringInputYaml(VFW_MONITORING_INPUT_YAML);
+ assertTrue(serviceTemplateFromJson.compareTo(serviceTemplateFromYaml) == 0);
+
+ } catch (Exception e) {
+ fail("No exception should be thrown");
+ }
+ }
+
+ @Test
+ public void testSerialization() {
+ try {
+ // vCPE
+ ToscaServiceTemplate serviceTemplate = deserializeMonitoringInputJson(VCPE_MONITORING_INPUT_JSON);
+ String serializedServiceTemplate = serializeMonitoringServiceTemplate(serviceTemplate);
+ verifyVcpeMonitoringOutputserialization(serializedServiceTemplate);
+
+ // vDNS
+ serviceTemplate = deserializeMonitoringInputJson(VDNS_MONITORING_INPUT_JSON);
+ serializedServiceTemplate = serializeMonitoringServiceTemplate(serviceTemplate);
+ verifyVdnsMonitoringOutputserialization(serializedServiceTemplate);
+
+ // vFirewall
+ serviceTemplate = deserializeMonitoringInputJson(VFW_MONITORING_INPUT_JSON);
+ serializedServiceTemplate = serializeMonitoringServiceTemplate(serviceTemplate);
+ verifyVfwMonitoringOutputserialization(serializedServiceTemplate);
+
+ } catch (Exception e) {
+ fail("No exception should be thrown");
+ }
+ }
+
+ private ToscaServiceTemplate deserializeMonitoringInputJson(String resourcePath)
+ throws JsonSyntaxException, IOException {
- ToscaServiceTemplate serviceTemplate = gson.fromJson(vcpePolicyJson, ToscaServiceTemplate.class);
+ String policyJson = ResourceUtils.getResourceAsString(resourcePath);
+ ToscaServiceTemplate serviceTemplate = gson.fromJson(policyJson, ToscaServiceTemplate.class);
+ return serviceTemplate;
+ }
+
+ private ToscaServiceTemplate deserializeMonitoringInputYaml(String resourcePath)
+ throws JsonSyntaxException, IOException {
+
+ Yaml yaml = new Yaml();
+ String policyYaml = ResourceUtils.getResourceAsString(resourcePath);
+ Object yamlObject = yaml.load(policyYaml);
+ String yamlAsJsonString = new Gson().toJson(yamlObject);
+ ToscaServiceTemplate serviceTemplate = gson.fromJson(yamlAsJsonString, ToscaServiceTemplate.class);
+ return serviceTemplate;
+ }
+
+ private String serializeMonitoringServiceTemplate(ToscaServiceTemplate serviceTemplate) {
+ return gson.toJson(serviceTemplate);
+ }
+
+ private void verifyVcpeMonitoringInputDeserialization(ToscaServiceTemplate serviceTemplate) {
+
+ // Sanity check the entire structure
assertNotNull(serviceTemplate);
LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString());
assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid());
+ // Check tosca_definitions_version
+ assertEquals("tosca_simple_yaml_1_0_0",
+ serviceTemplate.getToscaDefinitionsVersion());
+
+ Map<PfConceptKey, ToscaPolicy> policiesConceptMap = serviceTemplate.getTopologyTemplate()
+ .getPolicies().getConceptMap();
+
+ // Check policies
+ assertTrue(policiesConceptMap.size() == 1);
+ assertEquals("onap.restart.tca", policiesConceptMap.keySet().iterator().next().getName());
assertEquals("onap.restart.tca:1.0.0",
serviceTemplate.getTopologyTemplate().getPolicies().get("onap.restart.tca").getId());
- String reserializedString = gson.toJson(serviceTemplate, ToscaServiceTemplate.class);
- assertEquals(vcpePolicyJson.replaceAll("\\s+", ""), reserializedString.replaceAll("\\s+", ""));
+ ToscaPolicy policyVal = policiesConceptMap.values().iterator().next();
+
+ // Check metadata
+ assertTrue(policyVal.getMetadata().size() == 1);
+ assertEquals("policy-id", policyVal.getMetadata().entrySet().iterator().next().getKey());
+ assertEquals("onap.restart.tca", policyVal.getMetadata().entrySet().iterator().next().getValue());
- ToscaServiceTemplate serviceTemplate2 = gson.fromJson(reserializedString, ToscaServiceTemplate.class);
- assertNotNull(serviceTemplate2);
- assertEquals(serviceTemplate, serviceTemplate2);
+ // Check properties
+ assertTrue(policiesConceptMap.values().iterator().next().getProperties().size() == 1);
+ assertEquals("tca_policy", policyVal.getProperties().keySet().iterator().next());
+ assertNotNull(policyVal.getProperties().values().iterator().next());
}
- @Test
- public void testYamlDeserialization() throws JsonSyntaxException, IOException {
- Yaml yaml = new Yaml();
+ private void verifyVdnsMonitoringInputDeserialization(ToscaServiceTemplate serviceTemplate) {
- String vcpePolicyYaml = ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.yaml");
- Object yamlObject = yaml.load(vcpePolicyYaml);
+ // Sanity check the entire structure
+ assertNotNull(serviceTemplate);
+ LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString());
+ assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid());
- String yamlAsJsonString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject);
+ // Check tosca_definitions_version
+ assertEquals("tosca_simple_yaml_1_0_0",
+ serviceTemplate.getToscaDefinitionsVersion());
- ToscaServiceTemplate serviceTemplate = gson.fromJson(yamlAsJsonString, ToscaServiceTemplate.class);
+ Map<PfConceptKey, ToscaPolicy> policiesConceptMap = serviceTemplate.getTopologyTemplate()
+ .getPolicies().getConceptMap();
+
+ // Check policies
+ assertTrue(policiesConceptMap.size() == 1);
+ assertEquals("onap.scaleout.tca", policiesConceptMap.keySet().iterator().next().getName());
+ assertEquals("onap.scaleout.tca:1.0.0",
+ serviceTemplate.getTopologyTemplate().getPolicies().get("onap.scaleout.tca").getId());
+ ToscaPolicy policyVal = policiesConceptMap.values().iterator().next();
+
+ // Check metadata
+ assertTrue(policyVal.getMetadata().size() == 1);
+ assertEquals("policy-id", policyVal.getMetadata().entrySet().iterator().next().getKey());
+ assertEquals("onap.scaleout.tca", policyVal.getMetadata().entrySet().iterator().next().getValue());
+
+ // Check properties
+ assertTrue(policiesConceptMap.values().iterator().next().getProperties().size() == 1);
+ assertEquals("tca_policy", policyVal.getProperties().keySet().iterator().next());
+ assertNotNull(policyVal.getProperties().values().iterator().next());
+ }
+
+ private void verifyVfwMonitoringInputDeserialization(ToscaServiceTemplate serviceTemplate) {
+
+ // Sanity check the entire structure
assertNotNull(serviceTemplate);
LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString());
assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid());
- assertEquals("onap.restart.tca:1.0.0",
- serviceTemplate.getTopologyTemplate().getPolicies().get("onap.restart.tca").getId());
+ // Check tosca_definitions_version
+ assertEquals("tosca_simple_yaml_1_0_0",
+ serviceTemplate.getToscaDefinitionsVersion());
+
+ Map<PfConceptKey, ToscaPolicy> policiesConceptMap = serviceTemplate.getTopologyTemplate()
+ .getPolicies().getConceptMap();
+
+ // Check policies
+ assertTrue(policiesConceptMap.size() == 1);
+ assertEquals("onap.vfirewall.tca", policiesConceptMap.keySet().iterator().next().getName());
+ assertEquals("onap.vfirewall.tca:1.0.0",
+ serviceTemplate.getTopologyTemplate().getPolicies().get("onap.vfirewall.tca").getId());
+
+ ToscaPolicy policyVal = policiesConceptMap.values().iterator().next();
+
+ // Check metadata
+ assertTrue(policyVal.getMetadata().size() == 1);
+ assertEquals("policy-id", policyVal.getMetadata().entrySet().iterator().next().getKey());
+ assertEquals("onap.vfirewall.tca", policyVal.getMetadata().entrySet().iterator().next().getValue());
+
+ // Check properties
+ assertTrue(policiesConceptMap.values().iterator().next().getProperties().size() == 1);
+ assertEquals("tca_policy", policyVal.getProperties().keySet().iterator().next());
+ assertNotNull(policyVal.getProperties().values().iterator().next());
+ }
+
+ private void verifyVcpeMonitoringOutputserialization(String serializedServiceTemplate) {
+
+ JsonObject serviceTemplateJsonObject = new JsonParser().parse(serializedServiceTemplate).getAsJsonObject();
+ assertEquals("tosca_simple_yaml_1_0_0", serviceTemplateJsonObject.get("tosca_definitions_version")
+ .getAsString());
+ JsonObject topologyTemplateJsonObject = serviceTemplateJsonObject.get("topology_template")
+ .getAsJsonObject();
+ JsonArray policiesJsonArray = topologyTemplateJsonObject.get("policies").getAsJsonArray();
+ assertTrue(policiesJsonArray.size() == 1);
+ JsonObject policy = policiesJsonArray.iterator().next().getAsJsonObject();
+ assertNotNull(policy.get("onap.restart.tca"));
+ JsonObject policyVal = policy.get("onap.restart.tca").getAsJsonObject();
+ assertEquals("onap.policies.monitoring.cdap.tca.hi.lo.app", policyVal.get("type").getAsString());
+ assertEquals("1.0.0", policyVal.get("version").getAsString());
+ assertEquals("onap.restart.tca", policyVal.get("metadata").getAsJsonObject().get("policy-id")
+ .getAsString());
+ JsonObject properties = policyVal.get("properties").getAsJsonObject();
+ assertNotNull(properties.get("tca_policy"));
+ }
+
+ private void verifyVdnsMonitoringOutputserialization(String serializedServiceTemplate) {
+
+ JsonObject serviceTemplateJsonObject = new JsonParser().parse(serializedServiceTemplate).getAsJsonObject();
+ assertEquals("tosca_simple_yaml_1_0_0", serviceTemplateJsonObject.get("tosca_definitions_version")
+ .getAsString());
+ JsonObject topologyTemplateJsonObject = serviceTemplateJsonObject.get("topology_template").getAsJsonObject();
+ JsonArray policiesJsonArray = topologyTemplateJsonObject.get("policies").getAsJsonArray();
+ assertTrue(policiesJsonArray.size() == 1);
+ JsonObject policy = policiesJsonArray.iterator().next().getAsJsonObject();
+ assertNotNull(policy.get("onap.scaleout.tca"));
+ JsonObject policyVal = policy.get("onap.scaleout.tca").getAsJsonObject();
+ assertEquals("onap.policies.monitoring.cdap.tca.hi.lo.app", policyVal.get("type").getAsString());
+ assertEquals("1.0.0", policyVal.get("version").getAsString());
+ assertEquals("onap.scaleout.tca", policyVal.get("metadata").getAsJsonObject().get("policy-id")
+ .getAsString());
+ JsonObject properties = policyVal.get("properties").getAsJsonObject();
+ assertNotNull(properties.get("tca_policy"));
+ }
- String reserializedString = gson.toJson(serviceTemplate, ToscaServiceTemplate.class);
- assertEquals(yamlAsJsonString.replaceAll("\\s+", ""), reserializedString.replaceAll("\\s+", ""));
+ private void verifyVfwMonitoringOutputserialization(String serializedServiceTemplate) {
- ToscaServiceTemplate serviceTemplate2 = gson.fromJson(reserializedString, ToscaServiceTemplate.class);
- assertNotNull(serviceTemplate2);
- assertEquals(serviceTemplate, serviceTemplate2);
+ JsonObject serviceTemplateJsonObject = new JsonParser().parse(serializedServiceTemplate).getAsJsonObject();
+ assertEquals("tosca_simple_yaml_1_0_0", serviceTemplateJsonObject.get("tosca_definitions_version")
+ .getAsString());
+ JsonObject topologyTemplateJsonObject = serviceTemplateJsonObject.get("topology_template").getAsJsonObject();
+ JsonArray policiesJsonArray = topologyTemplateJsonObject.get("policies").getAsJsonArray();
+ assertTrue(policiesJsonArray.size() == 1);
+ JsonObject policy = policiesJsonArray.iterator().next().getAsJsonObject();
+ assertNotNull(policy.get("onap.vfirewall.tca"));
+ JsonObject policyVal = policy.get("onap.vfirewall.tca").getAsJsonObject();
+ assertEquals("onap.policy.monitoring.cdap.tca.hi.lo.app", policyVal.get("type").getAsString());
+ assertEquals("1.0.0", policyVal.get("version").getAsString());
+ assertEquals("onap.vfirewall.tca", policyVal.get("metadata").getAsJsonObject().get("policy-id")
+ .getAsString());
+ JsonObject properties = policyVal.get("properties").getAsJsonObject();
+ assertNotNull(properties.get("tca_policy"));
}
}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java
new file mode 100644
index 000000000..c40b32e3c
--- /dev/null
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java
@@ -0,0 +1,424 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.simple.serialization;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonSyntaxException;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfValidationResult;
+import org.onap.policy.models.tosca.simple.concepts.ToscaConstraintLogicalString;
+import org.onap.policy.models.tosca.simple.concepts.ToscaConstraintValidValues;
+import org.onap.policy.models.tosca.simple.concepts.ToscaDataType;
+import org.onap.policy.models.tosca.simple.concepts.ToscaEntrySchema;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.simple.concepts.ToscaProperty;
+import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.yaml.snakeyaml.Yaml;
+
+/**
+ * Test serialization of monitoring policy types.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
+ */
+public class MonitoringPolicyTypeSerializationTest {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(MonitoringPolicyTypeSerializationTest.class);
+
+ private static final String MONITORING_TCA_YAML = "policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml";
+ private static final String MONITORING_COLLECTORS_YAML =
+ "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml";
+
+ private Gson gson;
+
+ @Before
+ public void setUp() {
+ gson = new ToscaServiceTemplateMessageBodyHandler().getGson();
+ }
+
+ @Test
+ public void testDeserialization() {
+ try {
+ // TCA
+ ToscaServiceTemplate serviceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_TCA_YAML);
+ verifyTcaInputDeserialization(serviceTemplateFromYaml);
+
+ // Collector
+ serviceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_COLLECTORS_YAML);
+ verifyCollectorInputDeserialization(serviceTemplateFromYaml);
+
+ } catch (Exception e) {
+ fail("No exception should be thrown");
+ }
+ }
+
+ @Test
+ public void testSerialization() {
+ try {
+ // TCA
+ ToscaServiceTemplate serviceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_TCA_YAML);
+ String serializedServiceTemplate1 = serializeMonitoringServiceTemplate(serviceTemplateFromYaml);
+ ToscaServiceTemplate serviceTemplateFromJson = gson.fromJson(serializedServiceTemplate1,
+ ToscaServiceTemplate.class);
+ String serializedServiceTemplate2 = serializeMonitoringServiceTemplate(serviceTemplateFromJson);
+ assertEquals(serializedServiceTemplate1, serializedServiceTemplate2);
+
+ // Collector
+ serviceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_COLLECTORS_YAML);
+ serializedServiceTemplate1 = serializeMonitoringServiceTemplate(serviceTemplateFromYaml);
+ serviceTemplateFromJson = gson.fromJson(serializedServiceTemplate1, ToscaServiceTemplate.class);
+ serializedServiceTemplate2 = serializeMonitoringServiceTemplate(serviceTemplateFromJson);
+ assertEquals(serializedServiceTemplate1, serializedServiceTemplate2);
+
+ } catch (Exception e) {
+ fail("No exception should be thrown");
+ }
+ }
+
+ private ToscaServiceTemplate deserializeMonitoringInputYaml(String resourcePath)
+ throws JsonSyntaxException, IOException {
+
+ Yaml yaml = new Yaml();
+ String policyTypeYaml = ResourceUtils.getResourceAsString(resourcePath);
+ Object yamlObject = yaml.load(policyTypeYaml);
+ String yamlAsJsonString = new Gson().toJson(yamlObject);
+ ToscaServiceTemplate serviceTemplate = gson.fromJson(yamlAsJsonString, ToscaServiceTemplate.class);
+ return serviceTemplate;
+ }
+
+ private void verifyTcaInputDeserialization(ToscaServiceTemplate serviceTemplate) {
+
+ // Sanity check the entire structure
+ assertNotNull(serviceTemplate);
+ LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString());
+ assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid());
+
+ // Check tosca_definitions_version
+ assertEquals("tosca_simple_yaml_1_0_0", serviceTemplate.getToscaDefinitionsVersion());
+
+ // Check policy_types
+ Map<PfConceptKey, ToscaPolicyType> policyTypesConceptMap = serviceTemplate.getPolicyTypes().getConceptMap();
+ assertTrue(policyTypesConceptMap.size() == 2);
+ Iterator<Entry<PfConceptKey, ToscaPolicyType>> policyTypesIter = policyTypesConceptMap.entrySet().iterator();
+
+ Entry<PfConceptKey, ToscaPolicyType> firstPolicyType = policyTypesIter.next();
+ assertEquals("onap.policies.Monitoring", firstPolicyType.getKey().getName());
+ assertEquals("1.0.0", firstPolicyType.getKey().getVersion());
+ assertEquals("tosca.policies.Root", firstPolicyType.getValue().getDerivedFrom().getName());
+ assertEquals("a base policy type for all policies that governs monitoring provisioning",
+ firstPolicyType.getValue().getDescription());
+
+ Entry<PfConceptKey, ToscaPolicyType> secondPolicyType = policyTypesIter.next();
+ assertEquals("onap.policy.monitoring.cdap.tca.hi.lo.app", secondPolicyType.getKey().getName());
+ assertEquals("1.0.0", secondPolicyType.getKey().getVersion());
+ assertEquals("onap.policies.Monitoring", secondPolicyType.getValue().getDerivedFrom().getName());
+ assertTrue(secondPolicyType.getValue().getProperties().size() == 1);
+
+ ToscaProperty property = secondPolicyType.getValue().getProperties().iterator().next();
+ assertEquals("onap.policy.monitoring.cdap.tca.hi.lo.app", property.getKey().getParentKeyName());
+ assertEquals("1.0.0", property.getKey().getParentKeyVersion());
+ assertEquals("tca_policy", property.getKey().getLocalName());
+ assertEquals("map", property.getType().getName());
+ assertEquals("TCA Policy JSON", property.getDescription());
+
+ ToscaEntrySchema entrySchema = property.getEntrySchema();
+ assertEquals("map", entrySchema.getKey().getParentKeyName());
+ assertEquals("1.0.0", entrySchema.getKey().getParentKeyVersion());
+ assertEquals("entry_schema", entrySchema.getKey().getLocalName());
+ assertEquals("onap.datatypes.monitoring.tca_policy", entrySchema.getType().getName());
+
+ // Check data_types
+ Map<PfConceptKey, ToscaDataType> dataTypesConceptMap = serviceTemplate.getDataTypes().getConceptMap();
+ assertTrue(dataTypesConceptMap.size() == 3);
+ Iterator<Entry<PfConceptKey, ToscaDataType>> dataTypesIter = dataTypesConceptMap.entrySet().iterator();
+
+ Entry<PfConceptKey, ToscaDataType> firstDataType = dataTypesIter.next();
+ assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataType.getKey().getName());
+ ToscaDataType firstDataTypeVal = firstDataType.getValue();
+ assertEquals("tosca.datatypes.Root", firstDataTypeVal.getDerivedFrom().getName());
+ assertEquals("1.0.0", firstDataTypeVal.getDerivedFrom().getVersion());
+ assertTrue(firstDataTypeVal.getProperties().size() == 6);
+ Iterator<ToscaProperty> firstDataTypePropertiesIter = firstDataTypeVal.getProperties().iterator();
+
+ ToscaProperty firstDataTypeFirstProperty = firstDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeFirstProperty.getKey()
+ .getParentKeyName());
+ assertEquals("controlLoopSchemaType", firstDataTypeFirstProperty.getKey().getLocalName());
+ assertEquals("string", firstDataTypeFirstProperty.getType().getName());
+ assertTrue(firstDataTypeFirstProperty.isRequired());
+ assertEquals("Specifies Control Loop Schema Type for the event Name e.g. VNF, VM",
+ firstDataTypeFirstProperty.getDescription());
+ assertTrue(firstDataTypeFirstProperty.getConstraints().size() == 1);
+ assertEquals("valid_values", firstDataTypeFirstProperty.getConstraints().iterator().next().getKey()
+ .getLocalName());
+ assertEquals("string", firstDataTypeFirstProperty.getConstraints().iterator().next().getKey()
+ .getParentKeyName());
+ assertTrue(firstDataTypeFirstProperty.getConstraints().iterator().next()
+ instanceof ToscaConstraintValidValues);
+ assertTrue(((ToscaConstraintValidValues)(firstDataTypeFirstProperty.getConstraints().iterator().next()))
+ .getValidValues().size() == 2);
+
+ ToscaProperty firstDataTypeSecondProperty = firstDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeSecondProperty.getKey()
+ .getParentKeyName());
+ assertEquals("eventName", firstDataTypeSecondProperty.getKey().getLocalName());
+ assertEquals("string", firstDataTypeSecondProperty.getType().getName());
+ assertTrue(firstDataTypeSecondProperty.isRequired());
+ assertEquals("Event name to which thresholds need to be applied", firstDataTypeSecondProperty
+ .getDescription());
+
+ ToscaProperty firstDataTypeThirdProperty = firstDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeThirdProperty.getKey()
+ .getParentKeyName());
+ assertEquals("policyName", firstDataTypeThirdProperty.getKey().getLocalName());
+ assertEquals("string", firstDataTypeThirdProperty.getType().getName());
+ assertTrue(firstDataTypeThirdProperty.isRequired());
+ assertEquals("TCA Policy Scope Name", firstDataTypeThirdProperty.getDescription());
+
+ ToscaProperty firstDataTypeFourthProperty = firstDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeFourthProperty.getKey()
+ .getParentKeyName());
+ assertEquals("policyScope", firstDataTypeFourthProperty.getKey().getLocalName());
+ assertEquals("string", firstDataTypeFourthProperty.getType().getName());
+ assertTrue(firstDataTypeFourthProperty.isRequired());
+ assertEquals("TCA Policy Scope", firstDataTypeFourthProperty.getDescription());
+
+ ToscaProperty firstDataTypeFifthProperty = firstDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeFifthProperty.getKey()
+ .getParentKeyName());
+ assertEquals("policyVersion", firstDataTypeFifthProperty.getKey().getLocalName());
+ assertEquals("string", firstDataTypeFifthProperty.getType().getName());
+ assertTrue(firstDataTypeFifthProperty.isRequired());
+ assertEquals("TCA Policy Scope Version", firstDataTypeFifthProperty.getDescription());
+
+ ToscaProperty firstDataTypeSixthProperty = firstDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeSixthProperty.getKey()
+ .getParentKeyName());
+ assertEquals("thresholds", firstDataTypeSixthProperty.getKey().getLocalName());
+ assertEquals("list", firstDataTypeSixthProperty.getType().getName());
+ assertTrue(firstDataTypeSixthProperty.isRequired());
+ assertEquals("Thresholds associated with eventName", firstDataTypeSixthProperty.getDescription());
+ assertNotNull(firstDataTypeSixthProperty.getEntrySchema());
+ assertEquals("entry_schema", firstDataTypeSixthProperty.getEntrySchema().getKey().getLocalName());
+ assertEquals("list", firstDataTypeSixthProperty.getEntrySchema().getKey().getParentKeyName());
+ assertEquals("onap.datatypes.monitoring.thresholds", firstDataTypeSixthProperty.getEntrySchema().getType()
+ .getName());
+
+ Entry<PfConceptKey, ToscaDataType> secondDataType = dataTypesIter.next();
+ assertEquals("onap.datatypes.monitoring.tca_policy", secondDataType.getKey().getName());
+ ToscaDataType secondDataTypeVal = secondDataType.getValue();
+ assertEquals("tosca.datatypes.Root", secondDataTypeVal.getDerivedFrom().getName());
+ assertEquals("1.0.0", secondDataTypeVal.getDerivedFrom().getVersion());
+ assertTrue(secondDataTypeVal.getProperties().size() == 2);
+ Iterator<ToscaProperty> secondDataTypePropertiesIter = secondDataTypeVal.getProperties().iterator();
+
+ ToscaProperty secondDataTypeFirstProperty = secondDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.tca_policy", secondDataTypeFirstProperty.getKey().getParentKeyName());
+ assertEquals("domain", secondDataTypeFirstProperty.getKey().getLocalName());
+ assertEquals("string", secondDataTypeFirstProperty.getType().getName());
+ assertTrue(secondDataTypeFirstProperty.isRequired());
+ assertEquals("Domain name to which TCA needs to be applied", secondDataTypeFirstProperty.getDescription());
+ assertEquals("measurementsForVfScaling", secondDataTypeFirstProperty.getDefaultValue());
+ assertTrue(secondDataTypeFirstProperty.getConstraints().size() == 1);
+ assertEquals("string", secondDataTypeFirstProperty.getConstraints().iterator().next().getKey()
+ .getParentKeyName());
+ assertEquals("equal", secondDataTypeFirstProperty.getConstraints().iterator().next().getKey().getLocalName());
+ assertTrue(secondDataTypeFirstProperty.getConstraints().iterator().next()
+ instanceof ToscaConstraintLogicalString);
+ assertEquals("measurementsForVfScaling", ((ToscaConstraintLogicalString)(secondDataTypeFirstProperty
+ .getConstraints().iterator().next())).getCompareToString());
+
+ ToscaProperty secondDataTypeSecondProperty = secondDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.tca_policy", secondDataTypeSecondProperty.getKey().getParentKeyName());
+ assertEquals("metricsPerEventName", secondDataTypeSecondProperty.getKey().getLocalName());
+ assertEquals("list", secondDataTypeSecondProperty.getType().getName());
+ assertTrue(secondDataTypeSecondProperty.isRequired());
+ assertEquals("Contains eventName and threshold details that need to be applied to given eventName",
+ secondDataTypeSecondProperty.getDescription());
+ assertNotNull(secondDataTypeSecondProperty.getEntrySchema());
+ assertEquals("list", secondDataTypeSecondProperty.getEntrySchema().getKey().getParentKeyName());
+ assertEquals("onap.datatypes.monitoring.metricsPerEventName",
+ secondDataTypeSecondProperty.getEntrySchema().getType().getName());
+ assertEquals("entry_schema", secondDataTypeSecondProperty.getEntrySchema().getKey().getLocalName());
+
+ Entry<PfConceptKey, ToscaDataType> thirdDataType = dataTypesIter.next();
+ assertEquals("onap.datatypes.monitoring.thresholds", thirdDataType.getKey().getName());
+ ToscaDataType thirdDataTypeVal = thirdDataType.getValue();
+ assertEquals("tosca.datatypes.Root", thirdDataTypeVal.getDerivedFrom().getName());
+ assertEquals("1.0.0", thirdDataTypeVal.getDerivedFrom().getVersion());
+ assertTrue(thirdDataTypeVal.getProperties().size() == 7);
+ Iterator<ToscaProperty> thirdDataTypePropertiesIter = thirdDataTypeVal.getProperties().iterator();
+
+ ToscaProperty thirdDataTypeFirstProperty = thirdDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeFirstProperty.getKey().getParentKeyName());
+ assertEquals("closedLoopControlName", thirdDataTypeFirstProperty.getKey().getLocalName());
+ assertEquals("string", thirdDataTypeFirstProperty.getType().getName());
+ assertTrue(thirdDataTypeFirstProperty.isRequired());
+ assertEquals("Closed Loop Control Name associated with the threshold", thirdDataTypeFirstProperty
+ .getDescription());
+
+ ToscaProperty thirdDataTypeSecondProperty = thirdDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeSecondProperty.getKey().getParentKeyName());
+ assertEquals("closedLoopEventStatus", thirdDataTypeSecondProperty.getKey().getLocalName());
+ assertEquals("string", thirdDataTypeSecondProperty.getType().getName());
+ assertTrue(thirdDataTypeSecondProperty.isRequired());
+ assertEquals("Closed Loop Event Status of the threshold", thirdDataTypeSecondProperty.getDescription());
+ assertNotNull(thirdDataTypeSecondProperty.getConstraints());
+ assertTrue(thirdDataTypeSecondProperty.getConstraints().size() == 1);
+ assertEquals("string", thirdDataTypeSecondProperty.getConstraints().iterator().next().getKey()
+ .getParentKeyName());
+ assertEquals("valid_values", thirdDataTypeSecondProperty.getConstraints().iterator().next().getKey()
+ .getLocalName());
+ assertTrue(thirdDataTypeSecondProperty.getConstraints().iterator().next()
+ instanceof ToscaConstraintValidValues);
+ assertTrue(((ToscaConstraintValidValues)(thirdDataTypeSecondProperty.getConstraints().iterator().next()))
+ .getValidValues().size() == 2);
+
+ ToscaProperty thirdDataTypeThirdProperty = thirdDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeThirdProperty.getKey().getParentKeyName());
+ assertEquals("direction", thirdDataTypeThirdProperty.getKey().getLocalName());
+ assertEquals("string", thirdDataTypeThirdProperty.getType().getName());
+ assertTrue(thirdDataTypeThirdProperty.isRequired());
+ assertEquals("Direction of the threshold", thirdDataTypeThirdProperty.getDescription());
+ assertNotNull(thirdDataTypeThirdProperty.getConstraints());
+ assertTrue(thirdDataTypeThirdProperty.getConstraints().size() == 1);
+ assertEquals("string", thirdDataTypeThirdProperty.getConstraints().iterator().next().getKey()
+ .getParentKeyName());
+ assertEquals("valid_values", thirdDataTypeThirdProperty.getConstraints().iterator().next().getKey()
+ .getLocalName());
+ assertTrue(((ToscaConstraintValidValues)(thirdDataTypeThirdProperty.getConstraints().iterator().next()))
+ .getValidValues().size() == 5);
+
+ ToscaProperty thirdDataTypeFourthProperty = thirdDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeFourthProperty.getKey().getParentKeyName());
+ assertEquals("fieldPath", thirdDataTypeFourthProperty.getKey().getLocalName());
+ assertEquals("string", thirdDataTypeFourthProperty.getType().getName());
+ assertTrue(thirdDataTypeFourthProperty.isRequired());
+ assertEquals("Json field Path as per CEF message which needs to be analyzed for TCA",
+ thirdDataTypeFourthProperty.getDescription());
+ assertNotNull(thirdDataTypeFourthProperty.getConstraints());
+ assertTrue(thirdDataTypeFourthProperty.getConstraints().size() == 1);
+ assertEquals("string", thirdDataTypeFourthProperty.getConstraints().iterator().next().getKey()
+ .getParentKeyName());
+ assertEquals("valid_values", thirdDataTypeFourthProperty.getConstraints().iterator().next().getKey()
+ .getLocalName());
+ assertTrue(((ToscaConstraintValidValues)(thirdDataTypeFourthProperty.getConstraints().iterator().next()))
+ .getValidValues().size() == 43);
+
+ ToscaProperty thirdDataTypeFifthProperty = thirdDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeFifthProperty.getKey().getParentKeyName());
+ assertEquals("severity", thirdDataTypeFifthProperty.getKey().getLocalName());
+ assertEquals("string", thirdDataTypeFifthProperty.getType().getName());
+ assertTrue(thirdDataTypeFifthProperty.isRequired());
+ assertEquals("Threshold Event Severity", thirdDataTypeFifthProperty.getDescription());
+ assertNotNull(thirdDataTypeFifthProperty.getConstraints());
+ assertTrue(thirdDataTypeFifthProperty.getConstraints().size() == 1);
+ assertEquals("string", thirdDataTypeFifthProperty.getConstraints().iterator().next().getKey()
+ .getParentKeyName());
+ assertEquals("valid_values", thirdDataTypeFifthProperty.getConstraints().iterator().next().getKey()
+ .getLocalName());
+ assertTrue(((ToscaConstraintValidValues)(thirdDataTypeFifthProperty.getConstraints().iterator().next()))
+ .getValidValues().size() == 5);;
+
+ ToscaProperty thirdDataTypeSixthProperty = thirdDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeSixthProperty.getKey().getParentKeyName());
+ assertEquals("thresholdValue", thirdDataTypeSixthProperty.getKey().getLocalName());
+ assertEquals("integer", thirdDataTypeSixthProperty.getType().getName());
+ assertTrue(thirdDataTypeSixthProperty.isRequired());
+ assertEquals("Threshold value for the field Path inside CEF message", thirdDataTypeSixthProperty
+ .getDescription());
+
+ ToscaProperty thirdDataTypeSeventhProperty = thirdDataTypePropertiesIter.next();
+ assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeSeventhProperty.getKey().getParentKeyName());
+ assertEquals("version", thirdDataTypeSeventhProperty.getKey().getLocalName());
+ assertEquals("string", thirdDataTypeSeventhProperty.getType().getName());
+ assertTrue(thirdDataTypeSeventhProperty.isRequired());
+ assertEquals("Version number associated with the threshold", thirdDataTypeSeventhProperty.getDescription());
+ }
+
+ private void verifyCollectorInputDeserialization(ToscaServiceTemplate serviceTemplate) {
+
+ // Sanity check the entire structure
+ assertNotNull(serviceTemplate);
+ LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString());
+ assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid());
+
+ // Check tosca_definitions_version
+ assertEquals("tosca_simple_yaml_1_0_0", serviceTemplate.getToscaDefinitionsVersion());
+
+ // Check policy_types
+ Map<PfConceptKey, ToscaPolicyType> policyTypesConceptMap = serviceTemplate.getPolicyTypes().getConceptMap();
+ assertTrue(policyTypesConceptMap.size() == 2);
+ Iterator<Entry<PfConceptKey, ToscaPolicyType>> policyTypesIter = policyTypesConceptMap.entrySet().iterator();
+
+ Entry<PfConceptKey, ToscaPolicyType> firstPolicyType = policyTypesIter.next();
+ assertEquals("onap.policies.Monitoring", firstPolicyType.getKey().getName());
+ assertEquals("1.0.0", firstPolicyType.getKey().getVersion());
+ assertEquals("tosca.policies.Root", firstPolicyType.getValue().getDerivedFrom().getName());
+ assertEquals("a base policy type for all policies that govern monitoring provision",
+ firstPolicyType.getValue().getDescription());
+
+ Entry<PfConceptKey, ToscaPolicyType> secondPolicyType = policyTypesIter.next();
+ assertEquals("onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server",
+ secondPolicyType.getKey().getName());
+ assertEquals("1.0.0", secondPolicyType.getKey().getVersion());
+ assertEquals("policy.nodes.Root", secondPolicyType.getValue().getDerivedFrom().getName());
+ assertTrue(secondPolicyType.getValue().getProperties().size() == 2);
+
+ Iterator<ToscaProperty> propertiesIter = secondPolicyType.getValue().getProperties().iterator();
+
+ ToscaProperty firstProperty = propertiesIter.next();
+ assertEquals("onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server",
+ firstProperty.getKey().getParentKeyName());
+ assertEquals("1.0.0", firstProperty.getKey().getParentKeyVersion());
+ assertEquals("buscontroller_feed_publishing_endpoint", firstProperty.getKey().getLocalName());
+ assertEquals("string", firstProperty.getType().getName());
+ assertEquals("DMAAP Bus Controller feed endpoint", firstProperty.getDescription());
+
+ ToscaProperty secondProperty = propertiesIter.next();
+ assertEquals("onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server",
+ secondProperty.getKey().getParentKeyName());
+ assertEquals("1.0.0", secondProperty.getKey().getParentKeyVersion());
+ assertEquals("datafile.policy", secondProperty.getKey().getLocalName());
+ assertEquals("string", secondProperty.getType().getName());
+ assertEquals("datafile Policy JSON as string", secondProperty.getDescription());
+ }
+
+ private String serializeMonitoringServiceTemplate(ToscaServiceTemplate serviceTemplate) {
+ return gson.toJson(serviceTemplate);
+ }
+} \ No newline at end of file