nablarch.tool.statemachine.ParentProcessValidator Maven / Gradle / Ivy
package nablarch.tool.statemachine;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.xml.bind.JAXBElement;
import org.omg.spec.bpmn._20100524.model.TBoundaryEvent;
import org.omg.spec.bpmn._20100524.model.TEndEvent;
import org.omg.spec.bpmn._20100524.model.TFlowElement;
import org.omg.spec.bpmn._20100524.model.TGateway;
import org.omg.spec.bpmn._20100524.model.TProcess;
import org.omg.spec.bpmn._20100524.model.TSequenceFlow;
import org.omg.spec.bpmn._20100524.model.TStartEvent;
import org.omg.spec.bpmn._20100524.model.TSubProcess;
import org.omg.spec.bpmn._20100524.model.TTask;
/**
* 親プロセスのバリデーションを行う{@link Validator}。
*/
public class ParentProcessValidator implements Validator {
/** プロセス */
private final TProcess process;
/**
* インスタンスを生成する。
* @param process プロセス
*/
public ParentProcessValidator(final TProcess process) {
this.process = process;
}
@Override
public void validate(final ValidateContext context) {
for (final Validator validator : createValidator()) {
validator.validate(context);
}
for (final SubProcessValidator subProcessValidator : getSubProcessValidator()) {
subProcessValidator.validate(context);
}
}
/**
* プロセスに定義されている各要素をバリデーションする{@link Validator}を生成する。
* @return バリデータリスト
*/
private List createValidator() {
return Arrays.asList(
new StartEventValidator(getStartEvent()),
new EndEventValidator(getEndEvent()),
new TaskValidator(getTask(), getBoundaryEvent()),
new BoundaryEventValidator(getBoundaryEvent()),
new GatewayValidator(getGateway(), getSequenceFlowList()),
FlowElementValidator.create(process)
);
}
/**
* 開始イベントリストを取得する。
* @return 開始イベントリスト
*/
private List getStartEvent() {
final List startEvents = new ArrayList();
for (final JAXBElement extends TFlowElement> element : process.getFlowElement()) {
if (element.getValue() instanceof TStartEvent) {
startEvents.add((TStartEvent) element.getValue());
}
}
return startEvents;
}
/**
* 停止イベントリストを取得する。
* @return 停止イベントリスト
*/
private List getEndEvent() {
final List endEvents = new ArrayList();
for (final JAXBElement extends TFlowElement> element : process.getFlowElement()) {
if (element.getValue() instanceof TEndEvent) {
endEvents.add((TEndEvent) element.getValue());
}
}
return endEvents;
}
/**
* タスクリストを取得する。
* @return タスクリスト
*/
private List getTask() {
final List tasks = new ArrayList();
for (JAXBElement extends TFlowElement> element : process.getFlowElement()) {
if (element.getValue() instanceof TTask) {
tasks.add((TTask) element.getValue());
}
}
return tasks;
}
/**
* 境界イベントリストを取得する。
* @return 境界イベントリスト
*/
private List getBoundaryEvent() {
final List boundaryEvents = new ArrayList();
for (JAXBElement extends TFlowElement> element : process.getFlowElement()) {
if (element.getValue() instanceof TBoundaryEvent) {
boundaryEvents.add((TBoundaryEvent) element.getValue());
}
}
return boundaryEvents;
}
/**
* サブプロセスのバリデータリストを取得する。
* @return サブプロセスのバリデータリスト
*/
private List getSubProcessValidator() {
final List subProcess = new ArrayList();
for (final JAXBElement extends TFlowElement> element : process.getFlowElement()) {
if (element.getValue() instanceof TSubProcess) {
subProcess.add(new SubProcessValidator((TSubProcess) element.getValue()));
}
}
return subProcess;
}
/**
* ゲートウェイリストを取得する。
* @return ゲートウェイリスト
*/
private List getGateway() {
final List gateways = new ArrayList();
for (final JAXBElement extends TFlowElement> element : process.getFlowElement()) {
if (element.getValue() instanceof TGateway) {
gateways.add((TGateway) element.getValue());
}
}
return gateways;
}
/**
* シーケンスフローのリストを取得する。
* @return シーケンスフローのリスト
*/
private List getSequenceFlowList() {
final List flows = new ArrayList();
for (final JAXBElement extends TFlowElement> element : process.getFlowElement()) {
if (element.getValue() instanceof TSequenceFlow) {
flows.add((TSequenceFlow) element.getValue());
}
}
return flows;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy