/** * Copyright 2007-2008 非也 * 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. * */ package org.fireflow.engine.modules.processlanguage; import java.io.InputStream; import java.util.Map; import org.fireflow.engine.context.EngineModule; import org.fireflow.engine.context.RuntimeContextAware; import org.fireflow.engine.entity.repository.ProcessDescriptor; import org.fireflow.engine.entity.repository.ProcessKey; import org.fireflow.engine.entity.repository.ProcessRepository; import org.fireflow.engine.entity.runtime.ActivityInstance; import org.fireflow.engine.exception.WebservicePublishException; import org.fireflow.model.InvalidModelException; import org.fireflow.model.binding.ResourceBinding; import org.fireflow.model.binding.ServiceBinding; import org.fireflow.model.data.Property; import org.fireflow.model.resourcedef.ResourceDef; import org.fireflow.model.servicedef.ServiceDef; /** * 流程定义服务。 * @author 非也,nychen2000@163.com * */ public interface ProcessLanguageManager extends RuntimeContextAware,EngineModule { public String getProcessType(); public void setProcessType(String processType); /************************************************/ /** 一、流程语言对engine的特定扩展 *****/ /************************************************/ public Map<String, EngineModule> getEngineModules(); public void setEngineModules(Map<String,EngineModule> _engineModules); public <T extends EngineModule> T getEngineModule(Class<T> interfaceClass); /************************************************/ /** 二、操作流程定义的方法 *****/ /************************************************/ /** * 返回流程的入口元素的Id,例如:FPDL (2.0)流程返回的是main_subflow的Id * @param workflowProcessId * @param version * @param processType * @return */ public String getProcessEntryId(String workflowProcessId, int version,String processType); public String serializeProcess2Xml(Object process) throws InvalidModelException; public Object deserializeXml2Process(InputStream inStream)throws InvalidModelException; public ProcessRepository serializeProcess2ProcessRepository(Object process)throws InvalidModelException; public ProcessDescriptor generateProcessDescriptor(Object process); /** * 获得ServiceBinding对象 * @param activity 特定流程定义语言的Activity对象 * @return * @throws InvalidModelException */ public ServiceBinding getServiceBinding(Object activity)throws InvalidModelException; /** * 根据serviceBinding.getServiceId()和activity,找到ServiceDef对象 * @param activity * @param serviceBinding * @return */ public ServiceDef getServiceDef(ActivityInstance activityInstance,Object activity,String serviceId); /** * 根据resourceId和Activity获得resourceDef对象 * @param activityInstance * @param activity * @param resourceId * @return */ public ResourceDef getResourceDef(ActivityInstance activityInstance,Object activity,String resourceId); /** * 获得resource binding对象 * @param activity 特定流程定义语言的Activity对象 * @return * @throws InvalidModelException */ public ResourceBinding getResourceBinding(Object activity)throws InvalidModelException; /** * 提取子流程或者Activity的流程变量(Property对象)。 * @param workflowDefinitionElement SubProcess 或者 Activity对象,由于Engine对流程定义语言的结构一无所知,所以需要交给特定流程定义语言的ProcessUtil工具类来返回Property对象。 * @param propertyName property的名字 * @return */ public Property getProperty(Object workflowDefinitionElement,String propertyName); /** * 根据条件查找Activity * @param processKey * @param subflowId * @param activityId * @return * @throws InvalidModelException */ public Object findActivity(ProcessKey processKey,String subflowId, String activityId)throws InvalidModelException; public Object findSubProcess(ProcessKey processKey,String subflowId )throws InvalidModelException; /************************************************/ /** 三、发布流程流程服务 *****/ /************************************************/ /** * 将所有的回调发布成WebService */ public void publishAllProcessServices()throws WebservicePublishException; }