JbpmUtil

import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

import org.jbpm.api.Execution;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ManagementService;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.model.OpenExecution;
import org.jbpm.api.task.Participation;
import org.jbpm.api.task.Task;
import org.jbpm.pvm.internal.model.ExecutionImpl;
import org.jbpm.pvm.internal.task.OpenTask;
import org.jbpm.pvm.internal.task.TaskImpl;

/**
 * jbpm简单工具类 。
 * 
 * @author lijian
 * 
 */
public class JbpmUtil {

    private ProcessEngine processEngine;

    private RepositoryService repositoryService = null;
    private ExecutionService executionService = null;
    private TaskService taskService = null;
    private HistoryService historyService = null;
    private ManagementService managementService = null;

    public JbpmUtil() {

    }

    /**
     * 通过构造方法,传递流程引擎,实例化相关实体类。
     * 
     * @param processEngine
     */
    public JbpmUtil(ProcessEngine processEngine) {
        this.processEngine = processEngine;
        repositoryService = processEngine.getRepositoryService();
        executionService = processEngine.getExecutionService();
        taskService = processEngine.getTaskService();
        historyService = processEngine.getHistoryService();
        managementService = processEngine.getManagementService();
    }

    // ------------------- 实用方法 --------------------

    /**
     * 部署新流程定义通过路径。
     * 
     * @param resourceName
     * @return
     */
    public String newDeployDefinitionByPath(String resourceName) {
        return repositoryService.createDeployment().addResourceFromClasspath(
                resourceName).deploy();
    }

    /**
     * 部署新流程定义通过zip包
     * 
     * @param resourceZipName
     * @return
     */
    public String newDeployDefinitionByZip(String resourceZipName) {
        ZipInputStream zis = new ZipInputStream(this.getClass()
                .getResourceAsStream(resourceZipName));
        return repositoryService.createDeployment()
                .addResourcesFromZipInputStream(zis).deploy();
    }

    /**
     * 部署新流程定义通过url请求。
     * 
     * @param urlStr
     * @return
     * @throws MalformedURLException
     *             网络异常
     */
    public String newDeployDefinitionByUrl(String urlStr)
            throws MalformedURLException {
        URL url = new URL(urlStr);
        return repositoryService.createDeployment().addResourceFromUrl(url)
                .deploy();
    }

    /**
     * 开始一个流程实例
     * 
     * @param id
     * @param map
     * @return
     */
    public ProcessInstance startProcessInstanceById(String processDefinitionId,
            Map<String, ?> variables) {
        return executionService.startProcessInstanceById(processDefinitionId,
                variables);
    }

    /**
     * 完成任务
     * 
     * @param taskId
     * @param variables
     */
    public void completeTask(String taskId, Map<String, ?> variables) {
        if (null == variables) {
            taskService.completeTask(taskId);
            return;
        }
        taskService.completeTask(taskId, variables);
    }

    /**
     * 完成任务
     * 
     * @param taskId
     * @param outcome
     */
    public void completeTask(String taskId, String outcome) {
        if (null == outcome) {
            taskService.completeTask(taskId);
            return;
        }
        taskService.completeTask(taskId, outcome);
    }

    /**
     * 获得所有发布的流程
     * 
     * @return
     */
    public List<ProcessDefinition> getAllProcessDefinitionList() {
        return repositoryService.createProcessDefinitionQuery().list();
    }

    /**
     * 获得所有的流程实例
     * 
     * @return
     */
    public List<ProcessInstance> getAllProcessInstanceList() {
        return executionService.createProcessInstanceQuery().list();
    }

    /**
     * 根据流程实例executionId与variableName,获取指定的变量值
     * 
     * @param executionId
     * @param variableName
     * @return
     */
    public Object getVariableByexecutionId(String executionId,
            String variableName) {
        return executionService.getVariable(executionId, variableName);
    }

    /**
     * 根据任务taskId与变量名variableName,获取指定变量值
     * 
     * @param taskId
     * @param variableName
     * @return
     */
    public Object getVariable(String taskId, String variableName) {
        return taskService.getVariable(taskId, variableName);
    }

    /**
     * 设置变量
     * 
     * @param taskId
     * @param variables
     */
    public void setVariables(String taskId, Map<String, ?> variables) {
        taskService.setVariables(taskId, variables);
    }

    /**
     * 获取指定用户Id的任务
     * 
     * @param userId
     * @return
     */
    public List<Task> findPersonalTasks(String userId) {
        return taskService.findPersonalTasks(userId);
    }

    /**
     * 根据任务id获取任务
     * 
     * @param taskId
     * @return
     */
    public Task getTaskByTaskId(String taskId) {
        return taskService.getTask(taskId);
    }

    /**
     * 通过主任务,参与会签者,创建子任务
     * 
     * @param task
     * @param users
     */
    public void createSubTasks(Task task, List<String> users) {

        // OpenTask才有createSubTask方法,Task接口是没有的
        OpenTask oTask = (OpenTask) task;

        // 这个对象非常重要,没有它,通过子任务无法跟主任务获得联系
        Execution execution = executionService.findExecutionById(task
                .getExecutionId());
        // 获得所有的参与者
        for (String userId : users) {
            TaskImpl subTask = (TaskImpl) oTask.createSubTask();
            subTask.setAssignee(userId);
            subTask.setName(task.getName());
            subTask.setFormResourceName(task.getFormResourceName());
            // 这句话是关键 只有设定同样的实例 子任务才能获得主任务设定的变量
            subTask.setExecution((ExecutionImpl) execution);
            taskService.addTaskParticipatingUser(task.getId(), userId,
                    Participation.CLIENT);
        }
    }

    /**
     * @param execution
     * @return
     */
    public Task getByOpenExecution(OpenExecution execution) {
        // 获得实例ID
        String pid = execution.getProcessInstance().getId();
        return taskService.createTaskQuery().processInstanceId(pid)
                .activityName(execution.getName()).uniqueResult();
    }

    /**
     * Saves the given task to persistent storage.
     * 
     * @param task
     * @return
     */
    public String saveTask(Task task) {
        return taskService.saveTask(task);
    }

    /**
     * 级联删除流程定义,直接删除该流程定义下的所有实例
     * 
     * @param deploymentId
     *            流程定义id
     */
    public void deleteDeploymentCascade(String deploymentId) {
        if (deploymentId == null) {
            return;
        }
        repositoryService.deleteDeploymentCascade(deploymentId);
    }

    // setter-getter方法

    public ProcessEngine getProcessEngine() {
        return processEngine;
    }

    public void setProcessEngine(ProcessEngine processEngine) {
        this.processEngine = processEngine;
        System.out.println("processEngine=" + processEngine);
        repositoryService = processEngine.getRepositoryService();
        executionService = processEngine.getExecutionService();
        taskService = processEngine.getTaskService();
        historyService = processEngine.getHistoryService();
        managementService = processEngine.getManagementService();
    }

    public RepositoryService getRepositoryService() {
        return repositoryService;
    }

    public void setRepositoryService(RepositoryService repositoryService) {
        this.repositoryService = repositoryService;
    }

    public ExecutionService getExecutionService() {
        return executionService;
    }

    public void setExecutionService(ExecutionService executionService) {
        this.executionService = executionService;
    }

    public TaskService getTaskService() {
        return taskService;
    }

    public void setTaskService(TaskService taskService) {
        this.taskService = taskService;
    }

    public HistoryService getHistoryService() {
        return historyService;
    }

    public void setHistoryService(HistoryService historyService) {
        this.historyService = historyService;
    }

    public ManagementService getManagementService() {
        return managementService;
    }

    public void setManagementService(ManagementService managementService) {
        this.managementService = managementService;
    }

}
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI 和 iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc 和 xls。Apache POI 提供了 HSSF 和 XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取和写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行和列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row 和 Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成和修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表和表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体和样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值