All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 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 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 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 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 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 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 element : process.getFlowElement()) {
            if (element.getValue() instanceof TSequenceFlow) {
                flows.add((TSequenceFlow) element.getValue());
            }
        }
        return flows;
    }
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy