/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.test.container.listeners; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.kie.api.event.process.DefaultProcessEventListener; import org.kie.api.event.process.ProcessCompletedEvent; import org.kie.api.event.process.ProcessNodeLeftEvent; import org.kie.api.event.process.ProcessNodeTriggeredEvent; import org.kie.api.event.process.ProcessStartedEvent; import org.kie.api.event.process.ProcessVariableChangedEvent; import org.kie.api.runtime.process.ProcessInstance; public class TrackingProcessEventListener extends DefaultProcessEventListener { private final List<String> processesStarted = new ArrayList<String>(); private final List<String> processesCompleted = new ArrayList<String>(); private final List<String> processesAborted = new ArrayList<String>(); private final List<String> nodesTriggered = new ArrayList<String>(); private final List<String> nodesLeft = new ArrayList<String>(); private final List<String> variablesChanged = new ArrayList<String>(); @Override public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) { nodesTriggered.add(event.getNodeInstance().getNodeName()); } @Override public void beforeNodeLeft(ProcessNodeLeftEvent event) { nodesLeft.add(event.getNodeInstance().getNodeName()); } @Override public void beforeProcessStarted(ProcessStartedEvent event) { processesStarted.add(event.getProcessInstance().getProcessId()); } @Override public void beforeProcessCompleted(ProcessCompletedEvent event) { if (event.getProcessInstance().getState() == ProcessInstance.STATE_ABORTED) { processesAborted.add(event.getProcessInstance().getProcessId()); } else { processesCompleted.add(event.getProcessInstance().getProcessId()); } } @Override public void beforeVariableChanged(ProcessVariableChangedEvent event) { variablesChanged.add(event.getVariableId()); } public List<String> getNodesTriggered() { return Collections.unmodifiableList(nodesTriggered); } public List<String> getNodesLeft() { return Collections.unmodifiableList(nodesLeft); } public List<String> getProcessesStarted() { return Collections.unmodifiableList(processesStarted); } public List<String> getProcessesCompleted() { return Collections.unmodifiableList(processesCompleted); } public List<String> getProcessesAborted() { return Collections.unmodifiableList(processesAborted); } public List<String> getVariablesChanged() { return Collections.unmodifiableList(variablesChanged); } public boolean wasNodeTriggered(String nodeName) { return nodesTriggered.contains(nodeName); } public boolean wasNodeLeft(String nodeName) { return nodesLeft.contains(nodeName); } public boolean wasProcessStarted(String processName) { return processesStarted.contains(processName); } public boolean wasProcessCompleted(String processName) { return processesCompleted.contains(processName); } public boolean wasProcessAborted(String processName) { return processesAborted.contains(processName); } public boolean wasVariableChanged(String variableId) { return variablesChanged.contains(variableId); } public void clear() { nodesTriggered.clear(); nodesLeft.clear(); processesStarted.clear(); processesCompleted.clear(); processesAborted.clear(); variablesChanged.clear(); } }