/** * 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.entity; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.foxbpm.engine.db.HasRevision; import org.foxbpm.engine.db.PersistentObject; import org.foxbpm.engine.expression.Expression; import org.foxbpm.engine.impl.Context; import org.foxbpm.engine.impl.expression.ExpressionImpl; import org.foxbpm.engine.impl.mgmt.DataVariableMgmtDefinition; import org.foxbpm.engine.impl.task.TaskDefinition; import org.foxbpm.engine.repository.ProcessDefinition; import org.foxbpm.kernel.process.KernelSequenceFlow; import org.foxbpm.kernel.process.impl.KernelFlowNodeImpl; import org.foxbpm.kernel.process.impl.KernelProcessDefinitionImpl; import org.foxbpm.kernel.process.impl.KernelSequenceFlowImpl; import org.foxbpm.kernel.runtime.InterpretableProcessInstance; import org.foxbpm.model.PotentialStarter; public class ProcessDefinitionEntity extends KernelProcessDefinitionImpl implements ProcessDefinition, PersistentObject, HasRevision { private static final long serialVersionUID = 1L; protected static final int VERSION_DEFAULT = 1; protected int version = VERSION_DEFAULT; protected String diagramResourceName; protected Expression subject; private Expression formUri; private Expression formUriView; protected String resourceId; protected String deploymentId; protected String resourceName; protected String category; private boolean isPersistence = true; /**发布时间 */ private Date deploymentTime; /** 启动表单 */ private String startFormUri; /** 控制并发修改标示 */ protected int revision; protected DataVariableMgmtDefinition dataVariableMgmtDefinition; protected Map<String, TaskDefinition> taskDefinitions = new HashMap<String, TaskDefinition>(); protected List<PotentialStarter> potentialStarters=new ArrayList<PotentialStarter>(); public TaskDefinition getSubTaskDefinition() { if (getInitial() != null) { List<KernelSequenceFlow> sequenceFlows = getInitial().getOutgoingSequenceFlows(); if (sequenceFlows != null && sequenceFlows.size() > 0) { String subNodeId = sequenceFlows.get(0).getTargetRef().getId(); return taskDefinitions.get(subNodeId); } } return null; } public Map<String, TaskDefinition> getTaskDefinitions() { return taskDefinitions; } public void setTaskDefinitions(Map<String, TaskDefinition> taskDefinitions) { this.taskDefinitions = taskDefinitions; } public ProcessDefinitionEntity() { super(null); } public ProcessDefinitionEntity(String id) { super(id); } public Expression getSubject() { return subject; } public void setSubject(String subject) { this.subject = new ExpressionImpl(subject); } public Expression getFormUri() { return formUri; } public void setFormUri(String formUri) { this.formUri = new ExpressionImpl(formUri); } public Expression getFormUriView() { return formUriView; } public void setFormUriView(String formUriView) { this.formUriView = new ExpressionImpl(formUriView); } public void setStartFormUri(String startFormUri) { this.startFormUri = startFormUri; } public String getStartFormUri() { return startFormUri; } /** * 返回 '<em><b>Version</b></em>' 字段. <!-- 开始-用户-文档 --> * <p> * 返回流程定义版本号 * </p> * <!-- 结束-用户-文档 --> * * @return 该值为 '<em>Version</em>' 字段. * @see #setVersion(int) * @generated */ public int getVersion() { return version; } /** 设置流程定义本版号 */ public void setVersion(int version) { this.version = version; } public String getName() { return name; } /** 增加流程版本号 */ public void addVersion() { this.version = this.version + 1; } public ProcessInstanceEntity createProcessInstance(String bizKey, KernelFlowNodeImpl initial) { ProcessInstanceEntity processInstance = null; if (initial == null) { processInstance = (ProcessInstanceEntity) super.createProcessInstance(); } else { processInstance = (ProcessInstanceEntity) super .createProcessInstanceForInitial(initial); } processInstance.setProcessDefinition(processDefinition); if (bizKey != null) { processInstance.setBizKey(bizKey); } Context.getCommandContext().getProcessInstanceManager().insert(processInstance); return processInstance; } public ProcessInstanceEntity createProcessInstance(String bizKey) { return createProcessInstance(bizKey, null); } public ProcessInstanceEntity createProcessInstance() { return createProcessInstance(null); } protected InterpretableProcessInstance newProcessInstance(KernelFlowNodeImpl startFlowNode) { ProcessInstanceEntity processInstance = new ProcessInstanceEntity(startFlowNode); return processInstance; } public String getResourceId() { return resourceId; } public void setResourceId(String resourceId) { this.resourceId = resourceId; } public void setDeploymentId(String deploymentId) { this.deploymentId = deploymentId; } public String getDeploymentId() { return this.deploymentId; } public void setDeploymentTime(Date deploymentTime) { this.deploymentTime = deploymentTime; } public Date getDeploymentTime() { return deploymentTime; } protected Map<String, Object> extensionFields = new HashMap<String, Object>(); public Object getExtensionField(String fieldName) { return extensionFields.get(fieldName); } public Map<String, Object> getExtensionFields() { return extensionFields; } public void setExtensionFields(Map<String, Object> extensionFields) { this.extensionFields = extensionFields; } public void addExtensionField(String fieldName, Object fieldValue) { this.extensionFields.put(fieldName, fieldValue); } public KernelSequenceFlowImpl createSequenceFlow(String id, KernelProcessDefinitionImpl processDefinition) { return super.createSequenceFlow(id, processDefinition); } public Map<String, Object> getPersistentState() { Map<String, Object> persistentState = new HashMap<String, Object>(); persistentState.put("id", this.id); persistentState.put("name", this.name); persistentState.put("key", this.key); persistentState.put("category", getCategory()); persistentState.put("version", this.version); persistentState.put("resourceName", this.resourceName); persistentState.put("resourceId", this.resourceId); persistentState.put("deploymentId", this.deploymentId); persistentState.put("diagramResourceName", this.diagramResourceName); persistentState.put("deployTime", this.deploymentTime); persistentState.put("startFormUri", this.getStartFormUri()); persistentState.putAll(this.extensionFields); return persistentState; } public String getResourceName() { return this.resourceName; } public void setResourceName(String resourceName) { this.resourceName = resourceName; } public String getCategory() { return this.category; } public void setCategory(String category) { this.category = category; } public boolean verification = true; public boolean isVerification() { return this.verification; } public boolean isPersistence() { return isPersistence; } public void setPersistence(boolean isPersistence) { this.isPersistence = isPersistence; } public DataVariableMgmtDefinition getDataVariableMgmtDefinition() { return dataVariableMgmtDefinition; } public void setDataVariableMgmtDefinition(DataVariableMgmtDefinition dataVariableMgmtDefinition) { this.dataVariableMgmtDefinition = dataVariableMgmtDefinition; } public String getDiagramResourceName() { return diagramResourceName; } public void setDiagramResourceName(String diagramResourceName) { this.diagramResourceName = diagramResourceName; } public boolean hasStartFormKey() { // TODO Auto-generated method stub return false; } public boolean isSuspended() { // TODO Auto-generated method stub return false; } public void setId(String id) { this.id = id; } public void setRevision(int revision) { this.revision = revision; } public int getRevision() { return revision; } public int getRevisionNext() { return revision + 1; } public boolean isModified() { // TODO Auto-generated method stub return false; } public List<PotentialStarter> getPotentialStarters() { return potentialStarters; } public void setPotentialStarters(List<PotentialStarter> potentialStarters) { this.potentialStarters = potentialStarters; } }