[richfaces-svn-commits] JBoss Rich Faces SVN: r459 - in trunk/richfaces/datascroller/src: main/java/org/richfaces/event and 3 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Thu Apr 19 14:10:20 EDT 2007


Author: nbelaevski
Date: 2007-04-19 14:10:20 -0400 (Thu, 19 Apr 2007)
New Revision: 459

Removed:
   trunk/richfaces/datascroller/src/main/java/org/richfaces/event/DataScrollerAdapter.java
Modified:
   trunk/richfaces/datascroller/src/main/java/org/richfaces/component/UIDatascroller.java
   trunk/richfaces/datascroller/src/main/java/org/richfaces/event/DataScrollerEvent.java
   trunk/richfaces/datascroller/src/main/java/org/richfaces/renderkit/html/DataScrollerRenderer.java
   trunk/richfaces/datascroller/src/test/java/org/richfaces/component/DatascrollerComponentTest.java
   trunk/richfaces/datascroller/src/test/java/org/richfaces/event/DataScrollerEventTest.java
Log:
DataScroller code aligned and optimized. ActionListener support added

Modified: trunk/richfaces/datascroller/src/main/java/org/richfaces/component/UIDatascroller.java
===================================================================
--- trunk/richfaces/datascroller/src/main/java/org/richfaces/component/UIDatascroller.java	2007-04-19 18:01:31 UTC (rev 458)
+++ trunk/richfaces/datascroller/src/main/java/org/richfaces/component/UIDatascroller.java	2007-04-19 18:10:20 UTC (rev 459)
@@ -21,27 +21,23 @@
 
 package org.richfaces.component;
 
-import org.ajax4jsf.framework.ajax.AjaxComponent;
-import org.ajax4jsf.framework.ajax.AjaxSource;
-import org.richfaces.event.DataScrollerAdapter;
-import org.richfaces.event.DataScrollerEvent;
-import org.richfaces.event.DataScrollerListener;
-import org.richfaces.event.DataScrollerSource;
-
 import javax.faces.FacesException;
 import javax.faces.component.ActionSource;
-
-import javax.faces.component.UIComponent;
 import javax.faces.component.UICommand;
-import javax.faces.component.UIComponentBase;
+import javax.faces.component.UIComponent;
 import javax.faces.component.UIData;
 import javax.faces.context.FacesContext;
 import javax.faces.el.MethodBinding;
 import javax.faces.event.AbortProcessingException;
 import javax.faces.event.FacesEvent;
-import javax.faces.event.ActionListener;
+import javax.faces.event.PhaseId;
 
+import org.ajax4jsf.framework.renderer.AjaxRendererUtils;
+import org.richfaces.event.DataScrollerEvent;
+import org.richfaces.event.DataScrollerListener;
+import org.richfaces.event.DataScrollerSource;
 
+
 /**
  * JSF component class
  */
@@ -65,9 +61,6 @@
 
     public static final String FAST_REWIND_FACET_NAME = "fastrewind";
 
-    private transient UIData _UIData;
-    private transient boolean allowCache;
-
     public void addScrollerListener(DataScrollerListener listener) {
         addFacesListener(listener);
     }
@@ -83,10 +76,16 @@
     public void broadcast(FacesEvent event) throws AbortProcessingException {
         super.broadcast(event);
         if (event instanceof DataScrollerEvent) {
+        	DataScrollerEvent dataScrollerEvent = (DataScrollerEvent) event;
+        	setPage(dataScrollerEvent.getNewScrolVal());
 
-            if (getScrollerListeners().length < 1) {
-                addScrollerListener(new DataScrollerAdapter(getScrollerListener()));
-                event.queue();
+        	FacesContext context = FacesContext.getCurrentInstance();
+            AjaxRendererUtils.addRegionByName(context, this, this.getId());
+            AjaxRendererUtils.addRegionByName(context, this, this.getFor());
+        	
+            MethodBinding scrollerListener = getScrollerListener();
+            if (scrollerListener != null) {
+            	scrollerListener.invoke(context, new Object[] {event});
             }
         }
     }
@@ -147,76 +146,12 @@
 
     public abstract void setStyle(String styleClass);
 
-    public abstract String getHandleValue();
-
-    public abstract void setHandleValue(String handleValue);
-
-    //TODO nick -> alex - it's better not to cache reference here - the component can be encoded
-    //with different "for" values. we can cache it, but than we should set it on phase start and
-    //reset it to null on phase end:
-    //public processUpdates(...) {
-    //	try { allowCache = true; ... } finally { allowCache = false; _UIData = null; }
-    //}
-
-    public void processUpdates(FacesContext context) {
-        try {
-
-        } catch (RuntimeException e) {
-            context.renderResponse();
-            throw e;
-        } finally {
-            allowCache = false;
-            _UIData = null;
-        }
-    }
-
-    public void processValidators(FacesContext context) {
-        try {
-
-        } catch (RuntimeException e) {
-            context.renderResponse();
-            throw e;
-        } finally {
-            allowCache = false;
-            _UIData = null;
-        }
-    }
-
-    public void processDecodes(FacesContext context) {
-        try {
-            decode(context);
-
-        } catch (RuntimeException e) {
-            context.renderResponse();
-            throw e;
-        } finally {
-            allowCache = false;
-            _UIData = null;
-        }
-    }
-
-//	private UIData getUIData() {
-//		if (_UIData == null) {
-//			_UIData = getDataTable();
-//		}
-//		return _UIData;
-//	}
-
-    private UIData getUIData() {
-        if (!allowCache) {
-            _UIData = getDataTable();
-            allowCache = true;
-        }
-        return _UIData;
-    }
-
-
     /**
      * Finds the dataTable which id is mapped to the "for" property
      *
      * @return the dataTable component
      */
-    protected UIData getDataTable() {
+    public UIData getDataTable() {
         String forAttribute = getFor();
         UIComponent forComp;
         if (forAttribute == null) {
@@ -242,15 +177,9 @@
         return (UIData) forComp;
     }
 
-    /**
-     * Gets the index of the current page
-     *
-     * @return the page index
-     */
-    public int getPageIndex() {
-        UIData uiData = getUIData();
+    public int getPageIndex(UIData uiData) {
         //xxxx nick -> alex - suppose this.getRows() would be better here
-        int rows = getRows();
+        int rows = getRows(uiData);
         if (0 == rows) {
             throw new FacesException("Missing 'rows' attribute on component '"
                     + uiData.getId() + "'");
@@ -259,16 +188,26 @@
         int pageIndex;
         if (rows > 0) {
             //xxxx nick -> alex - suppose this.getFirst() would be better here
-            pageIndex = getFirstRow() / rows + 1;
+            pageIndex = getFirstRow(uiData) / rows + 1;
         } else {
             //TODO nick -> nick - is it valid if under 0?
             pageIndex = 0;
         }
-        if (getFirstRow() % rows > 0) {
+        if (getFirstRow(uiData) % rows > 0) {
             pageIndex++;
         }
         return pageIndex;
     }
+    
+    /**
+     * Gets the index of the current page
+     *
+     * @return the page index
+     */
+    public int getPageIndex() {
+        UIData uiData = getDataTable();
+        return getPageIndex(uiData);
+    }
 
     /**
      * Sets the page number according to the parameter recived from the
@@ -278,18 +217,18 @@
      */
     public void setPage(String facetName) {
 
-        UIData dataTable = getUIData();
+        UIData dataTable = getDataTable();
 
         // check if facet is selected
         if (FIRST_FACET_NAME.equals(facetName)) {
             dataTable.setFirst(0);
         } else if (PREVIOUS_FACET_NAME.equals(facetName)) {
-            int previous = dataTable.getFirst() - getRows();
+            int previous = dataTable.getFirst() - getRows(dataTable);
             if (previous >= 0) dataTable.setFirst(previous);
         } else if (NEXT_FACET_NAME.equals(facetName)) {
-            int rows = getRows();
+            int rows = getRows(dataTable);
             int next = dataTable.getFirst() + rows;
-            if (next < getRowCount()) dataTable.setFirst(next);
+            if (next < getRowCount(dataTable)) dataTable.setFirst(next);
             //if (rows>0){
             //	 if (((next+rows)/rows)>getMaxPages()){
             //		next=getMaxPages()*rows-rows;;
@@ -297,10 +236,10 @@
             //}
         } else if (FAST_FORWARD_FACET_NAME.equals(facetName)) {
             int fastStep = getFastStep();
-            int rows = getRows();
+            int rows = getRows(dataTable);
             if (fastStep <= 0) fastStep = 1;
             int next = dataTable.getFirst() + rows * fastStep;
-            int rowcount = getRowCount();
+            int rowcount = getRowCount(dataTable);
             if (next >= rowcount)
                 next = (rowcount - 1) - ((rowcount - 1) % rows);
             //if (rows>0){
@@ -312,12 +251,12 @@
         } else if (FAST_REWIND_FACET_NAME.equals(facetName)) {
             int fastStep = getFastStep();
             if (fastStep <= 0) fastStep = 1;
-            int previous = dataTable.getFirst() - getRows() * fastStep;
+            int previous = dataTable.getFirst() - getRows(dataTable) * fastStep;
             if (previous < 0) previous = 0;
             dataTable.setFirst(previous);
         } else if (LAST_FACET_NAME.equals(facetName)) {
-            int rowcount = getRowCount();
-            int rows = getRows();
+            int rowcount = getRowCount(dataTable);
+            int rows = getRows(dataTable);
             int delta = rowcount % rows;
             int first = delta > 0 && delta < rows ? rowcount - delta : rowcount
                     - rows;
@@ -335,13 +274,13 @@
         // the paginator is selected
         else {
             int pageindex = Integer.parseInt(facetName);
-            int pageCount = getPageCount();
+            int pageCount = getPageCount(dataTable);
             if (pageindex > pageCount) {
                 pageindex = pageCount;
             } else if (pageindex <= 0) {
                 pageindex = 1;
             }
-            dataTable.setFirst(getRows() * (pageindex - 1));
+            dataTable.setFirst(getRows(dataTable) * (pageindex - 1));
         }
 
     }
@@ -352,8 +291,8 @@
      * @param page number
      */
     public void setPageIndex(int page) {
-        UIData uiData = getUIData();
-        int rows = getRows();
+        UIData uiData = getDataTable();
+        int rows = getRows(uiData);
         if (0 == rows) {
             throw new FacesException("Missing 'rows' attribute on component '"
                     + uiData.getId() + "'");
@@ -363,16 +302,13 @@
         }
     }
 
-    /**
-     * @return the page count of the uidata
-     */
-    public int getPageCount() {
-        //UIData uiData = getUIData();
-        int rows = getRows();
+    public int getPageCount(UIData data) {
+        int rows = getRows(data);
         int pageCount;
         if (rows > 0) {
-            pageCount = rows <= 0 ? 1 : getRowCount() / rows;
-            if (getRowCount() % rows > 0) {
+        	int rowCount = getRowCount(data);
+            pageCount = rows <= 0 ? 1 : rowCount / rows;
+            if (rowCount % rows > 0) {
                 pageCount++;
             }
             if (pageCount == 0) {
@@ -384,7 +320,23 @@
         }
         return pageCount;
     }
+    
+    /**
+     * @return the page count of the uidata
+     */
+    public int getPageCount() {
+        return getPageCount(getDataTable());
+    }
 
+    public int getRowCount(UIData data) {
+        int rowCount = data.getRowCount();
+        if (rowCount >= 0) { 
+        	return rowCount;
+        }
+    	
+    	return BinarySearch.search(data);
+    }
+    
     /**
      * @return int
      */
@@ -395,21 +347,25 @@
         // setPage() { setRowIndex(pageIdx * rows); }
         // isPageAvailable() { return isRowAvailable() }
         //return getUIData().getRowCount();
-        return new BinarySearch().search(getUIData());
+    	return getRowCount(getDataTable());
     }
 
-    /**
-     * @return int
-     */
-    public int getRows() {
+    public int getRows(UIData data) {
         int row = 0;
-        row = getUIData().getRows();
+        row = data.getRows();
         if (row == 0) {
-            row = getRowCount();
+            row = getRowCount(data);
         }
 
         return row;
     }
+    
+    /**
+     * @return int
+     */
+    public int getRows() {
+    	return getRows(getDataTable());
+    }
 
     // facet getter methods
     public UIComponent getFirst() {
@@ -436,15 +392,19 @@
         return getFacet(PREVIOUS_FACET_NAME);
     }
 
+    public int getFirstRow(UIData data) {
+    	return data.getFirst();
+    }
+    
     /**
      * @return int
      */
     public int getFirstRow() {
-        return getUIData().getFirst();
+        return getFirstRow(getDataTable());
     }
 
     public void setFirstRow(int rows) {
-        getUIData().setFirst(rows);
+    	getDataTable().setFirst(rows);
     }
 
     public String getFamily() {
@@ -452,35 +412,40 @@
     }
 
     static class BinarySearch {
-        public int search(UIData data) {
-            int n = 1;
-            int k = 2;
-            for (; ;) {
-                data.setRowIndex(k - 1);
-                if (data.isRowAvailable()) {
-                    n = k;
-                    k = k * 2;
-                } else {
-                    break;
+        public static int search(UIData data) {
+        	int rowIndex = data.getRowIndex();
+            try {
+            	int n = 1;
+                int k = 2;
+                for (; ;) {
+                    data.setRowIndex(k - 1);
+                    if (data.isRowAvailable()) {
+                        n = k;
+                        k = k * 2;
+                    } else {
+                        break;
+                    }
                 }
-            }
 
-            while (n < k) {
-                int kk = Math.round((n + k) / 2) + 1;
-                data.setRowIndex(kk - 1);
+                while (n < k) {
+                    int kk = Math.round((n + k) / 2) + 1;
+                    data.setRowIndex(kk - 1);
+                    if (data.isRowAvailable()) {
+                        n = kk;
+                    } else {
+                        k = kk - 1;
+                    }
+                }
+
+                data.setRowIndex(k - 1);
                 if (data.isRowAvailable()) {
-                    n = kk;
+                    return k;
                 } else {
-                    k = kk - 1;
+                    return 0;
                 }
+            } finally {
+                data.setRowIndex(rowIndex);
             }
-
-            data.setRowIndex(k - 1);
-            if (data.isRowAvailable()) {
-                return k;
-            } else {
-                return 0;
-            }
         }
     }
 }

Deleted: trunk/richfaces/datascroller/src/main/java/org/richfaces/event/DataScrollerAdapter.java
===================================================================
--- trunk/richfaces/datascroller/src/main/java/org/richfaces/event/DataScrollerAdapter.java	2007-04-19 18:01:31 UTC (rev 458)
+++ trunk/richfaces/datascroller/src/main/java/org/richfaces/event/DataScrollerAdapter.java	2007-04-19 18:10:20 UTC (rev 459)
@@ -1,109 +0,0 @@
-/**
- * License Agreement.
- *
- *  JBoss RichFaces 3.0 - Ajax4jsf Component Library
- *
- * Copyright (C) 2007  Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
- */
-
-package org.richfaces.event;
-
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponentBase;
-import javax.faces.el.MethodBinding;
-import javax.faces.context.FacesContext;
-
-import org.richfaces.component.UIDatascroller;
-
-
-public class DataScrollerAdapter implements DataScrollerListener, StateHolder {
-
-    public static Class[] SIGNATURE = new Class[] { DataScrollerEvent.class };
-
-    private MethodBinding scrollerMethod;
-    private boolean scrolerTransient;
-
-    /**
-    * empty constructor needed.
-    *
-    */
-    public DataScrollerAdapter() {
-    }
-
-   
-    public DataScrollerAdapter(MethodBinding myScrollerMethod) {
-    	scrollerMethod = myScrollerMethod;
-    }
-
-    /**
-    * Processes a SliderEvent.
-    *
-    * @param event  the slider event
-    */
-    public void processScroller(DataScrollerEvent event) { 
-    	FacesContext context = FacesContext.getCurrentInstance();
-    	if (scrollerMethod!=null){
-          scrollerMethod.invoke(context, new Object[]{event});
-    	}
-    	UIDatascroller scroller = ((UIDatascroller)event.getComponent());
-    	scroller.setPage(event.getNewScrolVal());
-    	scroller.setHandleValue(event.getNewScrolVal());
-    }
-
-    /**
-    * Saves the internal state of this DataFilterSliderAdapter.
-    *
-    * @param context  the Faces context
-    *
-    * @return  the saved state
-    */
-    public Object saveState(FacesContext context) {
-        return UIComponentBase.saveAttachedState(context, scrollerMethod);
-    }
-
-    /**
-    * Restores the internal state of this DataFilterSliderAdapter.
-    *
-    * @param context  the Faces context
-    * @param object   the state to restore
-    */
-    public void restoreState(FacesContext context, Object object){
-    	scrollerMethod = (MethodBinding) UIComponentBase.restoreAttachedState(context, object);
-    }
-
-    /**
-    * Returns true if this DataFilterSliderAdapter is transient and should
-    * not be state saved, otherwise false.
-    *
-    * @return  the value of transient
-    */
-    public boolean isTransient() {
-        return scrolerTransient;
-    }
-
-    /**
-    * Indicates whether or not this DataFilterSliderAdapter is transient and should
-    * not be state saved.
-    *
-    * @param isTransient  the new value for transient
-    */
-    public void setTransient(
-
-    boolean isTransient) {
-    	scrolerTransient = isTransient;
-    }
-
-}

Modified: trunk/richfaces/datascroller/src/main/java/org/richfaces/event/DataScrollerEvent.java
===================================================================
--- trunk/richfaces/datascroller/src/main/java/org/richfaces/event/DataScrollerEvent.java	2007-04-19 18:01:31 UTC (rev 458)
+++ trunk/richfaces/datascroller/src/main/java/org/richfaces/event/DataScrollerEvent.java	2007-04-19 18:10:20 UTC (rev 459)
@@ -22,16 +22,19 @@
 package org.richfaces.event;
 
 import javax.faces.component.UIComponent;
-import javax.faces.event.PhaseId;
+import javax.faces.event.ActionEvent;
 import javax.faces.event.FacesListener;
-import javax.faces.event.FacesEvent;
 
 /**
  * @author Wesley Hales
  */
-public class DataScrollerEvent extends FacesEvent {
+public class DataScrollerEvent extends ActionEvent {
 
-    private String  oldScrolVal;
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 2657353903701932561L;
+	private String  oldScrolVal;
     private String  newScrolVal;
 
     /**
@@ -43,7 +46,6 @@
     */
     public DataScrollerEvent(UIComponent component, String thisOldScrolVal, String thisNewScrolVal) {
         super(component);
-        setPhaseId(PhaseId.INVOKE_APPLICATION);
         oldScrolVal = thisOldScrolVal;
         newScrolVal = thisNewScrolVal;
     }
@@ -57,7 +59,7 @@
     }
 
     public boolean isAppropriateListener(FacesListener listener){
-        return (listener instanceof DataScrollerListener);
+        return super.isAppropriateListener(listener) || (listener instanceof DataScrollerListener);
     }
 
     /**
@@ -66,6 +68,13 @@
     * @param listener  the slider listener
     */
     public void processListener(FacesListener listener){
-        ((DataScrollerListener) listener).processScroller(this);
+        if (listener instanceof DataScrollerListener) {
+			DataScrollerListener dataScrollerListener = (DataScrollerListener) listener;
+			dataScrollerListener.processScroller(this);
+		}
+        
+        if (super.isAppropriateListener(listener)) {
+        	super.processListener(listener);
+        }
     }
 }

Modified: trunk/richfaces/datascroller/src/main/java/org/richfaces/renderkit/html/DataScrollerRenderer.java
===================================================================
--- trunk/richfaces/datascroller/src/main/java/org/richfaces/renderkit/html/DataScrollerRenderer.java	2007-04-19 18:01:31 UTC (rev 458)
+++ trunk/richfaces/datascroller/src/main/java/org/richfaces/renderkit/html/DataScrollerRenderer.java	2007-04-19 18:10:20 UTC (rev 459)
@@ -25,11 +25,13 @@
 import java.util.Map;
 
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIData;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
-import javax.faces.event.ActionEvent;
 
 import org.ajax4jsf.framework.renderer.AjaxRendererUtils;
+import org.ajax4jsf.framework.renderer.ComponentVariables;
+import org.ajax4jsf.framework.renderer.ComponentsVariableResolver;
 import org.ajax4jsf.framework.renderer.HeaderResourcesRendererBase;
 import org.ajax4jsf.framework.util.javascript.JSFunction;
 import org.richfaces.component.UIDatascroller;
@@ -47,93 +49,63 @@
 
         UIDatascroller scroller = (UIDatascroller) component;
 
-        //if ((scroller.getRowCount()-scroller.getFirstRow())<scroller.getRows() &&  scroller.getRowCount()>=scroller.getRows()){
-        //	scroller.setFirstRow(scroller.getRowCount()-scroller.getRows()+1);
-        //}
-
-        if (scroller.getHandleValue() == null) {
-            scroller.setHandleValue("1");
-        }
-
-        if (scroller.getPageCount() < Integer.parseInt(scroller.getHandleValue()))
+        UIData dataTable = scroller.getDataTable();
+        
+        ComponentVariables variables = ComponentsVariableResolver.getVariables(this, component);
+        variables.setVariable("dataTable", dataTable);
+        
+        if (!(scroller.getPageCount(dataTable) == 1) || (scroller.isRenderIfSinglePage()))
         {
-
-            scroller.setPageIndex(scroller.getPageCount() - 1);
-            scroller.setHandleValue(Integer.toString(scroller.getPageCount()));
-        } else {
-
-            scroller.setPageIndex(Integer.parseInt(scroller.getHandleValue()) - 1);
-        }
-
-
-        if (!(scroller.getPageCount() == 1) || (scroller.isRenderIfSinglePage()))
-        {
+            variables.setVariable("rendered", Boolean.TRUE);
             super.encodeBegin(context, component);
         }
     }
 
     public void encodeEnd(FacesContext context, UIComponent component)
             throws IOException {
-        UIDatascroller scroller = (UIDatascroller) component;
+        ComponentVariables variables = ComponentsVariableResolver.getVariables(this, component);
 
-        if (!(scroller.getPageCount() == 1) || (scroller.isRenderIfSinglePage()))
+        if (Boolean.TRUE.equals(variables.getVariable("rendered")))
         {
             super.encodeEnd(context, component);
         }
     }
 
-    private static final String PARAM_SUFFIX = "_parameter";
-
     public void decode(FacesContext context, UIComponent component) {
 
         String param = (String) getParamMap(context).get(
-                component.getClientId(context) + PARAM_SUFFIX);
+                component.getClientId(context));
         UIDatascroller scroller = (UIDatascroller) component;
-        if (scroller.getHandleValue() == null) {
-            scroller.setHandleValue("1");
-        }
+        
         if (param != null) {
-
-            scroller.setPage(param);
-
-            String oldScrolVal = scroller.getHandleValue();
-            String newScrolVal = Integer.toString(scroller.getPageIndex());
-            scroller.setPage(oldScrolVal);
-            if (!newScrolVal.equals(oldScrolVal)) {
-
-                DataScrollerEvent event = new DataScrollerEvent(scroller, oldScrolVal, newScrolVal);
-                event.queue();
-                ActionEvent actionEvent = new ActionEvent(scroller);
-                scroller.queueEvent(actionEvent);
-
-            	//TODO nick - ? - should be invoked in broadcast
-                AjaxRendererUtils.addRegionByName(context, component, component.getId());
-                AjaxRendererUtils.addRegionByName(context, component, scroller.getFor());
-            }
+            new DataScrollerEvent(scroller, String.valueOf(scroller.getPageIndex()), param).queue();
         }
     }
 
     public void renderPager(FacesContext context, UIComponent component) throws IOException {
-        ResponseWriter out = context.getResponseWriter();
+        ComponentVariables variables = ComponentsVariableResolver.getVariables(this, component);
+        UIData data = (UIData) variables.getVariable("dataTable");
+    	
+    	ResponseWriter out = context.getResponseWriter();
         UIDatascroller scroller = (UIDatascroller) component;
-        int currentPage = scroller.getPageIndex();
+        int currentPage = scroller.getPageIndex(data);
 
         int maxPages = scroller.getMaxPages();
         if (maxPages <= 1) {
             maxPages = 1;
         }
-        int pageCount = scroller.getPageCount();
+        int pageCount = scroller.getPageCount(data);
         if (pageCount <= 1) {
             return;
         }
-        int pageIndex = scroller.getPageIndex();
+
         int delta = maxPages / 2;
 
         int pages;
         int start;
-        if (pageCount > maxPages && pageIndex > delta) {
+        if (pageCount > maxPages && currentPage > delta) {
             pages = maxPages;
-            start = pageIndex - pages / 2 - 1;
+            start = currentPage - pages / 2 - 1;
             if (start + pages > pageCount) {
                 start = pageCount - pages;
             }
@@ -196,7 +168,7 @@
         UIDatascroller scroller = (UIDatascroller) component;
         Map eventOptions = AjaxRendererUtils.buildEventOptions(context, component);
         Map parameters = (Map) eventOptions.get("parameters");
-        parameters.put(scroller.getClientId(context) + PARAM_SUFFIX, value);
+        parameters.put(scroller.getClientId(context), value);
         function.addParameter(eventOptions);
         StringBuffer buffer = new StringBuffer();
         function.appendScript(buffer);

Modified: trunk/richfaces/datascroller/src/test/java/org/richfaces/component/DatascrollerComponentTest.java
===================================================================
--- trunk/richfaces/datascroller/src/test/java/org/richfaces/component/DatascrollerComponentTest.java	2007-04-19 18:01:31 UTC (rev 458)
+++ trunk/richfaces/datascroller/src/test/java/org/richfaces/component/DatascrollerComponentTest.java	2007-04-19 18:10:20 UTC (rev 459)
@@ -21,14 +21,11 @@
 
 package org.richfaces.component;
 
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlScript;
-import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
-import org.apache.commons.lang.StringUtils;
-import org.richfaces.event.DataScrollerAdapter;
-import org.richfaces.event.DataScrollerEvent;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
 
 import javax.faces.application.FacesMessage;
 import javax.faces.component.UICommand;
@@ -43,390 +40,393 @@
 import javax.faces.el.MethodBinding;
 import javax.faces.el.MethodNotFoundException;
 
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.ArrayList;
+import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
+import org.apache.commons.lang.StringUtils;
+import org.richfaces.event.DataScrollerEvent;
 
+import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
+import com.gargoylesoftware.htmlunit.html.HtmlElement;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlScript;
+
 /**
  * Unit test for Datascroller component.
  */
 public class DatascrollerComponentTest extends AbstractAjax4JsfTestCase {
-    private static Set javaScripts = new HashSet();
+	private static Set javaScripts = new HashSet();
 
-    static {
-        javaScripts.add("org.ajax4jsf.framework.ajax.AjaxScript");
-        javaScripts.add("prototype.js");
-    }
+	static {
+		javaScripts.add("org.ajax4jsf.framework.ajax.AjaxScript");
+		javaScripts.add("prototype.js");
+	}
 
-    private UIDatascroller scroller;
-    private UIComponent form;
-    private UIData data;
-    private UIOutput first;
-    private UIOutput fastrewind;
-    private UIOutput previous;
-    private UIOutput fastforward;
-    private UIOutput next;
-    private UIOutput last;
-    private UICommand command = null;
+	private UIDatascroller scroller;
+	private UIComponent form;
+	private UIData data;
+	private UIOutput first;
+	private UIOutput fastrewind;
+	private UIOutput previous;
+	private UIOutput fastforward;
+	private UIOutput next;
+	private UIOutput last;
+	private UICommand command = null;
 
-    /**
-     * Create the test case
-     *
-     * @param testName name of the test case
-     */
-    public DatascrollerComponentTest(String testName) {
-        super(testName);
-    }
+	/**
+	 * Create the test case
+	 *
+	 * @param testName name of the test case
+	 */
+	public DatascrollerComponentTest(String testName) {
+		super(testName);
+	}
 
-    /* (non-Javadoc)
-     * @see org.ajax4jsf.tests.AbstractAjax4JsfTestCase#setUp()
-     */
-    public void setUp() throws Exception {
-        super.setUp();
+	/* (non-Javadoc)
+	 * @see org.ajax4jsf.tests.AbstractAjax4JsfTestCase#setUp()
+	 */
+	public void setUp() throws Exception {
+		super.setUp();
 
-        form = new HtmlForm();
-        form.setId("form");        
-        facesContext.getViewRoot().getChildren().add(form);
-        ArrayList dat = new ArrayList();
-        for (int i=0;i<20;i++){
-          dat.add(new Integer(i));
-        }        
-        data = (UIData) application.createComponent(HtmlDataTable.COMPONENT_TYPE);
-        data.setValue(dat);
-        data.setId("data");
-        data.setRows(5);        
-        form.getChildren().add(data);
+		form = new HtmlForm();
+		form.setId("form");        
+		facesContext.getViewRoot().getChildren().add(form);
+		ArrayList dat = new ArrayList();
+		for (int i=0;i<20;i++){
+			dat.add(new Integer(i));
+		}        
+		data = (UIData) application.createComponent(HtmlDataTable.COMPONENT_TYPE);
+		data.setValue(dat);
+		data.setId("data");
+		data.setRows(5);        
+		form.getChildren().add(data);
 
-        scroller = (UIDatascroller) application.createComponent("org.richfaces.Datascroller");
-        scroller.setId("dataScroller");
-        scroller.setFor(data.getId());
+		scroller = (UIDatascroller) application.createComponent("org.richfaces.Datascroller");
+		scroller.setId("dataScroller");
+		scroller.setFor(data.getId());
 
-        first = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
-        first.setId("first");
-        first.setValue("first");
-        fastrewind = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
-        fastrewind.setId("fastrewind");
-        fastrewind.setValue("fastrewind");
-        previous = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
-        previous.setId("previous");
-        previous.setValue("previous");
-        fastforward = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
-        fastforward.setId("fastforward");
-        fastforward.setValue("fastforward");
-        next = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
-        next.setId("next");
-        next.setValue("next");
-        last = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
-        last.setId("last");
-        last.setValue("last");
+		first = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
+		first.setId("first");
+		first.setValue("first");
+		fastrewind = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
+		fastrewind.setId("fastrewind");
+		fastrewind.setValue("fastrewind");
+		previous = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
+		previous.setId("previous");
+		previous.setValue("previous");
+		fastforward = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
+		fastforward.setId("fastforward");
+		fastforward.setValue("fastforward");
+		next = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
+		next.setId("next");
+		next.setValue("next");
+		last = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
+		last.setId("last");
+		last.setValue("last");
 
-        scroller.getFacets().put(first.getId(), first);
-        scroller.getFacets().put(fastrewind.getId(), fastrewind);
-        scroller.getFacets().put(previous.getId(), previous);
-        scroller.getFacets().put(fastforward.getId(), fastforward);
-        scroller.getFacets().put(next.getId(), next);
-        scroller.getFacets().put(last.getId(), last);
+		scroller.getFacets().put(first.getId(), first);
+		scroller.getFacets().put(fastrewind.getId(), fastrewind);
+		scroller.getFacets().put(previous.getId(), previous);
+		scroller.getFacets().put(fastforward.getId(), fastforward);
+		scroller.getFacets().put(next.getId(), next);
+		scroller.getFacets().put(last.getId(), last);
 
-        form.getChildren().add(scroller);
+		form.getChildren().add(scroller);
 
-        command = new HtmlCommandLink();
-        command.setId("command");
-        form.getChildren().add(command);
-        
-    }
+		command = new HtmlCommandLink();
+		command.setId("command");
+		form.getChildren().add(command);
 
-    /* (non-Javadoc)
-     * @see org.ajax4jsf.tests.AbstractAjax4JsfTestCase#tearDown()
-     */
-    public void tearDown() throws Exception {
-        super.tearDown();
-        scroller = null;
-        form = null;
-        data = null;
-        first = null;
-        fastrewind = null;
-        previous = null;
-        fastforward = null;
-        next = null;
-        last = null;
-    }
+	}
 
-    /**
-     * Test component rendering
-     *
-     * @throws Exception
-     */
-    public void testRender() throws Exception {
-        HtmlPage page = renderView();        
-        assertNotNull(page);
-        System.out.println(page.asXml());
+	/* (non-Javadoc)
+	 * @see org.ajax4jsf.tests.AbstractAjax4JsfTestCase#tearDown()
+	 */
+	public void tearDown() throws Exception {
+		super.tearDown();
+		scroller = null;
+		form = null;
+		data = null;
+		first = null;
+		fastrewind = null;
+		previous = null;
+		fastforward = null;
+		next = null;
+		last = null;
+	}
 
-        HtmlElement div = page.getHtmlElementById(scroller.getClientId(facesContext));
-        assertNotNull(div);
-        assertEquals("div", div.getNodeName());
+	/**
+	 * Test component rendering
+	 *
+	 * @throws Exception
+	 */
+	public void testRender() throws Exception {
+		HtmlPage page = renderView();        
+		assertNotNull(page);
+		System.out.println(page.asXml());
 
-        HtmlElement f1 = page.getHtmlElementById(first.getClientId(facesContext));
-        assertNotNull(f1);
-        HtmlElement f2 = page.getHtmlElementById(last.getClientId(facesContext));
-        assertNotNull(f2);
-        HtmlElement f3 = page.getHtmlElementById(fastforward.getClientId(facesContext));
-        assertNotNull(f3);
-        HtmlElement f4 = page.getHtmlElementById(fastrewind.getClientId(facesContext));
-        assertNotNull(f4);
-        HtmlElement f5 = page.getHtmlElementById(next.getClientId(facesContext));
-        assertNotNull(f5);
-        HtmlElement f6 = page.getHtmlElementById(previous.getClientId(facesContext));
-        assertNotNull(f6);
+		HtmlElement div = page.getHtmlElementById(scroller.getClientId(facesContext));
+		assertNotNull(div);
+		assertEquals("div", div.getNodeName());
 
-        String classAttr = div.getAttributeValue("class");
-        assertTrue(classAttr.contains("dr-dscr"));
-        assertTrue(classAttr.contains("rich-datascr"));
+		HtmlElement f1 = page.getHtmlElementById(first.getClientId(facesContext));
+		assertNotNull(f1);
+		HtmlElement f2 = page.getHtmlElementById(last.getClientId(facesContext));
+		assertNotNull(f2);
+		HtmlElement f3 = page.getHtmlElementById(fastforward.getClientId(facesContext));
+		assertNotNull(f3);
+		HtmlElement f4 = page.getHtmlElementById(fastrewind.getClientId(facesContext));
+		assertNotNull(f4);
+		HtmlElement f5 = page.getHtmlElementById(next.getClientId(facesContext));
+		assertNotNull(f5);
+		HtmlElement f6 = page.getHtmlElementById(previous.getClientId(facesContext));
+		assertNotNull(f6);
 
-        
-        scroller.processDecodes(facesContext);
-        scroller.processValidators(facesContext);
-        scroller.processUpdates(facesContext);
-        scroller.setFor("xxx");
-        try {
-            page = renderView();
-            assertTrue(false);
-        } catch(Exception ex) {
-        }               
-        scroller.processDecodes(facesContext);
-        scroller.processValidators(facesContext);
-        scroller.processUpdates(facesContext);
-        scroller.setFor("form");
-        try {
-            page = renderView();
-            assertTrue(false);
-        } catch(Exception ex) {
-        }
-        scroller.processDecodes(facesContext);
-        scroller.processValidators(facesContext);
-        scroller.processUpdates(facesContext);        
-        scroller.setFor(data.getId());
-    }
+		String classAttr = div.getAttributeValue("class");
+		assertTrue(classAttr.contains("dr-dscr"));
+		assertTrue(classAttr.contains("rich-datascr"));
 
-    public void testNotRender() throws Exception {
-        data.setRows(25);
-        scroller.setRenderIfSinglePage(false);
-        
-        HtmlPage page = renderView();        
-        assertNotNull(page);
-        System.out.println(page.asXml());
-        try {
-            page.getHtmlElementById(scroller.getClientId(facesContext));
-            assertTrue(false);
-        } catch(Exception ex) {
-        }
 
-    }
+		scroller.processDecodes(facesContext);
+		scroller.processValidators(facesContext);
+		scroller.processUpdates(facesContext);
+		scroller.setFor("xxx");
+		try {
+			page = renderView();
+			assertTrue(false);
+		} catch(Exception ex) {
+		}               
+		scroller.processDecodes(facesContext);
+		scroller.processValidators(facesContext);
+		scroller.processUpdates(facesContext);
+		scroller.setFor("form");
+		try {
+			page = renderView();
+			assertTrue(false);
+		} catch(Exception ex) {
+		}
+		scroller.processDecodes(facesContext);
+		scroller.processValidators(facesContext);
+		scroller.processUpdates(facesContext);        
+		scroller.setFor(data.getId());
+	}
 
-    public void testNotFor() throws Exception {
-        scroller.setFor(null);        
-        try {
-            HtmlPage page = renderView();
-            assertTrue(false);
-        } catch(Exception ex) {
-        }
+	public void testNotRender() throws Exception {
+		data.setRows(25);
+		scroller.setRenderIfSinglePage(false);
 
-    }
-    
-    
-    /**
-     * Test style rendering
-     *
-     * @throws Exception
-     */
-    public void testRenderStyle() throws Exception {
-        HtmlPage page = renderView();
-        assertNotNull(page);
-        List links = page.getDocumentElement().getHtmlElementsByTagName("link");
+		HtmlPage page = renderView();        
+		assertNotNull(page);
+		System.out.println(page.asXml());
+		try {
+			page.getHtmlElementById(scroller.getClientId(facesContext));
+			assertTrue(false);
+		} catch(Exception ex) {
+		}
 
-        assertEquals(1, links.size());
-        HtmlElement link = (HtmlElement) links.get(0);
-        assertTrue(link.getAttributeValue("href").contains("org/richfaces/renderkit/html/css/datascroller.xcss"));
-    }
+	}
 
-    /**
-     * Test script rendering
-     *
-     * @throws Exception
-     */
-    public void testRenderScript() throws Exception {
-        HtmlPage page = renderView();
-        assertNotNull(page);
-        List scripts = page.getDocumentElement().getHtmlElementsByTagName("script");
+	public void testNotFor() throws Exception {
+		scroller.setFor(null);        
+		try {
+			HtmlPage page = renderView();
+			assertTrue(false);
+		} catch(Exception ex) {
+		}
 
-        for (Iterator it = scripts.iterator(); it.hasNext();) {
-            HtmlScript item = (HtmlScript) it.next();
-            String srcAttr = item.getSrcAttribute();
+	}
 
-            if (StringUtils.isNotBlank(srcAttr)) {
-                boolean found = false;
-                for (Iterator srcIt = javaScripts.iterator(); srcIt.hasNext();)
-                {
-                    String src = (String) srcIt.next();
 
-                    found = srcAttr.contains(src);
-                    if (found) {
-                        break;
-                    }
-                }
+	/**
+	 * Test style rendering
+	 *
+	 * @throws Exception
+	 */
+	public void testRenderStyle() throws Exception {
+		HtmlPage page = renderView();
+		assertNotNull(page);
+		List links = page.getDocumentElement().getHtmlElementsByTagName("link");
 
-                assertTrue(found);
-            }
-        }
-    }
+		assertEquals(1, links.size());
+		HtmlElement link = (HtmlElement) links.get(0);
+		assertTrue(link.getAttributeValue("href").contains("org/richfaces/renderkit/html/css/datascroller.xcss"));
+	}
 
-    /**
-     * Test binary search
-     *
-     * @throws Exception
-     */
-    public void testBinarySearch() throws Exception {
-        class MockData extends UIData {
-            private int rowIndex;
-            private int minRow;
-            private int maxRow;
+	/**
+	 * Test script rendering
+	 *
+	 * @throws Exception
+	 */
+	public void testRenderScript() throws Exception {
+		HtmlPage page = renderView();
+		assertNotNull(page);
+		List scripts = page.getDocumentElement().getHtmlElementsByTagName("script");
 
-            public int getMaxRow() {
-                return maxRow;
-            }
+		for (Iterator it = scripts.iterator(); it.hasNext();) {
+			HtmlScript item = (HtmlScript) it.next();
+			String srcAttr = item.getSrcAttribute();
 
-            public void setMaxRow(int maxRow) {
-                this.maxRow = maxRow;
-            }
+			if (StringUtils.isNotBlank(srcAttr)) {
+				boolean found = false;
+				for (Iterator srcIt = javaScripts.iterator(); srcIt.hasNext();)
+				{
+					String src = (String) srcIt.next();
 
-            public int getMinRow() {
-                return minRow;
-            }
+					found = srcAttr.contains(src);
+					if (found) {
+						break;
+					}
+				}
 
-            public void setMinRow(int minRow) {
-                this.minRow = minRow;
-            }
+				assertTrue(found);
+			}
+		}
+	}
 
-            public boolean isRowAvailable() {
-                return rowIndex >= getMinRow() && rowIndex < getMaxRow();
-            }
+	/**
+	 * Test binary search
+	 *
+	 * @throws Exception
+	 */
+	public void testBinarySearch() throws Exception {
+		class MockData extends UIData {
+			private int rowIndex;
+			private int minRow;
+			private int maxRow;
 
-            public void setRowIndex(int rowIndex) {
-                this.rowIndex = rowIndex;
-            }
-        }
+			public int getMaxRow() {
+				return maxRow;
+			}
 
-        MockData data;
-        UIDatascroller.BinarySearch bs = new UIDatascroller.BinarySearch();
+			public void setMaxRow(int maxRow) {
+				this.maxRow = maxRow;
+			}
 
-        data = new MockData();
-        data.setMaxRow(1);
-        assertEquals(1, bs.search(data));
+			public int getMinRow() {
+				return minRow;
+			}
 
-        data = new MockData();
-        data.setMaxRow(2);
-        assertEquals(2, bs.search(data));
+			public void setMinRow(int minRow) {
+				this.minRow = minRow;
+			}
 
-        data = new MockData();
-        data.setMaxRow(3);
-        assertEquals(3, bs.search(data));
+			public boolean isRowAvailable() {
+				return rowIndex >= getMinRow() && rowIndex < getMaxRow();
+			}
 
-        data = new MockData();
-        data.setMaxRow(4);
-        assertEquals(4, bs.search(data));
+			public void setRowIndex(int rowIndex) {
+				this.rowIndex = rowIndex;
+			}
+		}
 
-        data = new MockData();
-        data.setMaxRow(5);
-        assertEquals(5, bs.search(data));
+		MockData data;
 
-        data = new MockData();
-        data.setMaxRow(6);
-        assertEquals(6, bs.search(data));
+		data = new MockData();
+		data.setMaxRow(1);
+		assertEquals(1, UIDatascroller.BinarySearch.search(data));
 
-        data = new MockData();
-        data.setMaxRow(7);
-        assertEquals(7, bs.search(data));
+		data = new MockData();
+		data.setMaxRow(2);
+		assertEquals(2, UIDatascroller.BinarySearch.search(data));
 
-        data = new MockData();
-        data.setMaxRow(8);
-        assertEquals(8, bs.search(data));
+		data = new MockData();
+		data.setMaxRow(3);
+		assertEquals(3, UIDatascroller.BinarySearch.search(data));
 
-        data = new MockData();
-        data.setMaxRow(9);
-        assertEquals(9, bs.search(data));
+		data = new MockData();
+		data.setMaxRow(4);
+		assertEquals(4, UIDatascroller.BinarySearch.search(data));
 
-        data = new MockData();
-        data.setMaxRow(10);
-        assertEquals(10, bs.search(data));
+		data = new MockData();
+		data.setMaxRow(5);
+		assertEquals(5, UIDatascroller.BinarySearch.search(data));
 
-        data = new MockData();
-        data.setMaxRow(11);
-        assertEquals(11, bs.search(data));
+		data = new MockData();
+		data.setMaxRow(6);
+		assertEquals(6, UIDatascroller.BinarySearch.search(data));
 
-        data = new MockData();
-        data.setMaxRow(12);
-        assertEquals(12, bs.search(data));
+		data = new MockData();
+		data.setMaxRow(7);
+		assertEquals(7, UIDatascroller.BinarySearch.search(data));
 
-        data = new MockData();
-        data.setMaxRow(13);
-        assertEquals(13, bs.search(data));
-    }
+		data = new MockData();
+		data.setMaxRow(8);
+		assertEquals(8, UIDatascroller.BinarySearch.search(data));
 
-    public void testSetPage() throws Exception {
-        assertEquals(4,scroller.getPageCount());
-        scroller.setPage("2");
-        scroller.setFastStep(2);
-        assertEquals(5,data.getFirst());
-        scroller.setPage("next");
-        assertEquals(10,data.getFirst());
-        scroller.setPage("previous");
-        assertEquals(5,data.getFirst());
-        scroller.setPage("fastforward");
-        assertEquals(15,data.getFirst());
-        scroller.setPage("fastrewind");
-        assertEquals(5,data.getFirst());
-        scroller.setPage("first");
-        assertEquals(0,data.getFirst());
-        scroller.setPage("previous");
-        assertEquals(0,data.getFirst());
-        scroller.setPage("fastrewind");
-        assertEquals(0,data.getFirst());      
-        scroller.setPage("last");
-        assertEquals(15,data.getFirst());  
-        scroller.setPage("next");
-        assertEquals(15,data.getFirst());
-        scroller.setPage("fastforward");
-        assertEquals(15,data.getFirst());        
-        scroller.setPage("5");
-        assertEquals(15,data.getFirst());
-        scroller.setPage("0");
-        assertEquals(0,data.getFirst());
-        data.setRows(0);
-        
-    }
-    
-    public void testListener() throws Exception{
-        HtmlPage renderedView = renderView();
-    
-        HtmlAnchor htmlLink = (HtmlAnchor) renderedView.getHtmlElementById(command.getClientId(facesContext));
-        htmlLink.click();
-        
-        MethodBinding binding = new MethodBinding(){    
-        public Object invoke(FacesContext context, Object[] params) throws EvaluationException, MethodNotFoundException {
-        facesContext.addMessage(scroller.getClientId(facesContext), new FacesMessage("Method invoked!"));
-        return "invoked"; 
-        }
-        public Class getType(FacesContext context) throws MethodNotFoundException {
-        return String.class;
-        }
-    };
-    
-    DataScrollerEvent event = new DataScrollerEvent( ((UIComponent) scroller), "1", "2" );
-    new DataScrollerAdapter(binding).processScroller(event);
+		data = new MockData();
+		data.setMaxRow(9);
+		assertEquals(9, UIDatascroller.BinarySearch.search(data));
 
-    assertTrue(facesContext.getMessages().hasNext());
-    } 
-    
-    
+		data = new MockData();
+		data.setMaxRow(10);
+		assertEquals(10, UIDatascroller.BinarySearch.search(data));
+
+		data = new MockData();
+		data.setMaxRow(11);
+		assertEquals(11, UIDatascroller.BinarySearch.search(data));
+
+		data = new MockData();
+		data.setMaxRow(12);
+		assertEquals(12, UIDatascroller.BinarySearch.search(data));
+
+		data = new MockData();
+		data.setMaxRow(13);
+		assertEquals(13, UIDatascroller.BinarySearch.search(data));
+	}
+
+	public void testSetPage() throws Exception {
+		assertEquals(4,scroller.getPageCount());
+		scroller.setPage("2");
+		scroller.setFastStep(2);
+		assertEquals(5,data.getFirst());
+		scroller.setPage("next");
+		assertEquals(10,data.getFirst());
+		scroller.setPage("previous");
+		assertEquals(5,data.getFirst());
+		scroller.setPage("fastforward");
+		assertEquals(15,data.getFirst());
+		scroller.setPage("fastrewind");
+		assertEquals(5,data.getFirst());
+		scroller.setPage("first");
+		assertEquals(0,data.getFirst());
+		scroller.setPage("previous");
+		assertEquals(0,data.getFirst());
+		scroller.setPage("fastrewind");
+		assertEquals(0,data.getFirst());      
+		scroller.setPage("last");
+		assertEquals(15,data.getFirst());  
+		scroller.setPage("next");
+		assertEquals(15,data.getFirst());
+		scroller.setPage("fastforward");
+		assertEquals(15,data.getFirst());        
+		scroller.setPage("5");
+		assertEquals(15,data.getFirst());
+		scroller.setPage("0");
+		assertEquals(0,data.getFirst());
+		data.setRows(0);
+
+	}
+
+	public void testListener() throws Exception{
+		HtmlPage renderedView = renderView();
+
+		HtmlAnchor htmlLink = (HtmlAnchor) renderedView.getHtmlElementById(command.getClientId(facesContext));
+		htmlLink.click();
+
+		MethodBinding binding = new MethodBinding(){    
+			public Object invoke(FacesContext context, Object[] params) throws EvaluationException, MethodNotFoundException {
+				facesContext.addMessage(scroller.getClientId(facesContext), new FacesMessage("Method invoked!"));
+				return "invoked"; 
+			}
+			public Class getType(FacesContext context) throws MethodNotFoundException {
+				return String.class;
+			}
+		};
+
+		DataScrollerEvent event = new DataScrollerEvent( ((UIComponent) scroller), "1", "2" );
+		this.scroller.setScrollerListener(binding);
+		this.scroller.broadcast(event);
+
+		assertTrue(facesContext.getMessages().hasNext());
+	} 
+
+
 }

Modified: trunk/richfaces/datascroller/src/test/java/org/richfaces/event/DataScrollerEventTest.java
===================================================================
--- trunk/richfaces/datascroller/src/test/java/org/richfaces/event/DataScrollerEventTest.java	2007-04-19 18:01:31 UTC (rev 458)
+++ trunk/richfaces/datascroller/src/test/java/org/richfaces/event/DataScrollerEventTest.java	2007-04-19 18:10:20 UTC (rev 459)
@@ -21,13 +21,12 @@
 
 package org.richfaces.event;
 
-import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
-
 import javax.faces.component.UIData;
 import javax.faces.component.html.HtmlDataTable;
 import javax.faces.event.FacesListener;
-import javax.faces.event.PhaseId;
 
+import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
+
 /**
  * Unit test for DataScrollerEvent.
  */
@@ -67,7 +66,6 @@
     }
 
     public void testEvent() throws Exception {
-        assertEquals(PhaseId.INVOKE_APPLICATION, event.getPhaseId());
         assertEquals("old", event.getOldScrolVal());
         assertEquals("new", event.getNewScrolVal());
         assertFalse(event.isAppropriateListener(new TestFacesListener()));




More information about the richfaces-svn-commits mailing list