Fix Policy type and Policy definition
Fix policy according to TOSCA spec
Change-Id: I4e3da732666dd52895c4458f0cbd16c6ca47c1cd
Issue-ID: SDC-1782
Signed-off-by: shiria <shiri.amichai@amdocs.com>
diff --git a/common/onap-tosca-datatype/pom.xml b/common/onap-tosca-datatype/pom.xml
index 421aaf0..e00394f 100644
--- a/common/onap-tosca-datatype/pom.xml
+++ b/common/onap-tosca-datatype/pom.xml
@@ -46,5 +46,9 @@
<version>${guava.version}</version>
<scope>compile</scope>
</dependency>
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/Condition.java b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/Condition.java
new file mode 100644
index 0000000..a394401
--- /dev/null
+++ b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/Condition.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.sdc.tosca.datatypes.model;
+
+import java.util.Map;
+import lombok.Data;
+
+@Data
+public class Condition {
+
+ private Map<String,Constraint> constraint;
+ private String period;
+ private Integer evaluations;
+ private String method;
+
+}
diff --git a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/PolicyDefinition.java b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/PolicyDefinition.java
index e1c2fb4..a9a45c4 100644
--- a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/PolicyDefinition.java
+++ b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/PolicyDefinition.java
@@ -7,9 +7,9 @@
* 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.
@@ -22,51 +22,16 @@
import java.util.List;
import java.util.Map;
+import lombok.Data;
+@Data
public class PolicyDefinition implements Template {
- private String type;
- private String description;
- private Map<String, String> metadata;
- private Map<String, Object> properties;
- private List<String> targets;
- public String getType() {
- return type;
- }
+ private String type;
+ private String description;
+ private Map<String, String> metadata;
+ private Map<String, Object> properties;
+ private List<String> targets;
+ private Map<String, Trigger> triggers;
- public void setType(String type) {
- this.type = type;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public Map<String, String> getMetadata() {
- return metadata;
- }
-
- public void setMetadata(Map<String, String> metadata) {
- this.metadata = metadata;
- }
-
- public Map<String, Object> getProperties() {
- return properties;
- }
-
- public void setProperties(Map<String, Object> properties) {
- this.properties = properties;
- }
-
- public List<String> getTargets() {
- return targets;
- }
-
- public void setTargets(List<String> targets) {
- this.targets = targets;
- }
}
diff --git a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/PolicyType.java b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/PolicyType.java
index 54d52cc..cd7da86 100644
--- a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/PolicyType.java
+++ b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/PolicyType.java
@@ -7,9 +7,9 @@
* 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.
@@ -22,73 +22,18 @@
import java.util.List;
import java.util.Map;
+import lombok.Data;
-
+@Data
public class PolicyType {
- private String derived_from;
- private String version;
- private Map<String, String> metadata;
- private String description;
- private Map<String, PropertyDefinition> properties;
- private List<String> targets;
- private List<Trigger> triggers;
+ private String derived_from;
+ private String version;
+ private Map<String, String> metadata;
+ private String description;
+ private Map<String, PropertyDefinition> properties;
+ private List<String> targets;
+ private Map<String, Trigger> triggers;
- public String getDerived_from() {
- return derived_from;
- }
-
- public void setDerived_from(String derived_from) {
- this.derived_from = derived_from;
- }
-
- public String getVersion() {
- return version;
- }
-
- public void setVersion(String version) {
- this.version = version;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public Map<String, PropertyDefinition> getProperties() {
- return properties;
- }
-
- public void setProperties(Map<String, PropertyDefinition> properties) {
- this.properties = properties;
- }
-
- public List<String> getTargets() {
- return targets;
- }
-
- public void setTargets(List<String> targets) {
- this.targets = targets;
- }
-
- public Map<String, String> getMetadata() {
- return metadata;
- }
-
- public void setMetadata(Map<String, String> metadata) {
- this.metadata = metadata;
- }
-
- public List<Trigger> getTriggers() {
- return triggers;
- }
-
- public void setTriggers(
- List<Trigger> triggers) {
- this.triggers = triggers;
- }
}
diff --git a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/Trigger.java b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/Trigger.java
index 92f3b30..f5a2f66 100644
--- a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/Trigger.java
+++ b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/datatypes/model/Trigger.java
@@ -2,96 +2,101 @@
public class Trigger {
- private String description;
- private String event_type;
- private TimeInterval schedule;
- private EventFilter target_filter;
- private Constraint condition;
- private Constraint constraint;
- private String period;
- private int evaluations;
- private String method;
- //action - String or operation?
- private Object action;
+ private String description;
+ private String event_type;
+ private TimeInterval schedule;
+ private EventFilter target_filter;
+ private Condition condition;
+ private Object action;
+ @Override
+ public int hashCode() {
+ int result = getDescription() != null ? getDescription().hashCode() : 0;
+ result = 31 * result + getEvent_type().hashCode();
+ result = 31 * result + (getSchedule() != null ? getSchedule().hashCode() : 0);
+ result = 31 * result + (getTarget_filter() != null ? getTarget_filter().hashCode() : 0);
+ result = 31 * result + (getCondition() != null ? getCondition().hashCode() : 0);
+ result = 31 * result + getAction().hashCode();
+ return result;
+ }
- public String getDescription() {
- return description;
- }
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof Trigger)) {
+ return false;
+ }
- public void setDescription(String description) {
- this.description = description;
- }
+ Trigger trigger = (Trigger) o;
- public String getEvent_type() {
- return event_type;
- }
+ if (getDescription() != null ? !getDescription().equals(trigger.getDescription()) :
+ trigger.getDescription() != null) {
+ return false;
+ }
+ if (!getEvent_type().equals(trigger.getEvent_type())) {
+ return false;
+ }
+ if (getSchedule() != null ? !getSchedule().equals(trigger.getSchedule()) : trigger.getSchedule() != null) {
+ return false;
+ }
+ if (getTarget_filter() != null ? !getTarget_filter().equals(trigger.getTarget_filter()) :
+ trigger.getTarget_filter() != null) {
+ return false;
+ }
+ if (getCondition() != null ? !getCondition().equals(trigger.getCondition()) : trigger.getCondition() != null) {
+ return false;
+ }
+ return getAction().equals(trigger.getAction());
+ }
- public void setEvent_type(String event_type) {
- this.event_type = event_type;
- }
+ public String getDescription() {
+ return description;
+ }
- public TimeInterval getSchedule() {
- return schedule;
- }
+ public void setDescription(String description) {
+ this.description = description;
+ }
- public void setSchedule(TimeInterval schedule) {
- this.schedule = schedule;
- }
+ public String getEvent_type() {
+ return event_type;
+ }
- public EventFilter getTarget_filter() {
- return target_filter;
- }
+ public void setEvent_type(String eventType) {
+ this.event_type = eventType;
+ }
- public void setTarget_filter(EventFilter target_filter) {
- this.target_filter = target_filter;
- }
+ public TimeInterval getSchedule() {
+ return schedule;
+ }
- public Constraint getCondition() {
- return condition;
- }
+ public void setSchedule(TimeInterval schedule) {
+ this.schedule = schedule;
+ }
- public void setCondition(Constraint condition) {
- this.condition = condition;
- }
+ public EventFilter getTarget_filter() {
+ return target_filter;
+ }
- public Constraint getConstraint() {
- return constraint;
- }
+ public void setTarget_filter(EventFilter targetFilter) {
+ this.target_filter = targetFilter;
+ }
- public void setConstraint(Constraint constraint) {
- this.constraint = constraint;
- }
+ public Condition getCondition() {
+ return condition;
+ }
- public String getPeriod() {
- return period;
- }
+ public void setCondition(Condition condition) {
+ this.condition = condition;
+ }
- public void setPeriod(String period) {
- this.period = period;
- }
+ public Object getAction() {
- public int getEvaluations() {
- return evaluations;
- }
+ return action;
+ }
- public void setEvaluations(int evaluations) {
- this.evaluations = evaluations;
- }
-
- public String getMethod() {
- return method;
- }
-
- public void setMethod(String method) {
- this.method = method;
- }
-
- public Object getAction() {
- return action;
- }
-
- public void setAction(Object action) {
- this.action = action;
- }
+ public void setAction(Object action) {
+ this.action = action;
+ }
}
diff --git a/common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/datatypes/model/TriggerTest.java b/common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/datatypes/model/TriggerTest.java
new file mode 100644
index 0000000..60886b9
--- /dev/null
+++ b/common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/datatypes/model/TriggerTest.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.sdc.tosca.datatypes.model;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+import org.junit.Assert;
+import org.junit.Test;
+import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
+
+
+public class TriggerTest {
+
+ public static final String TRIGGER_WF_NAME_ACTION = "/mock/trigger/wfNameAction.yaml";
+ public static final String TARGET_REQ = "reqA";
+ public static final String ACTION_WORKFLOW_VAL = "deployment_workflow";
+ public static final String POLICY_DEF_A = "policyA";
+ public static final String TRIGGER_A = "triggerA";
+ public static final String NODE_A = "nodeA";
+ public static final String TRIGGER_OPERATION_ACTION = "/mock/trigger/operationAction.yaml";
+ public static final String TARGET_CAP = "capA";
+ public static final String OPERATION_ACTION_KEY = "operationAction";
+ public static final String IMPLEMENTATION = "implementation";
+ ToscaExtensionYamlUtil toscaExtYamlUtil = new ToscaExtensionYamlUtil();
+
+ @Test
+ public void getPolicyTriggerActionWf() throws IOException {
+ String inputFile = TRIGGER_WF_NAME_ACTION;
+ ServiceTemplate serviceTemplate = getServiceTemplate(inputFile);
+
+ Map<String, PolicyDefinition> policies = serviceTemplate.getTopology_template().getPolicies();
+ Trigger trigger = policyCheck(policies);
+ Assert.assertEquals(TARGET_REQ, trigger.getTarget_filter().getRequirement());
+ Object action = trigger.getAction();
+ Assert.assertNotNull(action);
+ Assert.assertEquals(true, action instanceof String);
+ Assert.assertEquals(ACTION_WORKFLOW_VAL, action);
+ }
+
+ private ServiceTemplate getServiceTemplate(String inputPath) throws IOException {
+ try (InputStream yamlFile = toscaExtYamlUtil.loadYamlFileIs(inputPath)) {
+ return toscaExtYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
+ }
+ }
+
+ private Trigger policyCheck(Map<String, PolicyDefinition> policies) {
+ Assert.assertNotNull(policies);
+ PolicyDefinition policyDefinition = policies.get(POLICY_DEF_A);
+ Assert.assertNotNull(policyDefinition);
+ Map<String, Trigger> triggers = policyDefinition.getTriggers();
+ Assert.assertNotNull(triggers);
+ Trigger trigger = triggers.get(TRIGGER_A);
+ Assert.assertNotNull(trigger);
+ EventFilter targetFilter = trigger.getTarget_filter();
+ Assert.assertNotNull(targetFilter);
+ Assert.assertEquals(NODE_A, targetFilter.getNode());
+ return trigger;
+ }
+
+ @Test
+ public void getPolicyTriggerActionOperation() throws IOException {
+ String inputFile = TRIGGER_OPERATION_ACTION;
+ ServiceTemplate serviceTemplate = getServiceTemplate(inputFile);
+
+ Map<String, PolicyDefinition> policies = serviceTemplate.getTopology_template().getPolicies();
+ Trigger trigger = policyCheck(policies);
+ Assert.assertEquals(TARGET_CAP, trigger.getTarget_filter().getCapability());
+ Object action = trigger.getAction();
+ Assert.assertNotNull(action);
+ Assert.assertEquals(true, action instanceof Map);
+ Object operationAction = ((Map) action).get(OPERATION_ACTION_KEY);
+ Assert.assertNotNull(operationAction);
+ Assert.assertEquals(true, operationAction instanceof Map);
+ Assert.assertNotNull( ((Map)operationAction).get(IMPLEMENTATION));
+
+ }
+
+}
\ No newline at end of file
diff --git a/common/onap-tosca-datatype/src/test/resources/mock/trigger/operationAction.yaml b/common/onap-tosca-datatype/src/test/resources/mock/trigger/operationAction.yaml
new file mode 100644
index 0000000..64e2b7a
--- /dev/null
+++ b/common/onap-tosca-datatype/src/test/resources/mock/trigger/operationAction.yaml
@@ -0,0 +1,34 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+topology_template:
+ description: topology template descroption
+
+ policies:
+ policyA:
+ type: tosca.policies.threshold
+ description: my description
+ targets: [ nodeA ]
+ triggers:
+ triggerA:
+ description: triggering event based on CPU
+ event_type: eventTypeA
+ schedule:
+ start_time: 2016-04-08T21:59:43.10-06:00
+ end_time: 2002-12-14
+ target_filter:
+ node: nodeA
+ capability: capA
+ condition:
+ constraint:
+ attName: { greater_than: 80 }
+ period: 1200 s
+ evaluations: 6
+ method: avg
+ action:
+ operationAction:
+ description: my operation
+ implementation:
+ primary: a/s/d.xml
+ inputs:
+ inputA: 3
+ inputB: {get_property: [ nodeA, propertyA ]}
\ No newline at end of file
diff --git a/common/onap-tosca-datatype/src/test/resources/mock/trigger/wfNameAction.yaml b/common/onap-tosca-datatype/src/test/resources/mock/trigger/wfNameAction.yaml
new file mode 100644
index 0000000..2c2ceb9
--- /dev/null
+++ b/common/onap-tosca-datatype/src/test/resources/mock/trigger/wfNameAction.yaml
@@ -0,0 +1,27 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+topology_template:
+ description: topology template descroption
+
+ policies:
+ policyA:
+ type: tosca.policies.threshold
+ description: my description
+ targets: [ nodeA ]
+ triggers:
+ triggerA:
+ description: triggering event based on CPU
+ event_type: eventTypeA
+ schedule:
+ start_time: 2016-04-08T21:59:43.10-06:00
+ end_time: 2002-12-14
+ target_filter:
+ node: nodeA
+ requirement: reqA
+ condition:
+ constraint:
+ attName: { greater_than: 80 }
+ period: 1200 s
+ evaluations: 6
+ method: avg
+ action: deployment_workflow
\ No newline at end of file