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

nablarch.integration.workflow.definition.FlowNode Maven / Gradle / Ivy

package nablarch.integration.workflow.definition;

import java.util.Collections;
import java.util.List;
import java.util.Map;

import nablarch.integration.workflow.WorkflowConfig;
import nablarch.integration.workflow.dao.WorkflowInstanceDao;

/**
 * フローノード定義を表すクラス。
 *
 * @author hisaaki sioiri
 * @since 1.4.2
 */
public abstract class FlowNode {

    /** フローノードID */
    private final String flowNodeId;

    /** フローノード名 */
    private final String flowNodeName;

    /** レーンID */
    private final String laneId;

    /** シーケンスフロー(自身をソースとするシーケンスフローのリスト) */
    private final List sequenceFlows;

    /**
     * フローノード定義を表すクラス。
     *
     * @param flowNodeId フローノードID
     * @param flowNodeName フローノード名
     * @param laneId レーンID
     * @param sequenceFlows 自身をソースとするシーケンスフローのリスト
     */
    public FlowNode(
            String flowNodeId, String flowNodeName, String laneId, List sequenceFlows) {
        this.flowNodeId = flowNodeId;
        this.flowNodeName = flowNodeName;
        this.laneId = laneId;
        this.sequenceFlows = ((sequenceFlows == null) ? null : Collections.unmodifiableList(sequenceFlows));
    }

    /**
     * フローノードIDを取得する。
     *
     * @return フローノードID
     */
    public String getFlowNodeId() {
        return flowNodeId;
    }

    /**
     * フローノード名を取得する。
     *
     * @return フローノード名
     */
    public String getFlowNodeName() {
        return flowNodeName;
    }

    /**
     * レーンIDを取得する。
     *
     * @return レーンID
     */
    public String getLaneId() {
        return laneId;
    }

    /**
     * 自身をソースとするシーケンスフローのリスト。
     *
     * @return 自身をソースとするシーケンスフロー
     */
    public List getSequenceFlows() {
        return sequenceFlows;
    }

    /**
     * 遷移先のフローノードを取得する。
     * 

* 自身を遷移元とするシーケンスフローが1つしか存在しない場合は、 * そのシーケンスフローの遷移先を遷移先のフローノードとして返却する。 *

* シーケンスフローが複数存在している場合には、本メソッドでは{@link java.lang.IllegalStateException}を送出する。 * 複数の遷移先をサポートする必要がある場合には、本クラスの具象クラス側にて実装を行う必要がある。 * * @param instanceId インスタンスID * @param parameter パラメータ * @return 遷移先のフローノードID */ public String getNextFlowNodeId(String instanceId, Map parameter) { if ((sequenceFlows == null) || (sequenceFlows.size() != 1)) { throw new IllegalStateException(String.format( "there are multiple or empty sequence flow. single must be sequence flow. instanceId = [%s], flowNodeId = [%s]", instanceId, flowNodeId)); } return sequenceFlows.get(0).getTargetFlowNodeId(); } /** * フローノードのアクティブ化処理を行う。 * * @param instanceId アクティブ化処理を行う対象のワークフローインスタンスID * @param parameter アクティブ化時に使用するパラメータ */ public void activate(String instanceId, Map parameter) { } /** * ユーザタスクとして、フローノード上での処理を行う。フローノードでの処理が完了し、ワークフローを次のノードに進めてよい場合は {@code true} を返却する。 * * @param instanceId 対象のワークフローインスタンスID * @param parameter ワークフローの進行時に使用するパラメータ * @param executor このノードでの処理を実行しているユーザ * @return 次のフローノードにワークフローを進行させて良い場合は {@code true} */ public boolean processNodeByUser(String instanceId, Map parameter, String executor) { return true; } /** * グループタスクとして、フローノード上での処理を行う。フローノードでの処理が完了し、ワークフローを次のノードに進めてよい場合は {@code true} を返却する。 * * @param instanceId 対象のワークフローインスタンスID * @param parameter ワークフローの進行時に使用するパラメータ * @param executor このノードでの処理を実行しているグループ * @return 次のフローノードにワークフローを進行させて良い場合は {@code true} */ public boolean processNodeByGroup(String instanceId, Map parameter, String executor) { return true; } /** * ワークフローインスタンス系テーブルへのアクセスクラスを取得する。 * * @return ワークフローインスタンスDAO */ protected WorkflowInstanceDao getWorkflowInstanceDao() { return WorkflowConfig.get().getWorkflowInstanceDao(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy