You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2016/02/25 15:00:20 UTC

empire-db git commit: EMPIREDB-235 make using page elments easier by providing constructor defaults

Repository: empire-db
Updated Branches:
  refs/heads/master 95a93b71c -> 5b88de4cc


EMPIREDB-235
make using page elments easier by providing constructor defaults

Project: http://git-wip-us.apache.org/repos/asf/empire-db/repo
Commit: http://git-wip-us.apache.org/repos/asf/empire-db/commit/5b88de4c
Tree: http://git-wip-us.apache.org/repos/asf/empire-db/tree/5b88de4c
Diff: http://git-wip-us.apache.org/repos/asf/empire-db/diff/5b88de4c

Branch: refs/heads/master
Commit: 5b88de4cc8d66f3ddb36146a11befc3dd49d75c3
Parents: 95a93b7
Author: Rainer Döbele <do...@apache.org>
Authored: Thu Feb 25 15:00:15 2016 +0100
Committer: Rainer Döbele <do...@apache.org>
Committed: Thu Feb 25 15:00:15 2016 +0100

----------------------------------------------------------------------
 .../websample/web/pages/EmployeeDetailPage.java |   3 +-
 .../websample/web/pages/EmployeeListPage.java   |  20 +++-
 .../jsf2/pageelements/BeanListPageElement.java  | 113 +++++++++++++------
 .../jsf2/pageelements/ListPageElement.java      |  18 +++
 .../jsf2/pageelements/RecordPageElement.java    |  20 +++-
 .../apache/empire/jsf2/pages/PageElement.java   |  43 +++++++
 6 files changed, 176 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/empire-db/blob/5b88de4c/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java
----------------------------------------------------------------------
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java
index 3a19f89..571ed64 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java
@@ -32,7 +32,6 @@ public class EmployeeDetailPage extends SamplePage
     private static final Logger               log               = LoggerFactory.getLogger(EmployeeDetailPage.class);
     private static final long                 serialVersionUID  = 1L;
 
-    private static final String               EMPLOYEE_PROPERTY = "employee";
     private String                            idParam;
 
     private RecordPageElement<EmployeeRecord> employee;
@@ -45,7 +44,7 @@ public class EmployeeDetailPage extends SamplePage
 
         SampleDB db = getDatabase();
         EmployeeRecord emplRec = new EmployeeRecord(db);
-        employee = new RecordPageElement<EmployeeRecord>(this, emplRec.getTable(), emplRec, EMPLOYEE_PROPERTY);
+        employee = new RecordPageElement<EmployeeRecord>(this, emplRec.getTable(), emplRec);
     }
 
     public String getIdParam()

http://git-wip-us.apache.org/repos/asf/empire-db/blob/5b88de4c/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeListPage.java
----------------------------------------------------------------------
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeListPage.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeListPage.java
index 9cff525..b015c4c 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeListPage.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeListPage.java
@@ -33,6 +33,7 @@ import org.apache.empire.db.DBCommand;
 import org.apache.empire.exceptions.BeanPropertyGetException;
 import org.apache.empire.jsf2.pageelements.BeanListPageElement;
 import org.apache.empire.jsf2.pageelements.ListPageElement;
+import org.apache.empire.jsf2.pageelements.ListPageElement.ParameterizedItem;
 import org.apache.empire.jsf2.websample.db.SampleDB;
 import org.apache.empire.jsf2.websample.db.SampleDB.TDepartments;
 import org.apache.empire.jsf2.websample.db.SampleDB.TEmployees;
@@ -47,11 +48,9 @@ public class EmployeeListPage extends SamplePage
     private static final Logger                    log               = LoggerFactory.getLogger(EmployeeListPage.class);
 
     
-    public static final String                     EMPLOYEES_PROPERTY = "employees";
     private BeanListPageElement<EmployeeListEntry> employees;
-
     
-    public static class EmployeeListEntry extends ListPageElement.SelectableItem
+    public static class EmployeeListEntry extends ListPageElement.SelectableItem implements ParameterizedItem
     {
         private static final long serialVersionUID = 1L;
 
@@ -63,12 +62,21 @@ public class EmployeeListPage extends SamplePage
         private boolean	 	      retired;
         private String            idParam;
 
+        /**
+         * Implements ParameterizedItem.
+         * Used to uniquely identify this entry for selection and navigation 
+         */
         @Override
         public String getIdParam()
         {
             return this.idParam;
         }
 
+        /**
+         * Implements ParameterizedItem.
+         * This will automatically set the item idParam for navigation 
+         */
+        @Override
         public void setIdParam(String idParam)
         {
             this.idParam = idParam;
@@ -138,9 +146,9 @@ public class EmployeeListPage extends SamplePage
     {
         EmployeeListPage.log.trace("EmployeeListPage created");
         TEmployees EMP = getDatabase().T_EMPLOYEES;
-        
-        DBColumn defSortColumn = EMP.EMPLOYEE_ID;
-        employees = new BeanListPageElement<EmployeeListEntry>(this, EmployeeListEntry.class, defSortColumn, EmployeeListPage.EMPLOYEES_PROPERTY);
+
+        // create the Employees List page element
+        employees = new BeanListPageElement<EmployeeListEntry>(this, EmployeeListEntry.class, EMP.EMPLOYEE_ID);
     }
 
     

http://git-wip-us.apache.org/repos/asf/empire-db/blob/5b88de4c/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
----------------------------------------------------------------------
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
index 81ceb08..0c60ab6 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
@@ -58,8 +58,6 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
     private static final long   serialVersionUID     = 1L;
 
     private static final Logger log                  = LoggerFactory.getLogger(BeanListPageElement.class);
-
-    public static final String  IDPARAM_PROPERTY     = "idParam";
     
     public static final String  NO_RESULT_ATTRIBUTE  = "noQueryResult";
 
@@ -95,22 +93,67 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
         }
     }
 
-    public BeanListPageElement(Page page, Class<T> beanClass, DBColumn defaultSortColumn, String propertyName)
+    /**
+     * Constructor for creating a BeanListPageElement
+     * @param page the page element
+     * @param beanClass the bean class
+     * @param rowset required Table or View
+     * @param defaultSortColumn sort column that must belong to rowset
+     * @param propertyName the property name which is used to get and retrieve session information
+     */
+    public BeanListPageElement(Page page, Class<T> beanClass, DBRowSet rowset, DBColumn defaultSortColumn, String propertyName)
     {
         super(page, beanClass, propertyName);
         // Check
-        if (defaultSortColumn == null)
-            throw new InvalidArgumentException("defaultSortColumn", defaultSortColumn);
-        // Set Bean Class and more
-        this.rowset = defaultSortColumn.getRowSet();
-        this.defaultSortColumn = defaultSortColumn;
+        if (rowset == null)
+            throw new InvalidArgumentException("rowset", rowset);
         // Default Sort Order
-        if (defaultSortColumn.getDataType() == DataType.DATE || defaultSortColumn.getDataType() == DataType.DATETIME)
-        { // Date sort order is descending by default
-            defaultSortAscending = false;
+        if (defaultSortColumn!=null)
+        {   // Date sort order is descending by default
+            if (defaultSortColumn.getRowSet()!=rowset)
+                throw new InvalidArgumentException("defaultSortColumn", defaultSortColumn);
+            if (defaultSortColumn.getDataType() == DataType.DATE || defaultSortColumn.getDataType() == DataType.DATETIME)
+                defaultSortAscending = false;
         }
+        // Set Bean Class and more
+        this.rowset = rowset;
+        this.defaultSortColumn = defaultSortColumn;
+    }
+
+    /**
+     * Overload that requires a default sort order to be provided
+     * @param page the page element
+     * @param beanClass the bean class
+     * @param defaultSortColumn
+     * @param propertyName the property name which is used to get and retrieve session information
+     */
+    public BeanListPageElement(Page page, Class<T> beanClass, DBColumn defaultSortColumn, String propertyName)
+    {
+        this(page, beanClass, defaultSortColumn.getRowSet(), defaultSortColumn, propertyName);
     }
 
+    /**
+     * Overload that requires a default sort order to be provided
+     * @param page the page element
+     * @param beanClass the bean class
+     * @param defaultSortColumn
+     */
+    public BeanListPageElement(Page page, Class<T> beanClass, DBColumn defaultSortColumn)
+    {
+        this(page, beanClass, defaultSortColumn.getRowSet(), defaultSortColumn, getDefaultPropertyName(defaultSortColumn.getRowSet()));
+    }
+
+    /**
+     * Overload that requires a default sort order to be provided
+     * @param page the page element
+     * @param beanClass the bean class
+     * @param rowset required Table or View
+     */
+    public BeanListPageElement(Page page, Class<T> beanClass, DBRowSet rowSet)
+    {
+        this(page, beanClass, rowSet, null, getDefaultPropertyName(rowSet));
+    }
+    
     @Override
     protected void onInitPage()
     {
@@ -175,7 +218,7 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
         if ((listTableInfo == null) && (listTableInfo = getSessionObject(ListTableInfo.class)) == null)
         { // Create and put on session
             listTableInfo = new BeanListTableInfo();
-            listTableInfo.setSortColumnName(defaultSortColumn.getName());
+            listTableInfo.setSortColumnName((defaultSortColumn!=null ? defaultSortColumn.getName() : null));
             listTableInfo.setSortAscending(defaultSortAscending);
             setSessionObject(ListTableInfo.class, listTableInfo);
         }
@@ -226,12 +269,20 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
         // log
         int count = getTableInfo().getItemCount();
         if (count==0)
-            FacesUtils.setRequestAttribute(FacesUtils.getContext(), NO_RESULT_ATTRIBUTE, true);
+            handleNoResult();
         // log
         log.info("ItemList initialized for {} item count is {}.", getPropertyName(), count);
     }
 
     /**
+     * handle the case of an empty query result
+     */
+    protected void handleNoResult()
+    {
+        FacesUtils.setRequestAttribute(FacesUtils.getContext(), NO_RESULT_ATTRIBUTE, true);
+    }
+
+    /**
      * Init list items without pagination
      * 
      * @param queryCmd
@@ -390,7 +441,8 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
         {
             log.error("Invalid Sort Column {}. Using Default!", sortColumnName);
             sortColumn = (DBColumn) getDefaultSortColumn();
-            getTableInfo().setSortColumnName(sortColumn.getName());
+            if (sortColumn!=null)
+                getTableInfo().setSortColumnName(sortColumn.getName());
         }
         // set Order
         setOrderBy(cmd, sortColumn, sortAscending);
@@ -398,14 +450,16 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
 
     protected void setOrderBy(DBCommand cmd, DBColumnExpr sortColumn, boolean sortAscending)
     {
-        // Sort now
-        if (sortAscending)
-        {
-            cmd.orderBy(sortColumn);
-        }
-        else
-        {
-            cmd.orderBy(sortColumn.desc());
+        if (sortColumn!=null)
+        {   // Sort now
+            if (sortAscending)
+            {
+                cmd.orderBy(sortColumn);
+            }
+            else
+            {
+                cmd.orderBy(sortColumn.desc());
+            }
         }
         // Secondary sort
         if (this.secondarySortOrder != null && !secondarySortOrder.getColumn().equals(sortColumn))
@@ -524,21 +578,16 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
     {
         DBColumn[] keyCols = rowset.getKeyColumns();
         if (keyCols == null)
-            throw new NoPrimaryKeyException(rowset);
+            return; // No Primary Key!
         // generate all
         for (Object item : items)
         {
+            if (!(item instanceof ParameterizedItem))
+                continue;
+            // set the idParam
             Object[] key = getItemKey(keyCols, item);
             String idparam = getParameterMap().put(rowset, key);
-            try
-            {
-                BeanUtils.setProperty(item, IDPARAM_PROPERTY, idparam);
-            }
-            catch (Exception e)
-            {
-                log.error("Error setting property idparam on bean.", e);
-                throw new InternalException(e);
-            }
+            ((ParameterizedItem)item).setIdParam(idparam);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/empire-db/blob/5b88de4c/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/ListPageElement.java
----------------------------------------------------------------------
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/ListPageElement.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/ListPageElement.java
index 9b644c4..a751a87 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/ListPageElement.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/ListPageElement.java
@@ -117,6 +117,20 @@ public abstract class ListPageElement<T> extends PageElement
         }
     }
 
+    /**
+     * Interface to uniquely identify a list item
+     * This will be used for selection and navigation 
+     */
+    public static interface ParameterizedItem {
+
+        public String getIdParam();
+        
+        public void setIdParam(String idParam);
+    }
+    
+    /**
+     * Abstract superclass to make a list item selectable
+     */
     public static abstract class SelectableItem implements Serializable
     {
         private static final long serialVersionUID = 1L;
@@ -151,6 +165,10 @@ public abstract class ListPageElement<T> extends PageElement
 
     }
 
+    /**
+     * This class holds information about the list view to display.
+     * This will be held on the session in order to maintain position and sorting when navigating back and forth. 
+     */
     public static class ListTableInfo implements Serializable
     {
         private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/empire-db/blob/5b88de4c/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java
----------------------------------------------------------------------
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java
index e2b519e..e0f0ba3 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java
@@ -44,15 +44,33 @@ public class RecordPageElement<T extends DBRecord> extends PageElement
 
     protected T record;
     
+    /**
+     * Creates a record page element for the given Table or View
+     * @param page the page element
+     * @param rowset Table or View
+     * @param record the record object for this page element
+     * @param propertyName the property name which is used to get and retrieve session information
+     */
     public RecordPageElement(Page page, DBRowSet rowset, T record, String propertyName)
     {
         super(page, propertyName);
         // Set Rowset and Record
         this.rowset = rowset;
         this.record = record;
-        
+        // log
         log.debug("RecordPageSupport for {} created.", rowset.getName());
     }
+
+    /**
+     * Creates a record page element for the given Table or View
+     * @param page the page element
+     * @param rowset Table or View
+     * @param record the record object for this page element
+     */
+    public RecordPageElement(Page page, DBRowSet rowset, T record)
+    {
+        this(page, rowset, record, getDefaultPropertyName(rowset));
+    }
     
     public T getRecord()
     {

http://git-wip-us.apache.org/repos/asf/empire-db/blob/5b88de4c/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageElement.java
----------------------------------------------------------------------
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageElement.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageElement.java
index a78bd8c..e5c1147 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageElement.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageElement.java
@@ -27,6 +27,7 @@ import javax.faces.context.FacesContext;
 import org.apache.empire.commons.StringUtils;
 import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBObject;
+import org.apache.empire.db.DBRowSet;
 import org.apache.empire.exceptions.InvalidArgumentException;
 
 
@@ -113,6 +114,48 @@ public class PageElement implements Serializable
     }
     
     /**
+     * generates a default property name for the bean list
+     * @param rowset
+     * @return a propertyName
+     */
+    protected static String getDefaultPropertyName(DBRowSet rowset)
+    {
+        String name = rowset.getName();
+        if (name==null)
+            return "unknown"; // no name provided!
+        // compute name
+        name = name.toLowerCase();        
+        String res = "";
+        int beg=0;
+        while (beg<name.length())
+        {
+            int end = name.indexOf('_', beg);
+            if (end<0)
+                end = name.length();
+            // assemble
+            if (end>beg)
+            {
+                if (beg==0)
+                {   // begin with all lower cases
+                    res = name.substring(beg, end);
+                }
+                else
+                {   // add word where first letter is upper case 
+                    res += name.substring(beg, beg+1).toUpperCase();
+                    if (end-beg>1)
+                    {
+                        res += name.substring(beg+1, end);
+                    }
+                }
+            }
+            // next
+            beg = end + 1;
+        }
+        // Result
+        return res;
+    }
+    
+    /**
      * Javascript Call
      * 
      * @param function