[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