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

nablarch.integration.workflow.dao.WorkflowInstanceDao Maven / Gradle / Ivy

package nablarch.integration.workflow.dao;

import java.util.List;

import nablarch.common.idgenerator.IdGenerator;
import nablarch.core.repository.initialization.Initializable;
import nablarch.core.util.StringUtil;

import nablarch.integration.workflow.definition.FlowNode;
import nablarch.integration.workflow.definition.Task;

/**
 * ワークフローのインスタンス状態保持DBへアクセスするクラス。
 *
 * @author hisaaki sioiri
 * @since 1.4.2
 */
public class WorkflowInstanceDao implements Initializable {

    /** インスタンステーブル定義 */
    private WorkflowInstanceSchema workflowInstanceSchema;

    /** インスタンスIDを採番するジェネレーター */
    private IdGenerator instanceIdGenerator;

    /** インスタンスIDの桁数(デフォルト10桁) */
    private int instanceIdLength = 10;

    /** インスタンスIDを採番するために使用する採番対象ID */
    private String instanceIdGenerateId;

    /** インスタンステーブルアクセス */
    private InstanceDao instanceDao;

    /** インスタンスフローノードテーブルアクセス */
    private InstanceFlowNodeDao instanceFlowNodeDao;

    /** 担当ユーザテーブルアクセス */
    private TaskAssignedUserDao taskAssignedUserDao;

    /** 担当グループテーブルアクセス */
    private TaskAssignedGroupDao taskAssignedGroupDao;

    /** アクティブフローノードテーブルアクセス */
    private ActiveFlowNodeDao activeFlowNodeDao;

    /** アクティブユーザタスク */
    private ActiveUserTaskDao activeUserTaskDao;

    /** アクティブグループタスク */
    private ActiveGroupTaskDao activeGroupTaskDao;

    /**
     * ワークフローインスタンの進行状態を登録する。
     *
     * @param workflowId ワークフローID
     * @param version バージョン
     * @param tasks タスクリスト
     * @return ワークフローインスタンスID
     */
    public String createWorkflowInstance(String workflowId, int version, List tasks) {
        String instanceId = StringUtil.lpad(
                instanceIdGenerator.generateId(instanceIdGenerateId), instanceIdLength, '0');
        instanceDao.insert(instanceId, workflowId, version);
        instanceFlowNodeDao.insert(instanceId, workflowId, version, tasks);
        return instanceId;
    }

    /**
     * 担当者を登録する。
     * 

* 担当者情報がすでに登録されていた場合は、洗い替えを行う。 * また、同一フローノードに割り当てられたグループ情報の削除処理も行う。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param users ユーザ情報 */ public void saveAssignedUser(String instanceId, String flowNodeId, List users) { taskAssignedGroupDao.delete(instanceId, flowNodeId); taskAssignedUserDao.delete(instanceId, flowNodeId); taskAssignedUserDao.insert(instanceId, flowNodeId, users); } /** * 指定された順を実行順として担当者を登録する。 *

* 担当者情報がすでに登録されていた場合は、洗い替えを行う。 * また、同一フローノードに割り当てられたグループ情報の削除処理も行う。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param users ユーザ情報 */ public void saveAssignedSequentialUser(String instanceId, String flowNodeId, List users) { taskAssignedUserDao.delete(instanceId, flowNodeId); taskAssignedUserDao.insertSequential(instanceId, flowNodeId, users); } /** * 担当グループを登録する。 *

* グループ情報がすでに登録されていた場合は、洗い替えを行う。 * また、同一フローノードに割り当てられた担当者情報の削除処理も行う。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param group グループ */ public void saveAssignedGroup(String instanceId, String flowNodeId, List group) { taskAssignedUserDao.delete(instanceId, flowNodeId); taskAssignedGroupDao.delete(instanceId, flowNodeId); taskAssignedGroupDao.insert(instanceId, flowNodeId, group); } /** * 指定された順を実行順として担当グループを登録する。 *

* グループ情報がすでに登録されていた場合は、洗い替えを行う。 * また、同一フローノードに割り当てられた担当者情報の削除処理も行う。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param groups グループ情報 */ public void saveAssignedSequentialGroup(String instanceId, String flowNodeId, List groups) { taskAssignedUserDao.delete(instanceId, flowNodeId); taskAssignedGroupDao.delete(instanceId, flowNodeId); taskAssignedGroupDao.insertSequential(instanceId, flowNodeId, groups); } /** * アクティブなフローノードの状態を登録する。 *

* すでにインスタンスIDに対応するアクティブなノードが登録されていた場合には、 * その情報を削除後に登録を行う。 * * @param instanceId インスタンスID * @param flowNode アクティブなフローノード */ public void saveActiveFlowNode(String instanceId, FlowNode flowNode) { activeUserTaskDao.delete(instanceId); activeGroupTaskDao.delete(instanceId); activeFlowNodeDao.delete(instanceId); activeFlowNodeDao.insert(instanceId, flowNode); } /** * アクティブユーザタスクテーブルにユーザ情報を登録する。 *

* インスタンスIDに紐づくデータが既に登録されていた場合には、そのデータを削除後に登録処理を行う。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param users 登録対象のユーザ情報 */ public void saveActiveUserTask(String instanceId, String flowNodeId, List users) { activeUserTaskDao.delete(instanceId); activeUserTaskDao.insert(instanceId, flowNodeId, users); } /** * アクティブユーザタスクテーブルからデータを削除する。 *

* 削除条件は以下のとおり *

    *
  • インスタンスID
  • *
  • フローノードID
  • *
  • ユーザ
  • *
* * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param user ユーザ */ public void deleteActiveUserTaskByUserId(String instanceId, String flowNodeId, String user) { activeUserTaskDao.delete(instanceId, flowNodeId, user); } /** * アクティブユーザタスクテーブルにユーザ情報を登録する。 *

* インスタンスIDに紐づくデータが既に登録されていた場合には、そのデータを削除後に登録処理を行う。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param user 登録対象のユーザ情報 * @param executionOrder 実行順 */ public void saveActiveUserTask(String instanceId, String flowNodeId, String user, int executionOrder) { activeUserTaskDao.delete(instanceId); activeUserTaskDao.insert(instanceId, flowNodeId, user, executionOrder); } /** * アクティブグループタスクテーブルにグループ情報を登録する。 *

* インスタンスIDに紐づくデータが既に登録されていた場合には、そのデータを削除後に登録処理を行う。 * * @param instanceId インスタンスId * @param flowNodeId フローノードID * @param groups グループ情報 */ public void saveActiveGroupTask(String instanceId, String flowNodeId, List groups) { activeGroupTaskDao.delete(instanceId); activeGroupTaskDao.insert(instanceId, flowNodeId, groups); } /** * アクティブグループタスクテーブルにグループ情報を登録する。 *

* インスタンスIDに紐づくデータが既に登録されていた場合には、そのデータを削除後に登録処理を行う。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param group 登録対象のグループ情報 * @param executionOrder 実行順 */ public void saveActiveGroupTask(String instanceId, String flowNodeId, String group, int executionOrder) { activeGroupTaskDao.delete(instanceId); activeGroupTaskDao.insert(instanceId, flowNodeId, group, executionOrder); } /** * アクティブグループタスクテーブルから引数で指定された条件に紐づくグループ情報を削除する。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param groupId グループID */ public void deleteActiveGroupTaskByGroupId(String instanceId, String flowNodeId, String groupId) { activeGroupTaskDao.delete(instanceId, flowNodeId, groupId); } /** * タスク担当ユーザを別のユーザに変更する。 *

* 変更対象のタスク担当ユーザが存在しない場合は、本処理は何もしない。 * * @param instanceId インスタンスID * @param flowNodeId フローノード(タスク)ID * @param oldUser 元グループ * @param newUser 新しいグループ */ public void changeAssignedUser(String instanceId, String flowNodeId, String oldUser, String newUser) { TaskAssignedUserEntity oldUserInfo = taskAssignedUserDao.find(instanceId, flowNodeId, oldUser); if (oldUserInfo == null) { return; } taskAssignedUserDao.delete(instanceId, flowNodeId, oldUser); taskAssignedUserDao.insert(instanceId, flowNodeId, newUser, oldUserInfo.getExecutionOrder()); } /** * アクティブユーザタスクの情報を別のユーザに変更する。 *

* 変更対象のアクティブユーザタスクが存在しない場合は、本処理は何もしない。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param oldUser 元ユーザ * @param newUser 新しいユーザ */ public void changeActiveUser(String instanceId, String flowNodeId, String oldUser, String newUser) { ActiveUserTaskEntity oldUserInfo = activeUserTaskDao.find(instanceId, flowNodeId, oldUser); if (oldUserInfo == null) { return; } activeUserTaskDao.delete(instanceId, flowNodeId, oldUser); activeUserTaskDao.insert(instanceId, flowNodeId, newUser, oldUserInfo.getExecutionOrder()); } /** * タスク担当グループを別のグループに変更する。 *

* 変更対象のタスク担当グループが存在しない場合は、本処理は何もしない。 * * @param instanceId インスタンスID * @param flowNodeId フローノード(タスク)ID * @param oldGroup 元グループ * @param newGroup 新しいグループ */ public void changeAssignedGroup(String instanceId, String flowNodeId, String oldGroup, String newGroup) { TaskAssignedGroupEntity oldGroupInfo = taskAssignedGroupDao.find(instanceId, flowNodeId, oldGroup); if (oldGroupInfo == null) { return; } taskAssignedGroupDao.delete(instanceId, flowNodeId, oldGroup); taskAssignedGroupDao.insert(instanceId, flowNodeId, newGroup, oldGroupInfo.getExecutionOrder()); } /** * アクティブグループタスクを別のグループに変更する。 *

* 変更対象のアクティブグループタスクが存在しない場合は、本処理は何もしない。 * * @param instanceId インスタンスID * @param flowNodeId フローノード(タスク)ID * @param oldGroup 元グループ * @param newGroup 新しいグループ */ public void changeActiveGroup(String instanceId, String flowNodeId, String oldGroup, String newGroup) { ActiveGroupTaskEntity oldGroupInfo = activeGroupTaskDao.find(instanceId, flowNodeId, oldGroup); if (oldGroupInfo == null) { return; } // アクティブグループが存在する場合のみ更新 activeGroupTaskDao.delete(instanceId, flowNodeId, oldGroup); activeGroupTaskDao.insert(instanceId, flowNodeId, newGroup, oldGroupInfo.getExecutionOrder()); } /** * インスタンスIDに紐づくデータを全て削除する。 * * @param instanceId インスタンスID */ public void deleteInstance(String instanceId) { activeUserTaskDao.delete(instanceId); activeGroupTaskDao.delete(instanceId); activeFlowNodeDao.delete(instanceId); taskAssignedUserDao.delete(instanceId); taskAssignedGroupDao.delete(instanceId); instanceFlowNodeDao.delete(instanceId); instanceDao.delete(instanceId); } /** * インスタンスIDに紐づくインスタンス情報を取得する。 * * @param instanceId インスタンスID * @return インスタンス情報 */ public WorkflowInstanceEntity findInstance(String instanceId) { return instanceDao.find(instanceId); } /** * インスタンスIDとフローノードIDに紐づく担当ユーザ情報を取得する。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @return 担当ユーザ情報 */ public List findTaskAssignedUser(String instanceId, String flowNodeId) { return taskAssignedUserDao.find(instanceId, flowNodeId); } /** * インスタンスIDとフローノードIDに紐づく担当グループ情報を取得する。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @return 担当グループ情報 */ public List findTaskAssignedGroup(String instanceId, String flowNodeId) { return taskAssignedGroupDao.find(instanceId, flowNodeId); } /** * アクティブフローノードを取得する。 * * @param instanceId インスタンスID * @return アクティブフローノード */ public ActiveFlowNodeEntity findActiveFlowNode(String instanceId) { return activeFlowNodeDao.find(instanceId); } /** * アクティブユーザタスクを取得する。 * * @param instanceId インスタンスID * @return アクティブユーザタスク情報 */ public List findActiveUserTask(String instanceId) { return activeUserTaskDao.find(instanceId); } /** * ユーザID指定でアクティブユーザタスクを取得する。 *

* 指定したユーザに対応するアクティブユーザタスクが存在しない場合は、nullを返却する。 * * @param user ユーザ * @param flowNodeId フローノードID * @param instanceId インスタンスID * @return 取得結果(存在しない場合はnull) */ public ActiveUserTaskEntity findActiveUserTaskByPk(String user, String flowNodeId, String instanceId) { return activeUserTaskDao.find(instanceId, flowNodeId, user); } /** * インスタンスIDに紐づくアクティブグループタスクを取得する。 * * @param instanceId インスタンスID * @return アクティブグループタスク情報 */ public List findActiveGroupTask(String instanceId) { return activeGroupTaskDao.find(instanceId); } /** * グループID指定でアクティブグループタスクを取得する。 *

* 指定したグループに対応するアクティブグループタスクが存在しない場合は、nullを返却する。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @param group グループ * @return 取得結果(存在しない場合はnull) */ public ActiveGroupTaskEntity findActiveGroupTaskByPk(String instanceId, String flowNodeId, String group) { return activeGroupTaskDao.find(instanceId, flowNodeId, group); } /** * アクティブユーザタスク数を取得する。 * * @param instanceId インスタンスID * @return アクティブなユーザタスク数 */ public int getActiveUserTaskCount(String instanceId) { return activeUserTaskDao.count(instanceId); } /** * 担当ユーザを指定して、アクティブユーザタスク数を取得する。 * * @param instanceId インスタンスID * @param flowNodeId フローノード * @param user 担当ユーザ * @return アクティブなユーザタスク数 */ public int getActiveUserTaskCountByPk(String instanceId, String flowNodeId, String user) { return activeUserTaskDao.countByPk(instanceId, flowNodeId, user); } /** * タスク担当ユーザ数を取得する。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @return タスクに割り当てされたユーザ数 */ public int getTaskAssignedUserCount(String instanceId, String flowNodeId) { return taskAssignedUserDao.count(instanceId, flowNodeId); } /** * アクティブグループタスク数を取得する。 * * @param instanceId インスタンスID * @return アクティブなグループタスク数 */ public int getActiveGroupTaskCount(String instanceId) { return activeGroupTaskDao.count(instanceId); } /** * 担当グループを指定して、アクティブグループタスク数を取得する。 * * @param instanceId インスタンスID * @param flowNodeId フローノード * @param group 担当グループ * @return アクティブなグループタスク数 */ public int getActiveGroupTaskCountByPk(String instanceId, String flowNodeId, String group) { return activeGroupTaskDao.countByPk(instanceId, flowNodeId, group); } /** * タスク担当グループ数を取得する。 * * @param instanceId インスタンスID * @param flowNodeId フローノードID * @return タスクに割り当てられたグループ数 */ public int getTaskAssignedGroupCount(String instanceId, String flowNodeId) { return taskAssignedGroupDao.count(instanceId, flowNodeId); } /** * ワークフローインスタンステーブルの定義情報を設定する。 * * @param workflowInstanceSchema ワークフローインスタンステーブルの定義情報 */ public void setWorkflowInstanceSchema(WorkflowInstanceSchema workflowInstanceSchema) { this.workflowInstanceSchema = workflowInstanceSchema; } /** * インスタンスIDを採番するジェネレーターを設定する。 * * @param instanceIdGenerator インスタンスIDを採番するジェネレーター */ public void setInstanceIdGenerator(IdGenerator instanceIdGenerator) { this.instanceIdGenerator = instanceIdGenerator; } /** * インスタンスIDを採番する際に使用する採番対象IDを設定する。 * * @param instanceIdGenerateId インスタンスIDを採番する際に使用する採番対象ID * @see {@link IdGenerator} */ public void setInstanceIdGenerateId(String instanceIdGenerateId) { this.instanceIdGenerateId = instanceIdGenerateId; } /** * インスタンスIDの桁数を設定する。 *

* インスタンスIDは、指定された桁数となるよう先頭に"0"を付加する。 * 設定を省略した場合は、10桁のインスタンスIDが採番される。 * * @param instanceIdLength インスタンスIDの桁数 */ public void setInstanceIdLength(int instanceIdLength) { this.instanceIdLength = instanceIdLength; } /** * 初期化処理を行う。 */ @Override public void initialize() { instanceDao = new InstanceDao(workflowInstanceSchema); instanceFlowNodeDao = new InstanceFlowNodeDao(workflowInstanceSchema); taskAssignedUserDao = new TaskAssignedUserDao(workflowInstanceSchema); taskAssignedGroupDao = new TaskAssignedGroupDao(workflowInstanceSchema); activeFlowNodeDao = new ActiveFlowNodeDao(workflowInstanceSchema); activeUserTaskDao = new ActiveUserTaskDao(workflowInstanceSchema); activeGroupTaskDao = new ActiveGroupTaskDao(workflowInstanceSchema); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy