[jboss-cvs] jboss-seam/src/trinidad/org/jboss/seam/trinidad ...

Peter Muir peter at bleepbleep.org.uk
Tue Apr 3 14:32:02 EDT 2007


  User: pmuir   
  Date: 07/04/03 14:32:02

  Added:       src/trinidad/org/jboss/seam/trinidad  
                        TrinidadJsfProvider.java
                        TrinidadCollectionModel.java
  Log:
  Initial work on JBSEAM-757 (move it out of the example)
  
  Revision  Changes    Path
  1.1      date: 2007/04/03 18:32:02;  author: pmuir;  state: Exp;jboss-seam/src/trinidad/org/jboss/seam/trinidad/TrinidadJsfProvider.java
  
  Index: TrinidadJsfProvider.java
  ===================================================================
  package org.jboss.seam.trinidad;
  
  import static org.jboss.seam.InterceptionType.NEVER;
  import static org.jboss.seam.ScopeType.STATELESS;
  import static org.jboss.seam.annotations.Install.FRAMEWORK;
  
  import javax.faces.model.DataModel;
  
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Intercept;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.framework.Query;
  import org.jboss.seam.jsf.JsfProvider;
  
  @Name("org.jboss.seam.jsf.jsfProvider")
  @Install(precedence=FRAMEWORK, classDependencies="org.apache.myfaces.trinidad.model.CollectionModel")
  @Scope(STATELESS)
  @Intercept(NEVER)
  public class TrinidadJsfProvider extends JsfProvider
  {
     
     @Override
     public DataModel getDataModel(Query query)
     {
        return new TrinidadCollectionModel(query);
     }
     
     
  }
  
  
  
  1.1      date: 2007/04/03 18:32:02;  author: pmuir;  state: Exp;jboss-seam/src/trinidad/org/jboss/seam/trinidad/TrinidadCollectionModel.java
  
  Index: TrinidadCollectionModel.java
  ===================================================================
  package org.jboss.seam.trinidad;
  
  import java.util.ArrayList;
  import java.util.List;
  import java.util.StringTokenizer;
  
  import org.apache.myfaces.trinidad.model.SortCriterion;
  import org.jboss.seam.framework.Query;
  
  public class TrinidadCollectionModel extends org.apache.myfaces.trinidad.model.CollectionModel
  {
     
     private int rowIndex;
  
     private Query query;
     
     private List<SortCriterion> criteria;
     
     @Override
     public Object getWrappedData()
     {
        return query.getResultList();
     }
  
     public TrinidadCollectionModel(Query query)
     {
        this.query = query;
     }
  
     public void refresh()
     {
        query.refresh();
     }
  
     @Override
     public boolean isSortable(String property)
     {
        return true;
     }
  
     @Override
     public List<SortCriterion> getSortCriteria()
     {
        if (criteria == null)
        {
           criteria = asCriteria(query.getOrder());
        }
        return criteria;
     }
  
     @Override
     public void setSortCriteria(List<SortCriterion> criteria)
     {
        if (criteria != null && !criteria.equals(this.criteria))
        {
           query.setOrder(asSql(criteria));
           this.criteria = null;
           refresh();
        }
     }
     
     private String asSql(List<SortCriterion> criteria)
     {
        if (criteria != null && criteria.size() > 0)
        {
           String sql = "";
           for (SortCriterion sortCriterion : criteria)
           {
              sql += sortCriterion.getProperty() + (sortCriterion.isAscending() ? " ASC" : " DESC");
           }
           if (!"".equals(sql))
           {
              sql.substring(0, sql.length() - 1);
           }
           return sql;
        }
        else
        {
           return null;
        }
  
     }
  
     private List<SortCriterion> asCriteria(String sql)
     {
        List<SortCriterion> criteria = new ArrayList<SortCriterion>();
        if (!(sql == null || "".equals(sql)))
        {
           StringTokenizer tokenizer = new StringTokenizer(sql, ",");
           while (tokenizer.hasMoreTokens())
           {
              SortCriterion sortCriterion;
              String fragment = tokenizer.nextToken();
              String s = fragment.substring(fragment.lastIndexOf(" "));
              if (" ASC".equalsIgnoreCase(s))
              {
                 sortCriterion = new SortCriterion(fragment.substring(0, fragment.length() - 4), true);
              }
              else if (" DESC".equalsIgnoreCase(s))
              {
                 sortCriterion = new SortCriterion(fragment.substring(0, fragment.length() - 5),
                          false);
              }
              else
              {
                 sortCriterion = new SortCriterion(fragment, false);
              }
              criteria.add(sortCriterion);
           }
        }
        return criteria;
     }
  
     @Override
     public int getRowCount()
     {
        return query.getResultCount().intValue();
     }
  
     @Override
     public void setWrappedData(Object arg0)
     {
        throw new UnsupportedOperationException("Immutable");
     }
     
     private List getWrappedList()
     {
        return (List) getWrappedData();
     }
     
     @Override
     public void setRowIndex(int rowIndex)
     {
       this.rowIndex = rowIndex;
     }
  
     @Override
     public int getRowIndex()
     {
        return rowIndex;
     }
  
     /**
      * Gets the row key of the current row
      * @inheritDoc
      */
     @Override
     public Object getRowKey()
     {
       return isRowAvailable()
         ? String.valueOf(getRowIndex())
         : null;
     }
  
     /**
      * Finds the row with the matching key and makes it current
      * @inheritDoc
      */
     @Override
     public void setRowKey(Object key)
     {
       setRowIndex(_toRowIndex((String) key));
     }
     
     /**
      * Gets the row key of the current row
      * @inheritDoc
      */
     /*@Override
     public Object getRowKey()
     {
        if (rowIndex == -1)
        {
           return null;
        }
        else
        {
           return EntityIdentifierStore.instance().put(getWrappedList().get(getRowIndex()));
        }
     }*/
  
     /**
      * Finds the row with the matching key and makes it current
      * @inheritDoc
      */
     /*@Override
     public void setRowKey(Object key)
     {
       if (key == null)
       {
          setRowIndex(-1);
       }
       else
       {
          Object entity = EntityIdentifierStore.instance().get((Integer) key);
          setRowIndex(getWrappedList().indexOf(entity));
       }
     }*/
     
     private int _toRowIndex(String rowKey)
     {
       if (rowKey == null)
         return -1;
  
       try
       {
         return Integer.parseInt(rowKey);
       }
       catch (NumberFormatException nfe)
       {
         return -1;
       }
     }
  
     @Override
     public Object getRowData()
     {
        return getWrappedList().get(rowIndex);
     }
  
     @Override
     public boolean isRowAvailable()
     {
        return rowIndex >= 0 && rowIndex < getWrappedList().size();
     }
  
     
  }
  
  
  



More information about the jboss-cvs-commits mailing list