提交 a13eb6b6 编写于 作者: J Joram Barrez

Merge branch 'master' of github.com:Activiti/Activiti

......@@ -723,9 +723,60 @@ public class TaskEntity extends VariableScopeImpl implements Task, DelegateTask,
return variables;
}
public List<VariableInstanceEntity> getQueryVariables() {
if(queryVariables == null && Context.getCommandContext() != null) {
queryVariables = new VariableInitializingList();
}
return queryVariables;
}
public void setQueryVariables(List<VariableInstanceEntity> queryVariables) {
this.queryVariables = queryVariables;
}
/**
* List that initialized binary variable values if command-context is active.
*
* @author Frederik Heremans
*/
private class VariableInitializingList extends ArrayList<VariableInstanceEntity> {
private static final long serialVersionUID = 1L;
@Override
public void add(int index, VariableInstanceEntity e) {
super.add(index, e);
initializeBinaryVariable(e);
}
@Override
public boolean add(VariableInstanceEntity e) {
initializeBinaryVariable(e);
return super.add(e);
}
@Override
public boolean addAll(Collection< ? extends VariableInstanceEntity> c) {
for(VariableInstanceEntity e : c) {
initializeBinaryVariable(e);
}
return super.addAll(c);
}
@Override
public boolean addAll(int index, Collection< ? extends VariableInstanceEntity> c) {
for(VariableInstanceEntity e : c) {
initializeBinaryVariable(e);
}
return super.addAll(index, c);
}
/**
* If the passed {@link VariableInstanceEntity} is a binary variable and the command-context is active,
* the variable value is fetched to ensure the byte-array is populated.
*/
@SuppressWarnings("deprecation")
protected void initializeBinaryVariable(VariableInstanceEntity e) {
if(Context.getCommandContext() != null && e != null && e.getByteArrayValueId() != null) {
e.getValue();
}
}
}
}
......@@ -41,6 +41,16 @@ import org.activiti.engine.test.Deployment;
*/
public class RuntimeServiceTest extends PluggableActivitiTestCase {
@Deployment(resources={"org/activiti/engine/test/api/oneTaskProcess.bpmn20.xml"})
public void testStartProcessInstanceWithVariables() {
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("basicType", new DummySerializable());
runtimeService.startProcessInstanceByKey("oneTaskProcess", vars);
Task task = taskService.createTaskQuery().includeProcessVariables().singleResult();
assertNotNull(task.getProcessVariables());
}
public void testStartProcessInstanceByKeyNullKey() {
try {
runtimeService.startProcessInstanceByKey(null);
......
......@@ -59,12 +59,14 @@ public class TaskAndVariablesQueryTest extends PluggableActivitiTestCase {
public void testQuery() {
Task task = (Task) taskService.createTaskQuery().includeTaskLocalVariables().taskAssignee("gonzo").singleResult();
Map<String, Object> variableMap = task.getTaskLocalVariables();
assertEquals(2, variableMap.size());
assertEquals(3, variableMap.size());
assertEquals(0, task.getProcessVariables().size());
assertNotNull(variableMap.get("testVar"));
assertEquals("someVariable", variableMap.get("testVar"));
assertNotNull(variableMap.get("testVar2"));
assertEquals(123, variableMap.get("testVar2"));
assertNotNull(variableMap.get("testVarBinary"));
assertEquals("This is a binary variable", new String((byte[]) variableMap.get("testVarBinary")));
List<Task> tasks = taskService.createTaskQuery().list();
assertEquals(3, tasks.size());
......@@ -75,12 +77,14 @@ public class TaskAndVariablesQueryTest extends PluggableActivitiTestCase {
Map<String, Object> startMap = new HashMap<String, Object>();
startMap.put("processVar", true);
startMap.put("binaryVariable", "This is a binary process variable".getBytes());
runtimeService.startProcessInstanceByKey("oneTaskProcess", startMap);
task = (Task) taskService.createTaskQuery().includeProcessVariables().taskAssignee("kermit").singleResult();
assertEquals(1, task.getProcessVariables().size());
assertEquals(2, task.getProcessVariables().size());
assertEquals(0, task.getTaskLocalVariables().size());
assertTrue((Boolean) task.getProcessVariables().get("processVar"));
assertEquals("This is a binary process variable", new String((byte[]) task.getProcessVariables().get("binaryVariable")));
taskService.setVariable(task.getId(), "anotherProcessVar", 123);
taskService.setVariableLocal(task.getId(), "localVar", "test");
......@@ -91,14 +95,15 @@ public class TaskAndVariablesQueryTest extends PluggableActivitiTestCase {
assertEquals("test", task.getTaskLocalVariables().get("localVar"));
task = (Task) taskService.createTaskQuery().includeProcessVariables().taskAssignee("kermit").singleResult();
assertEquals(2, task.getProcessVariables().size());
assertEquals(3, task.getProcessVariables().size());
assertEquals(0, task.getTaskLocalVariables().size());
assertEquals(true, task.getProcessVariables().get("processVar"));
assertEquals(123, task.getProcessVariables().get("anotherProcessVar"));
assertEquals("This is a binary process variable", new String((byte[]) task.getProcessVariables().get("binaryVariable")));
tasks = taskService.createTaskQuery().includeTaskLocalVariables().taskCandidateUser("kermit").list();
assertEquals(2, tasks.size());
assertEquals(1, tasks.get(0).getTaskLocalVariables().size());
assertEquals(2, tasks.get(0).getTaskLocalVariables().size());
assertEquals("test", tasks.get(0).getTaskLocalVariables().get("test"));
assertEquals(0, tasks.get(0).getProcessVariables().size());
......@@ -113,17 +118,18 @@ public class TaskAndVariablesQueryTest extends PluggableActivitiTestCase {
assertEquals("test", task.getTaskLocalVariables().get("localVar"));
task = (Task) taskService.createTaskQuery().includeProcessVariables().taskAssignee("kermit").taskVariableValueEquals("localVar", "test").singleResult();
assertEquals(2, task.getProcessVariables().size());
assertEquals(3, task.getProcessVariables().size());
assertEquals(0, task.getTaskLocalVariables().size());
assertEquals(true, task.getProcessVariables().get("processVar"));
assertEquals(123, task.getProcessVariables().get("anotherProcessVar"));
task = (Task) taskService.createTaskQuery().includeTaskLocalVariables().includeProcessVariables().taskAssignee("kermit").singleResult();
assertEquals(2, task.getProcessVariables().size());
assertEquals(3, task.getProcessVariables().size());
assertEquals(1, task.getTaskLocalVariables().size());
assertEquals("test", task.getTaskLocalVariables().get("localVar"));
assertEquals(true, task.getProcessVariables().get("processVar"));
assertEquals(123, task.getProcessVariables().get("anotherProcessVar"));
assertEquals("This is a binary process variable", new String((byte[]) task.getProcessVariables().get("binaryVariable")));
}
/**
......@@ -144,6 +150,7 @@ public class TaskAndVariablesQueryTest extends PluggableActivitiTestCase {
taskService.saveTask(task);
ids.add(task.getId());
taskService.setVariableLocal(task.getId(), "test", "test");
taskService.setVariableLocal(task.getId(), "testBinary", "This is a binary variable".getBytes());
taskService.addCandidateUser(task.getId(), "kermit");
}
......@@ -156,6 +163,7 @@ public class TaskAndVariablesQueryTest extends PluggableActivitiTestCase {
taskService.saveTask(task);
taskService.setAssignee(task.getId(), "gonzo");
taskService.setVariableLocal(task.getId(), "testVar", "someVariable");
taskService.setVariableLocal(task.getId(), "testVarBinary", "This is a binary variable".getBytes());
taskService.setVariableLocal(task.getId(), "testVar2", 123);
ids.add(task.getId());
......
......@@ -5068,7 +5068,7 @@ In case the variable is a binary variable or serializable, the <literal>valueUrl
<section>
<title>Query for tasks</title>
<para>
<programlisting>POST repository/tasks</programlisting>
<programlisting>POST query/tasks</programlisting>
</para>
<para>
<emphasis role="bold">Request body:</emphasis>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册