details:   /erp/devel/pi/rev/c4e24674dbf8
changeset: 9073:c4e24674dbf8
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Thu Dec 09 18:25:07 2010 +0100
summary:   Added logic to compute the row number for a given record id

diffstat:

 src/org/openbravo/dal/service/OBQuery.java |  38 ++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)

diffs (55 lines):

diff -r 79e55dfc8af0 -r c4e24674dbf8 src/org/openbravo/dal/service/OBQuery.java
--- a/src/org/openbravo/dal/service/OBQuery.java        Thu Dec 09 09:43:14 
2010 +0100
+++ b/src/org/openbravo/dal/service/OBQuery.java        Thu Dec 09 18:25:07 
2010 +0100
@@ -123,6 +123,14 @@
   }
 
   /**
+   * @return the underlying hibernate query object which provides an 
additional api (for example
+   *         scroll).
+   */
+  public Query createHibernateQuery() {
+    return createQuery();
+  }
+
+  /**
    * Makes it possible to get a {...@link ScrollableResults} from the 
underlying Query object.
    * 
    * @param scrollMode
@@ -151,6 +159,36 @@
     return ((Number) qry.uniqueResult()).intValue();
   }
 
+  /**
+   * Computes the row number of a record which has the id which is passed in 
as a parameter.
+   * 
+   * @param targetId
+   *          the record id
+   * @return the row number or -1 if not found
+   */
+  public int getRowNumber(String targetId) {
+    String qryStr = createQueryString();
+    if (qryStr.toLowerCase().contains(FROM_SPACED)) {
+      final int index = qryStr.indexOf(FROM_SPACED) + FROM_SPACED.length();
+      qryStr = qryStr.substring(index);
+    }
+    final Query qry = getSession().createQuery("select id " + FROM_SPACED + 
qryStr);
+    setParameters(qry);
+
+    final ScrollableResults results = qry.scroll(ScrollMode.FORWARD_ONLY);
+    try {
+      while (results.next()) {
+        final String id = results.getString(0);
+        if (id.equals(targetId)) {
+          return results.getRowNumber();
+        }
+      }
+    } finally {
+      results.close();
+    }
+    return -1;
+  }
+
   private String stripOrderBy(String qryStr) {
     if (qryStr.toLowerCase().indexOf(ORDERBY) != -1) {
       return qryStr.substring(0, qryStr.toLowerCase().indexOf(ORDERBY));

------------------------------------------------------------------------------
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to