1. org.activiti.engine.impl.FormServiceImpl
public ProcessInstance submitStartFormData(String processDefinitionId, Map<String, String> properties) { return commandExecutor.execute(new SubmitStartFormCmd(processDefinitionId, null, properties)); } public ProcessInstance submitStartFormData(String processDefinitionId, String businessKey, Map<String, String> properties) { return commandExecutor.execute(new SubmitStartFormCmd(processDefinitionId, businessKey, properties)); }
public class SubmitStartFormCmd extends NeedsActiveProcessDefinitionCmd<ProcessInstance> { private static final long serialVersionUID = 1L; protected final String businessKey; protected Map<String, String> properties; public SubmitStartFormCmd(String processDefinitionId, String businessKey, Map<String, String> properties) { super(processDefinitionId); this.businessKey = businessKey; this.properties = properties; } protected ProcessInstance execute(CommandContext commandContext, ProcessDefinitionEntity processDefinition) { ExecutionEntity processInstance = null; if (businessKey != null) { //SEE 3 FOR MORE DETAILS processInstance = processDefinition.createProcessInstance(businessKey); } else { processInstance = processDefinition.createProcessInstance(); } commandContext.getHistoryManager() .reportFormPropertiesSubmitted(processInstance, properties, null); StartFormHandler startFormHandler = processDefinition.getStartFormHandler(); startFormHandler.submitFormProperties(properties, processInstance); processInstance.start(); return processInstance; } }3. org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity
public class ProcessDefinitionEntity extends ProcessDefinitionImpl implements ProcessDefinition, PersistentObject, HasRevision { private static final long serialVersionUID = 1L; protected String key; protected int revision = 1; protected int version; protected String category; protected String deploymentId; protected String resourceName; protected Integer historyLevel; protected StartFormHandler startFormHandler; protected String diagramResourceName; protected boolean isGraphicalNotationDefined; protected Map<String, TaskDefinition> taskDefinitions; protected boolean hasStartFormKey; protected int suspensionState = SuspensionState.ACTIVE.getStateCode(); protected boolean isIdentityLinksInitialized = false; protected List<IdentityLinkEntity> definitionIdentityLinkEntities = new ArrayList<IdentityLinkEntity>(); protected Set<Expression> candidateStarterUserIdExpressions = new HashSet<Expression>(); protected Set<Expression> candidateStarterGroupIdExpressions = new HashSet<Expression>(); public ProcessDefinitionEntity() { super(null); } public ExecutionEntity createProcessInstance(String businessKey, ActivityImpl initial) { ExecutionEntity processInstance = null; if(initial == null) { processInstance = (ExecutionEntity) super.createProcessInstance(); }else { processInstance = (ExecutionEntity) super.createProcessInstanceForInitial(initial); } processInstance.setExecutions(new ArrayList<ExecutionEntity>()); processInstance.setProcessDefinition(processDefinition); // Do not initialize variable map (let it happen lazily) if (businessKey != null) { processInstance.setBusinessKey(businessKey); } // Reset the process instance in order to have the db-generated process instance id available processInstance.setProcessInstance(processInstance); String initiatorVariableName = (String) getProperty(BpmnParse.PROPERTYNAME_INITIATOR_VARIABLE_NAME); if (initiatorVariableName!=null) { String authenticatedUserId = Authentication.getAuthenticatedUserId(); processInstance.setVariable(initiatorVariableName, authenticatedUserId); } //SEE 4 FOR MORE DETAILS Context.getCommandContext().getHistoryManager() .recordProcessInstanceStart(processInstance); return processInstance; } public ExecutionEntity createProcessInstance(String businessKey) { return createProcessInstance(businessKey, null); } public ExecutionEntity createProcessInstance() { return createProcessInstance(null); } @Override protected InterpretableExecution newProcessInstance(ActivityImpl activityImpl) { ExecutionEntity processInstance = new ExecutionEntity(activityImpl); processInstance.insert(); return processInstance; } public IdentityLinkEntity addIdentityLink(String userId, String groupId) { IdentityLinkEntity identityLinkEntity = IdentityLinkEntity.createAndInsert(); getIdentityLinks().add(identityLinkEntity); identityLinkEntity.setProcessDef(this); identityLinkEntity.setUserId(userId); identityLinkEntity.setGroupId(groupId); identityLinkEntity.setType(IdentityLinkType.CANDIDATE); return identityLinkEntity; } public void deleteIdentityLink(String userId, String groupId) { List<IdentityLinkEntity> identityLinks = Context .getCommandContext() .getIdentityLinkManager() .findIdentityLinkByProcessDefinitionUserAndGroup(id, userId, groupId); for (IdentityLinkEntity identityLink: identityLinks) { Context .getCommandContext() .getDbSqlSession() .delete(identityLink); } } public List<IdentityLinkEntity> getIdentityLinks() { if (!isIdentityLinksInitialized) { definitionIdentityLinkEntities = Context .getCommandContext() .getIdentityLinkManager() .findIdentityLinksByProcessDefinitionId(id); isIdentityLinksInitialized = true; } return definitionIdentityLinkEntities; } public String toString() { return "ProcessDefinitionEntity["+id+"]"; } // getters and setters //////////////////////////////////////////////////////
public void recordProcessInstanceStart(ExecutionEntity processInstance) { if(isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) { HistoricProcessInstanceEntity historicProcessInstance = new HistoricProcessInstanceEntity(processInstance); // Insert historic process-instance getDbSqlSession().insert(historicProcessInstance); // Also record the start-event manually, as there is no "start" activity history listener for this IdGenerator idGenerator = Context.getProcessEngineConfiguration().getIdGenerator(); String processDefinitionId = processInstance.getProcessDefinitionId(); String processInstanceId = processInstance.getProcessInstanceId(); String executionId = processInstance.getId(); HistoricActivityInstanceEntity historicActivityInstance = new HistoricActivityInstanceEntity(); historicActivityInstance.setId(idGenerator.getNextId()); historicActivityInstance.setProcessDefinitionId(processDefinitionId); historicActivityInstance.setProcessInstanceId(processInstanceId); historicActivityInstance.setExecutionId(executionId); historicActivityInstance.setActivityId(processInstance.getActivityId()); historicActivityInstance.setActivityName((String) processInstance.getActivity().getProperty("name")); historicActivityInstance.setActivityType((String) processInstance.getActivity().getProperty("type")); Date now = ClockUtil.getCurrentTime(); historicActivityInstance.setStartTime(now); getDbSqlSession() .insert(historicActivityInstance); } }
public void reportFormPropertiesSubmitted(ExecutionEntity processInstance, Map<String, String> properties, String taskId) { if (isHistoryLevelAtLeast(HistoryLevel.AUDIT)) { for (String propertyId: properties.keySet()) { String propertyValue = properties.get(propertyId); HistoricFormPropertyEntity historicFormProperty = new HistoricFormPropertyEntity(processInstance, propertyId, propertyValue, taskId); getDbSqlSession().insert(historicFormProperty); } } }
5. org.activiti.engine.impl.persistence.AbstractManager
public abstract class AbstractManager implements Session { public void insert(PersistentObject persistentObject) { getDbSqlSession().insert(persistentObject); } public void delete(PersistentObject persistentObject) { getDbSqlSession().delete(persistentObject); } protected DbSqlSession getDbSqlSession() { return getSession(DbSqlSession.class); } protected <T> T getSession(Class<T> sessionClass) { return Context.getCommandContext().getSession(sessionClass); }
6. org.activiti.engine.impl.db.DbSqlSession