From 724867ef4376e61f2374293883b475da0913c9b6 Mon Sep 17 00:00:00 2001 From: waynedunican Date: Fri, 15 Sep 2023 08:54:49 +0100 Subject: Add shared context example - Add a new example which splits the DecisionMaker policy into two policies - One which sets answers and one which makes the decision - Both policies share the AnswerAlbum context - Added documentation to support this Issue-ID: POLICY-4765 Change-Id: I12bcef9f32b5efae2574cc5e6ebb988a17ac96a9 Signed-off-by: waynedunican --- .../examples-decisionmaker-sharedcontext/pom.xml | 121 ++++++++++++++++ .../DecisionMaker/ApexConfigRESTServerNoModel.json | 60 ++++++++ .../ApexConfigRESTServerNoModel_Decision.json | 60 ++++++++ .../html/DecisionMaker/MakeDecision_Server.html | 153 +++++++++++++++++++++ .../DecisionMaker/MakeDecision_Server_Decsion.html | 153 +++++++++++++++++++++ .../src/main/resources/logic/AnswerInitTask.js | 47 +++++++ .../main/resources/logic/DitheringAnswerTask.js | 38 +++++ .../main/resources/logic/MakeDecisionStateTSL.js | 42 ++++++ .../main/resources/logic/OptimisticAnswerTask.js | 37 +++++ .../main/resources/logic/PessimisticAnswerTask.js | 37 +++++ .../src/main/resources/logic/RandomAnswerTask.js | 37 +++++ .../main/resources/logic/RoundRobinAnswerTask.js | 45 ++++++ .../resources/policy/DecisionMakerPolicyModel.apex | 69 ++++++++++ .../policy/DecisionMakerPolicyModel_Decision.apex | 111 +++++++++++++++ .../src/main/resources/tosca/ToscaTemplate.json | 17 +++ .../src/main/resources/tosca/ToscaTemplateTwo.json | 17 +++ 16 files changed, 1044 insertions(+) create mode 100644 examples/examples-decisionmaker-sharedcontext/pom.xml create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/config/DecisionMaker/ApexConfigRESTServerNoModel.json create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/config/DecisionMaker/ApexConfigRESTServerNoModel_Decision.json create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/html/DecisionMaker/MakeDecision_Server.html create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/html/DecisionMaker/MakeDecision_Server_Decsion.html create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/AnswerInitTask.js create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/DitheringAnswerTask.js create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/MakeDecisionStateTSL.js create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/OptimisticAnswerTask.js create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/PessimisticAnswerTask.js create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/RandomAnswerTask.js create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/RoundRobinAnswerTask.js create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/policy/DecisionMakerPolicyModel.apex create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/policy/DecisionMakerPolicyModel_Decision.apex create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/tosca/ToscaTemplate.json create mode 100644 examples/examples-decisionmaker-sharedcontext/src/main/resources/tosca/ToscaTemplateTwo.json diff --git a/examples/examples-decisionmaker-sharedcontext/pom.xml b/examples/examples-decisionmaker-sharedcontext/pom.xml new file mode 100644 index 000000000..acbfeff3d --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/pom.xml @@ -0,0 +1,121 @@ + + + 4.0.0 + + org.onap.policy.apex-pdp.examples + examples + 3.0.1-SNAPSHOT + + + examples-decisionmaker-sharedcontext + ${project.artifactId} + Specific code for the APEX Decision Maker Example + + + DecisionMakerPolicyModel + DecisionMakerPolicyModel_Decision + ${project.basedir}/src + + + + + org.onap.policy.apex-pdp.auth + cli-editor + ${project.version} + + + org.onap.policy.apex-pdp.services + services-engine + ${project.version} + test + + + org.onap.policy.apex-pdp.plugins.plugins-context.plugins-context-schema + plugins-context-schema-avro + ${project.version} + + + org.onap.policy.apex-pdp.plugins.plugins-executor + plugins-executor-javascript + ${project.version} + + + org.onap.policy.apex-pdp.plugins.plugins-event.plugins-event-carrier + plugins-event-carrier-restserver + ${project.version} + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + -Xss1m + + + + + org.codehaus.mojo + exec-maven-plugin + + + generate-decisionmaker-sharedcontext-policy + compile + + java + + + org.onap.policy.apex.auth.clieditor.tosca.ApexCliToscaEditorMain + compile + + --command-file=${project.basedir}/src/main/resources/policy/${policymodel.decisionmaker.name}.apex + --output-tosca-file=${project.build.directory}/classes/${policymodel.decisionmaker.name}.json + --log-file=${project.build.directory}/${policymodel.decisionmaker.name}_policygeneration.log + --apex-config-file=${project.basedir}/src/main/resources/examples/config/DecisionMaker/ApexConfigRESTServerNoModel.json + --tosca-template-file=${project.basedir}/src/main/resources/tosca/ToscaTemplate.json + + + + + generate-decisionmakertwo-sharedcontext-policy + compile + + java + + + org.onap.policy.apex.auth.clieditor.tosca.ApexCliToscaEditorMain + compile + + --command-file=${project.basedir}/src/main/resources/policy/${policymodel.decisionmakertwo.name}.apex + --output-tosca-file=${project.build.directory}/classes/${policymodel.decisionmakertwo.name}.json + --log-file=${project.build.directory}/${policymodel.decisionmakertwo.name}_policygeneration.log + --apex-config-file=${project.basedir}/src/main/resources/examples/config/DecisionMaker/ApexConfigRESTServerNoModel_Decision.json + --tosca-template-file=${project.basedir}/src/main/resources/tosca/ToscaTemplateTwo.json + + + + + + + + diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/config/DecisionMaker/ApexConfigRESTServerNoModel.json b/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/config/DecisionMaker/ApexConfigRESTServerNoModel.json new file mode 100644 index 000000000..8d72f66ee --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/config/DecisionMaker/ApexConfigRESTServerNoModel.json @@ -0,0 +1,60 @@ +{ + "engineServiceParameters": { + "name": "MyApexEngine", + "version": "0.0.1", + "id": 45, + "instanceCount": 4, + "deploymentPort": 12345, + "engineParameters": { + "executorParameters": { + "JAVASCRIPT": { + "parameterClassName": "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters" + } + } + } + }, + "eventInputParameters": { + "RESTConsumer": { + "carrierTechnologyParameters": { + "carrierTechnology": "RESTSERVER", + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restserver.RestServerCarrierTechnologyParameters", + "parameters": { + "standalone": true, + "host": "0.0.0.0", + "port": 23324 + } + }, + "eventProtocolParameters": { + "eventProtocol": "JSON" + }, + "synchronousMode": true, + "synchronousPeer": "RESTProducer", + "synchronousTimeout": 500 + } + }, + "eventOutputParameters": { + "logProducer": { + "carrierTechnologyParameters": { + "carrierTechnology": "FILE", + "parameters": { + "fileName": "/tmp/EventsOut.json" + } + }, + "eventProtocolParameters": { + "eventProtocol": "JSON" + } + }, + "RESTProducer": { + "carrierTechnologyParameters":{ + "carrierTechnology" : "RESTSERVER", + "parameterClassName" : "org.onap.policy.apex.plugins.event.carrier.restserver.RestServerCarrierTechnologyParameters" + }, + "eventProtocolParameters":{ + "eventProtocol" : "JSON" + }, + "synchronousMode" : true, + "synchronousPeer" : "RESTConsumer", + "synchronousTimeout" : 500 + } + } +} diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/config/DecisionMaker/ApexConfigRESTServerNoModel_Decision.json b/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/config/DecisionMaker/ApexConfigRESTServerNoModel_Decision.json new file mode 100644 index 000000000..5feee4788 --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/config/DecisionMaker/ApexConfigRESTServerNoModel_Decision.json @@ -0,0 +1,60 @@ +{ + "engineServiceParameters": { + "name": "MyApexEngine", + "version": "0.0.1", + "id": 45, + "instanceCount": 4, + "deploymentPort": 12345, + "engineParameters": { + "executorParameters": { + "JAVASCRIPT": { + "parameterClassName": "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters" + } + } + } + }, + "eventInputParameters": { + "RESTConsumerTwo": { + "carrierTechnologyParameters": { + "carrierTechnology": "RESTSERVER", + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restserver.RestServerCarrierTechnologyParameters", + "parameters": { + "standalone": true, + "host": "0.0.0.0", + "port": 23325 + } + }, + "eventProtocolParameters": { + "eventProtocol": "JSON" + }, + "synchronousMode": true, + "synchronousPeer": "RESTProducerTwo", + "synchronousTimeout": 500 + } + }, + "eventOutputParameters": { + "logProducerTwo": { + "carrierTechnologyParameters": { + "carrierTechnology": "FILE", + "parameters": { + "fileName": "/tmp/EventsOutTwo.json" + } + }, + "eventProtocolParameters": { + "eventProtocol": "JSON" + } + }, + "RESTProducerTwo": { + "carrierTechnologyParameters":{ + "carrierTechnology" : "RESTSERVER", + "parameterClassName" : "org.onap.policy.apex.plugins.event.carrier.restserver.RestServerCarrierTechnologyParameters" + }, + "eventProtocolParameters":{ + "eventProtocol" : "JSON" + }, + "synchronousMode" : true, + "synchronousPeer" : "RESTConsumerTwo", + "synchronousTimeout" : 500 + } + } +} diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/html/DecisionMaker/MakeDecision_Server.html b/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/html/DecisionMaker/MakeDecision_Server.html new file mode 100644 index 000000000..8809f05ad --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/html/DecisionMaker/MakeDecision_Server.html @@ -0,0 +1,153 @@ + + + + + + + + + + + +

Decision Maker Answers

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Answer:
Second Answer:
Third Answer:
Fourth Answer
Fifth Answer:
Sixth Answer:
Seventh Answer:
+
+
+

Decision Maker Mode

+
+ + + + + + + + + + +
randompessimistic + optimisticdithering
+ + +
+
+ + diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/html/DecisionMaker/MakeDecision_Server_Decsion.html b/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/html/DecisionMaker/MakeDecision_Server_Decsion.html new file mode 100644 index 000000000..cf79ed688 --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/examples/html/DecisionMaker/MakeDecision_Server_Decsion.html @@ -0,0 +1,153 @@ + + + + + + + + + + + +

Decision Maker Answers

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Answer:
Second Answer:
Third Answer:
Fourth Answer
Fifth Answer:
Sixth Answer:
Seventh Answer:
+
+
+

Decision Maker Mode

+
+ + + + + + + + + + +
randompessimistic + optimisticdithering
+ + +
+
+ + diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/AnswerInitTask.js b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/AnswerInitTask.js new file mode 100644 index 000000000..17861b8fe --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/AnswerInitTask.js @@ -0,0 +1,47 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2023 Nordix Foundation. 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); + +true; diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/DitheringAnswerTask.js b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/DitheringAnswerTask.js new file mode 100644 index 000000000..cecbd0dd1 --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/DitheringAnswerTask.js @@ -0,0 +1,38 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2023 Nordix Foundation. 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); + +true; + diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/MakeDecisionStateTSL.js b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/MakeDecisionStateTSL.js new file mode 100644 index 000000000..d1bdfd644 --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/MakeDecisionStateTSL.js @@ -0,0 +1,42 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2023 Nordix Foundation. 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); + +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); + +true; diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/OptimisticAnswerTask.js b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/OptimisticAnswerTask.js new file mode 100644 index 000000000..cd0b18bc8 --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/OptimisticAnswerTask.js @@ -0,0 +1,37 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2023 Nordix Foundation. 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); + +true; diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/PessimisticAnswerTask.js b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/PessimisticAnswerTask.js new file mode 100644 index 000000000..19889f8d7 --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/PessimisticAnswerTask.js @@ -0,0 +1,37 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2023 Nordix Foundation. 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); + +true; diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/RandomAnswerTask.js b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/RandomAnswerTask.js new file mode 100644 index 000000000..f5ed9000c --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/RandomAnswerTask.js @@ -0,0 +1,37 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2023 Nordix Foundation. 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); + +true; diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/RoundRobinAnswerTask.js b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/RoundRobinAnswerTask.js new file mode 100644 index 000000000..ead3decc2 --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/logic/RoundRobinAnswerTask.js @@ -0,0 +1,45 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2023 Nordix Foundation. 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); + +true; diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/policy/DecisionMakerPolicyModel.apex b/examples/examples-decisionmaker-sharedcontext/src/main/resources/policy/DecisionMakerPolicyModel.apex new file mode 100644 index 000000000..3313b637e --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/policy/DecisionMakerPolicyModel.apex @@ -0,0 +1,69 @@ +#------------------------------------------------------------------------------- +# ============LICENSE_START======================================================= +# Copyright (C) 2023 Nordix Foundation. 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 + +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 + +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 + +validate + diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/policy/DecisionMakerPolicyModel_Decision.apex b/examples/examples-decisionmaker-sharedcontext/src/main/resources/policy/DecisionMakerPolicyModel_Decision.apex new file mode 100644 index 000000000..465d1bd28 --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/policy/DecisionMakerPolicyModel_Decision.apex @@ -0,0 +1,111 @@ +#------------------------------------------------------------------------------- +# ============LICENSE_START======================================================= +# Copyright (C) 2023 Nordix Foundation. 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=DecisionMakerPolicyModelTwo + +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=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=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=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 + diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/tosca/ToscaTemplate.json b/examples/examples-decisionmaker-sharedcontext/src/main/resources/tosca/ToscaTemplate.json new file mode 100644 index 000000000..c9e11d49b --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/tosca/ToscaTemplate.json @@ -0,0 +1,17 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "topology_template": { + "policies": [ + { + "onap.policies.native.apex.DecisionMaker": { + "type": "onap.policies.native.Apex", + "type_version": "1.0.0", + "name": "onap.policies.native.apex.DecisionMaker", + "version": "1.0.0", + "properties": { + } + } + } + ] + } +} diff --git a/examples/examples-decisionmaker-sharedcontext/src/main/resources/tosca/ToscaTemplateTwo.json b/examples/examples-decisionmaker-sharedcontext/src/main/resources/tosca/ToscaTemplateTwo.json new file mode 100644 index 000000000..0354d4eb7 --- /dev/null +++ b/examples/examples-decisionmaker-sharedcontext/src/main/resources/tosca/ToscaTemplateTwo.json @@ -0,0 +1,17 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "topology_template": { + "policies": [ + { + "onap.policies.native.apex.DecisionMakerTwo": { + "type": "onap.policies.native.Apex", + "type_version": "1.0.0", + "name": "onap.policies.native.apex.DecisionMakerTwo", + "version": "1.0.0", + "properties": { + } + } + } + ] + } +} -- cgit 1.2.3-korg