///** // * Copyright 1996-2014 FoxBPM ORG. // * // * Licensed under the Apache License, Version 2.0 (the "License"); // * you may not use this file except in compliance with the License. // * You may obtain a copy of the License at // * // * http://www.apache.org/licenses/LICENSE-2.0 // * // * Unless required by applicable law or agreed to in writing, software // * distributed under the License is distributed on an "AS IS" BASIS, // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // * See the License for the specific language governing permissions and // * limitations under the License. // * // * @author kenshin // */ //package org.foxbpm.engine.impl.util; // //import java.util.ArrayList; //import java.util.List; // //import org.eclipse.bpmn2.BaseElement; //import org.eclipse.bpmn2.Bpmn2Factory; //import org.eclipse.bpmn2.Definitions; //import org.eclipse.bpmn2.Documentation; //import org.eclipse.bpmn2.Expression; //import org.eclipse.bpmn2.ExtensionAttributeValue; //import org.eclipse.bpmn2.FormalExpression; //import org.eclipse.bpmn2.ParallelGateway; //import org.eclipse.bpmn2.Process; //import org.eclipse.bpmn2.ResourceRole; //import org.eclipse.bpmn2.SequenceFlow; //import org.eclipse.bpmn2.UserTask; //import org.eclipse.bpmn2.di.BPMNEdge; //import org.eclipse.bpmn2.di.BPMNShape; //import org.eclipse.dd.di.DiagramElement; //import org.eclipse.emf.common.util.TreeIterator; //import org.eclipse.emf.ecore.EAttribute; //import org.eclipse.emf.ecore.EObject; //import org.eclipse.emf.ecore.EReference; //import org.eclipse.emf.ecore.impl.BasicEObjectImpl; //import org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.SimpleFeatureMapEntry; //import org.eclipse.emf.ecore.util.FeatureMap; //import org.foxbpm.engine.impl.connector.ConnectorListener; //import org.foxbpm.engine.impl.task.TaskAssigneeDefinition; //import org.foxbpm.engine.task.TaskCommand; //import org.foxbpm.model.SkipStrategy; //import org.foxbpm.model.bpmn.foxbpm.AssignPolicyType; //import org.foxbpm.model.bpmn.foxbpm.CompleteTaskDescription; //import org.foxbpm.model.bpmn.foxbpm.ExpectedExecutionTime; //import org.foxbpm.model.bpmn.foxbpm.FormParamContainer; //import org.foxbpm.model.bpmn.foxbpm.FormUri; //import org.foxbpm.model.bpmn.foxbpm.FormUriView; //import org.foxbpm.model.bpmn.foxbpm.FoxBPMPackage; //import org.foxbpm.model.bpmn.foxbpm.PotentialStarter; //import org.foxbpm.model.bpmn.foxbpm.TaskDescription; //import org.foxbpm.model.bpmn.foxbpm.TaskPriority; //import org.foxbpm.model.bpmn.foxbpm.TaskSubject; // // //public class BpmnModelUtil { // // /** 获取流程的唯一编号*/ // public static String getProcessId(Process process){ // return StringUtil.getString(getExtensionAttribute(process,FoxBPMPackage.Literals.DOCUMENT_ROOT__DBID)); // } // // /** 获取任务领取方式*/ // public static String claimType(UserTask userTask){ // return StringUtil.getString(getExtensionAttribute(userTask,FoxBPMPackage.Literals.DOCUMENT_ROOT__CLAIM_TYPE)); // } // // /** 获取并行网关合并策略*/ // public static String convergType(ParallelGateway parallelGateway){ // return StringUtil.getString(getExtensionAttribute(parallelGateway,FoxBPMPackage.Literals.DOCUMENT_ROOT__CONVERG_TYPE)); // } // // /** 获取流程的分类*/ // public static String getProcessCategory(Process process){ // return StringUtil.getString(getExtensionAttribute(process,FoxBPMPackage.Literals.DOCUMENT_ROOT__CATEGORY)); // } // // /** 获取流程的发起人*/ // public static List<PotentialStarter> getPotentialStarters(Process process){ // // List<PotentialStarter> extensionElementList = getExtensionElementList(PotentialStarter.class, process, FoxBPMPackage.Literals.DOCUMENT_ROOT__POTENTIAL_STARTER); // // return extensionElementList; // } // // public List<ConnectorListener> getcConnectors(BaseElement baseElement){ // // List<ConnectorListener> connectors=new ArrayList<ConnectorListener>(); // // // return connectors; // } // // /** // * 获取开始节点是否持久化属性 // * @param baseElement // * @return // */ // public static boolean getStartEventPersistence(BaseElement baseElement){ // return StringUtil.getBoolean(BpmnModelUtil.getExtensionAttribute(baseElement, FoxBPMPackage.Literals.DOCUMENT_ROOT__IS_PERSISTENCE)); // } // // /** // * 获取线条表达式值 // * @param baseElement // * @return // */ // public static String getSequenceFlowCondition(BaseElement baseElement){ // SequenceFlow sequenceFlow = (SequenceFlow)baseElement; // Expression expression = sequenceFlow.getConditionExpression(); // if(expression != null){ // FormalExpression formalExpression = (FormalExpression)expression; // return formalExpression.getBody(); // } // return null; // } // // /** // * 获取人工任务主题信息 // * @param baseElement // * @return // */ // public static String getUserTaskSubject(BaseElement baseElement){ // TaskSubject taskSubject = (TaskSubject)BpmnModelUtil.getExtensionElement(baseElement,FoxBPMPackage.Literals.DOCUMENT_ROOT__TASK_SUBJECT); // if(taskSubject != null&&taskSubject.getExpression()!=null){ // // // // return taskSubject.getExpression().getValue(); // // } // return null; // } // // // /** // * 获取人工任务表单参数 // * @param baseElement // * @return // */ // public static FormParamContainer getFormParamContainer(BaseElement baseElement){ // FormParamContainer formParamContainer = (FormParamContainer)BpmnModelUtil.getExtensionElement(baseElement,FoxBPMPackage.Literals.DOCUMENT_ROOT__FORM_PARAM_CONTAINER); // return formParamContainer; // } // // // // // /** // * 获取人工任务描述 // * @param baseElement // * @return // */ // public static String getUserTaskDescription(BaseElement baseElement){ // TaskDescription taskDescription = (TaskDescription)BpmnModelUtil.getExtensionElement(baseElement,FoxBPMPackage.Literals.DOCUMENT_ROOT__TASK_DESCRIPTION); // if(taskDescription != null&&taskDescription.getExpression()!=null){ // return taskDescription.getExpression().getValue(); // } // return null; // } // // /** // * 获取人工任务描述 // * @param baseElement // * @return // */ // public static double getExpectedExecuteTime(BaseElement baseElement){ // ExpectedExecutionTime time = (ExpectedExecutionTime)BpmnModelUtil.getExtensionElement(baseElement,FoxBPMPackage.Literals.DOCUMENT_ROOT__EXPECTED_EXECUTION_TIME); // if(time != null){ // int day = time.getDay(); // int hours = time.getHour(); // int minute = time.getMinute(); // double expectTime = day*24 + hours + ((double)minute)/60; // return expectTime; // } // return 0; // } // // /** // * 获取人工任务完成后的描述 // * @param baseElement // * @return // */ // public static String getUserTaskCompleteTaskDescription(BaseElement baseElement){ // CompleteTaskDescription completeTaskDescription = (CompleteTaskDescription)BpmnModelUtil.getExtensionElement(baseElement,FoxBPMPackage.Literals.DOCUMENT_ROOT__COMPLETE_TASK_DESCRIPTION); // if(completeTaskDescription != null&&completeTaskDescription.getExpression()!=null){ // return completeTaskDescription.getExpression().getValue(); // } // return null; // } // // /** // * 获取操作表单 // * @param baseElement // * @return // */ // public static String getFormUri(BaseElement baseElement){ // FormUri formUri = (FormUri)BpmnModelUtil.getExtensionElement(baseElement, FoxBPMPackage.Literals.DOCUMENT_ROOT__FORM_URI); // if(formUri != null&&formUri.getExpression()!=null){ // return formUri.getExpression().getValue(); // } // return null; // } // // /** // * 获取浏览表单 // * @param baseElement // * @return // */ // public static String getFormUriView(BaseElement baseElement){ // FormUriView formUri = (FormUriView)BpmnModelUtil.getExtensionElement(baseElement, FoxBPMPackage.Literals.DOCUMENT_ROOT__FORM_URI_VIEW); // if(formUri != null&&formUri.getExpression()!=null){ // return formUri.getExpression().getValue(); // } // return null; // } // // /** // * 获取任务分配策略 // * @param baseElement // * @return // */ // public static String getUserTaskAssigneePolicyType(BaseElement baseElement){ // AssignPolicyType policyType = (AssignPolicyType)BpmnModelUtil.getExtensionElement(baseElement, FoxBPMPackage.Literals.DOCUMENT_ROOT__ASSIGN_POLICY_TYPE); // if(policyType != null){ // return policyType.getExpression().getValue(); // } // return null; // } // // /** // * 获取任务分配策略 // * @param baseElement // * @return // */ // public static String getUserTaskType(BaseElement baseElement){ // String taskType = (String)BpmnModelUtil.getExtensionAttribute(baseElement, FoxBPMPackage.Literals.DOCUMENT_ROOT__TASK_TYPE); // return taskType; // } // // /** // * 获取任务分配表达式 // * @param baseElement // * @return // */ // public static String getUserTaskAssigneeExpression(BaseElement baseElement){ // org.foxbpm.model.bpmn.foxbpm.Expression expression = (org.foxbpm.model.bpmn.foxbpm.Expression)BpmnModelUtil.getExtensionElement(baseElement, FoxBPMPackage.Literals.DOCUMENT_ROOT__ASSIGN_POLICY_TYPE); // return getValueFormExpression(expression); // } // // /** // * 获取任务处理者 // * @param baseElement // * @return // */ // public static List<TaskAssigneeDefinition> getUserTaskAssignees(BaseElement baseElement){ // UserTask userTask = (UserTask)baseElement; // List<ResourceRole> resources = userTask.getResources(); // List<TaskAssigneeDefinition> assignees = new ArrayList<TaskAssigneeDefinition>(); // if(resources != null){ // for(ResourceRole resource :resources){ // if(resource != null){ // String resourceType = StringUtil.getString(resource.eGet(FoxBPMPackage.Literals.DOCUMENT_ROOT__RESOURCE_TYPE, true)); // boolean isContainsSub = StringUtil.getBoolean(resource.eGet(FoxBPMPackage.Literals.DOCUMENT_ROOT__IS_CONTAINS_SUB, true)); // String resourceExpression = BpmnModelUtil.getExpression(resource.getResourceAssignmentExpression().getExpression()); // //String resourceName = resource.getName(); // TaskAssigneeDefinition assignee = new TaskAssigneeDefinition(); // assignee.setContainsSub(isContainsSub); // assignee.setUserIdExpression(resourceExpression); // assignee.setGroupIdExpression(resourceExpression); // assignee.setGroupTypeExpression(resourceType); // assignees.add(assignee); // } // } // } // return assignees; // } // // /** // * 获取任务命令集合 // * @param baseElement // * @return // */ // public static List<TaskCommand> getUserTaskCommands(BaseElement baseElement){ // List<TaskCommand> taskCommands = new ArrayList<TaskCommand>(); //// List<TaskCommandModel> taskCommandsObj =BpmnModelUtil.getAll(TaskCommandModel.class, baseElement); //// if(taskCommandsObj!=null){ //// for (TaskCommandModel tmpTaskCommand : taskCommandsObj) { //// TaskCommand taskCommandDefinition = new TaskCommand(); //// taskCommandDefinition.setCommandType(tmpTaskCommand.getCommandType()); //// taskCommandDefinition.setId(tmpTaskCommand.getId()); //// taskCommandDefinition.setName(tmpTaskCommand.getName()); //// org.foxbpm.model.bpmn.foxbpm.Expression expression = tmpTaskCommand.getExpression(); //// if(expression != null){ //// taskCommandDefinition.setExpression(expression.getValue()); //// } //// expression = tmpTaskCommand.getParameterExpression(); //// if(expression != null){ //// taskCommandDefinition.setParaExpression(expression.getValue()); //// } //// taskCommands.add(taskCommandDefinition); //// } //// } // return taskCommands; // } // // /** // * 获取任务优先级 // * @param baseElement // * @return // */ // public static String getUserTaskPriority(BaseElement baseElement){ // TaskPriority taskPriorityObj = (TaskPriority)BpmnModelUtil.getExtensionElement(baseElement, FoxBPMPackage.Literals.DOCUMENT_ROOT__TASK_PRIORITY); // if(taskPriorityObj != null){ // return taskPriorityObj.getExpression().getValue(); // } // return null; // } // // public static String getValueFormExpression(org.foxbpm.model.bpmn.foxbpm.Expression expression){ // if(expression != null){ // return expression.getValue(); // } // return null; // } // // public static Object getExtensionAttribute(BaseElement baseElement,EAttribute eAttribute){ // return baseElement.eGet(eAttribute); // } // // public static Object getExtensionElement(BaseElement baseElement,EReference eReference){ // if(baseElement==null){ // return null; // } // if (baseElement.getExtensionValues().size() > 0) { // for (ExtensionAttributeValue extensionAttributeValue : baseElement.getExtensionValues()) { // FeatureMap extensionElements = extensionAttributeValue.getValue(); // Object objectElement = extensionElements.get(eReference, true); // if (objectElement != null) { // if(objectElement instanceof List){ // @SuppressWarnings("unchecked") // List<EObject> tObjList = (List<EObject>)objectElement; // if(tObjList.size()>0){ // return tObjList.get(0); // } // }else{ // return objectElement; // } // } // } // } // return null; // } // // @SuppressWarnings("unchecked") // public static <T> T getExtensionElementOne(Class<T> t ,BaseElement baseElement,EReference eReference){ // // // if(baseElement==null){ // return null; // } // // if (baseElement.getExtensionValues().size() > 0) { // for (ExtensionAttributeValue extensionAttributeValue : baseElement.getExtensionValues()) { // FeatureMap extensionElements = extensionAttributeValue.getValue(); // // Object objectElement = extensionElements.get(eReference, true); // if (objectElement != null) { // // // if(objectElement instanceof List){ // List<T> tObjList = (List<T>) objectElement; // if(tObjList.size()>0){ // return tObjList.get(0); // } // // }else{ // return (T)objectElement; // } // // } // // // } // } // // // // // // return (T)null; // } // // // @SuppressWarnings("unchecked") // public static <T> List<T> getExtensionElementList( Class<T> t ,BaseElement baseElement,EReference eReference){ // // // if (baseElement.getExtensionValues().size() > 0) { // for (ExtensionAttributeValue extensionAttributeValue : baseElement.getExtensionValues()) { // FeatureMap extensionElements = extensionAttributeValue.getValue(); // Object objectElement = extensionElements.get(eReference, true); // if (objectElement != null) { // // List<T> tObjList = (List<T>) objectElement; // return tObjList; // // // } // } // } // // // return (List<T>)null; // } // // // public static String getDocumentation(BaseElement baseElement){ // List<Documentation> documentations=baseElement.getDocumentation(); // if(documentations.size()==0){ // return null; // } // else{ // String documentationText=documentations.get(0).getText(); // return documentationText; // } // } // // /** // * 增加扩展元素 // * @param baseElement // * @param eReference // * @param o // * @return // */ // public static boolean addExtensionElement(BaseElement baseElement,EReference eReference,Object o){ // final FeatureMap.Entry extensionElementEntry = new SimpleFeatureMapEntry((org.eclipse.emf.ecore.EStructuralFeature.Internal) eReference, o); // if(baseElement.getExtensionValues().size() > 0){ // baseElement.getExtensionValues().get(0).getValue().add(extensionElementEntry); // }else{ // ExtensionAttributeValue extensionElement = Bpmn2Factory.eINSTANCE.createExtensionAttributeValue(); // extensionElement.getValue().add(extensionElementEntry); // baseElement.getExtensionValues().add(extensionElement); // } // return false; // } // // /** // * 获取节点的跳过策略 // * // * @return // */ // public static SkipStrategy getSkipStrategy(BaseElement baseElement) { // // return getExtensionElementOne(SkipStrategy.class,baseElement,FoxBPMPackage.Literals.DOCUMENT_ROOT__SKIP_STRATEGY); // // } // // /** // * 增加擴展屬性 // * @param baseElement // * @param eReference // * @param o // * @return // */ // public static boolean addExtensionAttribute(BaseElement baseElement,EAttribute eAttribute,Object o){ // final FeatureMap.Entry extensionElementEntry = new SimpleFeatureMapEntry((org.eclipse.emf.ecore.EStructuralFeature.Internal) eAttribute, o); // baseElement.getAnyAttribute().add(extensionElementEntry); // return false; // } // // public static void setDocumentation(BaseElement baseElement,String documentationText){ // List<Documentation> documentations=baseElement.getDocumentation(); // if(documentations==null){ // documentations=new ArrayList<Documentation>(); // Documentation documentation=Bpmn2Factory.eINSTANCE.createDocumentation(); // documentation.setText(documentationText); // documentations.add(documentation); // return; // } // if(documentations.size()==0){ // Documentation documentation=Bpmn2Factory.eINSTANCE.createDocumentation(); // documentation.setText(documentationText); // documentations.add(documentation); // return; // } // else{ // documentations.get(0).setText(documentationText); // return; // } // } // // public static String getExpression(Expression expression){ // if(expression==null){ // return null; // } // return ((FormalExpression)expression).getBody(); // // } // // public static Expression getExpressionByString(String expression){ // FormalExpression formalExpression=Bpmn2Factory.eINSTANCE.createFormalExpression(); // formalExpression.setBody(expression); // return formalExpression; // // } // // public static BPMNShape getBpmnShape(Definitions definitions,String elementId){ // List<DiagramElement> diagramElements=definitions.getDiagrams().get(0).getPlane().getPlaneElement(); // for (DiagramElement diagramElement : diagramElements) { // if(diagramElement instanceof BPMNShape){ // BPMNShape bpmnShape = (BPMNShape) diagramElement; // BaseElement bpmnElement=getBaseElement(definitions,bpmnShape.getBpmnElement()); // if(bpmnElement==null){ // continue; // } // if(elementId.equals(bpmnElement.getId())){ // return bpmnShape; // } // } // } // return null; // } // // public static BaseElement getBaseElement(Definitions definitions,BaseElement baseElement){ // if(baseElement==null){ // return null; // } // if(baseElement.getId()==null){ // BasicEObjectImpl basicEObjectImpl=(BasicEObjectImpl)baseElement; // if(basicEObjectImpl!=null&&basicEObjectImpl.eProxyURI()!=null){ // String elementId=basicEObjectImpl.eProxyURI().fragment(); // BaseElement bpmnElement=getBaseElement(definitions,elementId); // return bpmnElement; // } // else{ // return null; // } // }else{ // return baseElement; // } // } // // public static BPMNEdge getBpmnEdge(Definitions definitions,String elementId){ // List<DiagramElement> diagramElements=definitions.getDiagrams().get(0).getPlane().getPlaneElement(); // for (DiagramElement diagramElement : diagramElements) { // if(diagramElement instanceof BPMNEdge){ // BPMNEdge bPMNEdge = (BPMNEdge)diagramElement; // String bpmnId=bPMNEdge.getBpmnElement().getId(); // if(elementId.equals(bpmnId)){ // return bPMNEdge; // } // } // } // return null; // } // // // public static BaseElement findElement(String id,EObject eObject) { // if (id == null || StringUtil.isEmpty(id)) // return null; // // List<BaseElement> baseElements = getAll(BaseElement.class,eObject); // // for (BaseElement be : baseElements) { // if (id.equals(be.getId())) { // return be; // } // } // // return null; // } // // // @SuppressWarnings("unchecked") // public static <T> T findElement(String id,EObject eObject,Class<T> class1) { // if (id == null || StringUtil.isEmpty(id)) // return null; // // List<BaseElement> baseElements = getAll(BaseElement.class,eObject); // // for (BaseElement be : baseElements) { // if (id.equals(be.getId())&&class1.isInstance(be)) { // return (T)be; // } // } // // return null; // } // // @SuppressWarnings("unchecked") // public static <T> List<T> getAll(final Class<T> class1,EObject eObject) { // ArrayList<T> l = new ArrayList<T>(); // TreeIterator<EObject> contents =eObject.eResource().getAllContents(); // for (; contents.hasNext();) { // Object t = contents.next(); // if (class1.isInstance(t)) { // l.add((T) t); // } // } // return l; // } // // public static BaseElement getBaseElement(Definitions definitions,String elementId){ // return findElement(elementId, definitions); // } // // public static <T> T getElement(Definitions definitions,String elementId,Class<T> class1){ // return findElement(elementId, definitions, class1); // } // // public static <T> List<T> getElementList(BaseElement baseElement,Class<T> class1){ // return getAll(class1, baseElement); // } // // public static Process getProcess(BaseElement baseElement){ // return getAll(Process.class, baseElement).get(0); // } // // public static List<Process> getProcessList(BaseElement baseElement){ // return getAll(Process.class, baseElement); // } // //}