[jboss-user] [JBoss Seam] - Ma generic do even more version of EntityQuery : MyEntityQue

koenhandekyn do-not-reply at jboss.com
Thu Nov 22 04:00:48 EST 2007


i want to share with you this generic do-even-more version of EntityQuery

with the below class it's even easier to write EntityQuery objects.


the EJBQL is generated automatically (example FROM Account account).
there is a getExample() method that returns an example instance (for search paramaters as in the seam-gen generated code) 
each time setOrder is hit, if the field was the same as the current, the order switches (for asc/desc switching).
the current order can be queried with getReverse


example using MyEntityQuery


  | @Name("managedRoles")
  | @Scope(ScopeType.CONVERSATION)
  | public class ManagedRolesQuery extends MyEntityQuery<Role> {
  | 
  |   private static final String[] RESTRICTIONS = {
  |       "role.creationPath LIKE concat(#{currentSubscription.targetPath},'%')",
  |       "role.name LIKE concat(#{managedRoles.example.name},'%')" };
  | 
  | 
  |   @Override
  |   public List<String> getRestrictions() {
  |     return Arrays.asList(RESTRICTIONS);
  |   }
  | 
  | }
  | 


feedback welcom !


  | package up.seam;
  | 
  | import java.lang.reflect.ParameterizedType;
  | import java.lang.reflect.Type;
  | 
  | import org.jboss.seam.framework.EntityQuery;
  | 
  | import up.util.LangUtil;
  | 
  | public class MyEntityQuery<T> extends EntityQuery {
  | 
  |   // you cannot initialize (results in bug for seam 2.0.0.GA)
  |   protected T example = null;
  | 
  |   public T getExample() {
  |     if (example == null) {
  |       example = createInstance();
  |     }
  |     return example;
  |   }
  | 
  |   public void setExample(final T example) {
  |     this.example = example;
  |   }
  | 
  |   protected Boolean reverse = false;
  | 
  |   public Boolean getReverse() {
  |     return reverse;
  |   }
  | 
  |   public void setReverse(Boolean reverse) {
  |     this.reverse = reverse;
  |   }
  | 
  |   @Override
  |   public Integer getMaxResults() {
  |     return 25;
  |   }
  | 
  |   @Override
  |   public void setOrder(final String order) {
  | 
  |     System.out.println("REQUEST TO SORT: " + order + ", was " + super.getOrder());
  |     if (LangUtil.isNotEmpty(order)) {
  |       if (order.equals(this.getOrder())) {
  |         this.reverse = !this.reverse;
  |       } else {
  |         this.reverse = false;
  |       }
  |       super.setOrder(order);
  |     }
  |   }
  | 
  |   @Override
  |   public String getOrder() {
  |     if (reverse)
  |       return super.getOrder() + " desc";
  |     else
  |       return super.getOrder();
  |   }
  | 
  |   private static final long serialVersionUID = 1L;
  |   
  | 
  |   @Override
  |   public String getEjbql() {
  |     
  |     final String entityClassName = getEntityClass().getSimpleName();
  |     // System.out.println(entityClassName);    
  |     
  |     final String ejbql = "from "+entityClassName+" "+entityClassName.toLowerCase();
  |     // System.out.println(ejbql);
  |     return ejbql;
  |   }
  | 
  |   public T createInstance() {
  | 
  |     if (getEntityClass() != null) {
  |       try {
  |         return getEntityClass().newInstance();
  |       } catch (Exception e) {
  |         throw new RuntimeException(e);
  |       }
  |     } else {
  |       return null;
  |     }
  |   }
  | 
  |   protected Class<T> entityClass;
  | 
  |   public Class<T> getEntityClass() {
  |     if (entityClass == null) {
  |       Type type = getClass().getGenericSuperclass();
  |       System.out.println("found class " + getClass());
  |       System.out.println("found type " + type);
  |       if (type instanceof ParameterizedType) {
  |         ParameterizedType paramType = (ParameterizedType) type;
  |         entityClass = (Class<T>) paramType.getActualTypeArguments()[0];
  |       } else {
  |         throw new IllegalArgumentException("Could not guess entity class by reflection");
  |       }
  |     }
  |     return entityClass;
  |   }
  | 
  | }


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4107002#4107002

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4107002



More information about the jboss-user mailing list