package org.fireflow; import java.text.SimpleDateFormat; import java.util.List; import org.fireflow.client.WorkflowQuery; import org.fireflow.client.WorkflowSession; import org.fireflow.client.WorkflowSessionFactory; import org.fireflow.client.WorkflowStatement; import org.fireflow.client.query.Order; import org.fireflow.engine.context.RuntimeContext; import org.fireflow.engine.entity.runtime.ActivityInstance; import org.fireflow.engine.entity.runtime.ActivityInstanceProperty; import org.fireflow.engine.entity.runtime.ProcessInstance; import org.fireflow.engine.entity.runtime.ScheduleJob; import org.fireflow.engine.entity.runtime.ScheduleJobProperty; import org.fireflow.engine.entity.runtime.Variable; import org.fireflow.engine.entity.runtime.VariableProperty; import org.fireflow.engine.entity.runtime.WorkItem; import org.fireflow.engine.entity.runtime.WorkItemProperty; import org.fireflow.engine.entity.runtime.impl.AbsWorkItem; import org.fireflow.engine.modules.ousystem.impl.FireWorkflowSystem; import org.fireflow.engine.modules.schedule.Scheduler; import org.fireflow.pvm.kernel.Token; import org.fireflow.pvm.kernel.TokenProperty; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; /** * Copyright 2007-2010 非也 * All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation。 * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses. * */ /** * @author 非也 * @version 2.0 */ public class BaseEnviroment4Junit { protected static final String PROCESS_TYPE = "BPEL"; protected static final String springConfig = "applicationContext.xml"; protected static Resource resource = null; protected static XmlBeanFactory beanFactory = null; protected static RuntimeContext runtimeContext = null; protected static TransactionTemplate transactionTemplate = null; protected static String processInstanceId = null; protected static SimpleDateFormat formater = new SimpleDateFormat( "yyyyMMdd HH:mm:ss"); /** * 初始化引擎 */ @BeforeClass public static void beforeClass() { resource = new ClassPathResource(springConfig); beanFactory = new XmlBeanFactory(resource); runtimeContext = (RuntimeContext) beanFactory.getBean("runtimeContext"); transactionTemplate = (TransactionTemplate) beanFactory .getBean("springTransactionTemplate"); final JunitInitializer initializer = (JunitInitializer) beanFactory .getBean("junitInitializer"); // 清除现有的数据 transactionTemplate.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus arg0) { initializer.clearData(); return null; } }); final WorkflowSession session = WorkflowSessionFactory .createWorkflowSession(runtimeContext, FireWorkflowSystem .getInstance()); final WorkflowStatement stmt = session .createWorkflowStatement(PROCESS_TYPE); // 发布缺省的资源定义文件 transactionTemplate.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus arg0) { try { // InputStream in = BaseEnviroment4Junit.class // .getClassLoader().getResourceAsStream( // "FireWorkflow-Default-Resources.rsc.xml"); // Map<ResourceDescriptorProperty, Object> props = new HashMap<ResourceDescriptorProperty, Object>(); // props.put(ResourceDescriptorProperty.FILE_NAME, // "FireWorkflow-Default-Resources.rsc.xml"); // stmt.uploadResourcesStream(in, Boolean.TRUE, props); } catch (Exception e) { e.printStackTrace(); } return null; } }); } @AfterClass public static void afterClass() { // 等待调度器结束 Scheduler scheduler = runtimeContext.getEngineModule(Scheduler.class, PROCESS_TYPE); boolean hasJobInSchedule = scheduler.hasJobInSchedule(runtimeContext); System.out.println(); while (hasJobInSchedule) { System.out.print("..."); try { Thread.currentThread().sleep(3 * 1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } hasJobInSchedule = scheduler.hasJobInSchedule(runtimeContext); } WorkflowSession session = WorkflowSessionFactory.createWorkflowSession( runtimeContext, FireWorkflowSystem.getInstance()); WorkflowQuery<ProcessInstance> q4ProcInst = session .createWorkflowQuery(ProcessInstance.class); List<ProcessInstance> processInstanceList = q4ProcInst.list(); WorkflowQuery<ActivityInstance> q4ActInst = session .createWorkflowQuery(ActivityInstance.class); q4ActInst.addOrder( Order.asc(ActivityInstanceProperty.PROCESS_INSTANCE_ID)) .addOrder(Order.asc(ActivityInstanceProperty.STEP_NUMBER)); List<ActivityInstance> activityInstanceList = q4ActInst.list(); WorkflowQuery<Token> q4Token = session.createWorkflowQuery(Token.class); q4Token.addOrder(Order.asc(TokenProperty.PROCESS_INSTANCE_ID)) .addOrder(Order.asc(TokenProperty.STEP_NUMBER)); List<Token> tokenList = q4Token.list(); WorkflowQuery<Variable> q4Variable = session.createWorkflowQuery( Variable.class); q4Variable.addOrder(Order.asc(VariableProperty.SCOPE_ID)); List<Variable> variableList = q4Variable.list(); WorkflowQuery<WorkItem> q4WorkItem = session.createWorkflowQuery( WorkItem.class); q4WorkItem .addOrder( Order .asc(WorkItemProperty.PROCESSS_ID)) .addOrder( Order .asc(WorkItemProperty.PROCESS_INSTANCE_ID)) .addOrder(Order.asc(WorkItemProperty.ACTIVITY_INSTANCE_ID)); List<WorkItem> workItemList = q4WorkItem.list(); WorkflowQuery<ScheduleJob> q4ScheduleJob = session.createWorkflowQuery( ScheduleJob.class); q4ScheduleJob .addOrder(Order.asc(ScheduleJobProperty.PROCESS_ID)); // .addOrder( // Order // .asc(ScheduleJobProperty.ACTIVITY_INSTANCE_$_STEP_NUMBER)); List<ScheduleJob> jobList = q4ScheduleJob.list(); // ////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////// System.out .println("******************************************************"); System.out .println("**********Process Instance Staroge Content***********"); System.out .println("******************************************************"); System.out.println("Id\t\tState\t\tName\t\tDisplayName\t\t"); for (ProcessInstance procInst : processInstanceList) { System.out.print(procInst.getId()); System.out.print("\t\t"); System.out.print(procInst.getState().getDisplayName()); System.out.print("\t\t"); System.out.print(procInst.getProcessName()); System.out.print("\t\t"); System.out.print(procInst.getProcessDisplayName()); System.out.println("\n"); } System.out .println("******************************************************"); System.out .println("**********Activity Instance Staroge Content***********"); System.out .println("******************************************************"); System.out .println("StepNumber\t\tState\t\tName\t\tDisplayName\t\tProcessInstanceId\t\tId\t\t"); for (ActivityInstance actInst : activityInstanceList) { System.out.print(actInst.getStepNumber()); System.out.print("\t\t"); System.out.print(actInst.getState().getDisplayName()); System.out.print("\t\t"); System.out.print(actInst.getName()); System.out.print("\t\t"); System.out.print(actInst.getDisplayName()); System.out.print("\t\t"); System.out.print(actInst.getProcessInstanceId()); System.out.print("\t\t"); System.out.print(actInst.getId()); System.out.println("\n"); } System.out .println("******************************************************"); System.out .println("**************Token Staroge Content*******************"); System.out .println("******************************************************"); System.out .println("StepNumber\tState\tNodeId\t\tOperationContext\t\tProcessId\t\tProcessInstanceId\t\tId"); for (Token token : tokenList) { System.out.print(token.getStepNumber()); System.out.print("\t"); System.out.print(token.getState().getDisplayName()); System.out.print("\t"); System.out.print(token.getElementId()); System.out.print("\t\t"); System.out.print(token.getOperationContextName().name()); System.out.print("\t\t"); System.out.print(token.getProcessId()); System.out.print("\t\t"); System.out.print(token.getProcessInstanceId()); System.out.print("\t\t"); System.out.print(token.getId()); System.out.println("\n"); } System.out .println("******************************************************"); System.out .println("**************Variable Staroge Content****************"); System.out .println("******************************************************"); System.out.println("ScopeId\t\tName\t\tDataType\t\tValue"); for (Variable var : variableList) { System.out.print(var.getScopeId()); System.out.print("\t\t"); System.out.print(var.getName()); System.out.print("\t\t"); System.out.print(var.getDataType()); System.out.print("\t\t"); System.out.print(var.getPayload()); System.out.println("\n"); } System.out .println("******************************************************"); System.out .println("**************WorkItem Staroge Content *************"); System.out .println("******************************************************"); System.out .println("Name\t\tState\t\tOwner\t\tCreatedTime\t\tClaimedTime\t\tEndTime\t\tId\ttActivityInstanceId"); for (WorkItem workItem : workItemList) { System.out.print(workItem.getSubject()); System.out.print("\t\t"); System.out.print(workItem.getState().getDisplayName()); System.out.print("\t\t"); System.out.print(workItem.getOwnerName()); System.out.print("\t\t"); System.out.print(workItem.getCreatedTime() == null ? "--" : formater.format(workItem.getCreatedTime())); System.out.print("\t\t"); System.out.print(workItem.getClaimedTime() == null ? "--" : formater.format(workItem.getClaimedTime())); System.out.print("\t\t"); System.out.print(workItem.getEndTime() == null ? "--" : formater .format(workItem.getEndTime())); System.out.print("\t\t"); System.out.print(workItem.getId()); System.out.print("\t\t"); String actInstId = ((AbsWorkItem)workItem).getActivityInstanceId(); System.out.print(actInstId==null?actInstId:"-"); System.out.println(); } System.out .println("******************************************************"); System.out .println("**************ScheduleJob Staroge Content*************"); System.out .println("******************************************************"); System.out .println("Name\t\tTriggeredTimes\t\tLastestTriggeredTime\t\tState\t\tEndTime\t\tTiggerType\t\tTriggerExpression"); for (ScheduleJob job : jobList) { System.out.print(job.getName()); System.out.print("\t\t"); System.out.print(job.getTriggeredTimes()); System.out.print("\t\t"); System.out.print(job.getLatestTriggeredTime() == null ? "--" : formater.format(job.getLatestTriggeredTime())); System.out.print("\t\t"); System.out.print(job.getState().getDisplayName()); System.out.print("\t\t"); System.out.print(job.getEndTime() == null ? "--" : formater .format(job.getEndTime())); System.out.print("\t\t"); System.out.print(job.getTriggerType()); System.out.print("\t\t"); System.out.print(job.getTriggerExpression()); System.out.println(); } } public void assertResult(WorkflowSession session) { Assert.assertNotNull(processInstanceId); } }