package org.fireflow.samples.workflowpattern;
import java.util.List;
import org.fireflow.client.WorkflowQuery;
import org.fireflow.client.WorkflowSession;
import org.fireflow.client.impl.WorkflowSessionLocalImpl;
import org.fireflow.engine.context.RuntimeContext;
import org.fireflow.engine.modules.persistence.PersistenceService;
import org.fireflow.engine.modules.persistence.TokenPersister;
import org.fireflow.pdl.fpdl20.behavior.router.AbsJoinEvaluator;
import org.fireflow.pdl.fpdl20.process.Synchronizer;
import org.fireflow.pvm.kernel.Token;
import org.fireflow.pvm.kernel.TokenState;
public class CustomizedJoinEvaluator extends AbsJoinEvaluator {
@Override
public int canBeFired(WorkflowSession session,
Token current_token_for_router, List<Token> siblingTokens,
Synchronizer node) {
String fromTokenId = current_token_for_router.getFromToken();
WorkflowQuery<Token> q4Token = session.createWorkflowQuery(Token.class);
Token fromToken = q4Token.get(fromTokenId);
if (fromToken!=null && "CustomizedRouter.main.Transition6".equals(fromToken.getElementId())){
//ִ��֮ǰ�������е��ֵ�token��state����Ϊcompleted״̬����һ������ִ�У���������ʵ��������ȷcomplete
if (siblingTokens!=null){
for (Token sibling: siblingTokens){
if (!sibling.getId().equals(current_token_for_router.getId())){
sibling.setState(TokenState.COMPLETED);
}
}
}
return current_token_for_router.getStepNumber();
}
else{
//����״����ͳͳ���ܱ�ִ��
current_token_for_router.setState(TokenState.COMPLETED);//ֱ������Ϊcompleted״̬
return -1;//-1��ʾ���ܱ�ִ��
}
}
public String getJoinDescription() {
String desc = "ֻ��Transition6�ϵ�Token���ܼ�����Router�������Ķ�������";
return desc;
}
}