Java tutorial
/* * BusinessProccessManagerServiceBean.java * * Copyright (c) 1998 - 2008 BusinessTechnology, Ltd. * All rights reserved * * This program is the proprietary and confidential information * of BusinessTechnology, Ltd. and may be used and disclosed only * as authorized in a license agreement authorizing and * controlling such use and disclosure * * Millennium Business Suite Anywhere System. * */ package com.mg.merp.bpm.support; import com.mg.framework.api.BusinessException; import com.mg.framework.api.orm.OrmTemplate; import com.mg.framework.api.orm.Projections; import com.mg.framework.api.orm.Restrictions; import com.mg.framework.generic.AbstractPOJOBusinessObjectStatelessServiceBean; import com.mg.framework.utils.MiscUtils; import com.mg.framework.utils.ServerUtils; import com.mg.merp.bpm.BusinessProccessManagerServiceLocal; import com.mg.merp.bpm.model.Resource; import com.mg.merp.bpm.model.ResourceGroupLink; import org.apache.commons.lang.ArrayUtils; import org.jbpm.JbpmContext; import org.jbpm.JbpmException; import org.jbpm.graph.def.ProcessDefinition; import org.jbpm.graph.exe.ProcessInstance; import org.jbpm.taskmgmt.exe.TaskInstance; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipInputStream; import javax.ejb.Stateless; /** * ? ?- " ?-??" * * @author Artem V. Sharapov * @version $Id: BusinessProccessManagerServiceBean.java,v 1.1 2008/03/11 08:23:20 sharapov Exp $ */ @Stateless(name = "merp/bpm/BusinessProccessManagerService") //$NON-NLS-1$ public class BusinessProccessManagerServiceBean extends AbstractPOJOBusinessObjectStatelessServiceBean implements BusinessProccessManagerServiceLocal { /* (non-Javadoc) * @see com.mg.merp.bpm.BusinessProccessManagerServiceLocal#loadTasks() */ public List<TaskInstance> loadTasks() { return doLoadTasks(); } /** * ?? * * @return ?? */ protected List<TaskInstance> doLoadTasks() { List<TaskInstance> taskList; JbpmContext context = BPMManagerLocator.locate().getCurrentBpmContext(); try { OrmTemplate tmpl = OrmTemplate.getInstance(); List<String> actorIds = tmpl.findByCriteria(OrmTemplate.createCriteria(Resource.class, "r") //$NON-NLS-1$ .setProjection(Projections.property("r.Key")) //$NON-NLS-1$ .add(Restrictions.eq("r.User.Id", ServerUtils.getUserProfile().getIdentificator()))); //$NON-NLS-1$ //? , ?? ? if (actorIds.size() == 0) { List<String> actorIdsByGroup = tmpl .findByCriteria(OrmTemplate.createCriteria(ResourceGroupLink.class, "l") //$NON-NLS-1$ .createAlias("l.Resource", "r") //$NON-NLS-1$ //$NON-NLS-2$ .setProjection(Projections.property("r.Key")) //$NON-NLS-1$ .add(Restrictions.in("l.Group.Id", //$NON-NLS-1$ (Object[]) ArrayUtils.toObject(ServerUtils.getUserProfile().getGroups())))); actorIds.addAll(actorIdsByGroup); } //? ??, if (actorIds.size() == 0) { taskList = new ArrayList<TaskInstance>(); } else { for (int i = 0; i < actorIds.size(); i++) actorIds.set(i, actorIds.get(i).toLowerCase()); // ?? taskList = context.getGroupTaskList(actorIds); taskList = MiscUtils.convertUncheckedList(TaskInstance.class, context.getGroupTaskList(actorIds)); // ?? for (String actor : actorIds) taskList.addAll(MiscUtils.convertUncheckedList(TaskInstance.class, context.getTaskList(actor))); } } finally { context.close(); } return taskList; } /* (non-Javadoc) * @see com.mg.merp.bpm.BusinessProccessManagerServiceLocal#startTask(long) */ public void startTask(long taskId) { doStartTask(taskId); } /** * ? * * @param taskId - */ protected void doStartTask(long taskId) { JbpmContext context = BPMManagerLocator.locate().getCurrentBpmContext(); try { if (taskId != 0) getCurrentTaskInstance(context, taskId).start(); } finally { context.close(); } } /* (non-Javadoc) * @see com.mg.merp.bpm.BusinessProccessManagerServiceLocal#endTask(long) */ public void endTask(long taskId) { doEndTask(taskId); } /** * * * @param taskId - */ protected void doEndTask(long taskId) { JbpmContext context = BPMManagerLocator.locate().getCurrentBpmContext(); try { if (taskId != 0) getCurrentTaskInstance(context, taskId).end(); } finally { context.close(); } } private TaskInstance getCurrentTaskInstance(JbpmContext context, long taskId) { return context.loadTaskInstance(taskId); } /* (non-Javadoc) * @see com.mg.merp.bpm.BusinessProccessManagerServiceLocal#loadProcesses() */ public List<ProcessDefinition> loadProcesses() { return doLoadProcesses(); } /** * ?? ?-?? * * @return ?? ?-?? */ protected List<ProcessDefinition> doLoadProcesses() { List<ProcessDefinition> processList; JbpmContext context = BPMManagerLocator.locate().getCurrentBpmContext(); try { processList = MiscUtils.convertUncheckedList(ProcessDefinition.class, context.getGraphSession().findLatestProcessDefinitions()); } finally { context.close(); } return processList; } /* (non-Javadoc) * @see com.mg.merp.bpm.BusinessProccessManagerServiceLocal#deployProcess(java.io.InputStream) */ public void deployProcess(InputStream inputStream) { doDeployProcess(inputStream); } /** * ?-?? * * @param inputStream - */ protected void doDeployProcess(InputStream inputStream) { JbpmContext context = BPMManagerLocator.locate().getCurrentBpmContext(); try { ZipInputStream zipInputStream = new ZipInputStream(inputStream); ProcessDefinition processDefinition = ProcessDefinition.parseParZipInputStream(zipInputStream); context.getGraphSession().deployProcessDefinition(processDefinition); } finally { context.close(); } } /* (non-Javadoc) * @see com.mg.merp.bpm.BusinessProccessManagerServiceLocal#deleteProcess(long) */ public void deleteProcess(long processId) { doDeleteProcess(processId); } /** * ?-?? * * @param processId - ?-?? */ protected void doDeleteProcess(long processId) { JbpmContext context = BPMManagerLocator.locate().getCurrentBpmContext(); try { context.getGraphSession().deleteProcessDefinition(getCurrentProcessDefinition(context, processId)); } catch (JbpmException e) { throw new BusinessException(Messages.getInstance().getMessage(Messages.PROCESS_NOT_FOUND)); } finally { context.close(); } } /* (non-Javadoc) * @see com.mg.merp.bpm.BusinessProccessManagerServiceLocal#createProcessInstance(long) */ public void createProcessInstance(long processId) { doCreateProcessInstance(processId); } /** * ?? ?-?? * * @param processId - ?-?? */ protected void doCreateProcessInstance(long processId) { JbpmContext context = BPMManagerLocator.locate().getCurrentBpmContext(); try { ProcessInstance processInstance = new ProcessInstance(getCurrentProcessDefinition(context, processId)); //FIXME, workaround http://jira.jboss.com/jira/browse/JBPM-913 processInstance.setKey(String.valueOf(processInstance.getId())); // context.save(processInstance); } catch (JbpmException e) { throw new BusinessException(Messages.getInstance().getMessage(Messages.PROCESS_NOT_FOUND)); } finally { context.close(); } } private ProcessDefinition getCurrentProcessDefinition(JbpmContext context, long processId) { return context.getGraphSession().getProcessDefinition(processId); } }