Package com.easydesk.workflow
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
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionvoidadd(ActivitySet activitySet, Item item, Map<Integer, AttributeValue> newAttVals) Item 가 System 에 add 될 때voidDeprecated.use add(Object obj) insteadvoidadd(Persistent addedObject) when new OM object added into Database (whether the object has ever been saved.)voidaddDependencyWorkflow(Depend depend, ActivitySet activitySet, EasyDeskUser user) DOCUMENT ME!voidaddItemWorkflow(Item item, Map<Integer, AttributeValue> newAttVals, EasyDeskUser user, ActivitySet activitySet) 아이템을 입력할 때 저장전에 동작voidaddWorkflowsForOption(AttributeOption option, Module module, ItemType itemType) Deprecated.use add(Object obj) insteadvoidafter(ActivitySet activitySet, Map<Integer, AttributeValue> newAttVals) Item 가 modified 되었을 때 (After: 새로운 Connection 을 사용한다.)voidafter(String toAddress, EasyDeskUser creator, AttributeOption manager, ActivitySet activitySet, Item item) Notifiation 한 후 ActivitySet 단위로 NotificationWorkflow 는 NotificationServer 에서 동작한다.voidbefore(String toAddress, EasyDeskUser creator, AttributeOption manager, ActivitySet activitySet, Activity act, Item item) Notifiation 을 하기 전에 해야할 행동 activity 단위로 NotificationWorkflow 는 NotificationServer 에서 동작한다.canMakeTransition(EasyDeskUser actor, Item item, Transition transition, Map<Integer, AttributeValue> newAttVals, TransitionScopeEnum tScope, Attribute attribute) CanMakeTransition 의 정의voidModuleItemType 이 변하였을때voiddeleteDependencyWorkflow(Depend depend, ActivitySet activitySet, EasyDeskUser user) DOCUMENT ME!voiddeleteWorkflowsForAttribute(Attribute attribute, Module module, ItemType itemType) Deprecated.use modified(Object obj) insteadvoiddeleteWorkflowsForOption(AttributeOption option, Module module, ItemType itemType) Deprecated.use modified(Object obj) insteadgetConditionTester(Attribute rattribute) attribute 에 대한 ConditionTester 를 구한다.booleangrantUser(Module module, EasyDeskUser user, String roleName, ActivitySet activitySet) Security System 에서 Revoke 는 EasyDesk Workflow 에서 사용자의 역할을 Guest 또는 Anonymous 로 변경하는 것이다.booleanhasConsistency(AttributeValue value) 설정이 아니라 코드에 의하여 처리되어야 만 하는 것들booleanisSatisfied(TransitionSequence transitionSequence, Item item) 현재 item 의 상태가 transition 이 진행되었는지 확인을 한다.voidmodify(ActivitySet activitySet, Map<Integer, AttributeValue> newAttVals) Item 가 modify 될 때 (Before)voidmodify(Persistent modifiedObject) when OM Object modified since it was last retrieved from storage.voidremove(Persistent removedObject) when OM Object removedvoidresetAllWorkflowsForItemType(Module module, ItemType itemType) DOCUMENT ME!booleanrevokeUser(Module module, EasyDeskUser user, String roleName, ActivitySet activitySet) Security System 에서 Revoke 는 EasyDesk Workflow 에서 사용자의 역할을 Guest 또는 Anonymous 로 변경하는 것이다.voidupdateItemWorkflow(Item item, Map<Integer, AttributeValue> newAttVals, EasyDeskUser user, ActivitySet activitySet) 아이템을 변경할 때 저장전 동작 (Before 동작 이다.)
-
Field Details
-
PACKAGE_NAME
"com.easydesk.workflow"
-
-
Method Details
-
add
when new OM object added into Database (whether the object has ever been saved.)- Parameters:
addedObject- DOCUMENT ME!- Throws:
WorkflowException- DOCUMENT ME!
-
modify
when OM Object modified since it was last retrieved from storage.- Parameters:
modifiedObject- DOCUMENT ME!- Throws:
WorkflowException- DOCUMENT ME!
-
remove
when OM Object removed- Parameters:
removedObject- DOCUMENT ME!- Throws:
WorkflowException- DOCUMENT ME!
-
add
void add(ActivitySet activitySet, Item item, Map<Integer, AttributeValue> newAttVals) throws WorkflowExceptionItem 가 System 에 add 될 때- Parameters:
activitySet- 현재 처리중인 ActivitySetitem- 추가되는 itemnewAttVals- 새 속성값 map ({ attributeId, attributeValue })- Throws:
WorkflowException- workflow 처리 중 오류가 발생한 경우
-
modify
void modify(ActivitySet activitySet, Map<Integer, AttributeValue> newAttVals) throws WorkflowExceptionItem 가 modify 될 때 (Before)- Parameters:
activitySet- 현재 처리중인 ActivitySetnewAttVals- 새 속성값 map ({ attributeId, attributeValue })- Throws:
WorkflowException- workflow 처리 중 오류가 발생한 경우
-
after
void after(ActivitySet activitySet, Map<Integer, AttributeValue> newAttVals) throws WorkflowExceptionItem 가 modified 되었을 때 (After: 새로운 Connection 을 사용한다.)- Parameters:
activitySet- 현재 처리중인 ActivitySetnewAttVals- 저장된 새 속성값 map ({ attributeId, attributeValue })- Throws:
WorkflowException- workflow 처리 중 오류가 발생한 경우
-
hasConsistency
설정이 아니라 코드에 의하여 처리되어야 만 하는 것들- Parameters:
value- 확인할 AttributeValue- Returns:
- true/false
- Throws:
WorkflowException- 확인 중 오류가 발생한 경우
-
isSatisfied
현재 item 의 상태가 transition 이 진행되었는지 확인을 한다.- Parameters:
transitionSequence- 확인할 TransitionSequenceitem- 대상 item- Returns:
- transition 이 진행되었으면
true - Throws:
WorkflowException- 확인 중 오류가 발생한 경우
-
getConditionTester
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 Aitem- acted item B which contains attribute Ctransition- 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
Deprecated.use add(Object obj) insteaditemType 이 module 에 추가 될 때 동작한다.- Parameters:
module- 대상 ModuleitemType- 추가되는 ItemType- Throws:
WorkflowException- workflow 처리 중 오류가 발생한 경우
-
addWorkflowsForOption
void addWorkflowsForOption(AttributeOption option, Module module, ItemType itemType) throws WorkflowException Deprecated.use add(Object obj) insteadOption 이 Module 에 Assign 될 때- Parameters:
option- assign 되는 AttributeOptionmodule- 대상 ModuleitemType- 대상 ItemType- Throws:
WorkflowException- workflow 처리 중 오류가 발생한 경우
-
deleteWorkflowsForOption
void deleteWorkflowsForOption(AttributeOption option, Module module, ItemType itemType) throws WorkflowException Deprecated.use modified(Object obj) insteadDOCUMENT 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) insteadModuleAttribute 를 Module 에서 제거할 때 진행되는 Workflow- Parameters:
attribute- 제거되는 Attributemodule- 대상 ModuleitemType- 대상 ItemType- Throws:
WorkflowException- workflow 처리 중 오류가 발생한 경우
-
resetAllWorkflowsForItemType
DOCUMENT ME!- Parameters:
module- DOCUMENT ME!itemType- DOCUMENT ME!- Throws:
WorkflowException- DOCUMENT ME!
-
changeModuleItemTypeWorkflow
ModuleItemType 이 변하였을때- Parameters:
mit- 변경된 ModuleItemType- Throws:
WorkflowException- workflow 처리 중 오류가 발생한 경우
-
addItemWorkflow
void addItemWorkflow(Item item, Map<Integer, AttributeValue> newAttVals, EasyDeskUser user, ActivitySet activitySet) throws WorkflowException아이템을 입력할 때 저장전에 동작- Parameters:
item- 입력되는 itemnewAttVals- 새 속성값 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- 변경되는 itemnewAttVals- 새 속성값 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- 대상 Moduleuser- 역할을 부여받는 사용자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- 대상 Moduleuser- 역할을 회수당하는 사용자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) AttributeOptionactivitySet- 통지 대상 ActivitySetact- 통지 대상 Activityitem- 대상 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) AttributeOptionactivitySet- 통지 대상 ActivitySetitem- 대상 item- Throws:
WorkflowException- workflow 처리 중 오류가 발생한 경우
-