Class DefaultWorkflow

java.lang.Object
com.easydesk.workflow.DefaultWorkflow
All Implemented Interfaces:
Workflow
Direct Known Subclasses:
NotificationWorkflow, OMWorkflow

public class DefaultWorkflow extends Object implements Workflow
Default implementation of workflow is a noop. It doesn't do anything.
Version:
$Id: DefaultWorkflow.java,v 1.71 2008/05/28 08:57:26 youngho Exp $
Author:
Youngho Cho
  • Constructor Details

    • DefaultWorkflow

      public DefaultWorkflow()
      새로운 DefaultWorkflow 인스턴스를 생성한다.
  • Method Details

    • add

      public void add(Persistent addedObject) throws WorkflowException
      when new OM object added into Database (whether the object has ever been saved.)

      기본 구현은 아무 것도 하지 않는다.

      Specified by:
      add in interface Workflow
      Parameters:
      addedObject - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • modify

      public void modify(Persistent modifiedObject) throws WorkflowException
      when OM Object modified since it was last retrieved from storage.

      기본 구현은 아무 것도 하지 않는다.

      Specified by:
      modify in interface Workflow
      Parameters:
      modifiedObject - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • remove

      public void remove(Persistent removedObject) throws WorkflowException
      when OM Object removed
      Specified by:
      remove in interface Workflow
      Parameters:
      removedObject - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • add

      public void add(ActivitySet activitySet, Item item, Map<Integer,AttributeValue> newAttVals) throws WorkflowException
      Item 가 System 에 add 될 때

      기본 구현은 아무 것도 하지 않는다.

      Specified by:
      add in interface Workflow
      Parameters:
      activitySet - 현재 처리중인 ActivitySet
      item - 추가되는 item
      newAttVals - 새 속성값 map ({ attributeId, attributeValue })
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • modify

      public void modify(ActivitySet activitySet, Map<Integer,AttributeValue> newAttVals) throws WorkflowException
      Item 가 modify 될 때 (Before)

      기본 구현은 아무 것도 하지 않는다.

      Specified by:
      modify in interface Workflow
      Parameters:
      activitySet - 현재 처리중인 ActivitySet
      newAttVals - 새 속성값 map ({ attributeId, attributeValue })
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • after

      public void after(ActivitySet activitySet, Map<Integer,AttributeValue> newAttVals) throws WorkflowException
      Item 가 modified 되었을 때 (After: 새로운 Connection 을 사용한다.)

      기본 구현은 아무 것도 하지 않는다.

      Specified by:
      after in interface Workflow
      Parameters:
      activitySet - 현재 처리중인 ActivitySet
      newAttVals - 저장된 새 속성값 map ({ attributeId, attributeValue })
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • hasConsistency

      public boolean hasConsistency(AttributeValue value) throws WorkflowException
      설정이 아니라 코드에 의하여 처리되어야 만 하는 것들

      기본 구현은 항상 true 를 반환한다.

      Specified by:
      hasConsistency in interface Workflow
      Parameters:
      value - 확인할 AttributeValue
      Returns:
      true/false
      Throws:
      WorkflowException - 확인 중 오류가 발생한 경우
    • isSatisfied

      public boolean isSatisfied(TransitionSequence transitionSequence, Item item) throws WorkflowException
      현재 item 의 상태가 transition 이 진행되었는지 확인을 한다.

      기본 구현은 항상 true 를 반환한다.

      Specified by:
      isSatisfied in interface Workflow
      Parameters:
      transitionSequence - 확인할 TransitionSequence
      item - 대상 item
      Returns:
      transition 이 진행되었으면 true
      Throws:
      WorkflowException - 확인 중 오류가 발생한 경우
    • getConditionTester

      public ConditionTester getConditionTester(Attribute rattribute) throws Exception
      attribute 에 대한 ConditionTester 를 구한다.

      기본 구현은 항상 AlwaysPassTester 를 반환한다.

      Specified by:
      getConditionTester in interface Workflow
      Parameters:
      rattribute - 조건의 기준이 되는 RAttribute
      Returns:
      ConditionTester
      Throws:
      Exception - ConditionTester 를 구하는 중 오류가 발생한 경우
    • canMakeTransition

      public Object canMakeTransition(EasyDeskUser actor, Item item, Transition transition, Map<Integer,AttributeValue> newAttVals, TransitionScopeEnum tScope, Attribute attribute)

      CanMakeTransition 의 정의

      Actor A 가 아이템 B 에 대하여 D 의 동작을 진행할 때, B 의 속성 C 의 값을 E 에서 F 로 접근/변경할 수 있는가 ? (접근과 변경의 구분?)

      실제 적용은 편집시 사용자가 Transition 에 대하여 아이템의 속성을 from 에서 to 로 이동시킬수 있는지 주의 대상 행동은 편집이다.

      D 동작에 대하여 ActivitySet 에 정의된 모든것을 처리하고 싶지만 이경우 Condition Table 도 같이 변경되어 너무 복잡하여 진다.

      확인 순서는 Module > ItemType > Global 의 순서로 처리가 된다.

      • Enter : EMPTY_CONDITION To ANY_CONDITION
      • Edit : ANY_CONDITION To ANY_CONDITION
      • Remove : ANY_CONDITION To EMPTY_CONDITION

      기본 구현은 항상 Boolean.TRUE 를 반환한다.

      Specified by:
      canMakeTransition in interface Workflow
      Parameters:
      actor - actor A
      item - acted item B which contains attribute C
      transition - target transition : a change of attributeValue C:[E TO F]
      newAttVals - { attributeId, attributeValue } @todo { attributeId, value }
      tScope - Transition 의 적용 범위 (TransitionScopeEnum)
      attribute - 대상 attribute C
      Returns:
      null (no constraints) or contraint condition object or error object
    • add

      public void add(Module module, ItemType itemType) throws WorkflowException
      Deprecated.
      use add(Object obj) instead
      itemType 이 module 에 추가 될 때 동작한다.

      기본 구현은 아무 것도 하지 않는다.

      Specified by:
      add in interface Workflow
      Parameters:
      module - 대상 Module
      itemType - 추가되는 ItemType
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • addWorkflowsForOption

      public void addWorkflowsForOption(AttributeOption option, Module module, ItemType itemType) throws WorkflowException
      Deprecated.
      use add(Object obj) instead
      DOCUMENT ME!
      Specified by:
      addWorkflowsForOption in interface Workflow
      Parameters:
      option - DOCUMENT ME!
      module - DOCUMENT ME!
      itemType - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • deleteWorkflowsForOption

      public void deleteWorkflowsForOption(AttributeOption option, Module module, ItemType itemType) throws WorkflowException
      Deprecated.
      use modified(Object obj) instead
      DOCUMENT ME!
      Specified by:
      deleteWorkflowsForOption in interface Workflow
      Parameters:
      option - DOCUMENT ME!
      module - DOCUMENT ME!
      itemType - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • deleteWorkflowsForAttribute

      public void deleteWorkflowsForAttribute(Attribute attr, Module module, ItemType itemType) throws WorkflowException
      Deprecated.
      use modified(Object obj) instead
      DOCUMENT ME!
      Specified by:
      deleteWorkflowsForAttribute in interface Workflow
      Parameters:
      attr - DOCUMENT ME!
      module - DOCUMENT ME!
      itemType - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • resetAllWorkflowsForItemType

      public void resetAllWorkflowsForItemType(Module module, ItemType itemType) throws WorkflowException
      DOCUMENT ME!
      Specified by:
      resetAllWorkflowsForItemType in interface Workflow
      Parameters:
      module - DOCUMENT ME!
      itemType - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • changeModuleItemTypeWorkflow

      public void changeModuleItemTypeWorkflow(ModuleItemType mit) throws WorkflowException
      DOCUMENT ME!
      Specified by:
      changeModuleItemTypeWorkflow in interface Workflow
      Parameters:
      mit - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • addItemWorkflow

      public void addItemWorkflow(Item item, Map<Integer,AttributeValue> newAttVals, EasyDeskUser EasyDeskUser, ActivitySet activitySet) throws WorkflowException
      DOCUMENT ME!
      Specified by:
      addItemWorkflow in interface Workflow
      Parameters:
      item - DOCUMENT ME!
      newAttVals - DOCUMENT ME!
      EasyDeskUser - DOCUMENT ME!
      activitySet - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • updateItemWorkflow

      public void updateItemWorkflow(Item item, Map<Integer,AttributeValue> newAttVals, EasyDeskUser user, ActivitySet activitySet) throws WorkflowException
      아이템을 변경할 때 저장전 동작 (Before 동작 이다.) After 동작은 Workflow.after(ActivitySet, Map) 이다.

      기본 구현은 아무 것도 하지 않는다.

      Specified by:
      updateItemWorkflow in interface Workflow
      Parameters:
      item - 변경되는 item
      newAttVals - 새 속성값 map ({ attributeId, attributeValue })
      user - 변경하는 사용자
      activitySet - 현재 처리중인 ActivitySet
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • grantUser

      public boolean grantUser(Module module, EasyDeskUser user, String roleName, ActivitySet activitySet) throws WorkflowException
      Security System 에서 Revoke 는 EasyDesk Workflow 에서 사용자의 역할을 Guest 또는 Anonymous 로 변경하는 것이다. Guest 이면 특정 Module 에서 탈퇴하는 것이고 Anonymous 이면 System 에서 탈퇴하는 것이다. grantUser 를 OptionWorkflow 로 통합한다. 즉 grant : User Item 의 LifeCycle 이 EMPTY --> ANY 로 revoke : User Item 의 LifeCycle 이 ANY --> DELETED 로 되어야 하지만 한번 사용자의 Item 이 생성되면 revoke 후 regrant 를 고려하면, Item 의 삭제는 오히려 더 복잡하여진다. 따라서 grant : RoleName 이 GUEST --> ANY 로 revoke : RoleName 이 ANY --> GUEST 로 정의하면 grant/revoke 의 logic 은 단순하여 진다. 문제는 UserItem 의 생성시점과 LifeCycle 의 처리 문제이다. 이 UserItem 의 생성시점과 LifeCycle 의 처리문제를 고려하면 grantUser 가 단순히 OptionWorkflow 에 matching 되는 것이 아니라 이것을 Option Workflow 에 적용하기 위하여는 선작업( UserItem 의 존재유무 확인 및 생성 )이 필요하다는 것을 의미한다. 결론적으로 grantUser 는 별도의 Method 로 workflow 에 존재하여야 한다.

      EasyDesk 의 모든 Database Object 을 Artifactizable 로 구현하였기 때문에 grant/revoke 의 설정 여부는 Workflow 의 Transition/Condition 에 의하여 결정된다. 이 method 에서는 최종적으로 처리하기 이전에 관련 자료를 모두 정리한다.

      기본 구현은 항상 true 를 반환한다.

      Specified by:
      grantUser in interface Workflow
      Parameters:
      module - 대상 Module
      user - 역할을 부여받는 사용자
      roleName - 부여할 역할 이름
      activitySet - 현재 처리중인 ActivitySet
      Returns:
      처리되었으면 true
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • revokeUser

      public boolean revokeUser(Module module, EasyDeskUser user, String roleName, ActivitySet activitySet) throws WorkflowException
      Security System 에서 Revoke 는 EasyDesk Workflow 에서 사용자의 역할을 Guest 또는 Anonymous 로 변경하는 것이다. Guest 이면 특정 Module 에서 탈퇴하는 것이고 Anonymous 이면 System 에서 탈퇴하는 것이다. revokeUser 는 특정 Group 또는 RoleSet 은 다중 Role 을 허용하는데 이 경우 revoke 만을 별도 처리할 때 사용된다.

      EasyDesk 의 모든 Database Object 을 Artifactizable 로 구현하였기 때문에 grant/revoke 의 설정 여부는 Workflow 의 Transition/Condition 에 의하여 결정된다. 이 method 에서는 최종적으로 처리하기 이전에 관련 자료를 모두 정리한다.

      기본 구현은 항상 true 를 반환한다.

      Specified by:
      revokeUser in interface Workflow
      Parameters:
      module - 대상 Module
      user - 역할을 회수당하는 사용자
      roleName - 회수할 역할 이름
      activitySet - 현재 처리중인 ActivitySet
      Returns:
      처리되었으면 true
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • addDependencyWorkflow

      public void addDependencyWorkflow(Depend depend, ActivitySet activitySet, EasyDeskUser user) throws WorkflowException
      DOCUMENT ME!

      기본 구현은 아무 것도 하지 않는다.

      Specified by:
      addDependencyWorkflow in interface Workflow
      Parameters:
      depend - DOCUMENT ME!
      activitySet - DOCUMENT ME!
      user - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • deleteDependencyWorkflow

      public void deleteDependencyWorkflow(Depend depend, ActivitySet activitySet, EasyDeskUser user) throws WorkflowException
      DOCUMENT ME!

      기본 구현은 아무 것도 하지 않는다.

      Specified by:
      deleteDependencyWorkflow in interface Workflow
      Parameters:
      depend - DOCUMENT ME!
      activitySet - DOCUMENT ME!
      user - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • before

      public void before(String toAddress, EasyDeskUser creator, AttributeOption manager, ActivitySet activitySet, Activity act, Item item) throws WorkflowException
      Notifiation 을 하기 전에 해야할 행동
      Specified by:
      before in interface Workflow
      Parameters:
      toAddress - 통지를 받을 주소
      creator - 통지를 발생시킨 사용자
      manager - 통지 방법(notification manager) AttributeOption
      activitySet - 통지 대상 ActivitySet
      act - 통지 대상 Activity
      item - 대상 item
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • after

      public void after(String toAddress, EasyDeskUser creator, AttributeOption manager, ActivitySet activitySet, Item item) throws WorkflowException
      Notifiation 한 후
      Specified by:
      after in interface Workflow
      Parameters:
      toAddress - 통지를 받은 주소
      creator - 통지를 발생시킨 사용자
      manager - 통지 방법(notification manager) AttributeOption
      activitySet - 통지 대상 ActivitySet
      item - 대상 item
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우