[jbpm-commits] JBoss JBPM SVN: r6653 - in jbpm4/trunk/modules: test-db/src/test/java/org/jbpm/test/query and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Sep 8 21:01:29 EDT 2010


Author: alex.guizar at 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++;
     }
-    
   }
-  
-  
 }



More information about the jbpm-commits mailing list