tmf.xml: Move all .core and .ui packages to internal
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.analysis.xml.core / src / org / eclipse / tracecompass / internal / tmf / analysis / xml / core / model / TmfXmlScenario.java
1 /*******************************************************************************
2 * Copyright (c) 2016 Ecole Polytechnique de Montreal, Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 ******************************************************************************/
9 package org.eclipse.tracecompass.internal.tmf.analysis.xml.core.model;
10
11 import java.util.List;
12
13 import org.eclipse.jdt.annotation.NonNull;
14 import org.eclipse.jdt.annotation.Nullable;
15 import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.model.TmfXmlScenarioHistoryBuilder.ScenarioStatusType;
16 import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.IXmlStateSystemContainer;
17 import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.pattern.stateprovider.XmlPatternStateProvider;
18 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
19
20 /**
21 * This Class implements a Scenario in the XML-defined state system
22 */
23 public class TmfXmlScenario {
24
25 private final IXmlStateSystemContainer fContainer;
26 private final TmfXmlFsm fFsm;
27 private TmfXmlPatternEventHandler fPatternHandler;
28 private TmfXmlScenarioInfo fScenarioInfo;
29 TmfXmlScenarioHistoryBuilder fHistoryBuilder;
30
31 /**
32 * Constructor
33 *
34 * @param event
35 * The event at which this scenario is created
36 * @param patternHandler
37 * The filter handler
38 * @param fsmId
39 * the id of the fsm executed by this scenario
40 * @param container
41 * The state system container this scenario belongs to
42 * @param modelFactory
43 * The model factory
44 */
45 public TmfXmlScenario(@Nullable ITmfEvent event, TmfXmlPatternEventHandler patternHandler, String fsmId, IXmlStateSystemContainer container, ITmfXmlModelFactory modelFactory) {
46 TmfXmlFsm fsm = patternHandler.getFsm(fsmId);
47 if (fsm == null) {
48 throw new IllegalArgumentException(fsmId + "has not been declared."); //$NON-NLS-1$
49 }
50 fFsm = fsm;
51 fContainer = container;
52 fHistoryBuilder = ((XmlPatternStateProvider) container).getHistoryBuilder();
53 fPatternHandler = patternHandler;
54 int quark = fHistoryBuilder.assignScenarioQuark(fContainer, fsmId);
55 int statusQuark = fHistoryBuilder.getScenarioStatusQuark(fContainer, quark);
56 fScenarioInfo = new TmfXmlScenarioInfo(fFsm.getInitialStateId(), ScenarioStatusType.PENDING, quark, statusQuark, fFsm);
57 fHistoryBuilder.update(fContainer, fScenarioInfo, event);
58 }
59
60 /**
61 * Get this scenario infos
62 *
63 * @return The scenario info
64 */
65 public TmfXmlScenarioInfo getScenarioInfos() {
66 return fScenarioInfo;
67 }
68
69 /**
70 * Cancel the execution of this scenario
71 */
72 public void cancel() {
73 fScenarioInfo.setStatus(ScenarioStatusType.ABANDONED);
74 if (fScenarioInfo.getStatus() != ScenarioStatusType.PENDING) {
75 fHistoryBuilder.completeScenario(fContainer, fScenarioInfo, null);
76 }
77 }
78
79 /**
80 * Test if the scenario is active or not
81 *
82 * @return True if the scenario is active, false otherwise
83 */
84 public boolean isActive() {
85 return fScenarioInfo.getStatus().equals(ScenarioStatusType.PENDING) || fScenarioInfo.getStatus().equals(ScenarioStatusType.IN_PROGRESS);
86 }
87
88 /**
89 * Handle the ongoing event
90 *
91 * @param event
92 * The ongoing event
93 */
94 public void handleEvent(ITmfEvent event) {
95
96 TmfXmlStateTransition out = fFsm.next(event, fPatternHandler.getTestMap(), fScenarioInfo);
97 if (out == null) {
98 return;
99 }
100
101 // Processing the actions in the transition
102 final List<String> actions = out.getAction();
103 for (String actionId : actions) {
104 ITmfXmlAction action = fPatternHandler.getActionMap().get(actionId);
105 if (action != null) {
106 action.execute(event, fScenarioInfo);
107 } else {
108 throw new IllegalStateException("Action " + actionId + " cannot be found."); //$NON-NLS-1$ //$NON-NLS-2$
109 }
110 }
111
112 // Change the activeState
113 final @NonNull String nextState = out.getTarget();
114 if (fScenarioInfo.getStatus().equals(ScenarioStatusType.PENDING)) {
115 fScenarioInfo.setStatus(ScenarioStatusType.IN_PROGRESS);
116 fHistoryBuilder.startScenario(fContainer, fScenarioInfo, event);
117 } else if (nextState.equals(fFsm.getAbandonStateId())) {
118 fScenarioInfo.setStatus(ScenarioStatusType.ABANDONED);
119 fHistoryBuilder.completeScenario(fContainer, fScenarioInfo, event);
120 } else if (nextState.equals(fFsm.getFinalStateId())) {
121 fScenarioInfo.setStatus(ScenarioStatusType.MATCHED);
122 fHistoryBuilder.completeScenario(fContainer, fScenarioInfo, event);
123 }
124 fScenarioInfo.setActiveState(nextState);
125 fHistoryBuilder.update(fContainer, fScenarioInfo, event);
126 }
127
128 }
This page took 0.045914 seconds and 5 git commands to generate.