You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by bo...@apache.org on 2008/12/10 21:16:15 UTC

svn commit: r725412 - in /ode/branches/APACHE_ODE_1.X: bpel-api/src/main/java/org/apache/ode/bpel/common/ dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ dao-jpa/src/main/java/org/apache/ode/dao/jpa/

Author: boisvert
Date: Wed Dec 10 12:16:15 2008
New Revision: 725412

URL: http://svn.apache.org/viewvc?rev=725412&view=rev
Log:
ODE-458: Improve InstanceManagement.listInstance() filtering to support multiple process and instance IDs

Modified:
    ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/common/InstanceFilter.java
    ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CriteriaBuilder.java
    ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java

Modified: ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/common/InstanceFilter.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/common/InstanceFilter.java?rev=725412&r1=725411&r2=725412&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/common/InstanceFilter.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/common/InstanceFilter.java Wed Dec 10 12:16:15 2008
@@ -42,11 +42,11 @@
 
     private static final long serialVersionUID = 9999;
 
-    /** If set, will filter on the instance id (IID) */
-    private String iid;
+    /** If set, will filter on the instance id (IID) and select all matching instances */
+    private List<String> iids;
 
-    /** If set, will filter on the process id (PID) */
-    private String pid;
+    /** If set, will filter on the process id (PID) and select all matching process definitions */
+    private List<String> pids;
 
     /** If set, will filter on the process name (accepts ending with wildcard) */
     private String nameFilter;
@@ -99,12 +99,12 @@
     enum Criteria {
         IID {
             void process(InstanceFilter filter, String key, String op, String value) {
-                filter.iid = value;
+                filter.iids = parse(value);
             }
         },
         PID {
             void process(InstanceFilter filter, String key, String op, String value) {
-                filter.pid = value;
+                filter.pids = parse(value);
             }
         },
         NAME {
@@ -119,14 +119,7 @@
         },
         STATUS {
             void process(InstanceFilter filter, String key, String op, String value) {
-                if (filter.statusFilter == null)
-                    filter.statusFilter = new ArrayList<String>(5);
-                // Status can have '|' to assemble several status with or
-                for (StringTokenizer statusTok = new StringTokenizer(value, "|"); statusTok
-                        .hasMoreTokens();) {
-                    String status = statusTok.nextToken();
-                    filter.statusFilter.add(status);
-                }
+                filter.statusFilter = parse(value);
             }
         },
         STARTED {
@@ -302,12 +295,12 @@
         return orders;
     }
 
-    public String getPidFilter() {
-        return pid;
+    public List<String> getPidFilter() {
+        return pids;
     }
 
-    public String getIidFilter() {
-        return iid;
+    public List<String> getIidFilter() {
+        return iids;
     }
 
     public static void main(String[] args) {
@@ -343,20 +336,28 @@
 
 
     public String toString() {
-    	StringBuffer buf = new StringBuffer();
-    	buf.append("InstanceFilter {");
-    	buf.append("iid="+iid);
-    	buf.append(",pid="+pid);
-    	buf.append(",name="+nameFilter);
-    	buf.append(",namespace="+namespaceFilter);
-    	buf.append(",status="+statusFilter);
-    	buf.append(",startedDate="+startedDateFilter);
-    	buf.append(",lastActiveDate="+lastActiveDateFilter);
-    	buf.append(",propertyValues="+propertyValuesFilter);
-    	buf.append(",orders="+orders);
-    	buf.append(",limit="+limit);
-    	buf.append("}");
-    	return buf.toString();
-    }
-
+        StringBuffer buf = new StringBuffer();
+        buf.append("InstanceFilter {");
+        buf.append("iids="+iids);
+        buf.append(",pids="+pids);
+        buf.append(",name="+nameFilter);
+        buf.append(",namespace="+namespaceFilter);
+        buf.append(",status="+statusFilter);
+        buf.append(",startedDate="+startedDateFilter);
+        buf.append(",lastActiveDate="+lastActiveDateFilter);
+        buf.append(",propertyValues="+propertyValuesFilter);
+        buf.append(",orders="+orders);
+        buf.append(",limit="+limit);
+        buf.append("}");
+        return buf.toString();
+    }
+    
+    private static List<String> parse(String pipeDelimited) {
+        List<String> list = new ArrayList<String>();
+        StringTokenizer tok = new StringTokenizer(pipeDelimited, "|");
+        while (tok.hasMoreTokens()) {
+            list.add(tok.nextToken());
+        }
+        return list;
+    }        
 }
\ No newline at end of file

Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CriteriaBuilder.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CriteriaBuilder.java?rev=725412&r1=725411&r2=725412&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CriteriaBuilder.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/CriteriaBuilder.java Wed Dec 10 12:16:15 2008
@@ -48,11 +48,23 @@
     Criteria processCrit = crit.createCriteria("process");
 
     // Filtering on PID
-    if (filter.getPidFilter() != null)
-      processCrit.add(Restrictions.like("processId",filter.getPidFilter().replaceAll("\\*","%")));
+    List<String> pids = filter.getPidFilter();
+    if (pids != null && pids.size() > 0) {
+        Disjunction disj = Restrictions.disjunction();
+        for (String pid: pids) {
+          disj.add(Restrictions.eq("processId", pid));
+        }
+        processCrit.add(disj);
+    }
     
-    if (filter.getIidFilter() != null)
-      crit.add(Restrictions.eq("id",new Long(filter.getIidFilter())));
+    List<String> iids = filter.getIidFilter();
+    if (iids != null && iids.size() > 0) {
+        Disjunction disj = Restrictions.disjunction();
+        for (String iid: iids) {
+            crit.add(Restrictions.eq("id", new Long(iid)));
+        }
+        crit.add(disj);
+    }
     
     // Filtering on name and namespace
     if (filter.getNameFilter() != null) {

Modified: ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java?rev=725412&r1=725411&r2=725412&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/BPELDAOConnectionImpl.java Wed Dec 10 12:16:15 2008
@@ -149,12 +149,25 @@
  
             // iid filter
             if ( criteria.getIidFilter() != null ) {
-               	clauses.add(" pi._instanceId = " + criteria.getIidFilter() );
+                StringBuffer filters = new StringBuffer();
+                List<String> iids = criteria.getIidFilter();
+                for (int m = 0; m < iids.size(); m++) {
+                    filters.append(" pi._instanceId = '").append(iids.get(m)).append("'");
+                    if (m < iids.size() - 1) filters.append(" or");
+                }
+                clauses.add(" (" + filters + "')");
             }
            
             // pid filter
-            if (criteria.getPidFilter() != null)
-                clauses.add(" pi._process._processId = '" + criteria.getPidFilter() + "'");
+            if (criteria.getPidFilter() != null) {
+                StringBuffer filters = new StringBuffer();
+                List<String> pids = criteria.getPidFilter();
+                for (int m = 0; m < pids.size(); m++) {
+                    filters.append(" pi._process._processId = '").append(pids.get(m)).append("'");
+                    if (m < pids.size() - 1) filters.append(" or");
+                }
+                clauses.add(" (" + filters + "')");
+            }
             
             // name filter
             if (criteria.getNameFilter() != null) {