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.testsuites.integration.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 // 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 ORIENT = "Orient";
69 private static final String STATE_NAME = "<STATE_NAME>";
70 private static final String OBSERVE = "Observe";
71 private static final String JAVASCRIPT = "JAVASCRIPT";
72 private static final String TASK_NAME = "<TASK_NAME>";
73 private static final String TASK_LOGIC = "TaskLogic";
74 private static final String STATE_NUMBER = "<STATE_NUMBER>";
75 private static final String STATE3_TIMESTAMP = "State3Timestamp";
76 private static final String EVENT_NUMBER = "EventNumber";
77 private static final String FIRST_EVENT_TIMESTAMP = "FirstEventTimestamp";
78 private static final String STATE2_TIMESTAMP = "State2Timestamp";
79 private static final String STATE1_TIMESTAMP = "State1Timestamp";
80 private static final String TEST_TEMPERATURE = "TestTemperature";
81 private static final String SENT_TIMESTAMP = "SentTimestamp";
82 private static final String EVENT_TAG = ".events";
83 private static final String DEFAULT_VERSION = "0.0.1";
85 private static final int THIRD_MEMBER = 3;
87 private static final String PACKAGE = EvalDomainModelFactory.class.getPackage().getName();
89 private String justOneLang = null;
91 private final AxContextSchema typeTimestamp;
92 private final AxContextSchema typeDouble;
93 private final AxContextSchema typeCounter;
94 private final AxContextSchemas schemas;
95 private final AxEvent event0000;
96 private final AxEvent event0001;
97 private final AxEvent event0002;
98 private final AxEvent event0003;
99 private final AxEvent event0004;
100 private final AxEvents events;
103 * The Constructor for the factory.
105 public EvalDomainModelFactory() {
110 * The Constructor for the factory that creates models for a single executor language flavour.
112 * @param justOneLang the just one lang
114 public EvalDomainModelFactory(final String justOneLang) {
115 this.justOneLang = justOneLang;
117 typeTimestamp = new AxContextSchema(new AxArtifactKey("TestTimestamp", DEFAULT_VERSION), "Java",
119 typeDouble = new AxContextSchema(new AxArtifactKey(TEST_TEMPERATURE, DEFAULT_VERSION), "Java",
121 typeCounter = new AxContextSchema(new AxArtifactKey("TestTimestamp", DEFAULT_VERSION), "Java",
124 schemas = new AxContextSchemas(new AxArtifactKey("TestDatatypes", DEFAULT_VERSION));
125 schemas.getSchemasMap().put(typeTimestamp.getKey(), typeTimestamp);
126 schemas.getSchemasMap().put(typeDouble.getKey(), typeDouble);
127 schemas.getSchemasMap().put(typeCounter.getKey(), typeCounter);
129 event0000 = new AxEvent(new AxArtifactKey("Event0000", DEFAULT_VERSION), PACKAGE + EVENT_TAG);
130 event0000.getParameterMap().put(SENT_TIMESTAMP,
131 new AxField(new AxReferenceKey(event0000.getKey(), SENT_TIMESTAMP), typeTimestamp.getKey()));
132 event0000.getParameterMap().put(TEST_TEMPERATURE,
133 new AxField(new AxReferenceKey(event0000.getKey(), TEST_TEMPERATURE), typeDouble.getKey()));
134 event0000.getParameterMap().put(FIRST_EVENT_TIMESTAMP, new AxField(
135 new AxReferenceKey(event0000.getKey(), FIRST_EVENT_TIMESTAMP), typeTimestamp.getKey()));
136 event0000.getParameterMap().put(EVENT_NUMBER,
137 new AxField(new AxReferenceKey(event0000.getKey(), EVENT_NUMBER), typeCounter.getKey()));
139 event0001 = new AxEvent(new AxArtifactKey("Event0001", DEFAULT_VERSION), PACKAGE + EVENT_TAG);
140 event0001.getParameterMap().put(SENT_TIMESTAMP,
141 new AxField(new AxReferenceKey(event0001.getKey(), SENT_TIMESTAMP), typeTimestamp.getKey()));
142 event0001.getParameterMap().put(STATE1_TIMESTAMP,
143 new AxField(new AxReferenceKey(event0001.getKey(), STATE1_TIMESTAMP), typeTimestamp.getKey()));
144 event0001.getParameterMap().put(TEST_TEMPERATURE,
145 new AxField(new AxReferenceKey(event0001.getKey(), TEST_TEMPERATURE), typeDouble.getKey()));
146 event0001.getParameterMap().put(FIRST_EVENT_TIMESTAMP, new AxField(
147 new AxReferenceKey(event0001.getKey(), FIRST_EVENT_TIMESTAMP), typeTimestamp.getKey()));
148 event0001.getParameterMap().put(EVENT_NUMBER,
149 new AxField(new AxReferenceKey(event0001.getKey(), EVENT_NUMBER), typeCounter.getKey()));
151 event0002 = new AxEvent(new AxArtifactKey("Event0002", DEFAULT_VERSION), PACKAGE + EVENT_TAG);
152 event0002.getParameterMap().put(SENT_TIMESTAMP,
153 new AxField(new AxReferenceKey(event0002.getKey(), SENT_TIMESTAMP), typeTimestamp.getKey()));
154 event0002.getParameterMap().put(STATE1_TIMESTAMP,
155 new AxField(new AxReferenceKey(event0002.getKey(), STATE1_TIMESTAMP), typeTimestamp.getKey()));
156 event0002.getParameterMap().put(STATE2_TIMESTAMP,
157 new AxField(new AxReferenceKey(event0002.getKey(), STATE2_TIMESTAMP), typeTimestamp.getKey()));
158 event0002.getParameterMap().put(TEST_TEMPERATURE,
159 new AxField(new AxReferenceKey(event0002.getKey(), TEST_TEMPERATURE), typeDouble.getKey()));
160 event0002.getParameterMap().put(FIRST_EVENT_TIMESTAMP, new AxField(
161 new AxReferenceKey(event0002.getKey(), FIRST_EVENT_TIMESTAMP), typeTimestamp.getKey()));
162 event0002.getParameterMap().put(EVENT_NUMBER,
163 new AxField(new AxReferenceKey(event0002.getKey(), EVENT_NUMBER), typeCounter.getKey()));
165 event0003 = new AxEvent(new AxArtifactKey("Event0003", DEFAULT_VERSION), PACKAGE + EVENT_TAG);
166 event0003.getParameterMap().put(SENT_TIMESTAMP,
167 new AxField(new AxReferenceKey(event0003.getKey(), SENT_TIMESTAMP), typeTimestamp.getKey()));
168 event0003.getParameterMap().put(STATE1_TIMESTAMP,
169 new AxField(new AxReferenceKey(event0003.getKey(), STATE1_TIMESTAMP), typeTimestamp.getKey()));
170 event0003.getParameterMap().put(STATE2_TIMESTAMP,
171 new AxField(new AxReferenceKey(event0003.getKey(), STATE2_TIMESTAMP), typeTimestamp.getKey()));
172 event0003.getParameterMap().put(STATE3_TIMESTAMP,
173 new AxField(new AxReferenceKey(event0003.getKey(), STATE3_TIMESTAMP), typeTimestamp.getKey()));
174 event0003.getParameterMap().put(TEST_TEMPERATURE,
175 new AxField(new AxReferenceKey(event0003.getKey(), TEST_TEMPERATURE), typeDouble.getKey()));
176 event0003.getParameterMap().put(FIRST_EVENT_TIMESTAMP, new AxField(
177 new AxReferenceKey(event0003.getKey(), FIRST_EVENT_TIMESTAMP), typeTimestamp.getKey()));
178 event0003.getParameterMap().put(EVENT_NUMBER,
179 new AxField(new AxReferenceKey(event0003.getKey(), EVENT_NUMBER), typeCounter.getKey()));
181 event0004 = new AxEvent(new AxArtifactKey("Event0004", DEFAULT_VERSION), PACKAGE + EVENT_TAG);
182 event0004.getParameterMap().put(SENT_TIMESTAMP,
183 new AxField(new AxReferenceKey(event0004.getKey(), SENT_TIMESTAMP), typeTimestamp.getKey()));
184 event0004.getParameterMap().put(STATE1_TIMESTAMP,
185 new AxField(new AxReferenceKey(event0004.getKey(), STATE1_TIMESTAMP), typeTimestamp.getKey()));
186 event0004.getParameterMap().put(STATE2_TIMESTAMP,
187 new AxField(new AxReferenceKey(event0004.getKey(), STATE2_TIMESTAMP), typeTimestamp.getKey()));
188 event0004.getParameterMap().put(STATE3_TIMESTAMP,
189 new AxField(new AxReferenceKey(event0004.getKey(), STATE3_TIMESTAMP), typeTimestamp.getKey()));
190 event0004.getParameterMap().put("State4Timestamp",
191 new AxField(new AxReferenceKey(event0004.getKey(), "State4Timestamp"), typeTimestamp.getKey()));
192 event0004.getParameterMap().put(TEST_TEMPERATURE,
193 new AxField(new AxReferenceKey(event0004.getKey(), TEST_TEMPERATURE), typeDouble.getKey()));
194 event0004.getParameterMap().put(FIRST_EVENT_TIMESTAMP, new AxField(
195 new AxReferenceKey(event0004.getKey(), FIRST_EVENT_TIMESTAMP), typeTimestamp.getKey()));
196 event0004.getParameterMap().put(EVENT_NUMBER,
197 new AxField(new AxReferenceKey(event0004.getKey(), EVENT_NUMBER), typeCounter.getKey()));
199 events = new AxEvents(new AxArtifactKey("Events", DEFAULT_VERSION));
200 events.getEventMap().put(event0000.getKey(), event0000);
201 events.getEventMap().put(event0001.getKey(), event0001);
202 events.getEventMap().put(event0002.getKey(), event0002);
203 events.getEventMap().put(event0003.getKey(), event0003);
204 events.getEventMap().put(event0004.getKey(), event0004);
208 * Get a sample OODA policy model.
210 * @return the sample policy model
212 public AxPolicyModel getOodaPolicyModel() {
213 final AxTasks tasks = new AxTasks(new AxArtifactKey("Tasks", DEFAULT_VERSION));
215 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE)
216 .setDefaultLogic("EvalTask_Logic");
218 final AxTask obTask = new AxTask(new AxArtifactKey("Task_Observe_0", DEFAULT_VERSION));
219 obTask.duplicateInputFields(event0000.getParameterMap());
220 obTask.duplicateOutputFields(event0001.getParameterMap());
221 final AxTaskLogic obAxLogic = new AxTaskLogic(obTask.getKey(), TASK_LOGIC,
222 (justOneLang == null ? "JRUBY" : justOneLang), logicReader);
223 obAxLogic.setLogic(obAxLogic.getLogic().replaceAll(STATE_NAME, OBSERVE)
224 .replaceAll(TASK_NAME, obTask.getKey().getName()).replaceAll(STATE_NUMBER, "1"));
225 obTask.setTaskLogic(obAxLogic);
227 final AxTask orTask = new AxTask(new AxArtifactKey("Task_Orient_0", "0.0.1"));
228 orTask.duplicateInputFields(event0001.getParameterMap());
229 orTask.duplicateOutputFields(event0002.getParameterMap());
230 final AxTaskLogic orAxLogic = new AxTaskLogic(orTask.getKey(), TASK_LOGIC,
231 (justOneLang == null ? JAVASCRIPT : justOneLang), logicReader);
232 orAxLogic.setLogic(orAxLogic.getLogic().replaceAll(STATE_NAME, ORIENT)
233 .replaceAll(TASK_NAME, orTask.getKey().getName()).replaceAll(STATE_NUMBER, "2"));
234 orTask.setTaskLogic(orAxLogic);
236 final AxTask dTask = new AxTask(new AxArtifactKey("Task_Decide_0", "0.0.1"));
237 dTask.duplicateInputFields(event0002.getParameterMap());
238 dTask.duplicateOutputFields(event0003.getParameterMap());
239 final AxTaskLogic dAxLogic = new AxTaskLogic(dTask.getKey(), TASK_LOGIC,
240 (justOneLang == null ? "MVEL" : justOneLang), logicReader);
241 dAxLogic.setLogic(dAxLogic.getLogic().replaceAll(STATE_NAME, ORIENT)
242 .replaceAll(TASK_NAME, dTask.getKey().getName()).replaceAll(STATE_NUMBER, "3"));
243 dTask.setTaskLogic(dAxLogic);
245 final AxTask aTask = new AxTask(new AxArtifactKey("Task_Act_0", "0.0.1"));
246 aTask.duplicateInputFields(event0003.getParameterMap());
247 aTask.duplicateOutputFields(event0004.getParameterMap());
248 final AxTaskLogic aAxLogic = new AxTaskLogic(aTask.getKey(), TASK_LOGIC,
249 (justOneLang == null ? "JAVA" : justOneLang), logicReader);
250 aAxLogic.setLogic(aAxLogic.getLogic().replaceAll(STATE_NAME, "Act")
251 .replaceAll(TASK_NAME, aTask.getKey().getName()).replaceAll(STATE_NUMBER, "4"));
252 aTask.setTaskLogic(aAxLogic);
254 tasks.getTaskMap().put(obTask.getKey(), obTask);
255 tasks.getTaskMap().put(orTask.getKey(), orTask);
256 tasks.getTaskMap().put(dTask.getKey(), dTask);
257 tasks.getTaskMap().put(aTask.getKey(), aTask);
259 final Set<AxArtifactKey> obTasks = new TreeSet<>();
260 final Set<AxArtifactKey> orTasks = new TreeSet<>();
261 final Set<AxArtifactKey> decTasks = new TreeSet<>();
262 final Set<AxArtifactKey> actTasks = new TreeSet<>();
264 for (final AxTask task : tasks.getTaskMap().values()) {
265 if (task.getKey().getName().contains(OBSERVE)) {
266 obTasks.add(task.getKey());
268 if (task.getKey().getName().contains(ORIENT)) {
269 orTasks.add(task.getKey());
271 if (task.getKey().getName().contains("Decide")) {
272 decTasks.add(task.getKey());
274 if (task.getKey().getName().contains("Act")) {
275 actTasks.add(task.getKey());
278 final List<Set<AxArtifactKey>> taskReferenceList = new ArrayList<>();
279 taskReferenceList.add(obTasks);
280 taskReferenceList.add(orTasks);
281 taskReferenceList.add(decTasks);
282 taskReferenceList.add(actTasks);
284 final List<AxArtifactKey> p0InEventList = new ArrayList<>();
285 p0InEventList.add(event0000.getKey());
286 p0InEventList.add(event0001.getKey());
287 p0InEventList.add(event0002.getKey());
288 p0InEventList.add(event0003.getKey());
290 final List<AxArtifactKey> p0OutEventList = new ArrayList<>();
291 p0OutEventList.add(event0001.getKey());
292 p0OutEventList.add(event0002.getKey());
293 p0OutEventList.add(event0003.getKey());
294 p0OutEventList.add(event0004.getKey());
296 final List<AxArtifactKey> p0defaultTaskList = new ArrayList<>();
297 p0defaultTaskList.add(tasks.get("Task_Observe_0").getKey());
298 p0defaultTaskList.add(tasks.get("Task_Orient_0").getKey());
299 p0defaultTaskList.add(tasks.get("Task_Decide_0").getKey());
300 p0defaultTaskList.add(tasks.get("Task_Act_0").getKey());
302 final AxPolicy policy0 = new AxPolicy(new AxArtifactKey("OODAPolicy_0", "0.0.1"));
303 final List<String> axLogicExecutorTypeList = Arrays.asList((justOneLang == null ? JAVASCRIPT : justOneLang),
304 (justOneLang == null ? "MVEL" : justOneLang), (justOneLang == null ? JYTHON : justOneLang),
305 (justOneLang == null ? "JRUBY" : justOneLang));
306 policy0.setStateMap(getOodaStateMap(policy0.getKey(), p0InEventList, p0OutEventList, axLogicExecutorTypeList,
307 p0defaultTaskList, taskReferenceList));
308 policy0.setFirstState(policy0.getStateMap().get(OBSERVE).getKey().getLocalName());
310 final AxPolicies policies = new AxPolicies(new AxArtifactKey("OODAPolicies", "0.0.1"));
311 policies.getPolicyMap().put(policy0.getKey(), policy0);
313 final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey("KeyInformation", "0.0.1"));
314 final AxPolicyModel policyModel = new AxPolicyModel(new AxArtifactKey("EvaluationPolicyModel_OODA", "0.0.1"));
315 policyModel.setPolicies(policies);
316 policyModel.setEvents(events);
317 policyModel.setTasks(tasks);
318 policyModel.setAlbums(new AxContextAlbums(new AxArtifactKey("Albums", "0.0.1")));
319 policyModel.setSchemas(schemas);
320 policyModel.setKeyInformation(keyInformation);
321 policyModel.getKeyInformation().generateKeyInfo(policyModel);
323 final AxValidationResult result = policyModel.validate(new AxValidationResult());
324 if (!result.isOk()) {
325 throw new ApexRuntimeException("model " + policyModel.getId() + " is not valid" + result);
331 * Gets the OODA state map.
333 * @param policyKey the policy key
334 * @param inEventKeyList the in event key list
335 * @param outEventKeyList the out event key list
336 * @param axLogicExecutorTypeList the ax logic executor type list
337 * @param defaultTaskList the default task list
338 * @param taskKeySetList the task key set list
339 * @return the OODA state map
341 private Map<String, AxState> getOodaStateMap(final AxArtifactKey policyKey,
342 final List<AxArtifactKey> inEventKeyList, final List<AxArtifactKey> outEventKeyList,
343 final List<String> axLogicExecutorTypeList, final List<AxArtifactKey> defaultTaskList,
344 final List<Set<AxArtifactKey>> taskKeySetList) {
345 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE)
346 .setDefaultLogic("EvalState_Logic");
348 final AxState actState = new AxState(new AxReferenceKey(policyKey, "Act"));
349 actState.setTrigger(inEventKeyList.get(THIRD_MEMBER));
350 final AxStateOutput act2Out = new AxStateOutput(new AxReferenceKey(actState.getKey(), "Act2Out"),
351 outEventKeyList.get(THIRD_MEMBER), AxReferenceKey.getNullKey());
352 actState.getStateOutputs().put(act2Out.getKey().getLocalName(), act2Out);
353 actState.setTaskSelectionLogic(new AxTaskSelectionLogic(actState.getKey(), TASK_SELECTION_LOGIC,
354 axLogicExecutorTypeList.get(THIRD_MEMBER), logicReader));
355 actState.setDefaultTask(defaultTaskList.get(THIRD_MEMBER));
356 for (final AxArtifactKey taskKey : taskKeySetList.get(THIRD_MEMBER)) {
357 actState.getTaskReferences().put(taskKey,
358 new AxStateTaskReference(new AxReferenceKey(actState.getKey(), taskKey.getName()),
359 AxStateTaskOutputType.DIRECT, act2Out.getKey()));
362 final AxState decState = new AxState(new AxReferenceKey(policyKey, "Decide"));
363 decState.setTrigger(inEventKeyList.get(2));
364 final AxStateOutput dec2Act = new AxStateOutput(new AxReferenceKey(decState.getKey(), "Dec2Act"),
365 outEventKeyList.get(2), actState.getKey());
366 decState.getStateOutputs().put(dec2Act.getKey().getLocalName(), dec2Act);
367 decState.setTaskSelectionLogic(new AxTaskSelectionLogic(decState.getKey(), TASK_SELECTION_LOGIC,
368 axLogicExecutorTypeList.get(2), logicReader));
369 decState.setDefaultTask(defaultTaskList.get(2));
370 for (final AxArtifactKey taskKey : taskKeySetList.get(2)) {
371 decState.getTaskReferences().put(taskKey,
372 new AxStateTaskReference(new AxReferenceKey(decState.getKey(), taskKey.getName()),
373 AxStateTaskOutputType.DIRECT, dec2Act.getKey()));
376 final AxState orState = new AxState(new AxReferenceKey(policyKey, ORIENT));
377 orState.setTrigger(inEventKeyList.get(1));
378 final AxStateOutput or2Dec = new AxStateOutput(new AxReferenceKey(orState.getKey(), "Or2Dec"),
379 outEventKeyList.get(1), decState.getKey());
380 orState.getStateOutputs().put(or2Dec.getKey().getLocalName(), or2Dec);
381 orState.setTaskSelectionLogic(new AxTaskSelectionLogic(orState.getKey(), TASK_SELECTION_LOGIC,
382 axLogicExecutorTypeList.get(1), logicReader));
383 orState.setDefaultTask(defaultTaskList.get(1));
384 for (final AxArtifactKey taskKey : taskKeySetList.get(1)) {
385 orState.getTaskReferences().put(taskKey,
386 new AxStateTaskReference(new AxReferenceKey(orState.getKey(), taskKey.getName()),
387 AxStateTaskOutputType.DIRECT, or2Dec.getKey()));
390 final AxState obState = new AxState(new AxReferenceKey(policyKey, OBSERVE));
391 obState.setTrigger(inEventKeyList.get(0));
392 final AxStateOutput ob2Or = new AxStateOutput(new AxReferenceKey(obState.getKey(), "Ob2Or"),
393 outEventKeyList.get(0), orState.getKey());
394 obState.getStateOutputs().put(ob2Or.getKey().getLocalName(), ob2Or);
395 obState.setTaskSelectionLogic(new AxTaskSelectionLogic(obState.getKey(), TASK_SELECTION_LOGIC,
396 axLogicExecutorTypeList.get(0), logicReader));
397 obState.setDefaultTask(defaultTaskList.get(0));
398 for (final AxArtifactKey taskKey : taskKeySetList.get(0)) {
399 obState.getTaskReferences().put(taskKey,
400 new AxStateTaskReference(new AxReferenceKey(obState.getKey(), taskKey.getName()),
401 AxStateTaskOutputType.DIRECT, ob2Or.getKey()));
404 final Map<String, AxState> stateMap = new TreeMap<>();
405 stateMap.put(obState.getKey().getLocalName(), obState);
406 stateMap.put(orState.getKey().getLocalName(), orState);
407 stateMap.put(decState.getKey().getLocalName(), decState);
408 stateMap.put(actState.getKey().getLocalName(), actState);
414 * Get a sample ECA policy model.
416 * @return the sample policy model
418 public AxPolicyModel getEcaPolicyModel() {
420 final AxTasks tasks = new AxTasks(new AxArtifactKey("Tasks", "0.0.1"));
422 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE)
423 .setDefaultLogic("EvalTask_Logic");
425 final AxTask eTask = new AxTask(new AxArtifactKey("Task_Event_0", "0.0.1"));
426 eTask.duplicateInputFields(event0000.getParameterMap());
427 eTask.duplicateOutputFields(event0001.getParameterMap());
428 final AxTaskLogic eAxLogic = new AxTaskLogic(eTask.getKey(), TASK_LOGIC,
429 (justOneLang == null ? JYTHON : justOneLang), logicReader);
430 eAxLogic.setLogic(eAxLogic.getLogic().replaceAll(STATE_NAME, EVENT)
431 .replaceAll(TASK_NAME, eTask.getKey().getName()).replaceAll(STATE_NUMBER, "1"));
432 eTask.setTaskLogic(eAxLogic);
434 final AxTask cTask = new AxTask(new AxArtifactKey("Task_Condition_0", "0.0.1"));
435 cTask.duplicateInputFields(event0001.getParameterMap());
436 cTask.duplicateOutputFields(event0002.getParameterMap());
437 final AxTaskLogic cAxLogic = new AxTaskLogic(cTask.getKey(), TASK_LOGIC,
438 (justOneLang == null ? JAVASCRIPT : justOneLang), logicReader);
439 cAxLogic.setLogic(cAxLogic.getLogic().replaceAll(STATE_NAME, CONDITION)
440 .replaceAll(TASK_NAME, cTask.getKey().getName()).replaceAll(STATE_NUMBER, "2"));
441 cTask.setTaskLogic(cAxLogic);
443 final AxTask aTask = new AxTask(new AxArtifactKey("Task_Action_0", "0.0.1"));
444 aTask.duplicateInputFields(event0002.getParameterMap());
445 aTask.duplicateOutputFields(event0003.getParameterMap());
446 final AxTaskLogic aAxLogic = new AxTaskLogic(aTask.getKey(), TASK_LOGIC,
447 (justOneLang == null ? "JAVA" : justOneLang), logicReader);
448 aAxLogic.setLogic(aAxLogic.getLogic().replaceAll(STATE_NAME, ACTION)
449 .replaceAll(TASK_NAME, aTask.getKey().getName()).replaceAll(STATE_NUMBER, "3"));
450 aTask.setTaskLogic(aAxLogic);
452 tasks.getTaskMap().put(eTask.getKey(), eTask);
453 tasks.getTaskMap().put(cTask.getKey(), cTask);
454 tasks.getTaskMap().put(aTask.getKey(), aTask);
456 final Set<AxArtifactKey> eventTasks = new TreeSet<>();
457 final Set<AxArtifactKey> conditionTasks = new TreeSet<>();
458 final Set<AxArtifactKey> actionTasks = new TreeSet<>();
460 for (final AxTask task : tasks.getTaskMap().values()) {
461 if (task.getKey().getName().contains(EVENT)) {
462 eventTasks.add(task.getKey());
464 if (task.getKey().getName().contains(CONDITION)) {
465 conditionTasks.add(task.getKey());
467 if (task.getKey().getName().contains(ACTION)) {
468 actionTasks.add(task.getKey());
471 final List<Set<AxArtifactKey>> taskReferenceList = new ArrayList<>();
472 taskReferenceList.add(eventTasks);
473 taskReferenceList.add(conditionTasks);
474 taskReferenceList.add(actionTasks);
476 final List<AxArtifactKey> p0InEventList = new ArrayList<>();
477 p0InEventList.add(event0000.getKey());
478 p0InEventList.add(event0001.getKey());
479 p0InEventList.add(event0002.getKey());
481 final List<AxArtifactKey> p0OutEventList = new ArrayList<>();
482 p0OutEventList.add(event0001.getKey());
483 p0OutEventList.add(event0002.getKey());
484 p0OutEventList.add(event0003.getKey());
486 final List<AxArtifactKey> p0defaultTaskList = new ArrayList<>();
487 p0defaultTaskList.add(tasks.get("Task_Event_0").getKey());
488 p0defaultTaskList.add(tasks.get("Task_Condition_0").getKey());
489 p0defaultTaskList.add(tasks.get("Task_Action_0").getKey());
491 final AxPolicy policy0 = new AxPolicy(new AxArtifactKey("ECAPolicy_0", "0.0.1"));
492 final List<String> axLogicExecutorTypeList = Arrays.asList((justOneLang == null ? JAVASCRIPT : justOneLang),
493 (justOneLang == null ? "MVEL" : justOneLang), (justOneLang == null ? JYTHON : justOneLang));
494 policy0.setStateMap(getEcaStateMap(policy0.getKey(), p0InEventList, p0OutEventList, axLogicExecutorTypeList,
495 p0defaultTaskList, taskReferenceList));
496 policy0.setFirstState(policy0.getStateMap().get(EVENT).getKey().getLocalName());
498 final AxPolicies policies = new AxPolicies(new AxArtifactKey("ECAPolicies", "0.0.1"));
499 policies.getPolicyMap().put(policy0.getKey(), policy0);
501 final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey("KeyInformation", "0.0.1"));
502 final AxPolicyModel policyModel = new AxPolicyModel(new AxArtifactKey("EvaluationPolicyModel_ECA", "0.0.1"));
503 policyModel.setPolicies(policies);
504 policyModel.setEvents(events);
505 policyModel.setTasks(tasks);
506 policyModel.setAlbums(new AxContextAlbums(new AxArtifactKey("Albums", "0.0.1")));
507 policyModel.setSchemas(schemas);
508 policyModel.setKeyInformation(keyInformation);
509 policyModel.getKeyInformation().generateKeyInfo(policyModel);
511 final AxValidationResult result = policyModel.validate(new AxValidationResult());
512 if (!result.isOk()) {
513 throw new ApexRuntimeException("model " + policyModel.getId() + " is not valid" + result);
519 * Gets the ECA state map.
521 * @param policyKey the policy key
522 * @param inEventKeyList the in event key list
523 * @param outEventKeyList the out event key list
524 * @param axLogicExecutorTypeList the ax logic executor type list
525 * @param defaultTaskList the default task list
526 * @param taskKeySetList the task key set list
527 * @return the ECA state map
529 private Map<String, AxState> getEcaStateMap(final AxArtifactKey policyKey, final List<AxArtifactKey> inEventKeyList,
530 final List<AxArtifactKey> outEventKeyList, final List<String> axLogicExecutorTypeList,
531 final List<AxArtifactKey> defaultTaskList, final List<Set<AxArtifactKey>> taskKeySetList) {
532 final AxLogicReader logicReader = new PolicyLogicReader().setLogicPackage(PACKAGE)
533 .setDefaultLogic("EvalState_Logic");
535 final AxState actionState = new AxState(new AxReferenceKey(policyKey, ACTION));
536 actionState.setTrigger(inEventKeyList.get(2));
537 final AxStateOutput action2Out = new AxStateOutput(actionState.getKey(), AxReferenceKey.getNullKey(),
538 outEventKeyList.get(2));
539 actionState.getStateOutputs().put(action2Out.getKey().getLocalName(), action2Out);
540 actionState.setTaskSelectionLogic(new AxTaskSelectionLogic(actionState.getKey(), TASK_SELECTION_LOGIC,
541 axLogicExecutorTypeList.get(2), logicReader));
542 actionState.setDefaultTask(defaultTaskList.get(2));
543 for (final AxArtifactKey taskKey : taskKeySetList.get(2)) {
544 actionState.getTaskReferences().put(taskKey,
545 new AxStateTaskReference(new AxReferenceKey(actionState.getKey(), taskKey.getName()),
546 AxStateTaskOutputType.DIRECT, action2Out.getKey()));
549 final AxState conditionState = new AxState(new AxReferenceKey(policyKey, CONDITION));
550 conditionState.setTrigger(inEventKeyList.get(1));
551 final AxStateOutput condition2Action = new AxStateOutput(conditionState.getKey(), actionState.getKey(),
552 outEventKeyList.get(1));
553 conditionState.getStateOutputs().put(condition2Action.getKey().getLocalName(), condition2Action);
554 conditionState.setTaskSelectionLogic(new AxTaskSelectionLogic(conditionState.getKey(), TASK_SELECTION_LOGIC,
555 axLogicExecutorTypeList.get(1), logicReader));
556 conditionState.setDefaultTask(defaultTaskList.get(1));
557 for (final AxArtifactKey taskKey : taskKeySetList.get(1)) {
558 conditionState.getTaskReferences().put(taskKey,
559 new AxStateTaskReference(new AxReferenceKey(conditionState.getKey(), taskKey.getName()),
560 AxStateTaskOutputType.DIRECT, condition2Action.getKey()));
563 final AxState eventState = new AxState(new AxReferenceKey(policyKey, EVENT));
564 eventState.setTrigger(inEventKeyList.get(0));
565 final AxStateOutput event2Condition = new AxStateOutput(eventState.getKey(), conditionState.getKey(),
566 outEventKeyList.get(0));
567 eventState.getStateOutputs().put(event2Condition.getKey().getLocalName(), event2Condition);
568 eventState.setTaskSelectionLogic(new AxTaskSelectionLogic(eventState.getKey(), TASK_SELECTION_LOGIC,
569 axLogicExecutorTypeList.get(0), logicReader));
570 eventState.setDefaultTask(defaultTaskList.get(0));
571 for (final AxArtifactKey taskKey : taskKeySetList.get(0)) {
572 eventState.getTaskReferences().put(taskKey,
573 new AxStateTaskReference(new AxReferenceKey(eventState.getKey(), taskKey.getName()),
574 AxStateTaskOutputType.DIRECT, event2Condition.getKey()));
577 final Map<String, AxState> stateMap = new TreeMap<>();
578 stateMap.put(eventState.getKey().getLocalName(), eventState);
579 stateMap.put(conditionState.getKey().getLocalName(), conditionState);
580 stateMap.put(actionState.getKey().getLocalName(), actionState);