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

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

package nablarch.integration.workflow.definition;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import nablarch.core.util.DateUtil;
import nablarch.core.date.SystemTimeProvider;
import nablarch.core.repository.initialization.Initializable;

import nablarch.integration.workflow.definition.loader.WorkflowDefinitionLoader;
import nablarch.integration.workflow.util.WorkflowUtil;

/**
 * ワークフローの定義情報を保持するクラス。
 * 

* ワークフロー定義情報は、ワークフローIDを指定して取得できる。 *

* ワークフローのバージョン番号が特定できている場合には、 * ワークフローIDとバージョン番号を共に指定してワークフロー定義情報を取得することができる。 * * @author hisaaki sioiri * @since 1.4.2 */ public class WorkflowDefinitionHolder implements Initializable { /** ワークフロー定義情報 */ private List workflowDefinitions = new ArrayList(); /** ワークフロー定義のロードクラス */ private WorkflowDefinitionLoader workflowDefinitionLoader; /** 基準日(適用期間の判断に使用する基準日) */ private SystemTimeProvider systemTimeProvider; /** * ワークフローIDに紐づく適用期間内のワークフロー定義を取得する。 *

* 適用期間内に複数のワークフロー定義情報が存在していた場合には、 * バージョン番号が最大のワークフロー定義情報を返却する。 * * @param workflowId ワークフローID * @return ワークフロー定義 * @throws IllegalArgumentException ワークフロー定義が存在しない場合 */ public WorkflowDefinition getWorkflowDefinition(final String workflowId) throws IllegalArgumentException { List filtered = WorkflowUtil.filterList(workflowDefinitions, new WorkflowUtil.ListFilter() { @Override public boolean isMatch(WorkflowDefinition other) { return other.getWorkflowId().equals(workflowId) && isEffectiveWorkflow(other.getEffectiveDate()); } /** * 適用期間内のワークフローか否かを判定する。 * @param effectiveDate 適用日 * @return 有効な場合はtrue */ private boolean isEffectiveWorkflow(String effectiveDate) { return DateUtil.getDays(getReferenceDate(), effectiveDate) <= 0; } }); if (filtered.isEmpty()) { throw new IllegalArgumentException("Workflow definition was not found. workflow id = [" + workflowId + "]"); } // 最大のバージョン番号を持つワークフロー定義を返却 return Collections.max(filtered, new Comparator() { @Override public int compare(WorkflowDefinition o1, WorkflowDefinition o2) { return o1.getVersion() - o2.getVersion(); } }); } /** * ワークフローID及びバージョン番号に紐づくワークフロー定義を取得する。 * * @param workflowId ワークフローID * @param version バージョン番号 * @return ワークフロー定義 * @throws IllegalArgumentException ワークフロー定義が存在しない場合 */ public WorkflowDefinition getWorkflowDefinition(final String workflowId, final long version) throws IllegalArgumentException { List filtered = WorkflowUtil.filterList(workflowDefinitions, new WorkflowUtil.ListFilter() { @Override public boolean isMatch(WorkflowDefinition other) { return (other.getWorkflowId().equals(workflowId)) && (other.getVersion() == version); } }); if (filtered.isEmpty()) { throw new IllegalArgumentException( String.format("Workflow definition was not found. workflow id = [%s], version = [%d]", workflowId, version)); } return filtered.get(0); } /** * ワークフローの定義情報をロードするクラスを設定する。 * * @param workflowDefinitionLoader ワークフローの定義情報をロードするクラス。 */ public void setWorkflowDefinitionLoader(WorkflowDefinitionLoader workflowDefinitionLoader) { this.workflowDefinitionLoader = workflowDefinitionLoader; } /** * 有効期間ないかを判断するための基準日を取得する{@link nablarch.core.date.SystemTimeProvider}を設定する。 * * @param systemTimeProvider システムタイム */ public void setSystemTimeProvider(SystemTimeProvider systemTimeProvider) { this.systemTimeProvider = systemTimeProvider; } /** * 初期化処理を行う。 */ @Override public void initialize() { workflowDefinitions = workflowDefinitionLoader.load(); } /** * ワークフロー定義を追加する。 * * @param workflowDefinition ワークフロー定義 */ void addWorkflow(WorkflowDefinition workflowDefinition) { workflowDefinitions.add(workflowDefinition); } /** * 適用期間判断のための基準日を取得する。 * * @return 基準日 */ protected String getReferenceDate() { DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); return dateFormat.format(systemTimeProvider.getDate()); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy