2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.apex.test.common.model;
23 import java.util.ArrayList;
24 import java.util.Arrays;
25 import java.util.List;
28 import java.util.TreeMap;
29 import java.util.TreeSet;
31 import org.onap.policy.apex.model.basicmodel.concepts.ApexRuntimeException;
32 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
33 import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation;
34 import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
35 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
36 import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums;
37 import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
38 import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
39 import org.onap.policy.apex.model.eventmodel.concepts.AxEvent;
40 import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;
41 import org.onap.policy.apex.model.eventmodel.concepts.AxField;
42 import org.onap.policy.apex.model.policymodel.concepts.AxLogicReader;
43 import org.onap.policy.apex.model.policymodel.concepts.AxPolicies;
44 import org.onap.policy.apex.model.policymodel.concepts.AxPolicy;
45 import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
46 import org.onap.policy.apex.model.policymodel.concepts.AxState;
47 import org.onap.policy.apex.model.policymodel.concepts.AxStateOutput;
48 import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskOutputType;
49 import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskReference;
50 import org.onap.policy.apex.model.policymodel.concepts.AxTask;
51 import org.onap.policy.apex.model.policymodel.concepts.AxTaskLogic;
52 import org.onap.policy.apex.model.policymodel.concepts.AxTaskSelectionLogic;
53 import org.onap.policy.apex.model.policymodel.concepts.AxTasks;
54 import org.onap.policy.apex.model.policymodel.handling.PolicyLogicReader;
57 * This class creates sample evaluation Policy Models.
59 * @author John Keeney (john.keeney@ericsson.com)
61 public class EvalDomainModelFactory {
62 private static final int THIRD_MEMBER = 3;
64 private static final String PACKAGE = EvalDomainModelFactory.class.getPackage().getName();
66 private String justOneLang = null;
68 private final AxContextSchema typeTimestamp;
69 private final AxContextSchema typeDouble;
70 private final AxContextSchema typeCounter;
71 private final AxContextSchemas schemas;
72 private final AxEvent event0000;
73 private final AxEvent event0001;
74 private final AxEvent event0002;
75 private final AxEvent event0003;
76 private final AxEvent event0004;
77 private final AxEvents events;
80 * The Constructor for the factory.
82 public EvalDomainModelFactory() {
87 * The Constructor for the factory that creates models for a single executor language flavour.
89 * @param justOneLang the just one lang
91 public EvalDomainModelFactory(final String justOneLang) {
92 this.justOneLang = justOneLang;
94 typeTimestamp = new AxContextSchema(new AxArtifactKey("TestTimestamp", "0.0.1"), "Java", "java.lang.Long");
95 typeDouble = new AxContextSchema(new AxArtifactKey("TestTemperature", "0.0.1"), "Java", "java.lang.Double");
96 typeCounter = new AxContextSchema(new AxArtifactKey("TestTimestamp", "0.0.1"), "Java", "java.lang.Long");
98 schemas = new AxContextSchemas(new AxArtifactKey("TestDatatypes", "0.0.1"));
99 schemas.getSchemasMap().put(typeTimestamp.getKey(), typeTimestamp);
100 schemas.getSchemasMap().put(typeDouble.getKey(), typeDouble);
101 schemas.getSchemasMap().put(typeCounter.getKey(), typeCounter);
103 event0000 = new AxEvent(new AxArtifactKey("Event0000", "0.0.1"), PACKAGE + ".events");
104 event0000.getParameterMap().put("SentTimestamp", new AxField(new AxReferenceKey(event0000.getKey(), "SentTimestamp"), typeTimestamp.getKey()));
105 event0000.getParameterMap().put("TestTemperature", new AxField(new AxReferenceKey(event0000.getKey(), "TestTemperature"), typeDouble.getKey()));
106 event0000.getParameterMap().put("FirstEventTimestamp",
107 new AxField(new AxReferenceKey(event0000.getKey(), "FirstEventTimestamp"), typeTimestamp.getKey()));
108 event0000.getParameterMap().put("EventNumber", new AxField(new AxReferenceKey(event0000.getKey(), "EventNumber"), typeCounter.getKey()));
110 event0001 = new AxEvent(new AxArtifactKey("Event0001", "0.0.1"), PACKAGE + ".events");
111 event0001.getParameterMap().put("SentTimestamp", new AxField(new AxReferenceKey(event0001.getKey(), "SentTimestamp"), typeTimestamp.getKey()));
112 event0001.getParameterMap().put("State1Timestamp", new AxField(new AxReferenceKey(event0001.getKey(), "State1Timestamp"), typeTimestamp.getKey()));
113 event0001.getParameterMap().put("TestTemperature", new AxField(new AxReferenceKey(event0001.getKey(), "TestTemperature"), typeDouble.getKey()));
114 event0001.getParameterMap().put("FirstEventTimestamp",
115 new AxField(new AxReferenceKey(event0001.getKey(), "FirstEventTimestamp"), typeTimestamp.getKey()));
116 event0001.getParameterMap().put("EventNumber", new AxField(new AxReferenceKey(event0001.getKey(), "EventNumber"), typeCounter.getKey()));
118 event0002 = new AxEvent(new AxArtifactKey("Event0002", "0.0.1"), PACKAGE + ".events");
119 event0002.getParameterMap().put("SentTimestamp", new AxField(new AxReferenceKey(event0002.getKey(), "SentTimestamp"), typeTimestamp.getKey()));
120 event0002.getParameterMap().put("State1Timestamp", new AxField(new AxReferenceKey(event0002.getKey(), "State1Timestamp"), typeTimestamp.getKey()));
121 event0002.getParameterMap().put("State2Timestamp", new AxField(new AxReferenceKey(event0002.getKey(), "State2Timestamp"), typeTimestamp.getKey()));
122 event0002.getParameterMap().put("TestTemperature", new AxField(new AxReferenceKey(event0002.getKey(), "TestTemperature"), typeDouble.getKey()));
123 event0002.getParameterMap().put("FirstEventTimestamp",
124 new AxField(new AxReferenceKey(event0002.getKey(), "FirstEventTimestamp"), typeTimestamp.getKey()));
125 event0002.getParameterMap().put("EventNumber", new AxField(new AxReferenceKey(event0002.getKey(), "EventNumber"), typeCounter.getKey()));
127 event0003 = new AxEvent(new AxArtifactKey("Event0003", "0.0.1"), PACKAGE + ".events");
128 event0003.getParameterMap().put("SentTimestamp", new AxField(new AxReferenceKey(event0003.getKey(), "SentTimestamp"), typeTimestamp.getKey()));
129 event0003.getParameterMap().put("State1Timestamp", new AxField(new AxReferenceKey(event0003.getKey(), "State1Timestamp"), typeTimestamp.getKey()));
130 event0003.getParameterMap().put("State2Timestamp", new AxField(new AxReferenceKey(event0003.getKey(), "State2Timestamp"), typeTimestamp.getKey()));
131 event0003.getParameterMap().put("State3Timestamp", new AxField(new AxReferenceKey(event0003.getKey(), "State3Timestamp"), typeTimestamp.getKey()));
132 event0003.getParameterMap().put("TestTemperature", new AxField(new AxReferenceKey(event0003.getKey(), "TestTemperature"), typeDouble.getKey()));
133 event0003.getParameterMap().put("FirstEventTimestamp",
134 new AxField(new AxReferenceKey(event0003.getKey(), "FirstEventTimestamp"), typeTimestamp.getKey()));
135 event0003.getParameterMap().put("EventNumber", new AxField(new AxReferenceKey(event0003.getKey(), "EventNumber"), typeCounter.getKey()));
137 event0004 = new AxEvent(new AxArtifactKey("Event0004", "0.0.1"), PACKAGE + ".events");
138 event0004.getParameterMap().put("SentTimestamp", new AxField(new AxReferenceKey(event0004.getKey(), "SentTimestamp"), typeTimestamp.getKey()));
139 event0004.getParameterMap().put("State1Timestamp", new AxField(new AxReferenceKey(event0004.getKey(), "State1Timestamp"), typeTimestamp.getKey()));
140 event0004.getParameterMap().put("State2Timestamp", new AxField(new AxReferenceKey(event0004.getKey(), "State2Timestamp"), typeTimestamp.getKey()));
141 event0004.getParameterMap().put("State3Timestamp", new AxField(new AxReferenceKey(event0004.getKey(), "State3Timestamp"), typeTimestamp.getKey()));
142 event0004.getParameterMap().put("State4Timestamp", new AxField(new AxReferenceKey(event0004.getKey(), "State4Timestamp"), typeTimestamp.getKey()));
143 event0004.getParameterMap().put("TestTemperature", new AxField(new AxReferenceKey(event0004.getKey(), "TestTemperature"), typeDouble.getKey()));
144 event0004.getParameterMap().put("FirstEventTimestamp",
145 new AxField(new AxReferenceKey(event0004.getKey(), "FirstEventTimestamp"), typeTimestamp.getKey()));
146 event0004.getParameterMap().put("EventNumber", new AxField(new AxReferenceKey(event0004.getKey(), "EventNumber"), typeCounter.getKey()));
148 events = new AxEvents(new AxArtifactKey("Events", "0.0.1"));
149 events.getEventMap().put(event0000.getKey(), event0000);
150 events.getEventMap().put(event0001.getKey(), event0001);
151 events.getEventMap().put(event0002.getKey(), event0002);
152 events.getEventMap().put(event0003.getKey(), event0003);
153 events.getEventMap().put(event0004.getKey(), event0004);
157 * Get a sample OODA policy model.
159 * @return the sample policy model
161 public AxPolicyModel getOODAPolicyModel() {
162 final AxTasks tasks = new AxTasks(new AxArtifactKey("Tasks", "0.0.1"));
164 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE).setDefaultLogic("EvalTask_Logic");
166 final AxTask obTask = new AxTask(new AxArtifactKey("Task_Observe_0", "0.0.1"));
167 obTask.duplicateInputFields(event0000.getParameterMap());
168 obTask.duplicateOutputFields(event0001.getParameterMap());
169 final AxTaskLogic obAxLogic = new AxTaskLogic(obTask.getKey(), "TaskLogic", (justOneLang == null ? "JRUBY" : justOneLang), logicReader);
170 obAxLogic.setLogic(obAxLogic.getLogic().replaceAll("<STATE_NAME>", "Observe").replaceAll("<TASK_NAME>", obTask.getKey().getName())
171 .replaceAll("<STATE_NUMBER>", "1"));
172 obTask.setTaskLogic(obAxLogic);
174 final AxTask orTask = new AxTask(new AxArtifactKey("Task_Orient_0", "0.0.1"));
175 orTask.duplicateInputFields(event0001.getParameterMap());
176 orTask.duplicateOutputFields(event0002.getParameterMap());
177 final AxTaskLogic orAxLogic = new AxTaskLogic(orTask.getKey(), "TaskLogic", (justOneLang == null ? "JAVASCRIPT" : justOneLang), logicReader);
178 orAxLogic.setLogic(orAxLogic.getLogic().replaceAll("<STATE_NAME>", "Orient").replaceAll("<TASK_NAME>", orTask.getKey().getName())
179 .replaceAll("<STATE_NUMBER>", "2"));
180 orTask.setTaskLogic(orAxLogic);
182 final AxTask dTask = new AxTask(new AxArtifactKey("Task_Decide_0", "0.0.1"));
183 dTask.duplicateInputFields(event0002.getParameterMap());
184 dTask.duplicateOutputFields(event0003.getParameterMap());
185 final AxTaskLogic dAxLogic = new AxTaskLogic(dTask.getKey(), "TaskLogic", (justOneLang == null ? "MVEL" : justOneLang), logicReader);
187 dAxLogic.getLogic().replaceAll("<STATE_NAME>", "Orient").replaceAll("<TASK_NAME>", dTask.getKey().getName()).replaceAll("<STATE_NUMBER>", "3"));
188 dTask.setTaskLogic(dAxLogic);
190 final AxTask aTask = new AxTask(new AxArtifactKey("Task_Act_0", "0.0.1"));
191 aTask.duplicateInputFields(event0003.getParameterMap());
192 aTask.duplicateOutputFields(event0004.getParameterMap());
193 final AxTaskLogic aAxLogic = new AxTaskLogic(aTask.getKey(), "TaskLogic", (justOneLang == null ? "JAVA" : justOneLang), logicReader);
195 aAxLogic.getLogic().replaceAll("<STATE_NAME>", "Act").replaceAll("<TASK_NAME>", aTask.getKey().getName()).replaceAll("<STATE_NUMBER>", "4"));
196 aTask.setTaskLogic(aAxLogic);
198 tasks.getTaskMap().put(obTask.getKey(), obTask);
199 tasks.getTaskMap().put(orTask.getKey(), orTask);
200 tasks.getTaskMap().put(dTask.getKey(), dTask);
201 tasks.getTaskMap().put(aTask.getKey(), aTask);
203 final Set<AxArtifactKey> obTasks = new TreeSet<>();
204 final Set<AxArtifactKey> orTasks = new TreeSet<>();
205 final Set<AxArtifactKey> decTasks = new TreeSet<>();
206 final Set<AxArtifactKey> actTasks = new TreeSet<>();
208 for (final AxTask task : tasks.getTaskMap().values()) {
209 if (task.getKey().getName().contains("Observe")) {
210 obTasks.add(task.getKey());
212 if (task.getKey().getName().contains("Orient")) {
213 orTasks.add(task.getKey());
215 if (task.getKey().getName().contains("Decide")) {
216 decTasks.add(task.getKey());
218 if (task.getKey().getName().contains("Act")) {
219 actTasks.add(task.getKey());
222 final List<Set<AxArtifactKey>> taskReferenceList = new ArrayList<>();
223 taskReferenceList.add(obTasks);
224 taskReferenceList.add(orTasks);
225 taskReferenceList.add(decTasks);
226 taskReferenceList.add(actTasks);
228 final List<AxArtifactKey> p0InEventList = new ArrayList<>();
229 p0InEventList.add(event0000.getKey());
230 p0InEventList.add(event0001.getKey());
231 p0InEventList.add(event0002.getKey());
232 p0InEventList.add(event0003.getKey());
234 final List<AxArtifactKey> p0OutEventList = new ArrayList<>();
235 p0OutEventList.add(event0001.getKey());
236 p0OutEventList.add(event0002.getKey());
237 p0OutEventList.add(event0003.getKey());
238 p0OutEventList.add(event0004.getKey());
240 final List<AxArtifactKey> p0defaultTaskList = new ArrayList<>();
241 p0defaultTaskList.add(tasks.get("Task_Observe_0").getKey());
242 p0defaultTaskList.add(tasks.get("Task_Orient_0").getKey());
243 p0defaultTaskList.add(tasks.get("Task_Decide_0").getKey());
244 p0defaultTaskList.add(tasks.get("Task_Act_0").getKey());
246 final AxPolicy policy0 = new AxPolicy(new AxArtifactKey("OODAPolicy_0", "0.0.1"));
247 final List<String> axLogicExecutorTypeList = Arrays.asList((justOneLang == null ? "JAVASCRIPT" : justOneLang),
248 (justOneLang == null ? "MVEL" : justOneLang), (justOneLang == null ? "JYTHON" : justOneLang), (justOneLang == null ? "JRUBY" : justOneLang));
249 policy0.setStateMap(getOODAStateMap(policy0.getKey(), p0InEventList, p0OutEventList, axLogicExecutorTypeList, p0defaultTaskList, taskReferenceList));
250 policy0.setFirstState(policy0.getStateMap().get("Observe").getKey().getLocalName());
252 final AxPolicies policies = new AxPolicies(new AxArtifactKey("OODAPolicies", "0.0.1"));
253 policies.getPolicyMap().put(policy0.getKey(), policy0);
255 final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey("KeyInformation", "0.0.1"));
256 final AxPolicyModel policyModel = new AxPolicyModel(new AxArtifactKey("EvaluationPolicyModel_OODA", "0.0.1"));
257 policyModel.setPolicies(policies);
258 policyModel.setEvents(events);
259 policyModel.setTasks(tasks);
260 policyModel.setAlbums(new AxContextAlbums(new AxArtifactKey("Albums", "0.0.1")));
261 policyModel.setSchemas(schemas);
262 policyModel.setKeyInformation(keyInformation);
263 policyModel.getKeyInformation().generateKeyInfo(policyModel);
265 final AxValidationResult result = policyModel.validate(new AxValidationResult());
266 if (!result.isOk()) {
267 throw new ApexRuntimeException("model " + policyModel.getId() + " is not valid" + result);
273 * Gets the OODA state map.
275 * @param policyKey the policy key
276 * @param inEventKeyList the in event key list
277 * @param outEventKeyList the out event key list
278 * @param axLogicExecutorTypeList the ax logic executor type list
279 * @param defaultTaskList the default task list
280 * @param taskKeySetList the task key set list
281 * @return the OODA state map
283 private Map<String, AxState> getOODAStateMap(final AxArtifactKey policyKey, final List<AxArtifactKey> inEventKeyList,
284 final List<AxArtifactKey> outEventKeyList, final List<String> axLogicExecutorTypeList, final List<AxArtifactKey> defaultTaskList,
285 final List<Set<AxArtifactKey>> taskKeySetList) {
286 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE).setDefaultLogic("EvalState_Logic");
288 final AxState actState = new AxState(new AxReferenceKey(policyKey, "Act"));
289 actState.setTrigger(inEventKeyList.get(THIRD_MEMBER));
290 final AxStateOutput act2Out = new AxStateOutput(new AxReferenceKey(actState.getKey(), "Act2Out"), outEventKeyList.get(THIRD_MEMBER),
291 AxReferenceKey.getNullKey());
292 actState.getStateOutputs().put(act2Out.getKey().getLocalName(), act2Out);
293 actState.setTaskSelectionLogic(
294 new AxTaskSelectionLogic(actState.getKey(), "TaskSelectionLogic", axLogicExecutorTypeList.get(THIRD_MEMBER), logicReader));
295 actState.setDefaultTask(defaultTaskList.get(THIRD_MEMBER));
296 for (final AxArtifactKey taskKey : taskKeySetList.get(THIRD_MEMBER)) {
297 actState.getTaskReferences().put(taskKey,
298 new AxStateTaskReference(new AxReferenceKey(actState.getKey(), taskKey.getName()), AxStateTaskOutputType.DIRECT, act2Out.getKey()));
301 final AxState decState = new AxState(new AxReferenceKey(policyKey, "Decide"));
302 decState.setTrigger(inEventKeyList.get(2));
303 final AxStateOutput dec2Act = new AxStateOutput(new AxReferenceKey(decState.getKey(), "Dec2Act"), outEventKeyList.get(2), actState.getKey());
304 decState.getStateOutputs().put(dec2Act.getKey().getLocalName(), dec2Act);
305 decState.setTaskSelectionLogic(new AxTaskSelectionLogic(decState.getKey(), "TaskSelectionLogic", axLogicExecutorTypeList.get(2), logicReader));
306 decState.setDefaultTask(defaultTaskList.get(2));
307 for (final AxArtifactKey taskKey : taskKeySetList.get(2)) {
308 decState.getTaskReferences().put(taskKey,
309 new AxStateTaskReference(new AxReferenceKey(decState.getKey(), taskKey.getName()), AxStateTaskOutputType.DIRECT, dec2Act.getKey()));
312 final AxState orState = new AxState(new AxReferenceKey(policyKey, "Orient"));
313 orState.setTrigger(inEventKeyList.get(1));
314 final AxStateOutput or2Dec = new AxStateOutput(new AxReferenceKey(orState.getKey(), "Or2Dec"), outEventKeyList.get(1), decState.getKey());
315 orState.getStateOutputs().put(or2Dec.getKey().getLocalName(), or2Dec);
316 orState.setTaskSelectionLogic(new AxTaskSelectionLogic(orState.getKey(), "TaskSelectionLogic", axLogicExecutorTypeList.get(1), logicReader));
317 orState.setDefaultTask(defaultTaskList.get(1));
318 for (final AxArtifactKey taskKey : taskKeySetList.get(1)) {
319 orState.getTaskReferences().put(taskKey,
320 new AxStateTaskReference(new AxReferenceKey(orState.getKey(), taskKey.getName()), AxStateTaskOutputType.DIRECT, or2Dec.getKey()));
323 final AxState obState = new AxState(new AxReferenceKey(policyKey, "Observe"));
324 obState.setTrigger(inEventKeyList.get(0));
325 final AxStateOutput ob2Or = new AxStateOutput(new AxReferenceKey(obState.getKey(), "Ob2Or"), outEventKeyList.get(0), orState.getKey());
326 obState.getStateOutputs().put(ob2Or.getKey().getLocalName(), ob2Or);
327 obState.setTaskSelectionLogic(new AxTaskSelectionLogic(obState.getKey(), "TaskSelectionLogic", axLogicExecutorTypeList.get(0), logicReader));
328 obState.setDefaultTask(defaultTaskList.get(0));
329 for (final AxArtifactKey taskKey : taskKeySetList.get(0)) {
330 obState.getTaskReferences().put(taskKey,
331 new AxStateTaskReference(new AxReferenceKey(obState.getKey(), taskKey.getName()), AxStateTaskOutputType.DIRECT, ob2Or.getKey()));
334 final Map<String, AxState> stateMap = new TreeMap<>();
335 stateMap.put(obState.getKey().getLocalName(), obState);
336 stateMap.put(orState.getKey().getLocalName(), orState);
337 stateMap.put(decState.getKey().getLocalName(), decState);
338 stateMap.put(actState.getKey().getLocalName(), actState);
344 * Get a sample ECA policy model.
346 * @return the sample policy model
348 public AxPolicyModel getECAPolicyModel() {
350 final AxTasks tasks = new AxTasks(new AxArtifactKey("Tasks", "0.0.1"));
352 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE).setDefaultLogic("EvalTask_Logic");
354 final AxTask eTask = new AxTask(new AxArtifactKey("Task_Event_0", "0.0.1"));
355 eTask.duplicateInputFields(event0000.getParameterMap());
356 eTask.duplicateOutputFields(event0001.getParameterMap());
357 final AxTaskLogic eAxLogic = new AxTaskLogic(eTask.getKey(), "TaskLogic", (justOneLang == null ? "JYTHON" : justOneLang), logicReader);
359 eAxLogic.getLogic().replaceAll("<STATE_NAME>", "Event").replaceAll("<TASK_NAME>", eTask.getKey().getName()).replaceAll("<STATE_NUMBER>", "1"));
360 eTask.setTaskLogic(eAxLogic);
362 final AxTask cTask = new AxTask(new AxArtifactKey("Task_Condition_0", "0.0.1"));
363 cTask.duplicateInputFields(event0001.getParameterMap());
364 cTask.duplicateOutputFields(event0002.getParameterMap());
365 final AxTaskLogic cAxLogic = new AxTaskLogic(cTask.getKey(), "TaskLogic", (justOneLang == null ? "JAVASCRIPT" : justOneLang), logicReader);
366 cAxLogic.setLogic(cAxLogic.getLogic().replaceAll("<STATE_NAME>", "Condition").replaceAll("<TASK_NAME>", cTask.getKey().getName())
367 .replaceAll("<STATE_NUMBER>", "2"));
368 cTask.setTaskLogic(cAxLogic);
370 final AxTask aTask = new AxTask(new AxArtifactKey("Task_Action_0", "0.0.1"));
371 aTask.duplicateInputFields(event0002.getParameterMap());
372 aTask.duplicateOutputFields(event0003.getParameterMap());
373 final AxTaskLogic aAxLogic = new AxTaskLogic(aTask.getKey(), "TaskLogic", (justOneLang == null ? "JAVA" : justOneLang), logicReader);
375 aAxLogic.getLogic().replaceAll("<STATE_NAME>", "Action").replaceAll("<TASK_NAME>", aTask.getKey().getName()).replaceAll("<STATE_NUMBER>", "3"));
376 aTask.setTaskLogic(aAxLogic);
378 tasks.getTaskMap().put(eTask.getKey(), eTask);
379 tasks.getTaskMap().put(cTask.getKey(), cTask);
380 tasks.getTaskMap().put(aTask.getKey(), aTask);
382 final Set<AxArtifactKey> eventTasks = new TreeSet<>();
383 final Set<AxArtifactKey> conditionTasks = new TreeSet<>();
384 final Set<AxArtifactKey> actionTasks = new TreeSet<>();
386 for (final AxTask task : tasks.getTaskMap().values()) {
387 if (task.getKey().getName().contains("Event")) {
388 eventTasks.add(task.getKey());
390 if (task.getKey().getName().contains("Condition")) {
391 conditionTasks.add(task.getKey());
393 if (task.getKey().getName().contains("Action")) {
394 actionTasks.add(task.getKey());
397 final List<Set<AxArtifactKey>> taskReferenceList = new ArrayList<>();
398 taskReferenceList.add(eventTasks);
399 taskReferenceList.add(conditionTasks);
400 taskReferenceList.add(actionTasks);
402 final List<AxArtifactKey> p0InEventList = new ArrayList<>();
403 p0InEventList.add(event0000.getKey());
404 p0InEventList.add(event0001.getKey());
405 p0InEventList.add(event0002.getKey());
407 final List<AxArtifactKey> p0OutEventList = new ArrayList<>();
408 p0OutEventList.add(event0001.getKey());
409 p0OutEventList.add(event0002.getKey());
410 p0OutEventList.add(event0003.getKey());
412 final List<AxArtifactKey> p0defaultTaskList = new ArrayList<>();
413 p0defaultTaskList.add(tasks.get("Task_Event_0").getKey());
414 p0defaultTaskList.add(tasks.get("Task_Condition_0").getKey());
415 p0defaultTaskList.add(tasks.get("Task_Action_0").getKey());
417 final AxPolicy policy0 = new AxPolicy(new AxArtifactKey("ECAPolicy_0", "0.0.1"));
418 final List<String> axLogicExecutorTypeList = Arrays.asList((justOneLang == null ? "JAVASCRIPT" : justOneLang),
419 (justOneLang == null ? "MVEL" : justOneLang), (justOneLang == null ? "JYTHON" : justOneLang));
420 policy0.setStateMap(getECAStateMap(policy0.getKey(), p0InEventList, p0OutEventList, axLogicExecutorTypeList, p0defaultTaskList, taskReferenceList));
421 policy0.setFirstState(policy0.getStateMap().get("Event").getKey().getLocalName());
423 final AxPolicies policies = new AxPolicies(new AxArtifactKey("ECAPolicies", "0.0.1"));
424 policies.getPolicyMap().put(policy0.getKey(), policy0);
426 final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey("KeyInformation", "0.0.1"));
427 final AxPolicyModel policyModel = new AxPolicyModel(new AxArtifactKey("EvaluationPolicyModel_ECA", "0.0.1"));
428 policyModel.setPolicies(policies);
429 policyModel.setEvents(events);
430 policyModel.setTasks(tasks);
431 policyModel.setAlbums(new AxContextAlbums(new AxArtifactKey("Albums", "0.0.1")));
432 policyModel.setSchemas(schemas);
433 policyModel.setKeyInformation(keyInformation);
434 policyModel.getKeyInformation().generateKeyInfo(policyModel);
436 final AxValidationResult result = policyModel.validate(new AxValidationResult());
437 if (!result.isOk()) {
438 throw new ApexRuntimeException("model " + policyModel.getId() + " is not valid" + result);
444 * Gets the ECA state map.
446 * @param policyKey the policy key
447 * @param inEventKeyList the in event key list
448 * @param outEventKeyList the out event key list
449 * @param axLogicExecutorTypeList the ax logic executor type list
450 * @param defaultTaskList the default task list
451 * @param taskKeySetList the task key set list
452 * @return the ECA state map
454 private Map<String, AxState> getECAStateMap(final AxArtifactKey policyKey, final List<AxArtifactKey> inEventKeyList,
455 final List<AxArtifactKey> outEventKeyList, final List<String> axLogicExecutorTypeList, final List<AxArtifactKey> defaultTaskList,
456 final List<Set<AxArtifactKey>> taskKeySetList) {
457 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE).setDefaultLogic("EvalState_Logic");
459 final AxState actionState = new AxState(new AxReferenceKey(policyKey, "Action"));
460 actionState.setTrigger(inEventKeyList.get(2));
461 final AxStateOutput action2Out = new AxStateOutput(actionState.getKey(), AxReferenceKey.getNullKey(), outEventKeyList.get(2));
462 actionState.getStateOutputs().put(action2Out.getKey().getLocalName(), action2Out);
463 actionState.setTaskSelectionLogic(new AxTaskSelectionLogic(actionState.getKey(), "TaskSelectionLogic", axLogicExecutorTypeList.get(2), logicReader));
464 actionState.setDefaultTask(defaultTaskList.get(2));
465 for (final AxArtifactKey taskKey : taskKeySetList.get(2)) {
466 actionState.getTaskReferences().put(taskKey,
467 new AxStateTaskReference(new AxReferenceKey(actionState.getKey(), taskKey.getName()), AxStateTaskOutputType.DIRECT, action2Out.getKey()));
470 final AxState conditionState = new AxState(new AxReferenceKey(policyKey, "Condition"));
471 conditionState.setTrigger(inEventKeyList.get(1));
472 final AxStateOutput condition2Action = new AxStateOutput(conditionState.getKey(), actionState.getKey(), outEventKeyList.get(1));
473 conditionState.getStateOutputs().put(condition2Action.getKey().getLocalName(), condition2Action);
475 .setTaskSelectionLogic(new AxTaskSelectionLogic(conditionState.getKey(), "TaskSelectionLogic", axLogicExecutorTypeList.get(1), logicReader));
476 conditionState.setDefaultTask(defaultTaskList.get(1));
477 for (final AxArtifactKey taskKey : taskKeySetList.get(1)) {
478 conditionState.getTaskReferences().put(taskKey, new AxStateTaskReference(new AxReferenceKey(conditionState.getKey(), taskKey.getName()),
479 AxStateTaskOutputType.DIRECT, condition2Action.getKey()));
482 final AxState eventState = new AxState(new AxReferenceKey(policyKey, "Event"));
483 eventState.setTrigger(inEventKeyList.get(0));
484 final AxStateOutput event2Condition = new AxStateOutput(eventState.getKey(), conditionState.getKey(), outEventKeyList.get(0));
485 eventState.getStateOutputs().put(event2Condition.getKey().getLocalName(), event2Condition);
486 eventState.setTaskSelectionLogic(new AxTaskSelectionLogic(eventState.getKey(), "TaskSelectionLogic", axLogicExecutorTypeList.get(0), logicReader));
487 eventState.setDefaultTask(defaultTaskList.get(0));
488 for (final AxArtifactKey taskKey : taskKeySetList.get(0)) {
489 eventState.getTaskReferences().put(taskKey, new AxStateTaskReference(new AxReferenceKey(eventState.getKey(), taskKey.getName()),
490 AxStateTaskOutputType.DIRECT, event2Condition.getKey()));
493 final Map<String, AxState> stateMap = new TreeMap<>();
494 stateMap.put(eventState.getKey().getLocalName(), eventState);
495 stateMap.put(conditionState.getKey().getLocalName(), conditionState);
496 stateMap.put(actionState.getKey().getLocalName(), actionState);