2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * Modifications Copyright (C) 2020 Nordix Foundation.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.apex.testsuites.integration.common.model;
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.List;
29 import java.util.TreeMap;
30 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 // Recurring string constants
63 private static final String ACTION = "Action";
64 private static final String CONDITION = "Condition";
65 private static final String EVENT = "Event";
66 private static final String TASK_SELECTION_LOGIC = "TaskSelectionLogic";
67 private static final String JYTHON = "JYTHON";
68 private static final String MVEL = "MVEL";
69 private static final String ORIENT = "Orient";
70 private static final String STATE_NAME = "<STATE_NAME>";
71 private static final String OBSERVE = "Observe";
72 private static final String JAVASCRIPT = "JAVASCRIPT";
73 private static final String TASK_NAME = "<TASK_NAME>";
74 private static final String TASK_LOGIC = "TaskLogic";
75 private static final String STATE_NUMBER = "<STATE_NUMBER>";
76 private static final String STATE3_TIMESTAMP = "State3Timestamp";
77 private static final String EVENT_NUMBER = "EventNumber";
78 private static final String FIRST_EVENT_TIMESTAMP = "FirstEventTimestamp";
79 private static final String STATE2_TIMESTAMP = "State2Timestamp";
80 private static final String STATE1_TIMESTAMP = "State1Timestamp";
81 private static final String TEST_TEMPERATURE = "TestTemperature";
82 private static final String SENT_TIMESTAMP = "SentTimestamp";
83 private static final String EVENT_TAG = ".events";
84 private static final String DEFAULT_VERSION = "0.0.1";
86 private static final int THIRD_MEMBER = 3;
88 private static final String PACKAGE = EvalDomainModelFactory.class.getPackage().getName();
90 private String justOneLang = null;
92 private final AxContextSchema typeTimestamp;
93 private final AxContextSchema typeDouble;
94 private final AxContextSchema typeCounter;
95 private final AxContextSchemas schemas;
96 private final AxEvent event0000;
97 private final AxEvent event0001;
98 private final AxEvent event0002;
99 private final AxEvent event0003;
100 private final AxEvent event0004;
101 private final AxEvents events;
104 * The Constructor for the factory.
106 public EvalDomainModelFactory() {
111 * The Constructor for the factory that creates models for a single executor language flavour.
113 * @param justOneLang the just one lang
115 public EvalDomainModelFactory(final String justOneLang) {
116 this.justOneLang = justOneLang;
118 typeTimestamp = new AxContextSchema(new AxArtifactKey("TestTimestamp", DEFAULT_VERSION), "Java",
120 typeDouble = new AxContextSchema(new AxArtifactKey(TEST_TEMPERATURE, DEFAULT_VERSION), "Java",
122 typeCounter = new AxContextSchema(new AxArtifactKey("TestTimestamp", DEFAULT_VERSION), "Java",
125 schemas = new AxContextSchemas(new AxArtifactKey("TestDatatypes", DEFAULT_VERSION));
126 schemas.getSchemasMap().put(typeTimestamp.getKey(), typeTimestamp);
127 schemas.getSchemasMap().put(typeDouble.getKey(), typeDouble);
128 schemas.getSchemasMap().put(typeCounter.getKey(), typeCounter);
130 event0000 = new AxEvent(new AxArtifactKey("Event0000", DEFAULT_VERSION), PACKAGE + EVENT_TAG);
131 event0000.getParameterMap().put(SENT_TIMESTAMP,
132 new AxField(new AxReferenceKey(event0000.getKey(), SENT_TIMESTAMP), typeTimestamp.getKey()));
133 event0000.getParameterMap().put(TEST_TEMPERATURE,
134 new AxField(new AxReferenceKey(event0000.getKey(), TEST_TEMPERATURE), typeDouble.getKey()));
135 event0000.getParameterMap().put(FIRST_EVENT_TIMESTAMP, new AxField(
136 new AxReferenceKey(event0000.getKey(), FIRST_EVENT_TIMESTAMP), typeTimestamp.getKey()));
137 event0000.getParameterMap().put(EVENT_NUMBER,
138 new AxField(new AxReferenceKey(event0000.getKey(), EVENT_NUMBER), typeCounter.getKey()));
140 event0001 = new AxEvent(new AxArtifactKey("Event0001", DEFAULT_VERSION), PACKAGE + EVENT_TAG);
141 event0001.getParameterMap().put(SENT_TIMESTAMP,
142 new AxField(new AxReferenceKey(event0001.getKey(), SENT_TIMESTAMP), typeTimestamp.getKey()));
143 event0001.getParameterMap().put(STATE1_TIMESTAMP,
144 new AxField(new AxReferenceKey(event0001.getKey(), STATE1_TIMESTAMP), typeTimestamp.getKey()));
145 event0001.getParameterMap().put(TEST_TEMPERATURE,
146 new AxField(new AxReferenceKey(event0001.getKey(), TEST_TEMPERATURE), typeDouble.getKey()));
147 event0001.getParameterMap().put(FIRST_EVENT_TIMESTAMP, new AxField(
148 new AxReferenceKey(event0001.getKey(), FIRST_EVENT_TIMESTAMP), typeTimestamp.getKey()));
149 event0001.getParameterMap().put(EVENT_NUMBER,
150 new AxField(new AxReferenceKey(event0001.getKey(), EVENT_NUMBER), typeCounter.getKey()));
152 event0002 = new AxEvent(new AxArtifactKey("Event0002", DEFAULT_VERSION), PACKAGE + EVENT_TAG);
153 event0002.getParameterMap().put(SENT_TIMESTAMP,
154 new AxField(new AxReferenceKey(event0002.getKey(), SENT_TIMESTAMP), typeTimestamp.getKey()));
155 event0002.getParameterMap().put(STATE1_TIMESTAMP,
156 new AxField(new AxReferenceKey(event0002.getKey(), STATE1_TIMESTAMP), typeTimestamp.getKey()));
157 event0002.getParameterMap().put(STATE2_TIMESTAMP,
158 new AxField(new AxReferenceKey(event0002.getKey(), STATE2_TIMESTAMP), typeTimestamp.getKey()));
159 event0002.getParameterMap().put(TEST_TEMPERATURE,
160 new AxField(new AxReferenceKey(event0002.getKey(), TEST_TEMPERATURE), typeDouble.getKey()));
161 event0002.getParameterMap().put(FIRST_EVENT_TIMESTAMP, new AxField(
162 new AxReferenceKey(event0002.getKey(), FIRST_EVENT_TIMESTAMP), typeTimestamp.getKey()));
163 event0002.getParameterMap().put(EVENT_NUMBER,
164 new AxField(new AxReferenceKey(event0002.getKey(), EVENT_NUMBER), typeCounter.getKey()));
166 event0003 = new AxEvent(new AxArtifactKey("Event0003", DEFAULT_VERSION), PACKAGE + EVENT_TAG);
167 event0003.getParameterMap().put(SENT_TIMESTAMP,
168 new AxField(new AxReferenceKey(event0003.getKey(), SENT_TIMESTAMP), typeTimestamp.getKey()));
169 event0003.getParameterMap().put(STATE1_TIMESTAMP,
170 new AxField(new AxReferenceKey(event0003.getKey(), STATE1_TIMESTAMP), typeTimestamp.getKey()));
171 event0003.getParameterMap().put(STATE2_TIMESTAMP,
172 new AxField(new AxReferenceKey(event0003.getKey(), STATE2_TIMESTAMP), typeTimestamp.getKey()));
173 event0003.getParameterMap().put(STATE3_TIMESTAMP,
174 new AxField(new AxReferenceKey(event0003.getKey(), STATE3_TIMESTAMP), typeTimestamp.getKey()));
175 event0003.getParameterMap().put(TEST_TEMPERATURE,
176 new AxField(new AxReferenceKey(event0003.getKey(), TEST_TEMPERATURE), typeDouble.getKey()));
177 event0003.getParameterMap().put(FIRST_EVENT_TIMESTAMP, new AxField(
178 new AxReferenceKey(event0003.getKey(), FIRST_EVENT_TIMESTAMP), typeTimestamp.getKey()));
179 event0003.getParameterMap().put(EVENT_NUMBER,
180 new AxField(new AxReferenceKey(event0003.getKey(), EVENT_NUMBER), typeCounter.getKey()));
182 event0004 = new AxEvent(new AxArtifactKey("Event0004", DEFAULT_VERSION), PACKAGE + EVENT_TAG);
183 event0004.getParameterMap().put(SENT_TIMESTAMP,
184 new AxField(new AxReferenceKey(event0004.getKey(), SENT_TIMESTAMP), typeTimestamp.getKey()));
185 event0004.getParameterMap().put(STATE1_TIMESTAMP,
186 new AxField(new AxReferenceKey(event0004.getKey(), STATE1_TIMESTAMP), typeTimestamp.getKey()));
187 event0004.getParameterMap().put(STATE2_TIMESTAMP,
188 new AxField(new AxReferenceKey(event0004.getKey(), STATE2_TIMESTAMP), typeTimestamp.getKey()));
189 event0004.getParameterMap().put(STATE3_TIMESTAMP,
190 new AxField(new AxReferenceKey(event0004.getKey(), STATE3_TIMESTAMP), typeTimestamp.getKey()));
191 event0004.getParameterMap().put("State4Timestamp",
192 new AxField(new AxReferenceKey(event0004.getKey(), "State4Timestamp"), typeTimestamp.getKey()));
193 event0004.getParameterMap().put(TEST_TEMPERATURE,
194 new AxField(new AxReferenceKey(event0004.getKey(), TEST_TEMPERATURE), typeDouble.getKey()));
195 event0004.getParameterMap().put(FIRST_EVENT_TIMESTAMP, new AxField(
196 new AxReferenceKey(event0004.getKey(), FIRST_EVENT_TIMESTAMP), typeTimestamp.getKey()));
197 event0004.getParameterMap().put(EVENT_NUMBER,
198 new AxField(new AxReferenceKey(event0004.getKey(), EVENT_NUMBER), typeCounter.getKey()));
200 events = new AxEvents(new AxArtifactKey("Events", DEFAULT_VERSION));
201 events.getEventMap().put(event0000.getKey(), event0000);
202 events.getEventMap().put(event0001.getKey(), event0001);
203 events.getEventMap().put(event0002.getKey(), event0002);
204 events.getEventMap().put(event0003.getKey(), event0003);
205 events.getEventMap().put(event0004.getKey(), event0004);
209 * Get a sample OODA policy model.
211 * @return the sample policy model
213 public AxPolicyModel getOodaPolicyModel() {
214 final AxTasks tasks = new AxTasks(new AxArtifactKey("Tasks", DEFAULT_VERSION));
216 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE)
217 .setDefaultLogic("EvalTaskLogic");
219 final AxTask obTask = new AxTask(new AxArtifactKey("Task_Observe_0", DEFAULT_VERSION));
220 obTask.duplicateInputFields(event0000.getParameterMap());
221 obTask.duplicateOutputFields(event0001.getParameterMap());
222 final AxTaskLogic obAxLogic = new AxTaskLogic(obTask.getKey(), TASK_LOGIC,
223 (justOneLang == null ? JAVASCRIPT : justOneLang), logicReader);
224 obAxLogic.setLogic(obAxLogic.getLogic().replace(STATE_NAME, OBSERVE)
225 .replace(TASK_NAME, obTask.getKey().getName()).replace(STATE_NUMBER, "1"));
226 obTask.setTaskLogic(obAxLogic);
228 final AxTask orTask = new AxTask(new AxArtifactKey("Task_Orient_0", DEFAULT_VERSION));
229 orTask.duplicateInputFields(event0001.getParameterMap());
230 orTask.duplicateOutputFields(event0002.getParameterMap());
231 final AxTaskLogic orAxLogic = new AxTaskLogic(orTask.getKey(), TASK_LOGIC,
232 (justOneLang == null ? JAVASCRIPT : justOneLang), logicReader);
233 orAxLogic.setLogic(orAxLogic.getLogic().replace(STATE_NAME, ORIENT)
234 .replace(TASK_NAME, orTask.getKey().getName()).replace(STATE_NUMBER, "2"));
235 orTask.setTaskLogic(orAxLogic);
237 final AxTask dTask = new AxTask(new AxArtifactKey("Task_Decide_0", DEFAULT_VERSION));
238 dTask.duplicateInputFields(event0002.getParameterMap());
239 dTask.duplicateOutputFields(event0003.getParameterMap());
240 final AxTaskLogic dAxLogic = new AxTaskLogic(dTask.getKey(), TASK_LOGIC,
241 (justOneLang == null ? MVEL : justOneLang), logicReader);
242 dAxLogic.setLogic(dAxLogic.getLogic().replace(STATE_NAME, ORIENT)
243 .replace(TASK_NAME, dTask.getKey().getName()).replace(STATE_NUMBER, "3"));
244 dTask.setTaskLogic(dAxLogic);
246 final AxTask aTask = new AxTask(new AxArtifactKey("Task_Act_0", DEFAULT_VERSION));
247 aTask.duplicateInputFields(event0003.getParameterMap());
248 aTask.duplicateOutputFields(event0004.getParameterMap());
249 final AxTaskLogic aAxLogic = new AxTaskLogic(aTask.getKey(), TASK_LOGIC,
250 (justOneLang == null ? "JAVA" : justOneLang), logicReader);
251 aAxLogic.setLogic(aAxLogic.getLogic().replace(STATE_NAME, "Act")
252 .replace(TASK_NAME, aTask.getKey().getName()).replace(STATE_NUMBER, "4"));
253 aTask.setTaskLogic(aAxLogic);
255 tasks.getTaskMap().put(obTask.getKey(), obTask);
256 tasks.getTaskMap().put(orTask.getKey(), orTask);
257 tasks.getTaskMap().put(dTask.getKey(), dTask);
258 tasks.getTaskMap().put(aTask.getKey(), aTask);
260 final Set<AxArtifactKey> obTasks = new TreeSet<>();
261 final Set<AxArtifactKey> orTasks = new TreeSet<>();
262 final Set<AxArtifactKey> decTasks = new TreeSet<>();
263 final Set<AxArtifactKey> actTasks = new TreeSet<>();
265 addOodaTasks(tasks, obTasks, orTasks, decTasks, actTasks);
267 final List<Set<AxArtifactKey>> taskReferenceList = new ArrayList<>();
268 taskReferenceList.add(obTasks);
269 taskReferenceList.add(orTasks);
270 taskReferenceList.add(decTasks);
271 taskReferenceList.add(actTasks);
273 final List<AxArtifactKey> p0InEventList = new ArrayList<>();
274 p0InEventList.add(event0000.getKey());
275 p0InEventList.add(event0001.getKey());
276 p0InEventList.add(event0002.getKey());
277 p0InEventList.add(event0003.getKey());
279 final List<AxArtifactKey> p0OutEventList = new ArrayList<>();
280 p0OutEventList.add(event0001.getKey());
281 p0OutEventList.add(event0002.getKey());
282 p0OutEventList.add(event0003.getKey());
283 p0OutEventList.add(event0004.getKey());
285 final List<AxArtifactKey> p0defaultTaskList = new ArrayList<>();
286 p0defaultTaskList.add(tasks.get("Task_Observe_0").getKey());
287 p0defaultTaskList.add(tasks.get("Task_Orient_0").getKey());
288 p0defaultTaskList.add(tasks.get("Task_Decide_0").getKey());
289 p0defaultTaskList.add(tasks.get("Task_Act_0").getKey());
291 final AxPolicy policy0 = new AxPolicy(new AxArtifactKey("OODAPolicy_0", DEFAULT_VERSION));
292 final List<String> axLogicExecutorTypeList = initAxLogicExecutorTypeList(justOneLang);
294 policy0.setStateMap(getOodaStateMap(policy0.getKey(), p0InEventList, p0OutEventList, axLogicExecutorTypeList,
295 p0defaultTaskList, taskReferenceList));
296 policy0.setFirstState(policy0.getStateMap().get(OBSERVE).getKey().getLocalName());
298 final AxPolicies policies = new AxPolicies(new AxArtifactKey("OODAPolicies", DEFAULT_VERSION));
299 policies.getPolicyMap().put(policy0.getKey(), policy0);
301 final AxKeyInformation keyInformation = new AxKeyInformation(
302 new AxArtifactKey("KeyInformation", DEFAULT_VERSION));
303 final AxPolicyModel policyModel = new AxPolicyModel(
304 new AxArtifactKey("EvaluationPolicyModel_OODA", DEFAULT_VERSION));
305 policyModel.setPolicies(policies);
306 policyModel.setEvents(events);
307 policyModel.setTasks(tasks);
308 policyModel.setAlbums(new AxContextAlbums(new AxArtifactKey("Albums", DEFAULT_VERSION)));
309 policyModel.setSchemas(schemas);
310 policyModel.setKeyInformation(keyInformation);
311 policyModel.getKeyInformation().generateKeyInfo(policyModel);
313 final AxValidationResult result = policyModel.validate(new AxValidationResult());
314 if (!result.isOk()) {
315 throw new ApexRuntimeException("model " + policyModel.getId() + " is not valid" + result);
321 * Add OODA tasks to the policy.
323 * @param tasks the policy tasks
324 * @param obTasks observe tasks
325 * @param orTasks orient tasks
326 * @param decTasks decide tasks
327 * @param actTasks act tasks
329 private void addOodaTasks(final AxTasks tasks, final Set<AxArtifactKey> obTasks, final Set<AxArtifactKey> orTasks,
330 final Set<AxArtifactKey> decTasks, final Set<AxArtifactKey> actTasks) {
331 for (final AxTask task : tasks.getTaskMap().values()) {
332 if (task.getKey().getName().contains(OBSERVE)) {
333 obTasks.add(task.getKey());
335 if (task.getKey().getName().contains(ORIENT)) {
336 orTasks.add(task.getKey());
338 if (task.getKey().getName().contains("Decide")) {
339 decTasks.add(task.getKey());
341 if (task.getKey().getName().contains("Act")) {
342 actTasks.add(task.getKey());
348 * Initialize the logic executor list.
350 * @param justOneLang the language to use
351 * @return the list of languages
353 private List<String> initAxLogicExecutorTypeList(final String justOneLang) {
354 List<String> axLogicExecutorTypeList = new ArrayList<>();
356 if (justOneLang != null) {
357 axLogicExecutorTypeList.add(justOneLang);
359 axLogicExecutorTypeList.add(JAVASCRIPT);
360 axLogicExecutorTypeList.add(JYTHON);
361 axLogicExecutorTypeList.add(JYTHON);
362 axLogicExecutorTypeList.add(MVEL);
364 return axLogicExecutorTypeList;
368 * Gets the OODA state map.
370 * @param policyKey the policy key
371 * @param inEventKeyList the in event key list
372 * @param outEventKeyList the out event key list
373 * @param axLogicExecutorTypeList the ax logic executor type list
374 * @param defaultTaskList the default task list
375 * @param taskKeySetList the task key set list
376 * @return the OODA state map
378 private Map<String, AxState> getOodaStateMap(final AxArtifactKey policyKey,
379 final List<AxArtifactKey> inEventKeyList, final List<AxArtifactKey> outEventKeyList,
380 final List<String> axLogicExecutorTypeList, final List<AxArtifactKey> defaultTaskList,
381 final List<Set<AxArtifactKey>> taskKeySetList) {
382 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE)
383 .setDefaultLogic("EvalStateLogic");
385 final AxState actState = new AxState(new AxReferenceKey(policyKey, "Act"));
386 actState.setTrigger(inEventKeyList.get(THIRD_MEMBER));
387 final AxStateOutput act2Out = new AxStateOutput(new AxReferenceKey(actState.getKey(), "Act2Out"),
388 outEventKeyList.get(THIRD_MEMBER), AxReferenceKey.getNullKey());
389 actState.getStateOutputs().put(act2Out.getKey().getLocalName(), act2Out);
390 actState.setTaskSelectionLogic(new AxTaskSelectionLogic(actState.getKey(), TASK_SELECTION_LOGIC,
391 axLogicExecutorTypeList.get(THIRD_MEMBER), logicReader));
392 actState.setDefaultTask(defaultTaskList.get(THIRD_MEMBER));
393 for (final AxArtifactKey taskKey : taskKeySetList.get(THIRD_MEMBER)) {
394 actState.getTaskReferences().put(taskKey,
395 new AxStateTaskReference(new AxReferenceKey(actState.getKey(), taskKey.getName()),
396 AxStateTaskOutputType.DIRECT, act2Out.getKey()));
399 final AxState decState = new AxState(new AxReferenceKey(policyKey, "Decide"));
400 decState.setTrigger(inEventKeyList.get(2));
401 final AxStateOutput dec2Act = new AxStateOutput(new AxReferenceKey(decState.getKey(), "Dec2Act"),
402 outEventKeyList.get(2), actState.getKey());
403 decState.getStateOutputs().put(dec2Act.getKey().getLocalName(), dec2Act);
404 decState.setTaskSelectionLogic(new AxTaskSelectionLogic(decState.getKey(), TASK_SELECTION_LOGIC,
405 axLogicExecutorTypeList.get(2), logicReader));
406 decState.setDefaultTask(defaultTaskList.get(2));
407 for (final AxArtifactKey taskKey : taskKeySetList.get(2)) {
408 decState.getTaskReferences().put(taskKey,
409 new AxStateTaskReference(new AxReferenceKey(decState.getKey(), taskKey.getName()),
410 AxStateTaskOutputType.DIRECT, dec2Act.getKey()));
413 final AxState orState = new AxState(new AxReferenceKey(policyKey, ORIENT));
414 orState.setTrigger(inEventKeyList.get(1));
415 final AxStateOutput or2Dec = new AxStateOutput(new AxReferenceKey(orState.getKey(), "Or2Dec"),
416 outEventKeyList.get(1), decState.getKey());
417 orState.getStateOutputs().put(or2Dec.getKey().getLocalName(), or2Dec);
418 orState.setTaskSelectionLogic(new AxTaskSelectionLogic(orState.getKey(), TASK_SELECTION_LOGIC,
419 axLogicExecutorTypeList.get(1), logicReader));
420 orState.setDefaultTask(defaultTaskList.get(1));
421 for (final AxArtifactKey taskKey : taskKeySetList.get(1)) {
422 orState.getTaskReferences().put(taskKey,
423 new AxStateTaskReference(new AxReferenceKey(orState.getKey(), taskKey.getName()),
424 AxStateTaskOutputType.DIRECT, or2Dec.getKey()));
427 final AxState obState = new AxState(new AxReferenceKey(policyKey, OBSERVE));
428 obState.setTrigger(inEventKeyList.get(0));
429 final AxStateOutput ob2Or = new AxStateOutput(new AxReferenceKey(obState.getKey(), "Ob2Or"),
430 outEventKeyList.get(0), orState.getKey());
431 obState.getStateOutputs().put(ob2Or.getKey().getLocalName(), ob2Or);
432 obState.setTaskSelectionLogic(new AxTaskSelectionLogic(obState.getKey(), TASK_SELECTION_LOGIC,
433 axLogicExecutorTypeList.get(0), logicReader));
434 obState.setDefaultTask(defaultTaskList.get(0));
435 for (final AxArtifactKey taskKey : taskKeySetList.get(0)) {
436 obState.getTaskReferences().put(taskKey,
437 new AxStateTaskReference(new AxReferenceKey(obState.getKey(), taskKey.getName()),
438 AxStateTaskOutputType.DIRECT, ob2Or.getKey()));
441 final Map<String, AxState> stateMap = new TreeMap<>();
442 stateMap.put(obState.getKey().getLocalName(), obState);
443 stateMap.put(orState.getKey().getLocalName(), orState);
444 stateMap.put(decState.getKey().getLocalName(), decState);
445 stateMap.put(actState.getKey().getLocalName(), actState);
451 * Get a sample ECA policy model.
453 * @return the sample policy model
455 public AxPolicyModel getEcaPolicyModel() {
457 final AxTasks tasks = new AxTasks(new AxArtifactKey("Tasks", DEFAULT_VERSION));
459 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE)
460 .setDefaultLogic("EvalTaskLogic");
462 final AxTask eTask = new AxTask(new AxArtifactKey("Task_Event_0", DEFAULT_VERSION));
463 eTask.duplicateInputFields(event0000.getParameterMap());
464 eTask.duplicateOutputFields(event0001.getParameterMap());
465 final AxTaskLogic eAxLogic = new AxTaskLogic(eTask.getKey(), TASK_LOGIC,
466 (justOneLang == null ? JYTHON : justOneLang), logicReader);
467 eAxLogic.setLogic(eAxLogic.getLogic().replace(STATE_NAME, EVENT)
468 .replace(TASK_NAME, eTask.getKey().getName()).replace(STATE_NUMBER, "1"));
469 eTask.setTaskLogic(eAxLogic);
471 final AxTask cTask = new AxTask(new AxArtifactKey("Task_Condition_0", DEFAULT_VERSION));
472 cTask.duplicateInputFields(event0001.getParameterMap());
473 cTask.duplicateOutputFields(event0002.getParameterMap());
474 final AxTaskLogic cAxLogic = new AxTaskLogic(cTask.getKey(), TASK_LOGIC,
475 (justOneLang == null ? JAVASCRIPT : justOneLang), logicReader);
476 cAxLogic.setLogic(cAxLogic.getLogic().replace(STATE_NAME, CONDITION)
477 .replace(TASK_NAME, cTask.getKey().getName()).replace(STATE_NUMBER, "2"));
478 cTask.setTaskLogic(cAxLogic);
480 final AxTask aTask = new AxTask(new AxArtifactKey("Task_Action_0", DEFAULT_VERSION));
481 aTask.duplicateInputFields(event0002.getParameterMap());
482 aTask.duplicateOutputFields(event0003.getParameterMap());
483 final AxTaskLogic aAxLogic = new AxTaskLogic(aTask.getKey(), TASK_LOGIC,
484 (justOneLang == null ? "JAVA" : justOneLang), logicReader);
485 aAxLogic.setLogic(aAxLogic.getLogic().replace(STATE_NAME, ACTION)
486 .replace(TASK_NAME, aTask.getKey().getName()).replace(STATE_NUMBER, "3"));
487 aTask.setTaskLogic(aAxLogic);
489 tasks.getTaskMap().put(eTask.getKey(), eTask);
490 tasks.getTaskMap().put(cTask.getKey(), cTask);
491 tasks.getTaskMap().put(aTask.getKey(), aTask);
493 final Set<AxArtifactKey> eventTasks = new TreeSet<>();
494 final Set<AxArtifactKey> conditionTasks = new TreeSet<>();
495 final Set<AxArtifactKey> actionTasks = new TreeSet<>();
497 addEcaTasks(tasks, eventTasks, conditionTasks, actionTasks);
498 final List<Set<AxArtifactKey>> taskReferenceList = new ArrayList<>();
499 taskReferenceList.add(eventTasks);
500 taskReferenceList.add(conditionTasks);
501 taskReferenceList.add(actionTasks);
503 final List<AxArtifactKey> p0InEventList = new ArrayList<>();
504 p0InEventList.add(event0000.getKey());
505 p0InEventList.add(event0001.getKey());
506 p0InEventList.add(event0002.getKey());
508 final List<AxArtifactKey> p0OutEventList = new ArrayList<>();
509 p0OutEventList.add(event0001.getKey());
510 p0OutEventList.add(event0002.getKey());
511 p0OutEventList.add(event0003.getKey());
513 final List<AxArtifactKey> p0defaultTaskList = new ArrayList<>();
514 p0defaultTaskList.add(tasks.get("Task_Event_0").getKey());
515 p0defaultTaskList.add(tasks.get("Task_Condition_0").getKey());
516 p0defaultTaskList.add(tasks.get("Task_Action_0").getKey());
518 final AxPolicy policy0 = new AxPolicy(new AxArtifactKey("ECAPolicy_0", DEFAULT_VERSION));
519 final List<String> axLogicExecutorTypeList = Arrays.asList((justOneLang == null ? JAVASCRIPT : justOneLang),
520 (justOneLang == null ? MVEL : justOneLang), (justOneLang == null ? JYTHON : justOneLang));
521 policy0.setStateMap(getEcaStateMap(policy0.getKey(), p0InEventList, p0OutEventList, axLogicExecutorTypeList,
522 p0defaultTaskList, taskReferenceList));
523 policy0.setFirstState(policy0.getStateMap().get(EVENT).getKey().getLocalName());
525 final AxPolicies policies = new AxPolicies(new AxArtifactKey("ECAPolicies", DEFAULT_VERSION));
526 policies.getPolicyMap().put(policy0.getKey(), policy0);
528 final AxKeyInformation keyInformation = new AxKeyInformation(
529 new AxArtifactKey("KeyInformation", DEFAULT_VERSION));
530 final AxPolicyModel policyModel = new AxPolicyModel(
531 new AxArtifactKey("EvaluationPolicyModel_ECA", DEFAULT_VERSION));
532 policyModel.setPolicies(policies);
533 policyModel.setEvents(events);
534 policyModel.setTasks(tasks);
535 policyModel.setAlbums(new AxContextAlbums(new AxArtifactKey("Albums", DEFAULT_VERSION)));
536 policyModel.setSchemas(schemas);
537 policyModel.setKeyInformation(keyInformation);
538 policyModel.getKeyInformation().generateKeyInfo(policyModel);
540 final AxValidationResult result = policyModel.validate(new AxValidationResult());
541 if (!result.isOk()) {
542 throw new ApexRuntimeException("model " + policyModel.getId() + " is not valid" + result);
550 * @param tasks the tasks
551 * @param eventTasks event tasks
552 * @param conditionTasks condition tasks
553 * @param actionTasks action tasks
555 private void addEcaTasks(final AxTasks tasks, final Set<AxArtifactKey> eventTasks,
556 final Set<AxArtifactKey> conditionTasks, final Set<AxArtifactKey> actionTasks) {
557 for (final AxTask task : tasks.getTaskMap().values()) {
558 if (task.getKey().getName().contains(EVENT)) {
559 eventTasks.add(task.getKey());
561 if (task.getKey().getName().contains(CONDITION)) {
562 conditionTasks.add(task.getKey());
564 if (task.getKey().getName().contains(ACTION)) {
565 actionTasks.add(task.getKey());
571 * Gets the ECA state map.
573 * @param policyKey the policy key
574 * @param inEventKeyList the in event key list
575 * @param outEventKeyList the out event key list
576 * @param axLogicExecutorTypeList the ax logic executor type list
577 * @param defaultTaskList the default task list
578 * @param taskKeySetList the task key set list
579 * @return the ECA state map
581 private Map<String, AxState> getEcaStateMap(final AxArtifactKey policyKey, final List<AxArtifactKey> inEventKeyList,
582 final List<AxArtifactKey> outEventKeyList, final List<String> axLogicExecutorTypeList,
583 final List<AxArtifactKey> defaultTaskList, final List<Set<AxArtifactKey>> taskKeySetList) {
584 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE)
585 .setDefaultLogic("EvalStateLogic");
587 final AxState actionState = new AxState(new AxReferenceKey(policyKey, ACTION));
588 actionState.setTrigger(inEventKeyList.get(2));
589 final AxStateOutput action2Out = new AxStateOutput(actionState.getKey(), AxReferenceKey.getNullKey(),
590 outEventKeyList.get(2));
591 actionState.getStateOutputs().put(action2Out.getKey().getLocalName(), action2Out);
592 actionState.setTaskSelectionLogic(new AxTaskSelectionLogic(actionState.getKey(), TASK_SELECTION_LOGIC,
593 axLogicExecutorTypeList.get(2), logicReader));
594 actionState.setDefaultTask(defaultTaskList.get(2));
595 for (final AxArtifactKey taskKey : taskKeySetList.get(2)) {
596 actionState.getTaskReferences().put(taskKey,
597 new AxStateTaskReference(new AxReferenceKey(actionState.getKey(), taskKey.getName()),
598 AxStateTaskOutputType.DIRECT, action2Out.getKey()));
601 final AxState conditionState = new AxState(new AxReferenceKey(policyKey, CONDITION));
602 conditionState.setTrigger(inEventKeyList.get(1));
603 final AxStateOutput condition2Action = new AxStateOutput(conditionState.getKey(), actionState.getKey(),
604 outEventKeyList.get(1));
605 conditionState.getStateOutputs().put(condition2Action.getKey().getLocalName(), condition2Action);
606 conditionState.setTaskSelectionLogic(new AxTaskSelectionLogic(conditionState.getKey(), TASK_SELECTION_LOGIC,
607 axLogicExecutorTypeList.get(1), logicReader));
608 conditionState.setDefaultTask(defaultTaskList.get(1));
609 for (final AxArtifactKey taskKey : taskKeySetList.get(1)) {
610 conditionState.getTaskReferences().put(taskKey,
611 new AxStateTaskReference(new AxReferenceKey(conditionState.getKey(), taskKey.getName()),
612 AxStateTaskOutputType.DIRECT, condition2Action.getKey()));
615 final AxState eventState = new AxState(new AxReferenceKey(policyKey, EVENT));
616 eventState.setTrigger(inEventKeyList.get(0));
617 final AxStateOutput event2Condition = new AxStateOutput(eventState.getKey(), conditionState.getKey(),
618 outEventKeyList.get(0));
619 eventState.getStateOutputs().put(event2Condition.getKey().getLocalName(), event2Condition);
620 eventState.setTaskSelectionLogic(new AxTaskSelectionLogic(eventState.getKey(), TASK_SELECTION_LOGIC,
621 axLogicExecutorTypeList.get(0), logicReader));
622 eventState.setDefaultTask(defaultTaskList.get(0));
623 for (final AxArtifactKey taskKey : taskKeySetList.get(0)) {
624 eventState.getTaskReferences().put(taskKey,
625 new AxStateTaskReference(new AxReferenceKey(eventState.getKey(), taskKey.getName()),
626 AxStateTaskOutputType.DIRECT, event2Condition.getKey()));
629 final Map<String, AxState> stateMap = new TreeMap<>();
630 stateMap.put(eventState.getKey().getLocalName(), eventState);
631 stateMap.put(conditionState.getKey().getLocalName(), conditionState);
632 stateMap.put(actionState.getKey().getLocalName(), actionState);