
nablarch.integration.workflow.WorkflowInstance Maven / Gradle / Ivy
package nablarch.integration.workflow;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* ワークフローインスタンスをあらわすインタフェース。
*
* @author Ryo Tanaka
* @since 1.4.2
*/
public interface WorkflowInstance {
/**
* アクティブユーザタスクを完了させた後、ワークフロー定義に従ってワークフローを進行させ、ワークフローインスタンスのアクティブフローノードを次のタスク
* もしくは停止イベントに進行させる。
*
* @throws IllegalStateException 終了させる対象のアクティブユーザタスクが見つからない場合。
*/
void completeUserTask() throws IllegalStateException;
/**
* アクティブユーザタスクを完了させた後、ワークフロー定義に従ってワークフローを進行させ、ワークフローインスタンスのアクティブフローノードを次のタスク
* もしくは停止イベントに進行させる。
*
* @param assigned タスクを完了させるユーザ
* @throws IllegalStateException {@code assigned} に対してアクティブユーザタスクが見つからない場合。
*/
void completeUserTask(String assigned) throws IllegalStateException;
/**
* アクティブユーザタスクを完了させた後、ワークフロー定義に従ってワークフローを進行させ、ワークフローインスタンスのアクティブフローノードを次のタスク
* もしくは停止イベントに進行させる。
*
* @param parameter ワークフローを進行させる際に、各フローノードで使用するパラメータ
* @throws IllegalStateException 終了させる対象のアクティブユーザタスクが見つからない場合。
*/
void completeUserTask(Map parameter) throws IllegalStateException;
/**
* アクティブユーザタスクを完了させた後、ワークフロー定義に従ってワークフローを進行させ、ワークフローインスタンスのアクティブフローノードを次のタスク
* もしくは停止イベントに進行させる。
*
* @param parameter ワークフローを進行させる際に、各フローノードで使用するパラメータ
* @param assigned タスクを完了させるユーザ
* @throws IllegalStateException {@code assigned} に対してアクティブユーザタスクが見つからない場合、またはワークフローが既に完了している場合。
*/
void completeUserTask(Map parameter, String assigned) throws IllegalStateException;
/**
* アクティブグループタスクを完了させた後、ワークフロー定義に従ってワークフローを進行させ、ワークフローインスタンスのアクティブフローノードを次のタスク
* もしくは停止イベントに進行させる。
*
* @param assigned タスクを完了させるグループ
* @throws IllegalStateException {@code assigned} に対してアクティブグループタスクが見つからない場合、またはワークフローが既に完了している場合。
*/
void completeGroupTask(String assigned) throws IllegalStateException;
/**
* アクティブグループタスクを完了させた後、ワークフロー定義に従ってワークフローを進行させ、ワークフローインスタンスのアクティブフローノードを次のタスク
* もしくは停止イベントに進行させる。
*
* @param parameter ワークフローを進行させる際に、各フローノードで使用するパラメータ
* @param assigned タスクを完了させるグループ
* @throws IllegalStateException {@code assigned} に対してアクティブグループタスクが見つからない場合、またはワークフローが既に完了している場合。
*/
void completeGroupTask(Map parameter, String assigned) throws IllegalStateException;
/**
* アクティブフローノードから、境界イベントトリガーIDに対応する境界イベントを取得し、現在のタスクを中断して、境界イベントから取得される進行先フローノードに
* ワークフローを進行させる。
*
* @param eventTriggerId 境界イベントトリガーID
* @throws IllegalStateException アクティブフローノードから、境界イベントトリガーIDに対応する境界イベントを取得できなかった場合。
*/
void triggerEvent(String eventTriggerId) throws IllegalStateException;
/**
* アクティブフローノードから、境界イベントトリガーIDに対応する境界イベントを取得し、現在のタスクを中断して、境界イベントから取得される進行先フローノードに
* ワークフローを進行させる。
*
* @param eventTriggerId 境界イベントトリガーID
* @param parameter ワークフローを進行させる際に利用するパラメータ
* @throws IllegalStateException アクティブフローノードから、境界イベントトリガーIDに対応する境界イベントを取得できなかった場合。
*/
void triggerEvent(String eventTriggerId, Map parameter) throws IllegalStateException;
/**
* タスクに担当ユーザを割り当てる。
*
* @param taskId 担当ユーザを割り当てる対象のタスク
* @param user 担当ユーザ
* @throws IllegalStateException ワークフローがすでに完了している場合
* @throws IllegalArgumentException 指定されたタスクが存在しない場合
*/
void assignUser(String taskId, String user) throws IllegalStateException, IllegalArgumentException;
/**
* タスクに担当ユーザを割り当てる。マルチインスタンスでないタスクに対しては、複数ユーザを割り当てることは出来ない。
*
* マルチインスタンスタスクで、シーケンシャルタイプの場合は、指定された担当ユーザの順序がタスクの実行順となる。
* すでにタスクに担当ユーザや担当グループが割り当てられている場合、それらの情報はクリアされ、今回設定した担当ユーザのみが有効となる。
*
* @param taskId タスクID
* @param users 担当ユーザリスト
* @throws IllegalStateException ワークフローがすでに完了している場合
* @throws IllegalArgumentException 指定されたタスクが存在しない場合、もしくはマルチインスタンスでないタスクに複数ユーザを割り当てようとした場合。
*/
void assignUsers(String taskId, List users) throws IllegalStateException, IllegalArgumentException;
/**
* タスクに担当グループを割り当てる。
*
* すでにタスクに担当ユーザや担当グループが割り当てられている場合、それらの情報はクリアされ、今回設定した担当グループ情報のみが有効となる。
*
* @param taskId タスクのフローノードID
* @param group 担当グループ
* @throws IllegalStateException ワークフローがすでに完了している場合
* @throws IllegalArgumentException 指定されたタスクが存在しない場合
*/
void assignGroup(String taskId, String group) throws IllegalStateException, IllegalArgumentException;
/**
* タスクに担当グループを割り当てる。マルチインスタンスでないタスクに対しては、複数グループを割り当てることは出来ない。
*
* マルチインスタンスタスクで、シーケンシャルタイプの場合は、指定された担当グループの順序がタスクの実行順となる。
* すでにタスクに担当ユーザや担当グループが割り当てられている場合、それらの情報はクリアされ、今回設定した担当ユーザのみが有効となる。
*
* @param taskId タスクのフローノードID
* @param groups 担当グループ
* @throws IllegalStateException ワークフローがすでに完了している場合
* @throws IllegalArgumentException 指定されたタスクが存在しない場合、もしくはマルチインスタンスでないタスクに複数グループを割り当てようとした場合。
*/
void assignGroups(String taskId, List groups) throws IllegalStateException, IllegalArgumentException;
/**
* レーンIDで指定されたレーンに属するすべてのタスクに、指定された担当ユーザを割り当てる。
*
* @param laneId 担当ユーザを割り当てるタスクが属するレーンのレーンID
* @param user 担当ユーザ
* @throws IllegalStateException ワークフローがすでに完了している場合
* @throws IllegalArgumentException マルチインスタンスでないタスクに複数ユーザを割り当てようとした場合。
*/
void assignUserToLane(String laneId, String user) throws IllegalStateException, IllegalArgumentException;
/**
* レーンIDで指定されたレーンに属するすべてのタスクに、指定された担当ユーザを割り当てる。
*
* @param laneId 担当ユーザを割り当てるタスクが属するレーンのレーンID
* @param users 担当ユーザリスト
* @throws IllegalStateException ワークフローがすでに完了している場合
* @throws IllegalArgumentException マルチインスタンスでないタスクに複数ユーザを割り当てようとした場合。
*/
void assignUsersToLane(String laneId, List users) throws IllegalStateException, IllegalArgumentException;
/**
* レーンIDで指定されたレーンに属するすべてのタスクに、指定された担当グループを割り当てる。
*
* @param laneId 担当グループを割り当てるタスクが属するレーンのレーンID
* @param group 担当グループ
* @throws IllegalStateException ワークフローがすでに完了している場合
* @throws IllegalArgumentException マルチインスタンスでないタスクに複数グループを割り当てようとした場合。
*/
void assignGroupToLane(String laneId, String group) throws IllegalStateException, IllegalArgumentException;
/**
* レーンIDで指定されたレーンに属するすべてのタスクに、指定された担当グループを割り当てる。
*
* @param laneId 担当ユーザを割り当てるタスクが属するレーンのレーンID
* @param groups 担当ユーザ
* @throws IllegalStateException ワークフローがすでに完了している場合
* @throws IllegalArgumentException マルチインスタンスでないタスクに複数グループを割り当てようとした場合。
*/
void assignGroupsToLane(String laneId, List groups) throws IllegalStateException, IllegalArgumentException;
/**
* タスクに現在アサインされている担当ユーザを、別の担当ユーザに振り替える。
*
* 指定されたタスクがアクティブタスクの場合は、アクティブユーザタスクについても振り替えを行う。
*
* @param taskId 担当ユーザを振り替えるタスク
* @param oldUser 振替元の担当ユーザ
* @param newUser 振替先の担当ユーザ
* @throws IllegalArgumentException 指定されたタスクがワークフロー定義に存在しない場合
* @throws IllegalStateException 指定されたタスクに、振替元の担当ユーザがアサインされていない場合
*/
void changeAssignedUser(String taskId, String oldUser, String newUser) throws IllegalArgumentException, IllegalStateException;
/**
* タスクに現在アサインされている担当グループを、別の担当グループに振り替える。
*
* 指定されたタスクがアクティブである場合は、アクティブグループタスクについても振り替えを行う。
*
* @param taskId 担当ユーザを振り替えるタスク
* @param oldGroup 振替元の担当グループ
* @param newGroup 振替先の担当グループ
* @throws IllegalArgumentException 指定されたタスクがワークフロー定義に存在しない場合
* @throws IllegalStateException 指定されたタスクに、振替元の担当グループがアサインされていない場合
*/
void changeAssignedGroup(String taskId, String oldGroup, String newGroup) throws IllegalArgumentException, IllegalStateException;
/**
* タスクに割り当てられた担当ユーザを取得する。
*
* 担当ユーザは、実行順でソートされて返却される。
*
* @param taskId タスクID
* @return 担当ユーザ
* @throws IllegalArgumentException 指定されたタスクがワークフロー定義に存在しない場合
*/
List getAssignedUsers(String taskId) throws IllegalArgumentException;
/**
* タスクに割り当てられた担当グループを取得する。
*
* 担当グループは、実行順でソートされて返却される。
*
* @param taskId タスクID
* @return 担当グループ
* @throws IllegalArgumentException 指定されたタスクがワークフロー定義に存在しない場合
*/
List getAssignedGroups(String taskId) throws IllegalArgumentException;
/**
* 指定されたユーザのアクティブユーザタスクが存在するかどうかを確認する。
*
* @param user ユーザ
* @return ユーザのアクティブユーザタスクが存在する場合は {@code true}
*/
boolean hasActiveUserTask(String user);
/**
* 指定されたグループのアクティブグループタスクが存在するかどうかを確認する。
*
* @param group グループ
* @return グループのアクティブグループタスクが存在する場合は {@code true}
*/
boolean hasActiveGroupTask(String group);
/**
* 現在のワークフローインスタンスのインスタンスIDを取得する。
*
* @return ワークフローインスタンスのインスタンスID
*/
String getInstanceId();
/**
* ワークフローIDを取得する。
*
* @return ワークフローID
*/
String getWorkflowId();
/**
* バージョン番号を取得する。
*
* @return バージョン番号
*/
long getVersion();
/**
* 指定されたフローノードIDがアクティブな状態かどうかを判定する。
*
* @param flowNodeId フローノードID
* @return アクティブな場合はtrue
*/
boolean isActive(String flowNodeId);
/**
* ワークフローが完了状態かどうかを判定する。
*
* @return ワークフローが完了している場合は {@code true}
*/
boolean isCompleted();
/**
* 完了状態のワークフローインスタンス。
*
* 本クラスでは、 {@link WorkflowInstance} が、 {@link WorkflowInstance#completeUserTask(Map, String)} や
* {@link WorkflowInstance#completeGroupTask(Map, String)} で完了状態になった場合と同様に振舞うワークフローインスタンスを実装している。
*
* すなわち、 {@link #isCompleted()} は常に {@code true} を返却し、 {@link #isActive(String)} は常に {@code false} を返却する。
* また、完了状態のワークフローインスタンスに対して許されない操作については、 {@link IllegalStateException} を送出する。
*
* ただし、 {@link #getWorkflowId()}, {@link #getVersion()} については、取得することができないため、 {@link UnsupportedOperationException} を送出する。
*
* @author Ryo Tanaka
* @since 1.4.2
*/
final class CompletedWorkflowInstance extends WorkflowInstanceSupport {
/**
* ワークフローインスタンスID
*/
private final String instanceId;
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスには、アクティブフローノードは存在しないため、常に {@code false} を返却する。
*/
@Override
public boolean isActive(String flowNodeId) {
return false;
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスでは、常に {@code true} を返却する。
*/
@Override
public boolean isCompleted() {
return true;
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスには、アクティブユーザタスクは存在しないため、常に {@code false} を返却する。
*/
@Override
public boolean hasActiveUserTask(String user) {
return false;
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスには、アクティブグループタスクは存在しないため、常に {@code false} を返却する。
*/
@Override
public boolean hasActiveGroupTask(String group) {
return false;
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスでは、対象タスクに割り当てられていた担当ユーザを取得できないため、常に空のリストを返却する。
*/
@Override
public List getAssignedUsers(String taskId) throws IllegalArgumentException {
return new ArrayList(0);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスでは、対象タスクに割り当てられていた担当グループを取得できないため、常に空のリストを返却する。
*/
@Override
public List getAssignedGroups(String taskId) throws IllegalArgumentException {
return new ArrayList(0);
}
/**
* インスタンスIDを指定して、完了状態のワークフローインスタンスを生成する。
*
* @param instanceId インスタンスID
*/
public CompletedWorkflowInstance(String instanceId) {
this.instanceId = instanceId;
}
@Override
public String getInstanceId() {
return instanceId;
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスでは、ワークフロー定義のワークフローIDは取得することができないため、 {@link UnsupportedOperationException} を送出する。
*/
@Override
public String getWorkflowId() {
throw new UnsupportedOperationException("Workflow is already completed. " + this);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスでは、ワークフロー定義のバージョンは取得することができないため、 {@link UnsupportedOperationException} を送出する。
*/
@Override
public long getVersion() {
throw new UnsupportedOperationException("Workflow is already completed. " + this);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスに対して、タスクを進行することは出来ないため、 {@link IllegalStateException} を送出する。
*/
@Override
public void completeUserTask(Map parameter, String assigned) throws IllegalStateException {
throw new IllegalStateException("Workflow is already completed. " + this);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスに対して、タスクを進行することは出来ないため、 {@link IllegalStateException} を送出する。
*/
@Override
public void completeGroupTask(Map parameter, String assigned) throws IllegalStateException {
throw new IllegalStateException("Workflow is already completed. " + this);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスに対して、境界イベントを発生させることは出来ないため、 {@link IllegalStateException} を送出する。
*/
@Override
public void triggerEvent(String eventTriggerId, Map parameter) throws IllegalStateException {
throw new IllegalStateException("Workflow is already completed. " + this);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスに対して、担当ユーザを割り当てることは出来ないため、 {@link IllegalStateException} を送出する。
*/
@Override
public void assignUsers(String taskId, List users) throws IllegalStateException, IllegalArgumentException {
throw new IllegalStateException("Workflow is already completed. " + this);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスに対して、担当グループを割り当てることは出来ないため、 {@link IllegalStateException} を送出する。
*/
@Override
public void assignGroups(String taskId, List groups) throws IllegalStateException, IllegalArgumentException {
throw new IllegalStateException("Workflow is already completed. " + this);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスに対して、担当ユーザを割り当てることは出来ないため、 {@link IllegalStateException} を送出する。
*/
@Override
public void assignUsersToLane(String laneId, List users) throws IllegalStateException, IllegalArgumentException {
throw new IllegalStateException("Workflow is already completed. " + this);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスに対して、担当グループを割り当てることは出来ないため、 {@link IllegalStateException} を送出する。
*/
@Override
public void assignGroupsToLane(String laneId, List groups) throws IllegalStateException, IllegalArgumentException {
throw new IllegalStateException("Workflow is already completed. " + this);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスに対して、担当ユーザを振替えることは出来ないため、 {@link IllegalStateException} を送出する。
*/
@Override
public void changeAssignedUser(String taskId, String oldUser, String newUser) throws IllegalArgumentException, IllegalStateException {
throw new IllegalStateException("Workflow is already completed. " + this);
}
/**
* {@inheritDoc}
*
* 完了状態のワークフローインスタンスに対して、担当グループを振替えることは出来ないため、 {@link IllegalStateException} を送出する。
*/
@Override
public void changeAssignedGroup(String taskId, String oldGroup, String newGroup) throws IllegalArgumentException, IllegalStateException {
throw new IllegalStateException("Workflow is already completed. " + this);
}
@Override
public String toString() {
return "instance id = [" + getInstanceId() + "]";
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy