org.jbpm.simulation.PathContext Maven / Gradle / Ivy
/*
* Copyright 2015 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.simulation;
import java.util.*;
import org.eclipse.bpmn2.FlowElement;
import org.eclipse.bpmn2.SequenceFlow;
public class PathContext {
private final int maxElementsSize = Integer.parseInt(System.getProperty("org.jbpm.simulation.max.elements", "500"));
public enum Type {
ROOT,
ACTIVE,
COMPLETED,
TEMP;
}
private Set pathElements = new LinkedHashSet();
private Type type;
private boolean canBeFinished = true;
private boolean locked = false;
private String id;
private int canBeFinishedCounter = 0;
private String pathId;
private Set visitedSplitPoint = new LinkedHashSet();
private FlowElement splitOrigin = null;
protected int getCanBeFinishedCounter() {
return canBeFinishedCounter;
}
protected void setCanBeFinishedCounter(int canBeFinishedCounter) {
this.canBeFinishedCounter = canBeFinishedCounter;
}
public PathContext() {
this.id = String.valueOf(UUID.randomUUID());
this.setType(Type.ROOT);
}
public PathContext(Type type) {
this.id = String.valueOf(UUID.randomUUID());
this.setType(type);
}
public void addPathElement(FlowElement element) {
checkSize();
if (!locked) {
this.pathElements.add(element);
}
}
public void removePathElement(FlowElement element) {
if (!locked) {
this.pathElements.remove(element);
}
}
public void addAllPathElement(List elements) {
checkSize();
if (!locked) {
this.pathElements.addAll(elements);
}
}
public Set getPathElements() {
this.pathElements.removeIf(Objects::isNull);
return this.pathElements;
}
public void setPathElements(Set pathElements) {
this.pathElements = pathElements;
}
public boolean isCanBeFinished() {
return canBeFinished;
}
public void setCanBeFinishedNoIncrement(boolean canBeFinished) {
this.canBeFinished = canBeFinished;
}
public void setCanBeFinished(boolean canBeFinished) {
if (canBeFinished) {
if (canBeFinishedCounter == 1) {
this.canBeFinished = true;
}
canBeFinishedCounter--;
} else {
if (canBeFinishedCounter == 0) {
this.canBeFinished = false;
}
canBeFinishedCounter++;
}
}
public Type getType() {
return type;
}
public void setType(Type type) {
this.type = type;
}
public boolean isLocked() {
return locked;
}
public void setLocked(boolean locked) {
this.locked = locked;
}
public String getId() {
return this.id;
}
public String getPathId() {
return pathId;
}
public void setPathId(String pathId) {
this.pathId = pathId;
}
public void addVisitedSplitPoint(FlowElement element) {
this.visitedSplitPoint.add(element);
}
public Set getVisitedSplitPoint() {
return visitedSplitPoint;
}
public void setVisitedSplitPoint(Set visitedSplitPoint) {
this.visitedSplitPoint = visitedSplitPoint;
}
protected void checkSize() {
if (pathElements.size() > maxElementsSize) {
throw new RuntimeException("Unable to calculate path elements of the process - max size (" + maxElementsSize + ") of elements exceeded");
}
}
public FlowElement getSplitOrigin() {
return splitOrigin;
}
public void setSplitOrigin(FlowElement splitOrigin) {
this.splitOrigin = splitOrigin;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy