Activiti學習:(第三篇) 整合Activiti Modeler 流程轉化爲可編輯模型

1. 背景

    Activiti Modeler有個功能可以將已經部署的流程重新轉化爲可編輯模型,感覺這個功能還是很有實用價值的,百度後發現沒有人整合過,所以自己看了源碼,做了整合,下面分享給大家。

2. 代碼分享

/**

     * 流程轉化爲可編輯模型

     *

     * @param processDefineModel

     */

    public String changeProcessToModel(ProcessDefineModel processDefineModel) {

        Model modelData = repositoryService.newModel();

        // 初始化Model

        ObjectNode modelObjectNode = objectMapper.createObjectNode();

        modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefineModel.getName());

        modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);

        modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefineModel.getDescription());

        modelData.setMetaInfo(modelObjectNode.toString());

        modelData.setName(processDefineModel.getName());

        modelData.setKey(processDefineModel.getKey());

        // 保存模型

        repositoryService.saveModel(modelData);

 

        String deploymentId = processDefineModel.getDeploymentId();

        String processDefineResourceName = null;

        // 通過deploymentId取得某個部署的資源的名稱

        List<String> resourceNames = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);

        if (resourceNames != null && resourceNames.size() > 0) {

            for (String temp : resourceNames) {

                if (temp.indexOf(".xml") > 0) {

                    processDefineResourceName = temp;

                }

            }

        }

 

        /*

         * 讀取資源

         * deploymentId:部署的id

         * resourceName:資源的文件名

         */

        InputStream bpmnStream = processEngine.getRepositoryService()

                .getResourceAsStream(deploymentId, processDefineResourceName);

        impoerModelUtil.creatModelByImpoutStream(bpmnStream, modelData.getId());

 

        return modelData.getId();

 

    }

 

/**

     * 創建Model二進制信息

     * @param bpmnStream

     * @param ModelID

     */

    public void creatModelByImpoutStream(InputStream bpmnStream, String ModelID) {

        XMLInputFactory xif;

        InputStreamReader in = null;

        XMLStreamReader xtr = null;

        try {

            xif = XmlUtil.createSafeXmlInputFactory();

            in = new InputStreamReader(bpmnStream, "UTF-8");

            xtr = xif.createXMLStreamReader(in);

            BpmnModel bpmnModel = (new BpmnXMLConverter()).convertToBpmnModel(xtr);

 

            ObjectNode modelNode = new BpmnJsonConverter().convertToJson(bpmnModel);

            repositoryService.addModelEditorSource(ModelID, modelNode.toString().getBytes("utf-8"));

 

        } catch (XMLStreamException e) {

            e.printStackTrace();

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        } finally {

            if (xtr != null) {

                try {

                    xtr.close();

                } catch (XMLStreamException e) {

                    e.printStackTrace();

                }

            }

            if (in != null) {

                try {

                    in.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

 

            if (bpmnStream != null) {

                try {

                    bpmnStream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

 

        }

    }

3. 效果展示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章