
org.ow2.bonita.util.ProcessUtil Maven / Gradle / Ivy
package org.ow2.bonita.util;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.ow2.bonita.definition.InternalProcess;
import org.ow2.bonita.deployment.PVMProcessBuilder;
import org.ow2.bonita.facade.def.element.AttachmentDefinition;
import org.ow2.bonita.facade.def.majorElement.DataFieldDefinition;
import org.ow2.bonita.facade.def.majorElement.ProcessDefinition;
import org.ow2.bonita.facade.exception.ProcessNotFoundException;
import org.ow2.bonita.facade.impl.FacadeUtil;
import org.ow2.bonita.facade.uuid.ProcessDefinitionUUID;
import org.ow2.bonita.facade.uuid.ProcessInstanceUUID;
import org.ow2.bonita.pvm.internal.type.Converter;
import org.ow2.bonita.pvm.internal.type.Type;
import org.ow2.bonita.pvm.internal.type.Variable;
import org.ow2.bonita.pvm.internal.type.VariableTypeResolver;
import org.ow2.bonita.pvm.internal.type.variable.NullVariable;
import org.ow2.bonita.pvm.internal.type.variable.UnpersistableVariable;
import org.ow2.bonita.pvm.internal.wire.WireContext;
import org.ow2.bonita.runtime.InternalExecution;
import org.ow2.bonita.runtime.InternalInstance;
import org.ow2.bonita.services.LargeDataRepository;
import org.ow2.bonita.services.Recorder;
public class ProcessUtil {
public static Map createVariables(Collection datafields) {
if (datafields == null || datafields.isEmpty()) {
return null;
}
Map variables = new HashMap();
for (final DataFieldDefinition df : datafields) {
final String key = df.getName();
final Object value = WireContext.create(PVMProcessBuilder.getInitialValueDescriptor(df.getInitialValue(), df.getDataTypeClassName()));
variables.put(key, createVariable(key, value));
}
return variables;
}
public static Variable createVariable(final String key, final Object value) {
Type type = null;
final VariableTypeResolver variableTypeResolver = EnvTool.getVariableTypeResolver();
if (variableTypeResolver != null) {
if (type == null) {
type = variableTypeResolver.findTypeByMatch(key, value);
}
}
Variable variable = null;
if (type != null) {
final Class> variableClass = type.getVariableClass();
try {
variable = (Variable) variableClass.newInstance();
} catch (final Exception e) {
String message = ExceptionManager.getInstance().getFullMessage("bp_EI_14", variableClass.getName());
throw new BonitaRuntimeException(message);
}
final Converter converter = type.getConverter();
variable.setConverter(converter);
} else {
if (value == null) {
variable = new NullVariable();
} else {
variable = new UnpersistableVariable();
}
}
variable.setKey(key);
variable.setValue(value);
return variable;
}
public static InternalExecution createProcessInstance(final ProcessDefinitionUUID processUUID, Map variables, Map attachments, final ProcessInstanceUUID parentInstanceUUID) throws ProcessNotFoundException {
final InternalProcess process = FacadeUtil.getProcessDefinition(processUUID);
final InternalExecution rootExecution = (InternalExecution) process.beginProcessInstance();
final InternalInstance instance = rootExecution.getInstance();
final ProcessInstanceUUID instanceUUID = instance.getUUID();
final ProcessDefinition processDef = EnvTool.getJournalQueriers().getProcess(processUUID);
final Recorder recorder = EnvTool.getRecorder();
Map givenVariables = CopyTool.createVariableMap(variables);
Map processVariables = ProcessUtil.createVariables(processDef.getDataFields());
Map initialVariables = new HashMap();
if (processVariables != null) {
initialVariables.putAll(processVariables);
}
if (givenVariables != null) {
initialVariables.putAll(givenVariables);
}
Map initialAttachments = new HashMap();
for (AttachmentDefinition attach : processDef.getAttachments().values()) {
initialAttachments.put(attach.getName(), attach.getInitialValue());
}
if (attachments != null) {
initialAttachments.putAll(attachments);
}
recorder.recordInstanceStarted(instanceUUID, parentInstanceUUID, EnvTool.getUserId(), initialVariables);
LargeDataRepository largeDataRepository = EnvTool.getLargeDataRepository();
for (Map.Entry attachToStore : initialAttachments.entrySet()) {
largeDataRepository.storeData(Misc.getAttachmentCategories(instanceUUID), attachToStore.getKey(), attachToStore.getValue(), true);
}
return rootExecution;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy