[jboss-cvs] jboss-seam/src/main/org/jboss/seam/persistence ...
Gavin King
gavin.king at jboss.com
Mon Feb 26 14:24:50 EST 2007
User: gavin
Date: 07/02/26 14:24:50
Modified: src/main/org/jboss/seam/persistence
EntityManagerProxy.java HibernateSessionProxy.java
Added: src/main/org/jboss/seam/persistence QueryParser.java
Log:
refactor
Revision Changes Path
1.3 +7 -28 jboss-seam/src/main/org/jboss/seam/persistence/EntityManagerProxy.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: EntityManagerProxy.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/persistence/EntityManagerProxy.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- EntityManagerProxy.java 25 Feb 2007 19:21:09 -0000 1.2
+++ EntityManagerProxy.java 26 Feb 2007 19:24:50 -0000 1.3
@@ -1,18 +1,11 @@
package org.jboss.seam.persistence;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
import javax.persistence.Query;
-import org.jboss.seam.core.Expressions;
-import org.jboss.seam.core.Expressions.ValueBinding;
-
public class EntityManagerProxy implements EntityManager
{
private EntityManager delegate;
@@ -59,30 +52,16 @@
public Query createQuery(String ejbql)
{
- //TODO: horrible copy/paste from HibernateSessionProxy!
if ( ejbql.indexOf('#')>0 )
{
- List<ValueBinding> queryParameters = new ArrayList<ValueBinding>();
- StringTokenizer ejbqlTokens = new StringTokenizer( ejbql, "#}", true );
- StringBuilder ejbqlBuilder = new StringBuilder( ejbql.length() );
- while ( ejbqlTokens.hasMoreTokens() )
- {
- String token = ejbqlTokens.nextToken();
- if ( "#".equals(token) )
- {
- String expression = token + ejbqlTokens.nextToken() + ejbqlTokens.nextToken();
- queryParameters.add( Expressions.instance().createValueBinding(expression) );
- ejbqlBuilder.append(":el").append( queryParameters.size() );
- }
- else
- {
- ejbqlBuilder.append(token);
- }
- }
- Query query = delegate.createQuery( ejbqlBuilder.toString() );
- for (int i=1; i<=queryParameters.size(); i++)
- {
- query.setParameter( "el" + i, queryParameters.get(i-1).getValue() );
+ QueryParser qp = new QueryParser(ejbql);
+ Query query = delegate.createQuery( qp.getEjbql() );
+ for (int i=0; i<qp.getParameterValueBindings().size(); i++)
+ {
+ query.setParameter(
+ QueryParser.getParameterName(i),
+ qp.getParameterValueBindings().get(i).getValue()
+ );
}
return query;
}
1.2 +7 -26 jboss-seam/src/main/org/jboss/seam/persistence/HibernateSessionProxy.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: HibernateSessionProxy.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/persistence/HibernateSessionProxy.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- HibernateSessionProxy.java 25 Feb 2007 19:19:39 -0000 1.1
+++ HibernateSessionProxy.java 26 Feb 2007 19:24:50 -0000 1.2
@@ -2,9 +2,6 @@
import java.io.Serializable;
import java.sql.Connection;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
import org.hibernate.CacheMode;
import org.hibernate.Criteria;
@@ -20,8 +17,6 @@
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.stat.SessionStatistics;
-import org.jboss.seam.core.Expressions;
-import org.jboss.seam.core.Expressions.ValueBinding;
public class HibernateSessionProxy implements Session
{
@@ -89,30 +84,16 @@
public Query createQuery(String hql) throws HibernateException
{
- //TODO: horrible copy/paste from EntityManageProxy!
if ( hql.indexOf('#')>0 )
{
- List<ValueBinding> queryParameters = new ArrayList<ValueBinding>();
- StringTokenizer ejbqlTokens = new StringTokenizer( hql, "#}", true );
- StringBuilder ejbqlBuilder = new StringBuilder( hql.length() );
- while ( ejbqlTokens.hasMoreTokens() )
- {
- String token = ejbqlTokens.nextToken();
- if ( "#".equals(token) )
- {
- String expression = token + ejbqlTokens.nextToken() + ejbqlTokens.nextToken();
- queryParameters.add( Expressions.instance().createValueBinding(expression) );
- ejbqlBuilder.append(":el").append( queryParameters.size() );
- }
- else
- {
- ejbqlBuilder.append(token);
- }
- }
- Query query = delegate.createQuery( ejbqlBuilder.toString() );
- for (int i=1; i<=queryParameters.size(); i++)
- {
- query.setParameter( "el" + i, queryParameters.get(i-1).getValue() );
+ QueryParser qp = new QueryParser(hql);
+ Query query = delegate.createQuery( qp.getEjbql() );
+ for (int i=0; i<qp.getParameterValueBindings().size(); i++)
+ {
+ query.setParameter(
+ QueryParser.getParameterName(i),
+ qp.getParameterValueBindings().get(i).getValue()
+ );
}
return query;
}
1.1 date: 2007/02/26 19:24:50; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/persistence/QueryParser.java
Index: QueryParser.java
===================================================================
package org.jboss.seam.persistence;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import org.jboss.seam.core.Expressions.ValueBinding;
import org.jboss.seam.core.Expressions;
public class QueryParser
{
private List<ValueBinding> parameterValueBindings = new ArrayList<ValueBinding>();
private StringBuilder ejbqlBuilder;
public static String getParameterName(int loc)
{
return "el" + (loc+1);
}
public String getEjbql()
{
return ejbqlBuilder.toString();
}
public List<ValueBinding> getParameterValueBindings()
{
return parameterValueBindings;
}
public QueryParser(String ejbql)
{
this(ejbql, 0);
}
public QueryParser(String ejbql, int startingParameterNumber)
{
StringTokenizer tokens = new StringTokenizer(ejbql, "#}", true);
ejbqlBuilder = new StringBuilder( ejbql.length() );
while ( tokens.hasMoreTokens() )
{
String token = tokens.nextToken();
if ( "#".equals(token) )
{
if ( !tokens.hasMoreTokens() )
{
throw new IllegalArgumentException("query fragment terminates in #");
}
String expressionToken = tokens.nextToken();
if ( !expressionToken.startsWith("{") )
{
throw new IllegalArgumentException("missing { after # in query fragment");
}
if ( !tokens.hasMoreTokens() )
{
throw new IllegalArgumentException("missing } after expression in query fragment");
}
String expression = token + expressionToken + tokens.nextToken();
ejbqlBuilder.append(':').append( getParameterName( startingParameterNumber + parameterValueBindings.size() ) );
parameterValueBindings.add( Expressions.instance().createValueBinding(expression) );
}
else
{
ejbqlBuilder.append(token);
}
}
}
}
More information about the jboss-cvs-commits
mailing list