|
From: <tri...@us...> - 2007-11-20 06:29:00
|
Revision: 156
http://equanda.svn.sourceforge.net/equanda/?rev=156&view=rev
Author: triathlon98
Date: 2007-11-19 22:28:59 -0800 (Mon, 19 Nov 2007)
Log Message:
-----------
EQ-84 also allow reverse sorting based on SelectorState
Modified Paths:
--------------
trunk/equanda-client/src/main/java/org/equanda/persistence/om/ObjectSelector.java
trunk/equanda-test/test-test/src/test/java/org/equanda/test/xejb/SelectorsSortingTest.java
Modified: trunk/equanda-client/src/main/java/org/equanda/persistence/om/ObjectSelector.java
===================================================================
--- trunk/equanda-client/src/main/java/org/equanda/persistence/om/ObjectSelector.java 2007-11-19 14:28:16 UTC (rev 155)
+++ trunk/equanda-client/src/main/java/org/equanda/persistence/om/ObjectSelector.java 2007-11-20 06:28:59 UTC (rev 156)
@@ -24,6 +24,7 @@
package org.equanda.persistence.om;
+import javolution.lang.TextBuilder;
import org.equanda.persistence.om.query.EquandaQuery;
import javax.persistence.EntityManager;
@@ -181,7 +182,7 @@
/**
* Run an update query (which could amongst others be used for bulk delete).
*
- * @param em entity manager
+ * @param em entity manager
* @param equandaQuery query
* @return number of affected records
*/
@@ -196,28 +197,40 @@
}
/**
- * Replaces/set the order by clause in a query with a new one
- * Used for the configured selectors sorting
+ * Replaces/set the order by clause in a query with a new one Used for the configured selectors sorting
*
- * @param queryStr old query
+ * @param queryStr old query
* @param fieldName new field for use with ORDER BY
* @return the new calculated query
*/
protected static String setOrderBy( String queryStr, String fieldName )
{
- if ( queryStr.indexOf( " ORDER BY " ) != -1 )
+ TextBuilder builder = TextBuilder.newInstance();
+ builder.append( queryStr );
+ int orderByPos = queryStr.indexOf( " ORDER BY " );
+ if ( orderByPos != -1 )
{
- queryStr = queryStr.substring( 0, queryStr.indexOf( " ORDER BY " ) );
+ builder.setLength( orderByPos );
}
- queryStr += " ORDER BY " + getQueryObject( queryStr ) + "." + fieldName;
- return queryStr;
+ String desc = "";
+ if ( fieldName.length() > 0 && fieldName.charAt( 0 ) == '-' )
+ {
+ fieldName = fieldName.substring( 1 );
+ desc = " DESCENDING";
+ }
+ builder.append( " ORDER BY " );
+ builder.append( getQueryObject( queryStr ) );
+ builder.append( '.' );
+ builder.append( fieldName );
+ builder.append( desc );
+ return builder.toString();
}
/**
* Adds one extra filter to the query
*
- * @param queryStr old query
- * @param name name of the filter
+ * @param queryStr old query
+ * @param name name of the filter
* @param queryPart how filter is to be applied in the query
* @return the new calculated query
*/
Modified: trunk/equanda-test/test-test/src/test/java/org/equanda/test/xejb/SelectorsSortingTest.java
===================================================================
--- trunk/equanda-test/test-test/src/test/java/org/equanda/test/xejb/SelectorsSortingTest.java 2007-11-19 14:28:16 UTC (rev 155)
+++ trunk/equanda-test/test-test/src/test/java/org/equanda/test/xejb/SelectorsSortingTest.java 2007-11-20 06:28:59 UTC (rev 156)
@@ -81,6 +81,15 @@
assertEquals( "C", results.get( 2 ).getFirstName() );
assertEquals( "D", results.get( 3 ).getFirstName() );
+ // Do the same as above but for for a custom query
+ SelectorsState.setSorting( "CocoonMan", "-firstName" );
+ customQuery = new EquandaQueryImpl( "SELECT o FROM DMCocoonManBean o ORDER BY o.firstName" );
+ results = sel.equandaRunQuery( customQuery );
+ assertEquals( "D", results.get( 0 ).getFirstName() );
+ assertEquals( "C", results.get( 1 ).getFirstName() );
+ assertEquals( "B", results.get( 2 ).getFirstName() );
+ assertEquals( "A", results.get( 3 ).getFirstName() );
+
SelectorsState.setSorting( "CocoonMan", "" );
sel = EquandaGlobal.getCocoonManSelector();
results = sel.selectEquandaAll();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|