Author: alex.guizar(a)jboss.com
Date: 2010-09-08 21:01:28 -0400 (Wed, 08 Sep 2010)
New Revision: 6653
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/AbstractQuery.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/DeploymentQueryImpl.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/query/DeploymentQueryTest.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/query/HistoryTaskQueryTest.java
Log:
JBPM-2398 catch grammar exception thrown by postgresql when operator like is applied to
long operands
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/AbstractQuery.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/AbstractQuery.java 2010-09-08
06:51:48 UTC (rev 6652)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/AbstractQuery.java 2010-09-09
01:01:28 UTC (rev 6653)
@@ -21,8 +21,9 @@
*/
package org.jbpm.pvm.internal.query;
-import java.io.ObjectStreamException;
import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -41,18 +42,18 @@
* @author Maciej Swiderski
*/
public abstract class AbstractQuery implements Command<Object> {
-
+
private static final long serialVersionUID = 1L;
-
- protected CommandService commandService;
+
+ protected transient CommandService commandService;
protected String orderByClause;
protected Page page;
protected boolean isWhereAdded;
protected boolean count;
protected boolean uniqueResult;
-
+
protected Map<String, QueryOperand> parameterOperands = new HashMap<String,
QueryOperand>();
-
+
protected abstract void applyParameters(Query query);
public abstract String hql();
@@ -66,7 +67,7 @@
*/
public List<?> untypedList() {
- if (commandService!=null) {
+ if (commandService != null) {
return (List<?>) commandService.execute(this);
}
Session session = EnvironmentImpl.getFromCurrent(Session.class);
@@ -76,18 +77,19 @@
protected Object untypedUniqueResult() {
uniqueResult = true;
- if (commandService!=null) {
+ if (commandService != null) {
return commandService.execute(this);
}
Session session = EnvironmentImpl.getFromCurrent(Session.class);
- return execute(session);
+ return execute(session);
}
public Object execute(Environment environment) throws Exception {
Session session = environment.get(Session.class);
try {
return execute(session);
- } finally {
+ }
+ finally {
resetQuery(); // reset the query member fields so the query can be reused.
}
}
@@ -98,7 +100,7 @@
applyPage(query);
return uniqueResult ? query.uniqueResult() : query.list();
}
-
+
/**
* Returns the count of the query.
* Query types that want to use this count method should
@@ -107,15 +109,15 @@
*/
public long count() {
count = true;
-
- // Page and count cannot be used together, because paging is applied after the query
is formed
+
+ // Page and count are mutually exclusive because paging is applied after query is
formed
if (page != null) {
throw new JbpmException("page(firstResult, maxResult) and count() cannot be
used together");
}
-
+
return (Long) untypedUniqueResult();
}
-
+
/**
* Resets the query so it can be reused after an invocation.
*/
@@ -128,7 +130,8 @@
protected void appendWhereClause(String whereClause, StringBuilder hql) {
if (isWhereAdded) {
hql.append(" and ");
- } else {
+ }
+ else {
isWhereAdded = true;
hql.append("where ");
}
@@ -136,49 +139,35 @@
}
protected void appendOrderByClause(StringBuilder hql) {
- if (orderByClause!=null) {
+ if (orderByClause != null) {
hql.append("order by ");
hql.append(orderByClause);
}
}
protected void applyPage(Query query) {
- if (page!=null) {
+ if (page != null) {
query.setFirstResult(page.firstResult);
query.setMaxResults(page.maxResults);
}
}
protected void addOrderByClause(String clause) {
- if (orderByClause==null) {
+ if (orderByClause == null) {
orderByClause = clause;
- } else {
+ }
+ else {
orderByClause += ", " + clause;
}
}
-
- protected Object writeReplace() throws ObjectStreamException {
- this.commandService = null;
- return this;
- }
-
+
protected QueryOperand getOperand(String param) {
if (parameterOperands.containsKey(param)) {
return parameterOperands.get(param);
}
return QueryOperand.EQUALS;
}
-
- protected boolean isListOperand(String param) {
- QueryOperand operand = getOperand(param);
-
- if (operand == QueryOperand.IN || operand == QueryOperand.NOT_IN) {
- return true;
- } else {
- return false;
- }
- }
-
+
/**
* Transforms given string (<code>parameter</code>) to an array of given
type (<code>clazz</code>).
* <code>parameter</code> will be split using separator ','
(comma).
@@ -187,36 +176,56 @@
* All exceptions will be silently skipped.
*/
@SuppressWarnings("unchecked")
- protected <T> T[] transformToArray(String parameter, T clazz) {
- String[] idsStr = parameter.split(",");
- if (clazz instanceof String) {
- return (T[]) idsStr;
+ protected <T> T[] transformToArray(String paramStr, Class<T> clazz) {
+ String[] parameters = paramStr.split(",");
+ if (clazz == String.class) {
+ return (T[]) parameters;
}
- T[] ids = (T[]) Array.newInstance( (Class)clazz, idsStr.length);
-
- for (int i = 0; i < idsStr.length; i++) {
- try {
- ids[i] = (T) ((Class)clazz).getConstructor(String.class).newInstance(idsStr[i]);
- } catch (Exception e) {
+ T[] ids = (T[]) Array.newInstance(clazz, parameters.length);
+ try {
+ Constructor<T> constructor = clazz.getConstructor(String.class);
+ for (int i = 0; i < parameters.length; i++) {
+ try {
+ ids[i] = (T) constructor.newInstance(parameters[i]);
+ }
+ catch (InstantiationException e) {
+ throw new JbpmException("failed to instantiate " + clazz, e);
+ }
+ catch (IllegalAccessException e) {
+ throw new JbpmException(getClass() + " has no access to " +
constructor);
+ }
+ catch (InvocationTargetException e) {
+ throw new JbpmException(constructor + " threw exception",
e.getCause());
+ }
}
+ return ids;
}
- return ids;
+ catch (NoSuchMethodException e) {
+ throw new JbpmException("string constructor not found in " + clazz, e);
+ }
}
-
+
protected void appendWhereClauseWithOperand(String where, String namedParam,
StringBuilder hql) {
QueryOperand operand = getOperand(namedParam);
- if (isListOperand(namedParam)) {
+ switch (operand) {
+ case IN:
+ case NOT_IN:
appendWhereClause(where + " " + operand + " (:" + namedParam +
") ", hql);
- } else {
+ break;
+ default:
appendWhereClause(where + " " + operand + " :" + namedParam +
" ", hql);
}
}
-
- protected void applyParameterWithOperand(String parameter, String namedParam,
Class<?> clazz, Query query) {
- if (isListOperand(namedParam)) {
+
+ protected void applyParameterWithOperand(String parameter, String namedParam,
Class<?> clazz,
+ Query query) {
+ switch (getOperand(namedParam)) {
+ case IN:
+ case NOT_IN:
query.setParameterList(namedParam, transformToArray(parameter, clazz));
- } else {
+ break;
+ default:
if (clazz == Long.class) {
query.setLong(namedParam, Long.parseLong(parameter));
}
@@ -225,7 +234,7 @@
}
}
}
-
+
public void setCommandService(CommandService commandService) {
this.commandService = commandService;
}
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/DeploymentQueryImpl.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/DeploymentQueryImpl.java 2010-09-08
06:51:48 UTC (rev 6652)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/DeploymentQueryImpl.java 2010-09-09
01:01:28 UTC (rev 6653)
@@ -30,49 +30,51 @@
import org.jbpm.pvm.internal.repository.DeploymentImpl;
import org.jbpm.pvm.internal.util.CollectionUtil;
-
/**
* @author Tom Baeyens
* @author Maciej Swiderski
*/
public class DeploymentQueryImpl extends AbstractQuery implements DeploymentQuery {
-
- protected String deploymentId = null;
- protected Boolean suspended = null;
+ private static final long serialVersionUID = 1L;
+
+ protected String deploymentId;
+ protected Boolean suspended;
+
public String hql() {
StringBuilder hql = new StringBuilder();
-
+
hql.append("select ");
if (count) {
hql.append("count(d) ");
- } else {
+ }
+ else {
hql.append("d ");
}
hql.append("from ");
hql.append(DeploymentImpl.class.getName());
hql.append(" as d ");
-
- if (deploymentId!=null) {
+
+ if (deploymentId != null) {
appendWhereClauseWithOperand("d.dbid", "deploymentId", hql);
}
- if (suspended!=null) {
+ if (suspended != null) {
if (suspended) {
- appendWhereClause(" d.state =
'"+Deployment.STATE_SUSPENDED+"' ", hql);
- } else {
- appendWhereClause(" d.state !=
'"+Deployment.STATE_SUSPENDED+"' ", hql);
+ appendWhereClause(" d.state = '" + Deployment.STATE_SUSPENDED +
"' ", hql);
}
+ else {
+ appendWhereClause(" d.state != '" + Deployment.STATE_SUSPENDED +
"' ", hql);
+ }
}
-
+
appendOrderByClause(hql);
-
+
return hql.toString();
}
protected void applyParameters(Query query) {
-
if (deploymentId != null) {
applyParameterWithOperand(deploymentId, "deploymentId", Long.class,
query);
}
@@ -94,12 +96,12 @@
}
public DeploymentQuery orderAsc(String property) {
- addOrderByClause("d."+property+" asc");
+ addOrderByClause("d." + property + " asc");
return this;
}
public DeploymentQuery orderDesc(String property) {
- addOrderByClause("d."+property+" desc");
+ addOrderByClause("d." + property + " desc");
return this;
}
@@ -115,7 +117,7 @@
public Deployment uniqueResult() {
return (Deployment) untypedUniqueResult();
}
-
+
public DeploymentQuery deploymentId(String id, QueryOperand operand) {
this.deploymentId = id;
parameterOperands.put("deploymentId", operand);
Modified:
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/query/DeploymentQueryTest.java
===================================================================
---
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/query/DeploymentQueryTest.java 2010-09-08
06:51:48 UTC (rev 6652)
+++
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/query/DeploymentQueryTest.java 2010-09-09
01:01:28 UTC (rev 6653)
@@ -26,14 +26,13 @@
import java.util.List;
import java.util.Set;
-import org.hibernate.HibernateException;
+import org.hibernate.exception.SQLGrammarException;
import org.jbpm.api.Deployment;
import org.jbpm.api.DeploymentQuery;
import org.jbpm.api.QueryOperand;
import org.jbpm.test.JbpmTestCase;
import org.jbpm.test.assertion.QueryAssertions;
-
/**
* @author Tom Baeyens
* @author Joram Barrez
@@ -43,203 +42,200 @@
public void testSuspendDeployment() {
List<String> deploymentIds = deployTestProcesses();
- repositoryService.suspendDeployment(deploymentIds.get(2));
-
+ repositoryService.suspendDeployment(deploymentIds.get(2));
+
// find all deployments
-
- List<Deployment> deployments = repositoryService
- .createDeploymentQuery()
- .list();
-
+
+ List<Deployment> deployments =
repositoryService.createDeploymentQuery().list();
+
Set<String> expectedDeploymentNames = new HashSet<String>();
expectedDeploymentNames.add("Claim");
expectedDeploymentNames.add("Hire");
expectedDeploymentNames.add("Fire");
-
+
assertEquals(expectedDeploymentNames, getDeploymentNames(deployments));
-
+
// find suspended deployments
-
- deployments = repositoryService
- .createDeploymentQuery()
- .suspended()
- .list();
-
+
+ deployments = repositoryService.createDeploymentQuery().suspended().list();
+
expectedDeploymentNames = new HashSet<String>();
expectedDeploymentNames.add("Hire");
-
+
assertEquals(expectedDeploymentNames, getDeploymentNames(deployments));
// find active deployments
-
- deployments = repositoryService
- .createDeploymentQuery()
- .notSuspended()
- .list();
-
+
+ deployments = repositoryService.createDeploymentQuery().notSuspended().list();
+
expectedDeploymentNames = new HashSet<String>();
expectedDeploymentNames.add("Claim");
expectedDeploymentNames.add("Fire");
-
+
assertEquals(expectedDeploymentNames, getDeploymentNames(deployments));
-
+
deleteCascade(deploymentIds);
}
-
-
private void deleteCascade(List<String> deploymentIds) {
for (String deploymentId : deploymentIds) {
repositoryService.deleteDeploymentCascade(deploymentId);
}
}
-
+
public void testOrderByTimeStamp() {
testOrderByNaturalOrdening(DeploymentQuery.PROPERTY_TIMESTAMP, 3);
}
-
+
public void testCount() {
List<String> deploymentIds = deployTestProcesses();
-
+
assertEquals(3, repositoryService.createDeploymentQuery().count());
for (String deploymentId : deploymentIds) {
- assertEquals(1,
repositoryService.createDeploymentQuery().deploymentId(deploymentId).count());
+ assertEquals(1, repositoryService.createDeploymentQuery()
+ .deploymentId(deploymentId)
+ .count());
}
-
- Deployment deployment =
repositoryService.createDeploymentQuery().deploymentId(deploymentIds.get(0)).uniqueResult();
+
+ Deployment deployment = repositoryService.createDeploymentQuery()
+ .deploymentId(deploymentIds.get(0))
+ .uniqueResult();
repositoryService.suspendDeployment(deployment.getId());
-
+
assertEquals(1, repositoryService.createDeploymentQuery().suspended().count());
assertEquals(2, repositoryService.createDeploymentQuery().notSuspended().count());
-
+
deleteCascade(deploymentIds);
}
-
+
public void testEquals() {
List<String> deploymentIds = deployTestProcesses();
-
- assertEquals(1,
repositoryService.createDeploymentQuery().deploymentId(deploymentIds.get(0),
QueryOperand.EQUALS).count());
-
-
+
+ assertEquals(1, repositoryService.createDeploymentQuery()
+ .deploymentId(deploymentIds.get(0), QueryOperand.EQUALS)
+ .count());
+
deleteCascade(deploymentIds);
}
-
+
public void testLike() {
List<String> deploymentIds = deployTestProcesses();
try {
- repositoryService.createDeploymentQuery().deploymentId(deploymentIds.get(0),
QueryOperand.LIKE).count();
- fail("expected sql grammar exception");
+ assertEquals(1, repositoryService.createDeploymentQuery()
+ .deploymentId(deploymentIds.get(0), QueryOperand.LIKE)
+ .count());
}
- catch (HibernateException e) {
- // operator like does not apply to long dbid field
+ catch (SQLGrammarException e) {
+ // in postgres, operator like does not apply to long operands
}
-
+
deleteCascade(deploymentIds);
}
-
+
public void testIn() {
List<String> deploymentIds = deployTestProcesses();
-
- assertEquals(2,
repositoryService.createDeploymentQuery().deploymentId(deploymentIds.get(0) +
","+deploymentIds.get(1), QueryOperand.IN).count());
-
-
+
+ assertEquals(2, repositoryService.createDeploymentQuery()
+ .deploymentId(deploymentIds.get(0) + "," + deploymentIds.get(1),
QueryOperand.IN)
+ .count());
+
deleteCascade(deploymentIds);
}
-
+
public void testNotIn() {
List<String> deploymentIds = deployTestProcesses();
-
- assertEquals(2,
repositoryService.createDeploymentQuery().deploymentId(deploymentIds.get(0),
QueryOperand.NOT_IN).count());
-
-
+
+ assertEquals(2, repositoryService.createDeploymentQuery()
+ .deploymentId(deploymentIds.get(0), QueryOperand.NOT_IN)
+ .count());
+
deleteCascade(deploymentIds);
}
-
+
/* --------------
* HELPER METHODS
* -------------- */
-
+
private Set<String> getDeploymentNames(List<Deployment> deployments) {
Set<String> deploymentNames = new HashSet<String>();
- for (Deployment deployment: deployments) {
+ for (Deployment deployment : deployments) {
deploymentNames.add(deployment.getName());
}
return deploymentNames;
}
-
+
private List<String> deployTestProcesses() {
List<String> processIds = new ArrayList<String>();
-
- String deploymentClaimId = repositoryService
- .createDeployment()
- .setName("Claim")
- .addResourceFromString("process.jpdl.xml",
- "<process name='claim'>" +
- " <start>" +
- " <transition to='c' />" +
- " </start>" +
- " <state name='c' />" +
- "</process>"
- )
- .deploy();
- String deploymentHireId = repositoryService
- .createDeployment()
+ String deploymentClaimId = repositoryService.createDeployment()
+ .setName("Claim")
+ .addResourceFromString("process.jpdl.xml",
+ "<process name='claim'>" +
+ " <start>" +
+ " <transition to='c' />" +
+ " </start>" +
+ " <state name='c' />" +
+ "</process>")
+ .deploy();
+
+ String deploymentHireId = repositoryService.createDeployment()
.setName("Hire")
- .addResourceFromString("process.jpdl.xml",
+ .addResourceFromString("process.jpdl.xml",
"<process name='hire'>" +
" <start>" +
" <transition to='h' />" +
" </start>" +
" <state name='h' />" +
- "</process>"
- )
+ "</process>")
.deploy();
-
- String deploymentFireId = repositoryService
- .createDeployment()
- .setName("Fire")
- .addResourceFromString("process.jpdl.xml",
- "<process name='fire'>" +
- " <start>" +
- " <transition to='f' />" +
- " </start>" +
- " <state name='f' />" +
- "</process>"
- )
- .deploy();
-
+
+ String deploymentFireId = repositoryService.createDeployment()
+ .setName("Fire")
+ .addResourceFromString("process.jpdl.xml",
+ "<process name='fire'>" +
+ " <start>" +
+ " <transition to='f' />" +
+ " </start>" +
+ " <state name='f' />" +
+ "</process>")
+ .deploy();
+
processIds.add(deploymentClaimId);
processIds.add(deploymentFireId);
processIds.add(deploymentHireId);
-
+
return processIds;
}
-
+
private void testOrderByNaturalOrdening(String property, int expectedNrOfResults) {
testOrderBy(property, null, expectedNrOfResults, true);
}
-
+
@SuppressWarnings("unchecked")
- private void testOrderBy(String property, List expectedValues,
- Integer expectedNrOfResults, boolean naturalOrderCheck) {
-
+ private void testOrderBy(String property, List expectedValues, Integer
expectedNrOfResults,
+ boolean naturalOrderCheck) {
+
List<String> deploymentIds = deployTestProcesses();
-
- List<Deployment> deploymentsAsc =
- repositoryService.createDeploymentQuery().orderAsc(property).list();
-
- List<Deployment> deploymentsDesc =
- repositoryService.createDeploymentQuery().orderDesc(property).list();
+ List<Deployment> deploymentsAsc = repositoryService.createDeploymentQuery()
+ .orderAsc(property)
+ .list();
+
+ List<Deployment> deploymentsDesc = repositoryService.createDeploymentQuery()
+ .orderDesc(property)
+ .list();
+
if (naturalOrderCheck) {
- QueryAssertions.assertOrderIsNatural(Deployment.class, property, deploymentsAsc,
deploymentsDesc, 3);
- } else {
- QueryAssertions.assertOrderOnProperty(Deployment.class, property, deploymentsAsc,
deploymentsDesc, expectedValues);
+ QueryAssertions.assertOrderIsNatural(Deployment.class, property, deploymentsAsc,
+ deploymentsDesc, 3);
}
-
+ else {
+ QueryAssertions.assertOrderOnProperty(Deployment.class, property, deploymentsAsc,
+ deploymentsDesc, expectedValues);
+ }
+
deleteCascade(deploymentIds);
}
-
+
}
Modified:
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/query/HistoryTaskQueryTest.java
===================================================================
---
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/query/HistoryTaskQueryTest.java 2010-09-08
06:51:48 UTC (rev 6652)
+++
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/query/HistoryTaskQueryTest.java 2010-09-09
01:01:28 UTC (rev 6653)
@@ -41,36 +41,36 @@
* @author Joram Barrez
*/
public class HistoryTaskQueryTest extends JbpmTestCase {
-
+
protected void tearDown() throws Exception {
Clock.setExplicitTime(null);
super.tearDown();
}
-
+
public void testOrderByName() {
testOrderBy(HistoryTaskQuery.PROPERTY_ASSIGNEE, Arrays.asList("Alex",
"Joram", "Tom"));
}
-
+
public void testOrderByStartTime() {
testOrderByNaturalOrdening(HistoryTaskQuery.PROPERTY_CREATETIME, 3);
}
-
+
public void testOrderByEndTime() {
testOrderByNaturalOrdening(HistoryTaskQuery.PROPERTY_ENDTIME, 3);
}
-
+
public void testOrderByDuration() {
testOrderByNaturalOrdening(HistoryTaskQuery.PROPERTY_DURATION, 3);
}
-
+
public void testOrderByexecutionId() {
testOrderByNaturalOrdening(HistoryTaskQuery.PROPERTY_EXECUTIONID, 3);
}
-
+
public void testOrderByOutcome() {
testOrderByNaturalOrdening(HistoryTaskQuery.PROPERTY_OUTCOME, 3);
}
-
+
public void testOrderByState() {
testOrderByNaturalOrdening(HistoryTaskQuery.PROPERTY_STATE, 3);
}
@@ -82,50 +82,57 @@
private void testOrderByNaturalOrdening(String property, int expectedNrOfResults) {
testOrderBy(property, null, expectedNrOfResults, true);
}
-
+
public void testCount() {
List<String> taskIds = createTestHistoryTasks();
-
+
assertEquals(3, historyService.createHistoryTaskQuery().count());
assertEquals(1,
historyService.createHistoryTaskQuery().assignee("Tom").count());
-
+
for (String taskid : taskIds) {
assertEquals(1, historyService.createHistoryTaskQuery().taskId(taskid).count());
}
-
- assertEquals(0, historyService.createHistoryTaskQuery().startedBefore(new
Date(CLOCK_TEST_TIME - 10000L)).count());
- assertEquals(1,
- historyService.createHistoryTaskQuery().startedAfter(new Date(CLOCK_TEST_TIME
- 10000L))
- .taskId(taskIds.get(0)).count());
- assertEquals(0,
- historyService.createHistoryTaskQuery().startedAfter(new Date(CLOCK_TEST_TIME
- 10000L))
- .taskId("-1").count());
+
+ assertEquals(0, historyService.createHistoryTaskQuery()
+ .startedBefore(new Date(CLOCK_TEST_TIME - 10000L))
+ .count());
+ assertEquals(1, historyService.createHistoryTaskQuery()
+ .startedAfter(new Date(CLOCK_TEST_TIME - 10000L))
+ .taskId(taskIds.get(0))
+ .count());
+ assertEquals(0, historyService.createHistoryTaskQuery()
+ .startedAfter(new Date(CLOCK_TEST_TIME - 10000L))
+ .taskId("-1")
+ .count());
}
-
+
public void testAssigneeLike() {
createTestHistoryTasks();
-
- assertEquals(2, historyService.createHistoryTaskQuery().assignee("%o%",
QueryOperand.LIKE).count());
-
+
+ assertEquals(2, historyService.createHistoryTaskQuery()
+ .assignee("%o%", QueryOperand.LIKE)
+ .count());
}
-
+
public void testAssigneeIn() {
createTestHistoryTasks();
-
- assertEquals(2,
historyService.createHistoryTaskQuery().assignee("Tom,Alex",
QueryOperand.IN).count());
-
+
+ assertEquals(2, historyService.createHistoryTaskQuery()
+ .assignee("Tom,Alex", QueryOperand.IN)
+ .count());
}
-
+
public void testAssigneeNotIn() {
createTestHistoryTasks();
-
- assertEquals(1,
historyService.createHistoryTaskQuery().assignee("Tom,Alex",
QueryOperand.NOT_IN).count());
-
+
+ assertEquals(1, historyService.createHistoryTaskQuery()
+ .assignee("Tom,Alex", QueryOperand.NOT_IN)
+ .count());
}
-
+
public void testTaskIdLike() {
createTestHistoryTasks();
-
+
try {
historyService.createHistoryTaskQuery().taskId("%",
QueryOperand.LIKE).count();
fail("expected number format exception");
@@ -134,72 +141,82 @@
// non-numeric argument does not apply to long dbid field
}
}
-
+
public void testTaskIdIn() {
List<String> taskIds = createTestHistoryTasks();
-
- assertEquals(2, historyService.createHistoryTaskQuery().taskId(taskIds.get(0) +
"," + taskIds.get(1), QueryOperand.IN).count());
-
+
+ assertEquals(2, historyService.createHistoryTaskQuery()
+ .taskId(taskIds.get(0) + "," + taskIds.get(1), QueryOperand.IN)
+ .count());
}
-
+
public void testTaskIdNotIn() {
List<String> taskIds = createTestHistoryTasks();
-
- assertEquals(1, historyService.createHistoryTaskQuery().taskId(taskIds.get(0) +
"," + taskIds.get(1), QueryOperand.NOT_IN).count());
-
+
+ assertEquals(1, historyService.createHistoryTaskQuery()
+ .taskId(taskIds.get(0) + "," + taskIds.get(1), QueryOperand.NOT_IN)
+ .count());
}
-
+
public void testExecutionIdLike() {
createTestHistoryTasks();
-
- assertEquals(3,
historyService.createHistoryTaskQuery().executionId("theProcess%",
QueryOperand.LIKE).count());
-
+
+ assertEquals(3, historyService.createHistoryTaskQuery()
+ .executionId("theProcess%", QueryOperand.LIKE)
+ .count());
}
+
public void testStateLike() {
createTestHistoryTasks();
-
- assertEquals(3, historyService.createHistoryTaskQuery().state("%",
QueryOperand.LIKE).count());
-
+
+ assertEquals(3, historyService.createHistoryTaskQuery()
+ .state("%", QueryOperand.LIKE)
+ .count());
}
-
+
public void testStateIn() {
createTestHistoryTasks();
-
- assertEquals(3,
historyService.createHistoryTaskQuery().state(HistoryTask.STATE_COMPLETED + ","
+ HistoryTask.STATE_OBSOLETE, QueryOperand.IN).count());
-
+
+ assertEquals(3, historyService.createHistoryTaskQuery()
+ .state(HistoryTask.STATE_COMPLETED + "," + HistoryTask.STATE_OBSOLETE,
QueryOperand.IN)
+ .count());
}
-
+
public void testStateNotIn() {
createTestHistoryTasks();
-
- assertEquals(0,
historyService.createHistoryTaskQuery().state(HistoryTask.STATE_COMPLETED + ","
+ HistoryTask.STATE_OBSOLETE, QueryOperand.NOT_IN).count());
-
+
+ assertEquals(0, historyService.createHistoryTaskQuery()
+ .state(HistoryTask.STATE_COMPLETED + "," + HistoryTask.STATE_OBSOLETE,
QueryOperand.NOT_IN)
+ .count());
}
-
+
@SuppressWarnings("unchecked")
- private void testOrderBy(String property, List expectedValues,
- Integer expectedNrOfResults, boolean naturalOrderCheck) {
-
+ private void testOrderBy(String property, List expectedValues, Integer
expectedNrOfResults,
+ boolean naturalOrderCheck) {
createTestHistoryTasks();
-
- List<HistoryTask> historyTasksAsc =
- historyService.createHistoryTaskQuery().orderAsc(property).list();
-
- List<HistoryTask> historyTasksDesc =
- historyService.createHistoryTaskQuery().orderDesc(property).list();
+ List<HistoryTask> historyTasksAsc = historyService.createHistoryTaskQuery()
+ .orderAsc(property)
+ .list();
+
+ List<HistoryTask> historyTasksDesc = historyService.createHistoryTaskQuery()
+ .orderDesc(property)
+ .list();
+
if (naturalOrderCheck) {
- QueryAssertions.assertOrderIsNatural(HistoryTask.class, property, historyTasksAsc,
historyTasksDesc, expectedNrOfResults);
- } else {
- QueryAssertions.assertOrderOnProperty(HistoryTask.class, property, historyTasksAsc,
historyTasksDesc, expectedValues);
+ QueryAssertions.assertOrderIsNatural(HistoryTask.class, property, historyTasksAsc,
+ historyTasksDesc, expectedNrOfResults);
}
-
+ else {
+ QueryAssertions.assertOrderOnProperty(HistoryTask.class, property,
historyTasksAsc,
+ historyTasksDesc, expectedValues);
+ }
}
-
+
private static final Long CLOCK_TEST_TIME = 30000L;
-
+
private List<String> createTestHistoryTasks() {
- String processXml1 =
+ String processXml1 =
"<process name='theProcess1'>" +
" <start>" +
" <transition to='theTask' />" +
@@ -209,32 +226,32 @@
" </task>" +
" <end name='theEnd' />" +
"</process>";
-
+
Clock.setExplicitTime(new Date(CLOCK_TEST_TIME));
-
+
String processXml3 = processXml1.replace("1",
"2").replace("Alex", "Tom");
String processXml2 = processXml1.replace("1",
"3").replace("Alex", "Joram");
-
+
deployJpdlXmlString(processXml1);
deployJpdlXmlString(processXml2);
deployJpdlXmlString(processXml3);
-
+
executionService.startProcessInstanceByKey("theProcess1");
executionService.startProcessInstanceByKey("theProcess2");
executionService.startProcessInstanceByKey("theProcess3");
-
+
List<String> taskIds = new ArrayList<String>();
taskIds.add(taskService.findPersonalTasks("Alex").get(0).getId());
taskIds.add(taskService.findPersonalTasks("Joram").get(0).getId());
taskIds.add(taskService.findPersonalTasks("Tom").get(0).getId());
-
+
for (String taskId : taskIds) {
taskService.completeTask(taskId);
}
-
+
return taskIds;
}
-
+
public void testHistoryTaskQuerySingleTaskByProcessId() {
deployJpdlXmlString(
"<process name='TaskAssignee'>" +
@@ -248,18 +265,19 @@
" <state name='wait'/>" +
"</process>"
);
-
+
ProcessInstance pi =
executionService.startProcessInstanceByKey("TaskAssignee");
-
+
taskService.completeTask(taskService.findPersonalTasks("johndoe").get(0).getId());
-
- HistoryTask task =
historyService.createHistoryTaskQuery().processInstanceId(pi.getId()).uniqueResult();
+
+ HistoryTask task = historyService.createHistoryTaskQuery()
+ .processInstanceId(pi.getId())
+ .uniqueResult();
assertNotNull(task.getName());
assertEquals("review", task.getName());
assertEquals("completed", task.getState());
-
}
-
+
public void testHistoryTaskQueryTaskByProcessId() {
deployJpdlXmlString(
"<process name='TaskAssignee'>" +
@@ -281,21 +299,24 @@
" <state name='wait'/>" +
"</process>"
);
-
+
ProcessInstance pi =
executionService.startProcessInstanceByKey("TaskAssignee");
-
+
taskService.completeTask(taskService.findPersonalTasks("johndoe").get(0).getId());
-
+
taskService.completeTask(taskService.findPersonalTasks("mike").get(0).getId());
-
+
taskService.completeTask(taskService.findPersonalTasks("peter").get(0).getId());
-
- List<HistoryTask> tasks =
historyService.createHistoryTaskQuery().processInstanceId(pi.getId()).list();
+
+ List<HistoryTask> tasks = historyService.createHistoryTaskQuery()
+ .processInstanceId(pi.getId())
+ .orderAsc(HistoryTaskQuery.PROPERTY_ASSIGNEE)
+ .list();
assertNotNull(tasks);
assertEquals(3, tasks.size());
-
- String[] expectedTasks = new String[] {"review", "review-mgmt",
"review-top-mgmt"};
- String[] expectedAssignees = new String[] {"johndoe", "mike",
"peter"};
+
+ String[] expectedTasks = { "review", "review-mgmt",
"review-top-mgmt" };
+ String[] expectedAssignees = { "johndoe", "mike",
"peter" };
int i = 0;
for (HistoryTask task : tasks) {
assertEquals(expectedTasks[i], task.getName());
@@ -303,9 +324,8 @@
assertEquals("completed", task.getState());
i++;
}
-
}
-
+
public void testHistoryTaskQueryTaskByProcessIdWithTimer() {
deployJpdlXmlString(
"<process name='TaskAssignee'>" +
@@ -330,21 +350,23 @@
" <state name='wait'/>" +
"</process>"
);
-
+
ProcessInstance pi =
executionService.startProcessInstanceByKey("TaskAssignee");
-
+
taskService.completeTask(taskService.findPersonalTasks("johndoe").get(0).getId());
-
+
taskService.completeTask(taskService.findPersonalTasks("mike").get(0).getId());
-
+
taskService.completeTask(taskService.findPersonalTasks("peter").get(0).getId());
-
- List<HistoryTask> tasks =
historyService.createHistoryTaskQuery().processInstanceId(pi.getId()).list();
- assertNotNull(tasks);
+
+ List<HistoryTask> tasks = historyService.createHistoryTaskQuery()
+ .processInstanceId(pi.getId())
+ .orderAsc(HistoryTaskQuery.PROPERTY_ASSIGNEE)
+ .list();
assertEquals(3, tasks.size());
-
- String[] expectedTasks = new String[] {"review", "review-mgmt",
"review-top-mgmt"};
- String[] expectedAssignees = new String[] {"johndoe", "mike",
"peter"};
+
+ String[] expectedTasks = { "review", "review-mgmt",
"review-top-mgmt" };
+ String[] expectedAssignees = { "johndoe", "mike",
"peter" };
int i = 0;
for (HistoryTask task : tasks) {
assertEquals(expectedTasks[i], task.getName());
@@ -352,8 +374,5 @@
assertEquals("completed", task.getState());
i++;
}
-
}
-
-
}