Package org.huihoo.workflow.impl.store.util

Source Code of org.huihoo.workflow.impl.store.util.ParticipantSelector

//----------------------------BEGIN LICENSE----------------------------
/*
* Willow : the Open Source WorkFlow Project
* Distributable under GNU LGPL license by gun.org
*
* Copyright (C) 2004-2010 huihoo.org
* Copyright (C) 2004-2010  ZosaTapo <dertyang@hotmail.com>
*
* ====================================================================
* Project Homepage : http://www.huihoo.org/willow
* Source Forge     : http://sourceforge.net/projects/huihoo
* Mailing list     : willow@lists.sourceforge.net
*/
//----------------------------END  LICENSE-----------------------------
package org.huihoo.workflow.impl.store.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.huihoo.workflow.WorkflowException;
import org.huihoo.workflow.runtime.PerformerSelector;
import org.huihoo.workflow.runtime.WorkflowService;
import org.huihoo.workflow.runtime.WorkflowWork;
import org.huihoo.workflow.store.UserDatabase;
import org.huihoo.workflow.usermodel.WorkflowDepartment;
import org.huihoo.workflow.usermodel.WorkflowGroup;
import org.huihoo.workflow.usermodel.WorkflowParticipant;
import org.huihoo.workflow.usermodel.WorkflowRole;
import org.huihoo.workflow.xpdl.ExtendedAttribute;
import org.huihoo.workflow.xpdl.WorkflowActivity;
import org.huihoo.workflow.xpdl.WorkflowProcess;
import org.huihoo.workflow.xpdl.WorkflowTransition;
import org.huihoo.workflow.xpdl.XPDLGlobals;
import org.huihoo.workflow.xpdl.activity.PerformerType;
/**
* @author reic
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class ParticipantSelector
{
  /**
   *  ��ȡ��Ҫ��Ա�����Ļ�IJ������б�
   *
   *  @param  workflowWork         �ȴ��ɷ��Ĺ�����
   *  @param  workflowTransition   ��������ɷ���ת·��
   **/
  public static List select(
    WorkflowService workflowService,
    WorkflowProcess workflowProcess,
    WorkflowWork workflowWork,
    WorkflowTransition workflowTransition)
    throws WorkflowException
  {
    WorkflowActivity workflowActivity = workflowTransition.getToWorkflowActivity();
   
//    if( ! ActivityType.ACTIVITY_BUSINESS.equals(workflowActivity.getActivityType()))
//    {
//      return null;
//    }
   
    PerformerType performerType = workflowActivity.getPerformerType();
    UserDatabase userDatabase =workflowService.getUserDatabase();

    List users =null;

    if (PerformerType.PERFORMER_PARTICIPANT_BASED.equals(performerType))
    {
      users=ParticipantSelector.selectByParicipant(userDatabase,workflowActivity);
    }
    else if (PerformerType.PERFORMER_GROUP_BASED.equals(performerType))
    {
      users=ParticipantSelector.selectByGroup(userDatabase,workflowActivity);
    }
    else if (PerformerType.PERFORMER_ROLE_BASED.equals(performerType))
    {
      users=ParticipantSelector.selectByRole(userDatabase,workflowActivity);
    }
    else if (PerformerType.PERFORMER_DEPARTMENT_BASED.equals(performerType))
    {
      users=ParticipantSelector.selectByDepartment(userDatabase,workflowActivity);
    }
    else if (PerformerType.PERFORMER_CATEGORY_BASED.equals(performerType))
    {
      users=ParticipantSelector.selectByCategory(userDatabase,workflowActivity);
    }
    else if (PerformerType.PERFORMER_RANK_BASED.equals(performerType))
    {
      users=ParticipantSelector.selectByRank(userDatabase,workflowActivity);
    }
    else if (PerformerType.PERFORMER_SELECTOR_BASED.equals(performerType))
    {
      users=ParticipantSelector.selectBySelector(workflowWork,workflowTransition);
    }

    return users;
  }

  //------------------------------------------------------------------------------
  //  private function blocks
  //------------------------------------------------------------------------------
  private static List selectByParicipant(UserDatabase userDatabase,WorkflowActivity workflowActivity)
    throws WorkflowException
  {
    List users = new ArrayList();
    List userIds = workflowActivity.getPerformers();
   
    int sizeUser = userIds.size();
    for (int i = 0; i < sizeUser; ++i)
    {
      append2List(users, userDatabase.findParticipant((String) userIds.get(i)));
    }
    return users;
  }

  private static List selectByGroup(UserDatabase userDatabase,WorkflowActivity workflowActivity)
    throws WorkflowException
  {
    List users = new ArrayList();
    List groupIds = workflowActivity.getPerformers();
    int sizeGroup = groupIds.size();
    for (int i = 0; i < sizeGroup; ++i)
    {
      WorkflowGroup group = (WorkflowGroup) userDatabase.findGroup((String) groupIds.get(i));
      Iterator userInterator = group.getParticipants();
      while (userInterator.hasNext())
      {
        WorkflowParticipant user = (WorkflowParticipant) userInterator.next();
        append2List(users, user);
      }
    }
    return users;
  }

  private static List selectByRole(UserDatabase userDatabase,WorkflowActivity workflowActivity)
    throws WorkflowException
  {
    List users = new ArrayList();
    List roleIds = workflowActivity.getPerformers();
    int sizeRole = roleIds.size();
    for (int i = 0; i < sizeRole; ++i)
    {
      WorkflowRole role = (WorkflowRole) userDatabase.findRole((String) roleIds.get(i));
      Iterator userInterator = role.getParticipants();
      while (userInterator.hasNext())
      {
        WorkflowParticipant user = (WorkflowParticipant) userInterator.next();
        append2List(users, user);
      }
    }
    return users;
  }

  private static List selectByDepartment(UserDatabase userDatabase,WorkflowActivity workflowActivity)
    throws WorkflowException
  {
    List users = new ArrayList();
    List deptIds = workflowActivity.getPerformers();
      int sizeDept = deptIds.size();
      for (int i = 0; i < sizeDept; ++i)
      {
        WorkflowDepartment dept = (WorkflowDepartment) userDatabase.findDepartment((String) deptIds.get(i));
        Iterator userInterator = dept.getParticipants();
        while (userInterator.hasNext())
        {
          WorkflowParticipant user = (WorkflowParticipant) userInterator.next();
          append2List(users, user);
        }
      }
    return users;
  }


  private static List selectByCategory(UserDatabase userDatabase,WorkflowActivity workflowActivity)
    throws WorkflowException
  {
    List users = new ArrayList();
    List catIds = workflowActivity.getPerformers();
    int sizeCat = catIds.size();
    for (int i = 0; i < sizeCat; ++i)
    {
      String catId = (String) catIds.get(i);
      Iterator depts = userDatabase.getDepartments();
      while (depts.hasNext())
      {
        WorkflowDepartment dept = (WorkflowDepartment) userDatabase.findDepartment((String) depts.next());

        if (dept.getCategory() != null && catId.equals(dept.getCategory().getUUID()))
        {
          Iterator userInterator = dept.getParticipants();
          while (userInterator.hasNext())
          {
            WorkflowParticipant user = (WorkflowParticipant) userInterator.next();
            append2List(users, user);
          }
        }
      }
    }
    return users;
  }
 
  private static List selectByRank(UserDatabase userDatabase,WorkflowActivity workflowActivity)
    throws WorkflowException
  {
    List users = new ArrayList();
    List rankIds = workflowActivity.getPerformers();
    int sizeRank = rankIds.size();
    for (int i = 0; i < sizeRank; ++i)
    {
      String rankId = (String) rankIds.get(i);
      Iterator userInterator = userDatabase.getParticipants();
      while (userInterator.hasNext())
      {
        WorkflowParticipant user = (WorkflowParticipant) userInterator.next();
        if (user.getRank() != null && rankId.equals(user.getRank().getUUID()))
        {
          append2List(users, user);
        }
      }
    }
    return users;
  }

  private static List selectBySelector(
    WorkflowWork workflowWork,
    WorkflowTransition workflowTransition)
    throws WorkflowException
  {
    List users = new ArrayList();
    WorkflowActivity workflowActivity = workflowTransition.getToWorkflowActivity();
    ExtendedAttribute attribute =
      (ExtendedAttribute) workflowActivity.getExtendedAttributes().get(
        XPDLGlobals.SELECTOR_QUALIFIED_CLASS_NAME);

    String implClassName = attribute.getValue();
    Class implClass = null;
    PerformerSelector selector = null;
    try
    {
      implClass = Class.forName(implClassName);
      selector = (PerformerSelector) implClass.newInstance();
    }
    catch (Exception e)
    {
      throw new WorkflowException(e);
    }

    users = selector.select(workflowWork, workflowTransition);

    return users;
  }

  private static void append2List(List users, WorkflowParticipant user)
  {
    int sizeUsers = users.size();
    boolean found = false;
    WorkflowParticipant temp = null;
    for (int i = 0; i < sizeUsers; ++i)
    {
      temp = (WorkflowParticipant) users.get(i);
      if (user.getUUID().equals(temp.getUUID()))
      {
        found = true;
        break;
      }
    }
    if (!found)
    {
      users.add(user);
    }
  }
}
TOP

Related Classes of org.huihoo.workflow.impl.store.util.ParticipantSelector

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.