Interface Workflow

All Known Implementing Classes:
DefaultWorkflow, EasyDeskWorkflow, NotificationWorkflow, OMWorkflow

public interface Workflow
This is the primary interface for an artifact type workflow. Implementations of this interface are loaded through the WorkflowFactory interface. It gets which class to load from the Jettiger.properties file. OM System 의 안정성을 위한 System 관련 코드는 Manager 의 Listener 를 통하여 처리한다. 각 적용 System 에 따른 코드는 add/modify/delete 에서 처리한다. Workflow 는 크게 2 가지로 구성된다. OM System 의 Workflow 와 다른 하나는 Business Logic Workflow 전자의 대표적 예는 addWorkflowForOptionable 후자의 대표적 예는 canMakeTransition 전자는 core 에 존재하고 후자는 modules 에 존재한다.
Version:
$Id: Workflow.java,v 1.88 2008/09/13 05:09:16 youngho Exp $
Author:
Youngho Cho
  • Field Details

    • PACKAGE_NAME

      static final String PACKAGE_NAME
      "com.easydesk.workflow"
  • Method Details

    • add

      void add(Persistent addedObject) throws WorkflowException
      when new OM object added into Database (whether the object has ever been saved.)
      Parameters:
      addedObject - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • modify

      void modify(Persistent modifiedObject) throws WorkflowException
      when OM Object modified since it was last retrieved from storage.
      Parameters:
      modifiedObject - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • remove

      void remove(Persistent removedObject) throws WorkflowException
      when OM Object removed
      Parameters:
      removedObject - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • add

      void add(ActivitySet activitySet, Item item, Map<Integer,AttributeValue> newAttVals) throws WorkflowException
      Item 가 System 에 add 될 때
      Parameters:
      activitySet - 현재 처리중인 ActivitySet
      item - 추가되는 item
      newAttVals - 새 속성값 map ({ attributeId, attributeValue })
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • modify

      void modify(ActivitySet activitySet, Map<Integer,AttributeValue> newAttVals) throws WorkflowException
      Item 가 modify 될 때 (Before)
      Parameters:
      activitySet - 현재 처리중인 ActivitySet
      newAttVals - 새 속성값 map ({ attributeId, attributeValue })
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • after

      void after(ActivitySet activitySet, Map<Integer,AttributeValue> newAttVals) throws WorkflowException
      Item 가 modified 되었을 때 (After: 새로운 Connection 을 사용한다.)
      Parameters:
      activitySet - 현재 처리중인 ActivitySet
      newAttVals - 저장된 새 속성값 map ({ attributeId, attributeValue })
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • hasConsistency

      boolean hasConsistency(AttributeValue value) throws WorkflowException
      설정이 아니라 코드에 의하여 처리되어야 만 하는 것들
      Parameters:
      value - 확인할 AttributeValue
      Returns:
      true/false
      Throws:
      WorkflowException - 확인 중 오류가 발생한 경우
    • isSatisfied

      boolean isSatisfied(TransitionSequence transitionSequence, Item item) throws WorkflowException
      현재 item 의 상태가 transition 이 진행되었는지 확인을 한다.
      Parameters:
      transitionSequence - 확인할 TransitionSequence
      item - 대상 item
      Returns:
      transition 이 진행되었으면 true
      Throws:
      WorkflowException - 확인 중 오류가 발생한 경우
    • getConditionTester

      ConditionTester getConditionTester(Attribute rattribute) throws Exception
      attribute 에 대한 ConditionTester 를 구한다.
      Parameters:
      rattribute - 조건의 기준이 되는 RAttribute
      Returns:
      ConditionTester
      Throws:
      Exception - ConditionTester 를 구하는 중 오류가 발생한 경우
    • canMakeTransition

      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
      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

      void add(Module module, ItemType itemType) throws WorkflowException
      Deprecated.
      use add(Object obj) instead
      itemType 이 module 에 추가 될 때 동작한다.
      Parameters:
      module - 대상 Module
      itemType - 추가되는 ItemType
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • addWorkflowsForOption

      void addWorkflowsForOption(AttributeOption option, Module module, ItemType itemType) throws WorkflowException
      Deprecated.
      use add(Object obj) instead
      Option 이 Module 에 Assign 될 때
      Parameters:
      option - assign 되는 AttributeOption
      module - 대상 Module
      itemType - 대상 ItemType
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • deleteWorkflowsForOption

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

      void deleteWorkflowsForAttribute(Attribute attribute, Module module, ItemType itemType) throws WorkflowException
      Deprecated.
      use modified(Object obj) instead
      ModuleAttribute 를 Module 에서 제거할 때 진행되는 Workflow
      Parameters:
      attribute - 제거되는 Attribute
      module - 대상 Module
      itemType - 대상 ItemType
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • resetAllWorkflowsForItemType

      void resetAllWorkflowsForItemType(Module module, ItemType itemType) throws WorkflowException
      DOCUMENT ME!
      Parameters:
      module - DOCUMENT ME!
      itemType - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • changeModuleItemTypeWorkflow

      void changeModuleItemTypeWorkflow(ModuleItemType mit) throws WorkflowException
      ModuleItemType 이 변하였을때
      Parameters:
      mit - 변경된 ModuleItemType
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • addItemWorkflow

      void addItemWorkflow(Item item, Map<Integer,AttributeValue> newAttVals, EasyDeskUser user, ActivitySet activitySet) throws WorkflowException
      아이템을 입력할 때 저장전에 동작
      Parameters:
      item - 입력되는 item
      newAttVals - 새 속성값 map ({ attributeId, attributeValue })
      user - 입력하는 사용자
      activitySet - 현재 처리중인 ActivitySet
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • updateItemWorkflow

      void updateItemWorkflow(Item item, Map<Integer,AttributeValue> newAttVals, EasyDeskUser user, ActivitySet activitySet) throws WorkflowException
      아이템을 변경할 때 저장전 동작 (Before 동작 이다.) After 동작은 after(ActivitySet, Map) 이다.
      Parameters:
      item - 변경되는 item
      newAttVals - 새 속성값 map ({ attributeId, attributeValue })
      user - 변경하는 사용자
      activitySet - 현재 처리중인 ActivitySet
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • grantUser

      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 에서는 최종적으로 처리하기 이전에 관련 자료를 모두 정리한다.

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

      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 에서는 최종적으로 처리하기 이전에 관련 자료를 모두 정리한다.

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

      void addDependencyWorkflow(Depend depend, ActivitySet activitySet, EasyDeskUser user) throws WorkflowException
      DOCUMENT ME!
      Parameters:
      depend - DOCUMENT ME!
      activitySet - DOCUMENT ME!
      user - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • deleteDependencyWorkflow

      void deleteDependencyWorkflow(Depend depend, ActivitySet activitySet, EasyDeskUser user) throws WorkflowException
      DOCUMENT ME!
      Parameters:
      depend - DOCUMENT ME!
      activitySet - DOCUMENT ME!
      user - DOCUMENT ME!
      Throws:
      WorkflowException - DOCUMENT ME!
    • before

      void before(String toAddress, EasyDeskUser creator, AttributeOption manager, ActivitySet activitySet, Activity act, Item item) throws WorkflowException
      Notifiation 을 하기 전에 해야할 행동 activity 단위로 NotificationWorkflow 는 NotificationServer 에서 동작한다. 주의 : NotificationStatus 의 queue 는 RemoteListener 에 의하여 동작하고 있기 때문에 NotificationServer 에서 동작하는 모든 Activity 는 NotificationStatus 의 queue 가 되지 않는다.
      Parameters:
      toAddress - 통지를 받을 주소
      creator - 통지를 발생시킨 사용자
      manager - 통지 방법(notification manager) AttributeOption
      activitySet - 통지 대상 ActivitySet
      act - 통지 대상 Activity
      item - 대상 item
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우
    • after

      void after(String toAddress, EasyDeskUser creator, AttributeOption manager, ActivitySet activitySet, Item item) throws WorkflowException
      Notifiation 한 후 ActivitySet 단위로 NotificationWorkflow 는 NotificationServer 에서 동작한다. 주의 : NotificationStatus 의 queue 는 RemoteListener 에 의하여 동작하고 있기 때문에 NotificationServer 에서 동작하는 모든 Activity 는 NotificationStatus 의 queue 가 되지 않는다. 이 Logic 에서는 메일이 발송 안될 가능성도 참고하여 메일이 확실히 발송된 후 동작되는 Activity 만 처리하여야 한다.
      Parameters:
      toAddress - 통지를 받은 주소
      creator - 통지를 발생시킨 사용자
      manager - 통지 방법(notification manager) AttributeOption
      activitySet - 통지 대상 ActivitySet
      item - 대상 item
      Throws:
      WorkflowException - workflow 처리 중 오류가 발생한 경우