aboutsummaryrefslogtreecommitdiffstats
path: root/examples/examples-decisionmaker
diff options
context:
space:
mode:
authorramverma <ram.krishna.verma@ericsson.com>2018-07-24 17:36:53 +0100
committerramverma <ram.krishna.verma@ericsson.com>2018-07-25 11:47:15 +0100
commitd524cedc578ae1bfa3bae895b3170f87463cbed9 (patch)
tree0740644e356534f770d59ff34f16e5d9ca601276 /examples/examples-decisionmaker
parent41ecf036b7f1b3bdd56311a0bc706407b242faca (diff)
Adding more examples to apex-pdp
- Adding more examples (DecisionMaker, Periodic & ONAPvCPE) to apex-pdp. - Fixed CORS issue in plugin-event-carrier-restserver module. Added a ContainerResponseFilter to intercept every request/response coming to REST server and add the required headers to support CORS. Change-Id: Ic3e36c683f2a78992ce1417d2c00233b34066f2f Issue-ID: POLICY-861 Signed-off-by: ramverma <ram.krishna.verma@ericsson.com>
Diffstat (limited to 'examples/examples-decisionmaker')
-rw-r--r--examples/examples-decisionmaker/pom.xml74
-rw-r--r--examples/examples-decisionmaker/src/main/resources/logic/AnswerInitTask.js47
-rw-r--r--examples/examples-decisionmaker/src/main/resources/logic/DitheringAnswerTask.js37
-rw-r--r--examples/examples-decisionmaker/src/main/resources/logic/MakeDecisionStateTSL.js42
-rw-r--r--examples/examples-decisionmaker/src/main/resources/logic/OptimisticAnswerTask.js37
-rw-r--r--examples/examples-decisionmaker/src/main/resources/logic/PessimisticAnswerTask.js37
-rw-r--r--examples/examples-decisionmaker/src/main/resources/logic/RandomAnswerTask.js37
-rw-r--r--examples/examples-decisionmaker/src/main/resources/logic/RoundRobinAnswerTask.js45
-rw-r--r--examples/examples-decisionmaker/src/main/resources/policy/DecisionMakerPolicyModel.apex150
9 files changed, 506 insertions, 0 deletions
diff --git a/examples/examples-decisionmaker/pom.xml b/examples/examples-decisionmaker/pom.xml
new file mode 100644
index 000000000..09264447c
--- /dev/null
+++ b/examples/examples-decisionmaker/pom.xml
@@ -0,0 +1,74 @@
+<!--
+ ============LICENSE_START=======================================================
+ Copyright (C) 2018 Ericsson. 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=========================================================
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.onap.policy.apex-pdp.examples</groupId>
+ <artifactId>examples</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>examples-decisionmaker</artifactId>
+ <name>${project.artifactId}</name>
+ <description>Specific code for the APEX Decision Maker Example</description>
+
+ <properties>
+ <policymodel.name>DecisionMakerPolicyModel</policymodel.name>
+ <apex-domains-decisionmaker-dir>${project.basedir}/src</apex-domains-decisionmaker-dir>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onap.policy.apex-pdp.auth</groupId>
+ <artifactId>cli-editor</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <!-- Generate the APEX Policy JSON from the APEX CLI command -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>generate-policy</id>
+ <phase>compile</phase>
+ <goals>
+ <goal>java</goal>
+ </goals>
+ <configuration>
+ <mainClass>org.onap.policy.apex.auth.clieditor.ApexCLIEditorMain</mainClass>
+ <classpathScope>compile</classpathScope>
+ <arguments>
+ <argument>--command-file=${project.basedir}/src/main/resources/policy/${policymodel.name}.apex</argument>
+ <argument>--output-model-file=${project.build.directory}/classes/${policymodel.name}.json</argument>
+ <argument>--log-file=${project.build.directory}/${policymodel.name}_policygeneration.log</argument>
+ <argument>--working-dir=${project.basedir}</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/examples/examples-decisionmaker/src/main/resources/logic/AnswerInitTask.js b/examples/examples-decisionmaker/src/main/resources/logic/AnswerInitTask.js
new file mode 100644
index 000000000..59074963a
--- /dev/null
+++ b/examples/examples-decisionmaker/src/main/resources/logic/AnswerInitTask.js
@@ -0,0 +1,47 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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=========================================================
+ */
+
+executor.logger.info(executor.subject.id);
+executor.logger.info(executor.inFields);
+
+var answerAlbum = executor.getContextAlbum("AnswerAlbum");
+
+answerAlbum.put("a0", executor.inFields.get("a0"));
+answerAlbum.put("a1", executor.inFields.get("a1"));
+answerAlbum.put("a2", executor.inFields.get("a2"));
+answerAlbum.put("a3", executor.inFields.get("a3"));
+answerAlbum.put("a4", executor.inFields.get("a4"));
+answerAlbum.put("a5", executor.inFields.get("a5"));
+answerAlbum.put("a6", executor.inFields.get("a6"));
+
+var lastAnswerAlbum = executor.getContextAlbum("LastAnswerAlbum");
+lastAnswerAlbum.put("lastAnswer", answerAlbum.size() - 1);
+
+executor.outFields.put("a0", answerAlbum.get("a0"));
+executor.outFields.put("a1", answerAlbum.get("a1"));
+executor.outFields.put("a2", answerAlbum.get("a2"));
+executor.outFields.put("a3", answerAlbum.get("a3"));
+executor.outFields.put("a4", answerAlbum.get("a4"));
+executor.outFields.put("a5", answerAlbum.get("a5"));
+executor.outFields.put("a6", answerAlbum.get("a6"));
+
+executor.logger.info(executor.outFields);
+
+var returnValue = executor.TRUE; \ No newline at end of file
diff --git a/examples/examples-decisionmaker/src/main/resources/logic/DitheringAnswerTask.js b/examples/examples-decisionmaker/src/main/resources/logic/DitheringAnswerTask.js
new file mode 100644
index 000000000..ec3455851
--- /dev/null
+++ b/examples/examples-decisionmaker/src/main/resources/logic/DitheringAnswerTask.js
@@ -0,0 +1,37 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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=========================================================
+ */
+
+executor.logger.info(executor.subject.id);
+executor.logger.info(executor.inFields);
+
+var size = executor.getContextAlbum("AnswerAlbum").size();
+
+var selection = 2 + Math.floor(Math.random() * 3);
+
+var selectionA = "a" + selection;
+
+executor.logger.info(size);
+executor.logger.info(selectionA);
+
+executor.outFields.put("decision", executor.getContextAlbum("AnswerAlbum").get(selectionA));
+
+executor.logger.info(executor.outFields);
+
+var returnValue = executor.TRUE; \ No newline at end of file
diff --git a/examples/examples-decisionmaker/src/main/resources/logic/MakeDecisionStateTSL.js b/examples/examples-decisionmaker/src/main/resources/logic/MakeDecisionStateTSL.js
new file mode 100644
index 000000000..93261e2e0
--- /dev/null
+++ b/examples/examples-decisionmaker/src/main/resources/logic/MakeDecisionStateTSL.js
@@ -0,0 +1,42 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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=========================================================
+ */
+
+executor.logger.info(executor.subject.id);
+executor.logger.info(executor.inFields);
+
+var returnValue = executor.TRUE;
+
+if (executor.inFields.get("mode").equals("random")) {
+ executor.subject.getTaskKey("RandomAnswerTask").copyTo(executor.selectedTask);
+}
+else if (executor.inFields.get("mode").equals("pessimistic")) {
+ executor.subject.getTaskKey("PessimisticAnswerTask").copyTo(executor.selectedTask);
+}
+else if (executor.inFields.get("mode").equals("optimistic")) {
+ executor.subject.getTaskKey("OptimisticAnswerTask").copyTo(executor.selectedTask);
+}
+else if (executor.inFields.get("mode").equals("dithering")) {
+ executor.subject.getTaskKey("DitheringAnswerTask").copyTo(executor.selectedTask);
+}
+//else if (executor.inFields.get("mode").equals("roundrobin")) {
+// executor.subject.getTaskKey("RoundRobinAnswerTask").copyTo(executor.selectedTask);
+//}
+
+executor.logger.info("Answer Selected Task:" + executor.selectedTask); \ No newline at end of file
diff --git a/examples/examples-decisionmaker/src/main/resources/logic/OptimisticAnswerTask.js b/examples/examples-decisionmaker/src/main/resources/logic/OptimisticAnswerTask.js
new file mode 100644
index 000000000..e197c5f07
--- /dev/null
+++ b/examples/examples-decisionmaker/src/main/resources/logic/OptimisticAnswerTask.js
@@ -0,0 +1,37 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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=========================================================
+ */
+
+executor.logger.info(executor.subject.id);
+executor.logger.info(executor.inFields);
+
+var size = executor.getContextAlbum("AnswerAlbum").size();
+
+var selection = size - Math.floor(Math.random() * size / 2) - 1;
+
+var selectionA = "a" + selection;
+
+executor.logger.info(size);
+executor.logger.info(selectionA);
+
+executor.outFields.put("decision", executor.getContextAlbum("AnswerAlbum").get(selectionA));
+
+executor.logger.info(executor.outFields);
+
+var returnValue = executor.TRUE; \ No newline at end of file
diff --git a/examples/examples-decisionmaker/src/main/resources/logic/PessimisticAnswerTask.js b/examples/examples-decisionmaker/src/main/resources/logic/PessimisticAnswerTask.js
new file mode 100644
index 000000000..34942d846
--- /dev/null
+++ b/examples/examples-decisionmaker/src/main/resources/logic/PessimisticAnswerTask.js
@@ -0,0 +1,37 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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=========================================================
+ */
+
+executor.logger.info(executor.subject.id);
+executor.logger.info(executor.inFields);
+
+var size = executor.getContextAlbum("AnswerAlbum").size();
+
+var selection = Math.floor(Math.random() * size / 2);
+
+var selectionA = "a" + selection;
+
+executor.logger.info(size);
+executor.logger.info(selectionA);
+
+executor.outFields.put("decision", executor.getContextAlbum("AnswerAlbum").get(selectionA));
+
+executor.logger.info(executor.outFields);
+
+var returnValue = executor.TRUE; \ No newline at end of file
diff --git a/examples/examples-decisionmaker/src/main/resources/logic/RandomAnswerTask.js b/examples/examples-decisionmaker/src/main/resources/logic/RandomAnswerTask.js
new file mode 100644
index 000000000..f4012ac6e
--- /dev/null
+++ b/examples/examples-decisionmaker/src/main/resources/logic/RandomAnswerTask.js
@@ -0,0 +1,37 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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=========================================================
+ */
+
+executor.logger.info(executor.subject.id);
+executor.logger.info(executor.inFields);
+
+var size = executor.getContextAlbum("AnswerAlbum").size();
+
+var selection = Math.floor(Math.random() * size);
+
+var selectionA = "a" + selection;
+
+executor.logger.info(size);
+executor.logger.info(selectionA);
+
+executor.outFields.put("decision", executor.getContextAlbum("AnswerAlbum").get(selectionA));
+
+executor.logger.info(executor.outFields);
+
+var returnValue = executor.TRUE; \ No newline at end of file
diff --git a/examples/examples-decisionmaker/src/main/resources/logic/RoundRobinAnswerTask.js b/examples/examples-decisionmaker/src/main/resources/logic/RoundRobinAnswerTask.js
new file mode 100644
index 000000000..a3d52f20f
--- /dev/null
+++ b/examples/examples-decisionmaker/src/main/resources/logic/RoundRobinAnswerTask.js
@@ -0,0 +1,45 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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=========================================================
+ */
+
+executor.logger.info(executor.subject.id);
+executor.logger.info(executor.inFields);
+
+var size = executor.getContextAlbum("AnswerAlbum").size();
+var lastAnswer = executor.getContextAlbum("LastAnswerAlbum").get("lastAnswer");
+
+executor.logger.info(size);
+executor.logger.info(lastAnswer);
+
+var answer = ++lastAnswer;
+if (answer >= size) {
+ answer = 0;
+}
+
+executor.getContextAlbum("LastAnswerAlbum").put("lastAnswer", answer)
+
+var selectionA = "a" + answer;
+
+executor.logger.info(selectionA);
+
+executor.outFields.put("decision", executor.getContextAlbum("AnswerAlbum").get(selectionA));
+
+executor.logger.info(executor.outFields);
+
+var returnValue = executor.TRUE; \ No newline at end of file
diff --git a/examples/examples-decisionmaker/src/main/resources/policy/DecisionMakerPolicyModel.apex b/examples/examples-decisionmaker/src/main/resources/policy/DecisionMakerPolicyModel.apex
new file mode 100644
index 000000000..295afa159
--- /dev/null
+++ b/examples/examples-decisionmaker/src/main/resources/policy/DecisionMakerPolicyModel.apex
@@ -0,0 +1,150 @@
+#-------------------------------------------------------------------------------
+# ============LICENSE_START=======================================================
+# Copyright (C) 2016-2018 Ericsson. 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=========================================================
+#-------------------------------------------------------------------------------
+
+model create name=DecisionMakerPolicyModel
+
+schema create name=SimpleStringType flavour=Java schema=java.lang.String
+schema create name=SimpleIntegerType flavour=Java schema=java.lang.Integer
+
+album create name=AnswerAlbum scope=policy writable=true schemaName=SimpleStringType
+album create name=LastAnswerAlbum scope=policy writable=true schemaName=SimpleIntegerType
+
+event create name=AnswerEvent nameSpace=org.onap.policy.apex.domains.decisionmaker source=DCAE target=apex
+event parameter create name=AnswerEvent parName=a0 schemaName=SimpleStringType
+event parameter create name=AnswerEvent parName=a1 schemaName=SimpleStringType
+event parameter create name=AnswerEvent parName=a2 schemaName=SimpleStringType
+event parameter create name=AnswerEvent parName=a3 schemaName=SimpleStringType
+event parameter create name=AnswerEvent parName=a4 schemaName=SimpleStringType
+event parameter create name=AnswerEvent parName=a5 schemaName=SimpleStringType
+event parameter create name=AnswerEvent parName=a6 schemaName=SimpleStringType
+
+event create name=MakeDecisionEvent nameSpace=org.onap.policy.apex.domains.decisionmaker source=DCAE target=apex
+event parameter create name=MakeDecisionEvent parName=mode schemaName=SimpleStringType
+
+event create name=DecisionEvent nameSpace=org.onap.policy.apex.domains.decisionmaker source=DCAE target=apex
+event parameter create name=DecisionEvent parName=decision schemaName=SimpleStringType
+
+task create name=AnswerInitTask
+task inputfield create name=AnswerInitTask fieldName=a0 schemaName=SimpleStringType
+task inputfield create name=AnswerInitTask fieldName=a1 schemaName=SimpleStringType
+task inputfield create name=AnswerInitTask fieldName=a2 schemaName=SimpleStringType
+task inputfield create name=AnswerInitTask fieldName=a3 schemaName=SimpleStringType
+task inputfield create name=AnswerInitTask fieldName=a4 schemaName=SimpleStringType
+task inputfield create name=AnswerInitTask fieldName=a5 schemaName=SimpleStringType
+task inputfield create name=AnswerInitTask fieldName=a6 schemaName=SimpleStringType
+
+task outputfield create name=AnswerInitTask fieldName=a0 schemaName=SimpleStringType
+task outputfield create name=AnswerInitTask fieldName=a1 schemaName=SimpleStringType
+task outputfield create name=AnswerInitTask fieldName=a2 schemaName=SimpleStringType
+task outputfield create name=AnswerInitTask fieldName=a3 schemaName=SimpleStringType
+task outputfield create name=AnswerInitTask fieldName=a4 schemaName=SimpleStringType
+task outputfield create name=AnswerInitTask fieldName=a5 schemaName=SimpleStringType
+task outputfield create name=AnswerInitTask fieldName=a6 schemaName=SimpleStringType
+
+task contextref create name=AnswerInitTask albumName=AnswerAlbum
+task contextref create name=AnswerInitTask albumName=LastAnswerAlbum
+
+task logic create name=AnswerInitTask logicFlavour=JAVASCRIPT logic=LS
+#MACROFILE:"src/main/resources/logic/AnswerInitTask.js"
+LE
+
+task create name=RandomAnswerTask
+
+task inputfield create name=RandomAnswerTask fieldName=mode schemaName=SimpleStringType
+
+task outputfield create name=RandomAnswerTask fieldName=decision schemaName=SimpleStringType
+
+task contextref create name=RandomAnswerTask albumName=AnswerAlbum
+
+task logic create name=RandomAnswerTask logicFlavour=JAVASCRIPT logic=LS
+#MACROFILE:"src/main/resources/logic/RandomAnswerTask.js"
+LE
+
+task create name=PessimisticAnswerTask
+
+task inputfield create name=PessimisticAnswerTask fieldName=mode schemaName=SimpleStringType
+
+task outputfield create name=PessimisticAnswerTask fieldName=decision schemaName=SimpleStringType
+
+task contextref create name=PessimisticAnswerTask albumName=AnswerAlbum
+
+task logic create name=PessimisticAnswerTask logicFlavour=JAVASCRIPT logic=LS
+#MACROFILE:"src/main/resources/logic/PessimisticAnswerTask.js"
+LE
+
+task create name=OptimisticAnswerTask
+
+task inputfield create name=OptimisticAnswerTask fieldName=mode schemaName=SimpleStringType
+
+task outputfield create name=OptimisticAnswerTask fieldName=decision schemaName=SimpleStringType
+
+task contextref create name=OptimisticAnswerTask albumName=AnswerAlbum
+
+task logic create name=OptimisticAnswerTask logicFlavour=JAVASCRIPT logic=LS
+#MACROFILE:"src/main/resources/logic/OptimisticAnswerTask.js"
+LE
+
+task create name=DitheringAnswerTask
+
+task inputfield create name=DitheringAnswerTask fieldName=mode schemaName=SimpleStringType
+
+task outputfield create name=DitheringAnswerTask fieldName=decision schemaName=SimpleStringType
+
+task contextref create name=DitheringAnswerTask albumName=AnswerAlbum
+
+task logic create name=DitheringAnswerTask logicFlavour=JAVASCRIPT logic=LS
+#MACROFILE:"src/main/resources/logic/DitheringAnswerTask.js"
+LE
+
+#task create name=RoundRobinAnswerTask
+#
+#task inputfield create name=RoundRobinAnswerTask fieldName=mode schemaName=SimpleStringType
+#
+#task outputfield create name=RoundRobinAnswerTask fieldName=decision schemaName=SimpleStringType
+#
+#task contextref create name=RoundRobinAnswerTask albumName=AnswerAlbum
+#task contextref create name=RoundRobinAnswerTask albumName=LastAnswerAlbum
+#
+#task logic create name=RoundRobinAnswerTask logicFlavour=JAVASCRIPT logic=LS
+##MACROFILE:"src/main/resources/logic/RoundRobinAnswerTask.js"
+#LE
+
+policy create name=AnswerInitPolicy template=freestyle firstState=AnswerInitState
+
+policy state create name=AnswerInitPolicy stateName=AnswerInitState triggerName=AnswerEvent defaultTaskName=AnswerInitTask
+policy state output create name=AnswerInitPolicy stateName=AnswerInitState outputName=AnswerInitOutput eventName=AnswerEvent
+policy state taskref create name=AnswerInitPolicy stateName=AnswerInitState taskName=AnswerInitTask outputType=DIRECT outputName=AnswerInitOutput
+
+policy create name=DecisionMakerPolicy template=freestyle firstState=MakeDecisionState
+
+policy state create name=DecisionMakerPolicy stateName=MakeDecisionState triggerName=MakeDecisionEvent defaultTaskName=RandomAnswerTask
+policy state output create name=DecisionMakerPolicy stateName=MakeDecisionState outputName=DecisionFinalOutput eventName=DecisionEvent
+policy state taskref create name=DecisionMakerPolicy stateName=MakeDecisionState taskName=RandomAnswerTask outputType=DIRECT outputName=DecisionFinalOutput
+policy state taskref create name=DecisionMakerPolicy stateName=MakeDecisionState taskName=PessimisticAnswerTask outputType=DIRECT outputName=DecisionFinalOutput
+policy state taskref create name=DecisionMakerPolicy stateName=MakeDecisionState taskName=OptimisticAnswerTask outputType=DIRECT outputName=DecisionFinalOutput
+policy state taskref create name=DecisionMakerPolicy stateName=MakeDecisionState taskName=DitheringAnswerTask outputType=DIRECT outputName=DecisionFinalOutput
+#policy state taskref create name=DecisionMakerPolicy stateName=MakeDecisionState taskName=RoundRobinAnswerTask outputType=DIRECT outputName=DecisionFinalOutput
+
+policy state selecttasklogic create name=DecisionMakerPolicy stateName=MakeDecisionState logicFlavour=JAVASCRIPT logic=LS
+#MACROFILE:"src/main/resources/logic/MakeDecisionStateTSL.js"
+LE
+
+validate
+