您的位置:首页 > 其它

Source Taste: Activiti: The Journey of Submit StartForm

2012-12-20 18:12 423 查看
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));
}


2. org.activiti.engine.impl.cmd.SubmitStartFormCmd

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 //////////////////////////////////////////////////////


4. org.activiti.engine.impl.history.HistoryManager

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: