[jboss-cvs] JBossAS SVN: r97071 - in projects/snowdrop/trunk/documentation/samples/sportsclub: sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 27 02:36:04 EST 2009


Author: marius.bogoevici
Date: 2009-11-27 02:36:03 -0500 (Fri, 27 Nov 2009)
New Revision: 97071

Added:
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/AccountSearchCriteria.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/PersonSearchCriteria.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/Range.java
Modified:
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/AccountRepository.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/PersonRepository.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/Repository.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateAccountRepository.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateMembershipRepository.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernatePersonRepository.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateRepository.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/initializer/DatabaseInitializer.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-ejb/src/main/java/org/jboss/snowdrop/samples/sportsclub/ejb/SubscriptionService.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-ejb/src/main/java/org/jboss/snowdrop/samples/sportsclub/ejb/SubscriptionServiceImpl.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/java/org/jboss/snowdrop/samples/sportsclub/jsf/beans/AccountSearch.java
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/WEB-INF/faces-config.xml
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/WEB-INF/web.xml
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/index.xhtml
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/searchForm.xhtml
   projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/searchResult.xhtml
Log:
Enhancing the DAO logic and fleshing out the UI.

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/AccountRepository.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/AccountRepository.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/AccountRepository.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -3,6 +3,7 @@
 import java.util.List;
 
 import org.jboss.snowdrop.samples.sportsclub.domain.entity.Account;
+import org.jboss.snowdrop.samples.sportsclub.domain.repository.criteria.AccountSearchCriteria;
 
 /**
  * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
@@ -10,4 +11,8 @@
 public interface AccountRepository extends Repository<Account, Integer>
 {
    List<Account> findByPersonName(String name);
+
+   int countByCriteria(AccountSearchCriteria accountSearchCriteria);
+
+   List<Account> findByCriteria(AccountSearchCriteria accountSearchCriteria);
 }

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/PersonRepository.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/PersonRepository.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/PersonRepository.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -1,6 +1,9 @@
 package org.jboss.snowdrop.samples.sportsclub.domain.repository;
 
+import java.util.Collection;
+
 import org.jboss.snowdrop.samples.sportsclub.domain.entity.Person;
+import org.jboss.snowdrop.samples.sportsclub.domain.repository.criteria.AccountSearchCriteria;
 
 /**
  * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/Repository.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/Repository.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/Repository.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -14,4 +14,6 @@
    void delete(T object);
 
    Collection<T> findAll();
+   
+   int countAll();
 }

Added: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/AccountSearchCriteria.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/AccountSearchCriteria.java	                        (rev 0)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/AccountSearchCriteria.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -0,0 +1,34 @@
+package org.jboss.snowdrop.samples.sportsclub.domain.repository.criteria;
+
+/**
+ * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
+ */
+public class AccountSearchCriteria
+{
+   private PersonSearchCriteria personSearchCriteria;
+
+   private Range range;
+
+
+   public PersonSearchCriteria getPersonSearchCriteria()
+   {
+      return personSearchCriteria;
+   }
+
+   public void setPersonSearchCriteria(PersonSearchCriteria personSearchCriteria)
+   {
+      this.personSearchCriteria = personSearchCriteria;
+   }
+
+   public Range getRange()
+   {
+      return range;
+   }
+
+   public void setRange(Range range)
+   {
+      this.range = range;
+   }
+
+
+}

Added: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/PersonSearchCriteria.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/PersonSearchCriteria.java	                        (rev 0)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/PersonSearchCriteria.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -0,0 +1,43 @@
+package org.jboss.snowdrop.samples.sportsclub.domain.repository.criteria;
+
+/**
+ * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
+ */
+public class PersonSearchCriteria
+{
+   private String name;
+
+   private String city;
+
+   private Range range;
+
+   public Range getRange()
+   {
+      return range;
+   }
+
+   public void setRange(Range range)
+   {
+      this.range = range;
+   }
+
+   public String getCity()
+   {
+      return city;
+   }
+
+   public void setCity(String city)
+   {
+      this.city = city;
+   }
+
+   public String getName()
+   {
+      return name;
+   }
+
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+}
\ No newline at end of file

Added: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/Range.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/Range.java	                        (rev 0)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-domain/src/main/java/org/jboss/snowdrop/samples/sportsclub/domain/repository/criteria/Range.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -0,0 +1,32 @@
+package org.jboss.snowdrop.samples.sportsclub.domain.repository.criteria;
+
+/**
+ * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
+ */
+public class Range
+{
+   private int minIndex;
+
+   private int maxIndex;
+
+   public Range(int minIndex, int length)
+   {
+      this.maxIndex = minIndex + length;
+      this.minIndex = minIndex;
+   }
+
+   public int getMaxIndex()
+   {
+      return maxIndex;
+   }
+
+   public int getMinIndex()
+   {
+      return minIndex;
+   }
+
+   public int length()
+   {
+      return maxIndex - minIndex;
+   }
+}

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateAccountRepository.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateAccountRepository.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateAccountRepository.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -1,12 +1,24 @@
 package org.jboss.snowdrop.samples.stayfit.dao.hibernate;
 
+import static org.hibernate.criterion.Restrictions.eq;
+import static org.hibernate.criterion.Restrictions.eqProperty;
+import static org.hibernate.criterion.Restrictions.ilike;
+import static org.hibernate.criterion.Restrictions.or;
+
 import java.util.List;
 
+import org.hibernate.Criteria;
 import org.hibernate.Query;
 import org.hibernate.Session;
-import org.hibernate.SessionFactory;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.MatchMode;
+import org.hibernate.criterion.Projection;
+import org.hibernate.criterion.Projections;
+import org.hibernate.criterion.Restrictions;
 import org.jboss.snowdrop.samples.sportsclub.domain.entity.Account;
 import org.jboss.snowdrop.samples.sportsclub.domain.repository.AccountRepository;
+import org.jboss.snowdrop.samples.sportsclub.domain.repository.criteria.AccountSearchCriteria;
+import org.jboss.snowdrop.samples.sportsclub.domain.repository.criteria.PersonSearchCriteria;
 
 /**
  * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
@@ -28,4 +40,45 @@
       query.setString("name", "%" + name + "%");
       return (List<Account>)query.list();
    }
+
+
+   public int countByCriteria(AccountSearchCriteria accountSearchCriteria)
+   {
+      Criteria criteria = convert(accountSearchCriteria);
+      criteria.setProjection(Projections.count("id"));
+      return (Integer)criteria.uniqueResult();
+   }
+
+   private Criteria convert(AccountSearchCriteria accountSearchCriteria)
+   {
+      Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Account.class);
+      if (accountSearchCriteria.getPersonSearchCriteria() != null)
+      {
+         PersonSearchCriteria personSearchCriteria = accountSearchCriteria.getPersonSearchCriteria();
+         Criteria personCriteria = criteria.createCriteria("subscriber");
+         if (personSearchCriteria.getName() != null)
+         {
+            personCriteria.add(
+                  or(ilike("name.firstName", personSearchCriteria.getName(), MatchMode.ANYWHERE),
+                     or(ilike("name.lastName", personSearchCriteria.getName(), MatchMode.ANYWHERE), 
+                           ilike("name.middleName", personSearchCriteria.getName(), MatchMode.ANYWHERE))));
+         }
+         if (personSearchCriteria.getCity() != null)
+         {
+            personCriteria.add(ilike("address.city", personSearchCriteria.getCity(), MatchMode.ANYWHERE));
+         }
+      }    
+      return criteria;
+   }
+
+   public List<Account> findByCriteria(AccountSearchCriteria accountSearchCriteria)
+   {
+      Criteria criteria = convert(accountSearchCriteria);
+      if (accountSearchCriteria.getRange()!=null)
+      {
+         criteria.setFirstResult(accountSearchCriteria.getRange().getMinIndex());
+         criteria.setMaxResults(accountSearchCriteria.getRange().length());
+      }
+      return (List<Account>) criteria.list();
+   }
 }

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateMembershipRepository.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateMembershipRepository.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateMembershipRepository.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -1,6 +1,7 @@
 package org.jboss.snowdrop.samples.stayfit.dao.hibernate;
 
 import org.hibernate.Query;
+import org.hibernate.criterion.Projections;
 import org.jboss.snowdrop.samples.sportsclub.domain.entity.Membership;
 import org.jboss.snowdrop.samples.sportsclub.domain.repository.MembershipRepository;
 
@@ -22,4 +23,9 @@
       Query query = getCurrentSession().createQuery("from Membership m where m.active");
       return query.list();
    }
+
+   public int countAll()
+   {
+      return (Integer)getCurrentSession().createCriteria(Membership.class).setProjection(Projections.count("code")).uniqueResult();
+   }
 }

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernatePersonRepository.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernatePersonRepository.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernatePersonRepository.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -1,6 +1,7 @@
 package org.jboss.snowdrop.samples.stayfit.dao.hibernate;
 
-import org.hibernate.SessionFactory;
+import static org.hibernate.criterion.Restrictions.ilike;
+
 import org.jboss.snowdrop.samples.sportsclub.domain.entity.Person;
 import org.jboss.snowdrop.samples.sportsclub.domain.repository.PersonRepository;
 

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateRepository.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateRepository.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/HibernateRepository.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -2,6 +2,7 @@
 
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
+import org.hibernate.criterion.Projections;
 import org.jboss.snowdrop.samples.sportsclub.domain.repository.Repository;
 
 import java.io.Serializable;
@@ -10,7 +11,7 @@
 /**
  * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
  */
-public class HibernateRepository<T, I extends Serializable> implements Repository<T, I>
+public abstract class HibernateRepository<T, I extends Serializable> implements Repository<T, I>
 {
    protected SessionFactory sessionFactory;
 
@@ -51,4 +52,11 @@
       return (Collection<T>)getCurrentSession().createCriteria(clazz).list();
    }
 
+
+   public int countAll()
+   {
+      return (Integer)getCurrentSession().createCriteria(clazz).setProjection(Projections.count("id")).uniqueResult();
+   }
+
+
 }

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/initializer/DatabaseInitializer.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/initializer/DatabaseInitializer.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-hibernate-dao/src/main/java/org/jboss/snowdrop/samples/stayfit/dao/hibernate/initializer/DatabaseInitializer.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -1,5 +1,6 @@
 package org.jboss.snowdrop.samples.stayfit.dao.hibernate.initializer;
 
+import org.hibernate.Query;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.jboss.snowdrop.samples.sportsclub.domain.entity.*;
@@ -42,6 +43,11 @@
          {
             Session session = sessionFactory.getCurrentSession();
 
+            Query query = session.createQuery("select count(m) from Membership m");
+
+            if (((Long) query.uniqueResult()) > 0 )
+               return null;
+
             Membership silverMembership = createMembership("SILVER", "600.0");
             save(session, silverMembership);
             Membership goldMembership = createMembership("GOLD", "900.0");
@@ -60,8 +66,18 @@
 
             person = createPerson("Havelock", "Vetinari", "1 Bloor", "Toronto", "Ontario", "Canada");
             save(session, person);
+            save(session, createAccount(platinumMembership, BillingType.BIWEEKLY, person));
+
+            person = createPerson("Nobby", "Nobbs", "1 Dufferin", "Toronto", "Ontario", "Canada");
+            save(session, person);
             save(session, createAccount(goldMembership, BillingType.BIWEEKLY, person));
 
+            person = createPerson("Carrot", "Ironfoundersson", "1 King", "Toronto", "Ontario", "Canada");
+            save(session, person);
+            save(session, createAccount(platinumMembership, BillingType.BIWEEKLY, person));
+
+
+
             return null;
          }
       });

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-ejb/src/main/java/org/jboss/snowdrop/samples/sportsclub/ejb/SubscriptionService.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-ejb/src/main/java/org/jboss/snowdrop/samples/sportsclub/ejb/SubscriptionService.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-ejb/src/main/java/org/jboss/snowdrop/samples/sportsclub/ejb/SubscriptionService.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -12,7 +12,9 @@
 @Local
 public interface SubscriptionService
 {
-   List<Account> findAccountsBySubscriberName(String name);
+   Account createAccountForPerson(Person person);
 
-   Account createAccountForPerson(Person person);
+   int countAccountsBySubscriberName(String name);
+
+   List<Account> findAccountsBySubscriberName(String name, int minIndex, int maxIndex);
 }

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-ejb/src/main/java/org/jboss/snowdrop/samples/sportsclub/ejb/SubscriptionServiceImpl.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-ejb/src/main/java/org/jboss/snowdrop/samples/sportsclub/ejb/SubscriptionServiceImpl.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-ejb/src/main/java/org/jboss/snowdrop/samples/sportsclub/ejb/SubscriptionServiceImpl.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -10,6 +10,9 @@
 import org.jboss.snowdrop.samples.sportsclub.domain.entity.Person;
 import org.jboss.snowdrop.samples.sportsclub.domain.repository.AccountRepository;
 import org.jboss.snowdrop.samples.sportsclub.domain.repository.PersonRepository;
+import org.jboss.snowdrop.samples.sportsclub.domain.repository.criteria.AccountSearchCriteria;
+import org.jboss.snowdrop.samples.sportsclub.domain.repository.criteria.PersonSearchCriteria;
+import org.jboss.snowdrop.samples.sportsclub.domain.repository.criteria.Range;
 import org.jboss.snowdrop.samples.sportsclub.ejb.SubscriptionService;
 import org.jboss.spring.callback.SpringLifecycleInterceptor;
 
@@ -27,11 +30,25 @@
    @Spring(bean = "personRepository", jndiName = "SpringDao")
    private PersonRepository personRepository;
 
-   public List<Account> findAccountsBySubscriberName(String name)
+   public List<Account> findAccountsBySubscriberName(String name, int minIndex, int maxIndex)
    {
-      return accountRepository.findByPersonName(name);
+      PersonSearchCriteria personSearchCriteria = new PersonSearchCriteria();
+      personSearchCriteria.setName(name);
+      AccountSearchCriteria accountSearchCriteria = new AccountSearchCriteria();
+      accountSearchCriteria.setPersonSearchCriteria(personSearchCriteria);
+      accountSearchCriteria.setRange(new Range(minIndex, maxIndex));
+      return accountRepository.findByCriteria(accountSearchCriteria);
    }
 
+   public int countAccountsBySubscriberName(String name)
+   {
+      PersonSearchCriteria personSearchCriteria = new PersonSearchCriteria();
+      personSearchCriteria.setName(name);
+      AccountSearchCriteria accountSearchCriteria = new AccountSearchCriteria();
+      accountSearchCriteria.setPersonSearchCriteria(personSearchCriteria);
+      return accountRepository.countByCriteria(accountSearchCriteria);
+   }
+
    public Account createAccountForPerson(Person person)
    {
       Account account = new Account();

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/java/org/jboss/snowdrop/samples/sportsclub/jsf/beans/AccountSearch.java
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/java/org/jboss/snowdrop/samples/sportsclub/jsf/beans/AccountSearch.java	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/java/org/jboss/snowdrop/samples/sportsclub/jsf/beans/AccountSearch.java	2009-11-27 07:36:03 UTC (rev 97071)
@@ -1,16 +1,24 @@
 package org.jboss.snowdrop.samples.sportsclub.jsf.beans;
 
+import org.ajax4jsf.model.DataVisitor;
+import org.ajax4jsf.model.ExtendedDataModel;
+import org.ajax4jsf.model.Range;
+import org.ajax4jsf.model.SequenceRange;
 import org.jboss.snowdrop.samples.sportsclub.domain.entity.Account;
 import org.jboss.snowdrop.samples.sportsclub.ejb.SubscriptionService;
 
 import javax.ejb.EJB;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
  */
-public class AccountSearch
+public class AccountSearch extends ExtendedDataModel
 {
    @EJB
    private SubscriptionService subscriptionService;
@@ -19,6 +27,13 @@
 
    private List<Account> accounts = Collections.<Account>emptyList();
 
+   private int currentPage;
+   private int currentRow;
+   private Long currentId;
+
+   private Map<Long, Account> accountsMap = new HashMap<Long, Account>();
+   private Integer rowCount;
+
    public String getName()
    {
       return name;
@@ -31,15 +46,116 @@
 
    public String searchAccounts()
    {
-      accounts = subscriptionService.findAccountsBySubscriberName(name);
+//      List<Account> list = subscriptionService.findAccountsBySubscriberName(name);
+//      accountsMap = new HashMap<Long, Account>();
+//      for (Account row : list)
+//      {
+//         Long id = row.getId();
+//         accountsMap.put(id, row);
+//      }
+      rowCount = subscriptionService.countAccountsBySubscriberName(name);
       return "success";
    }
 
    public List<Account> getAccounts()
    {
-
       return accounts;
+   }
 
+   public int getCurrentPage()
+   {
+      return currentPage;
    }
-   
+
+   public void setCurrentPage(int currentPage)
+   {
+      this.currentPage = currentPage;
+   }
+
+   @Override
+   public Object getRowKey()
+   {
+      return currentId;
+   }
+
+   @Override
+   public void setRowKey(Object key)
+   {
+      if (key != null)
+         currentId = (Long) key;
+   }
+
+   @Override
+   public boolean isRowAvailable()
+   {
+      if (currentId == null)
+         return false;
+      if (accountsMap.containsKey(currentId))
+         return true;
+      return false;
+   }
+
+   @Override
+   public int getRowCount()
+   {
+      if (rowCount == null)
+      {
+         rowCount = subscriptionService.countAccountsBySubscriberName(name);
+      }
+      else
+      {
+         return rowCount;
+      }
+      return rowCount;
+   }
+
+   public boolean isSearchInfoAvailable()
+   {
+      return name != null;
+   }
+
+   @Override
+   public Object getRowData()
+   {
+      return accountsMap.get(currentId);
+   }
+
+   @Override
+   public void walk(FacesContext context, DataVisitor visitor, Range range, Object argument) throws IOException
+   {
+      int firstResult = ((SequenceRange) range).getFirstRow();
+      int maxResults = ((SequenceRange) range).getRows();
+      List<Account> list = subscriptionService.findAccountsBySubscriberName(name, firstResult, maxResults);
+      accountsMap = new HashMap<Long, Account>();
+      for (Account row : list)
+      {
+         Long id = row.getId();
+         accountsMap.put(id, row);
+         visitor.process(context, id, argument);
+      }
+   }
+
+   @Override
+   public int getRowIndex()
+   {
+      return currentRow;
+   }
+
+   @Override
+   public void setRowIndex(int rowIndex)
+   {
+      this.currentRow = rowIndex;
+   }
+
+   @Override
+   public Object getWrappedData()
+   {
+      throw new UnsupportedOperationException("Not supported");
+   }
+
+   @Override
+   public void setWrappedData(Object data)
+   {
+      throw new UnsupportedOperationException("Not supported");
+   }
 }

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/WEB-INF/faces-config.xml	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/WEB-INF/faces-config.xml	2009-11-27 07:36:03 UTC (rev 97071)
@@ -8,7 +8,7 @@
         <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
     </application>
     <managed-bean>
-        <managed-bean-name>accountManager</managed-bean-name>
+        <managed-bean-name>accountSearch</managed-bean-name>
         <managed-bean-class>org.jboss.snowdrop.samples.sportsclub.jsf.beans.AccountSearch</managed-bean-class>
         <managed-bean-scope>session</managed-bean-scope>
     </managed-bean>
@@ -17,13 +17,13 @@
         <managed-bean-class>org.jboss.snowdrop.samples.sportsclub.jsf.beans.AccountCreate</managed-bean-class>
         <managed-bean-scope>request</managed-bean-scope>
     </managed-bean>
+    <!--<navigation-rule>-->
+        <!--<from-view-id>/searchForm.xhtml</from-view-id>-->
+        <!--<navigation-case>-->
+            <!--<to-view-id>/searchResult.xhtml</to-view-id>-->
+        <!--</navigation-case>-->
+    <!--</navigation-rule>-->
     <navigation-rule>
-        <from-view-id>/searchForm.xhtml</from-view-id>
-        <navigation-case>
-            <to-view-id>/searchResult.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-    <navigation-rule>
         <from-view-id>/createForm.xhtml</from-view-id>
         <navigation-case>
             <to-view-id>/createResult.xhtml</to-view-id>

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/WEB-INF/web.xml
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/WEB-INF/web.xml	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/WEB-INF/web.xml	2009-11-27 07:36:03 UTC (rev 97071)
@@ -43,6 +43,19 @@
         <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
         <load-on-startup>1</load-on-startup>
     </servlet>
+
+    <filter>
+        <display-name>Ajax4jsf Filter</display-name>
+        <filter-name>ajax4jsf</filter-name>
+        <filter-class>org.ajax4jsf.Filter</filter-class>
+    </filter>
+    <filter-mapping>
+        <filter-name>ajax4jsf</filter-name>
+        <servlet-name>Faces Servlet</servlet-name>
+        <dispatcher>REQUEST</dispatcher>
+        <dispatcher>FORWARD</dispatcher>
+        <dispatcher>INCLUDE</dispatcher>
+    </filter-mapping>
     
     <servlet-mapping>
         <servlet-name>Faces Servlet</servlet-name>
@@ -52,5 +65,13 @@
         <servlet-name>Faces Servlet</servlet-name>
         <url-pattern>*.jsf</url-pattern>
     </servlet-mapping>
-    
+    <servlet-mapping>
+        <servlet-name>Faces Servlet</servlet-name>
+        <url-pattern>*.xhtml</url-pattern>
+    </servlet-mapping>
+
+
+    <welcome-file-list>
+        <welcome-file>index.xhtml</welcome-file>
+    </welcome-file-list>
 </web-app>

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/index.xhtml
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/index.xhtml	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/index.xhtml	2009-11-27 07:36:03 UTC (rev 97071)
@@ -7,6 +7,7 @@
 	template="layout/template.xhtml">
 	<ui:define name="content">
         <h:outputLink value="searchForm.jsf"><h:outputText value="Search"/></h:outputLink>
+        <rich:separator/> 
         <h:outputLink value="createForm.jsf"><h:outputText value="Create"/></h:outputLink> 
 	</ui:define>
 </ui:composition>
\ No newline at end of file

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/searchForm.xhtml
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/searchForm.xhtml	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/searchForm.xhtml	2009-11-27 07:36:03 UTC (rev 97071)
@@ -6,13 +6,56 @@
                 xmlns:a4j="http://richfaces.org/a4j"
                 template="layout/template.xhtml">
     <ui:define name="content">
+
+
         <rich:panel>
-            
-                <h:form>
-                    <h:inputText value="#{accountManager.name}" label="Search name"/>
-                    <h:commandButton action="#{accountManager.searchAccounts}"/>
-                </h:form>
+            <f:facet name="header">Search for an account</f:facet>
+            <h:form>
+                <h:inputText value="#{accountSearch.name}" label="Search name"/>
+                <a4j:commandButton value="Search" action="#{accountSearch.searchAccounts}"
+                                   reRender="searchResults"/>
+            </h:form>
+        </rich:panel>
 
-        </rich:panel>
+
+        <a4j:outputPanel id="searchResults">
+            <h:form>
+                <rich:panel header="Search results" rendered="#{accountSearch.searchInfoAvailable}">
+
+                    <rich:dataTable id="searchResultsTable" value="#{accountSearch}" var="account" rows="2">
+                        <rich:column>
+                            <f:facet name="header">
+                                <h:outputText value="First Name"/>
+                            </f:facet>
+                            <h:outputText value="#{account.subscriber.name.firstName}"/>
+                        </rich:column>
+                        <rich:column>
+                            <f:facet name="header">
+                                <h:outputText value="Last Name"/>
+                            </f:facet>
+                            <h:outputText value="#{account.subscriber.name.lastName}"/>
+                        </rich:column>
+                        <rich:column>
+                            <f:facet name="header">
+                                <h:outputText value="City"/>
+                            </f:facet>
+                            <h:outputText value="#{account.subscriber.address.city}"/>
+                        </rich:column>
+                        <rich:column>
+                            <f:facet name="header">
+                                <h:outputText value="Membership"/>
+                            </f:facet>
+                            <h:outputText value="#{account.membership.code}"/>
+                        </rich:column>
+                        <f:facet name="footer">
+                            <rich:datascroller id="sc2" for="searchResultsTable" maxPages="5"
+                                               page="#{accountSearch.currentPage}"/>
+                        </f:facet>
+                    </rich:dataTable>
+                </rich:panel>
+            </h:form>
+        </a4j:outputPanel>
+
+
     </ui:define>
 </ui:composition>
\ No newline at end of file

Modified: projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/searchResult.xhtml
===================================================================
--- projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/searchResult.xhtml	2009-11-27 07:33:10 UTC (rev 97070)
+++ projects/snowdrop/trunk/documentation/samples/sportsclub/sportsclub-subscriptions-web/src/main/webapp/searchResult.xhtml	2009-11-27 07:36:03 UTC (rev 97071)
@@ -6,7 +6,7 @@
 	xmlns:a4j="http://richfaces.org/a4j"
 	template="layout/template.xhtml">
 	<ui:define name="content">
-        <h:dataTable value="#{accountManager.accounts}" var="account">
+        <h:dataTable value="#{accountSearch.accounts}" var="account">
            <h:column>
             #{account.subscriber.name.firstName}
           </h:column>




More information about the jboss-cvs-commits mailing list