Author: ekoneil
Date: Fri May  6 14:32:58 2005
New Revision: 168663

URL: http://svn.apache.org/viewcvs?rev=168663&view=rev
Log:
NetUI Javadoc.

BB: self
DRT: NetUI pass


Modified:
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridStateCodec.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridStateFactory.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridURLBuilder.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractCell.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageCell.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/RenderPager.java
    
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/ArrayIterator.java
    
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/AtomicObjectIterator.java
    
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java
    
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactory.java
    
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/MapIterator.java

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridStateCodec.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridStateCodec.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridStateCodec.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridStateCodec.java
 Fri May  6 14:32:58 2005
@@ -20,32 +20,81 @@
 import javax.servlet.ServletRequest;
 
 /**
- *
+ * <p>
+ * This abstract base class acts as a service that exposes state information 
to a
+ * data grid.
+ * </p>
+ * <p>
+ * Implementations of the DataGridStateCodec should be request scoped and are 
not
+ * meant to be serialized.  Implementations can hold references to the [EMAIL 
PROTECTED] ServletRequest}.
+ * In order to maintain a data grid's state across a request in a Java object,
+ * the [EMAIL PROTECTED] DataGridState} object should be used.
+ * </p>
  */
 public abstract class DataGridStateCodec {
 
     private ServletRequest _request;
     private String _gridName;
 
+    /**
+     * Set the [EMAIL PROTECTED] ServletRequest}.  The ServletRequest can be 
used by implementations to
+     * discover information contained in request URL or searched for request 
attributes.
+     *
+     * @param request the current request
+     */
     public void setServletRequest(ServletRequest request) {
         _request = request;
     }
 
+    /**
+     * Get the current servlet request with which this DataGridStateCodec is 
associated.
+     *
+     * @return the [EMAIL PROTECTED] ServletRequest}
+     */
     public ServletRequest getServletRequest() {
         return _request;
     }
 
+    /**
+     * Set the data grid name with which this DataGridStateCodec is associated.
+     *
+     * @param gridName the data grid's name
+     */
     public void setGridName(String gridName) {
         _gridName = gridName;
     }
 
+    /**
+     * Get the data grid name with which this DataGridStateCodec is associated.
+     *
+     * @return the data grid's name
+     */
     public String getGridName() {
         return _gridName;
     }
 
+    /**
+     * Get the [EMAIL PROTECTED] DataGridState} for a data grid.  This object 
contains the state
+     * which the data grid will use during rendering.
+     *
+     * @return the current [EMAIL PROTECTED] DataGridState} object
+     */
     public abstract DataGridState getDataGridState();
 
+    /**
+     * Set the @{link DataGridState} object.  This allows a client to apply a 
prior
+     * [EMAIL PROTECTED] DataGridState} object in order to explicitly set the 
data grid's state
+     * to a previously create set of objects.
+     *
+     * @param state the new [EMAIL PROTECTED] DataGridState}
+     */
     public abstract void setDataGridState(DataGridState state);
 
+    /**
+     * Get a [EMAIL PROTECTED] DataGridURLBuilder} which can build be used to 
build URLs for
+     * a data grid's current state.
+     *
+     * @return the [EMAIL PROTECTED] DataGridURLBuilder} for the data grid's 
state
+     */
     public abstract DataGridURLBuilder getDataGridURLBuilder();
 }

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridStateFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridStateFactory.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridStateFactory.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridStateFactory.java
 Fri May  6 14:32:58 2005
@@ -25,18 +25,42 @@
 import org.apache.beehive.netui.util.Bundle;
 
 /**
- *
+ * <p>
+ * Factory class used to construct instances of [EMAIL PROTECTED] 
DataGridState} objects.  This
+ * class is used by the data grid and other clients to obtain the state for a 
data grid
+ * with a given name.
+ * </p>
+ * <p>
+ * Data grid state information is scoped by a unique data grid String name.  
This name
+ * should be unique for a particular scope in a request.  For all factory 
methods that
+ * take a data grid name as a parameter, the value of the <code>name</code> 
attribute
+ * should match the value of the
+ * [EMAIL PROTECTED] 
org.apache.beehive.netui.tags.databinding.datagrid.DataGrid#setName(String)}
+ * attribute for the data grid whose state to lookup.
+ * </p>
  */
 public final class DataGridStateFactory {
 
     private static final String KEY = DataGridStateFactory.class.getName() + 
"REQUEST_KEY";
     private static final DataGridConfig DEFAULT_DATA_GRID_CONFIG = 
DataGridConfigFactory.getInstance();
 
+    /**
+     * Get an instance of a DataGridStateFactory given a [EMAIL PROTECTED] 
JspContext}.
+     *
+     * @param jspContext the current [EMAIL PROTECTED] JspContext}
+     * @return an instance of the factory
+     */
     public static final DataGridStateFactory getInstance(JspContext 
jspContext) {
         assert jspContext instanceof PageContext;
         return getInstance(((PageContext)jspContext).getRequest());
     }
 
+    /**
+     * Get an instance of a DataGridStateFactory given a [EMAIL PROTECTED] 
ServletRequest}.
+     *
+     * @param request the current [EMAIL PROTECTED] ServletRequest}
+     * @return an instance of the factory
+     */
     public static final DataGridStateFactory getInstance(ServletRequest 
request) {
         Object obj = request.getAttribute(KEY);
         if(obj != null) {
@@ -58,14 +82,35 @@
         _cache = new HashMap/*<String, DataGridStateCodec>*/();
     }
 
+    /**
+     * <p>
+     * Lookup a [EMAIL PROTECTED] DataGridState} object given a data grid 
identifier.
+     * </p>
+     * <p>
+     * This method will use the default [EMAIL PROTECTED] DataGridConfig} 
object when returning a data grid specific
+     * implementation of the [EMAIL PROTECTED] DataGridState} object.  In 
order to specify a [EMAIL PROTECTED] DataGridConfig},
+     * the [EMAIL PROTECTED] DataGridStateFactory#getDataGridState(String, 
DataGridConfig)} can be supplied
+     * with a specific data grid configuration.
+     * </p>
+     *
+     * @param name the name of a data grid.
+     * @return the [EMAIL PROTECTED] DataGridState} for the data grid with the 
given name
+     */
     public final DataGridState getDataGridState(String name) {
         return getDataGridState(name, DEFAULT_DATA_GRID_CONFIG);
     }
 
-    public final DataGridURLBuilder getDataGridURLBuilder(String name) {
-        return getDataGridURLBuilder(name, DEFAULT_DATA_GRID_CONFIG);
-    }
-
+    /**
+     * <p>
+     * Lookup a [EMAIL PROTECTED] DataGridState} object given a data grid 
identifier and a specific
+     * [EMAIL PROTECTED] DataGridConfig} object.
+     * </p>
+     *
+     * @param name the name of the data grid
+     * @param config the [EMAIL PROTECTED] DataGridConfig} object to use when 
creating the
+     * grid's [EMAIL PROTECTED] DataGridState} object.
+     * @return
+     */
     public final DataGridState getDataGridState(String name, DataGridConfig 
config) {
         if(config == null)
             throw new 
IllegalArgumentException(Bundle.getErrorString("DataGridStateFactory_nullDataGridConfig"));
@@ -75,6 +120,35 @@
         return state;
     }
 
+    /**
+     * <p>
+     * Lookup a [EMAIL PROTECTED] DataGridURLBuilder} object given a data grid 
identifier.
+     * </p>
+     * <p>
+     * This method will use the default [EMAIL PROTECTED] DataGridConfig} 
object when returning a data grid specific
+     * implementation of the [EMAIL PROTECTED] DataGridURLBuilder} object.  In 
order to specify a [EMAIL PROTECTED] DataGridConfig},
+     * the [EMAIL PROTECTED] 
DataGridStateFactory#getDataGridURLBuilder(String, DataGridConfig)} can be 
supplied
+     * with a specific data grid configuration.
+     * </p>
+     *
+     * @param name the name of the data grid
+     * @return the [EMAIL PROTECTED] DataGridURLBuilder} for the data grid 
with the given name
+     */
+    public final DataGridURLBuilder getDataGridURLBuilder(String name) {
+        return getDataGridURLBuilder(name, DEFAULT_DATA_GRID_CONFIG);
+    }
+
+    /**
+     * <p>
+     * Lookup a [EMAIL PROTECTED] DataGridURLBuilder} object given a data grid 
identifier and a specific
+     * [EMAIL PROTECTED] DataGridConfig} object.
+     * </p>
+     *
+     * @param name the name of the data grid
+     * @param config the [EMAIL PROTECTED] DataGridConfig} object to use when 
creating the
+     * grid's [EMAIL PROTECTED] DataGridURLBuilder} object.
+     * @return
+     */
     public final DataGridURLBuilder getDataGridURLBuilder(String name, 
DataGridConfig config) {
         if(config == null)
             throw new 
IllegalArgumentException(Bundle.getErrorString("DataGridStateFactory_nullDataGridConfig"));
@@ -84,6 +158,16 @@
         return builder;
     }
 
+    /**
+     * <p>
+     * Convenience method that allows a [EMAIL PROTECTED] DataGridState} 
object from a client to
+     * be attached to the factory.  This allows subsequent calls to retrieve 
this same [EMAIL PROTECTED] DataGridState}
+     * instance.
+     * </p>
+     *
+     * @param name the name of the data grid
+     * @param state the [EMAIL PROTECTED] DataGridState} object to attach
+     */
     public final void attachDataGridState(String name, DataGridState state) {
         DataGridStateCodec codec = lookupCodec(name, DEFAULT_DATA_GRID_CONFIG);
         codec.setDataGridState(state);

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridURLBuilder.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridURLBuilder.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridURLBuilder.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridURLBuilder.java
 Fri May  6 14:32:58 2005
@@ -20,23 +20,92 @@
 import java.util.Map;
 
 /**
- * 
+ * <p>
+ * This abstract class provides methods that are used to build maps of URL 
parameters
+ * containing current ahd future data grid state. These are useful for building
+ * anchors and other kinds of requests that when clicked / submitted can move 
to
+ * the next or previous page of data or change the state of sorts or filters 
for
+ * a data grid.
+ * </p>
+ * <p>
+ * Subclasses are free to implement the contents of the parameter map with 
whatever
+ * parameter key / values that make sense for a particular data grid.  For 
example,
+ * some data grids may encode sort, filter, and paging information in the URL. 
 Others
+ * may add information about row selection and not add sort / filter 
parameters.  Be
+ * sure to check the documentation for a specific DataGridURLBuilder subclass 
to
+ * find out what specific parameters are available in the parameter maps.
+ * </p>
+ * <p>
+ * Parameter maps produced by methods on this class should contain key / value 
pairs
+ * where the key is of type <code>String</code> and the values are of type
+ * <code>String[]</code>.  The parameter maps should also include all of the
+ * additional "current" URL parameters in order to maintain the "current" view
+ * state and modifying only state associated with a single data grid.  
Subclasses are
+ * free to change this behavior.
+ * </p>
  */
 public abstract class DataGridURLBuilder {
 
+    /**
+     * Get a [EMAIL PROTECTED] Map} containing the current state of the data 
grid.
+     * @return the parameter map
+     */
     public abstract Map getQueryParams();
 
+    /**
+     * Get a parameter map that contains the grid's current state with a
+     * value that will set the current to the first page.
+     *
+     * @return the parameter map
+     */
     public abstract Map getQueryParamsForFirstPage();
 
+    /**
+     * Get a parameter map that contains the grid's current state with a
+     * value that will set the current page to the previous page.
+     *
+     * @return the parameter map
+     */
     public abstract Map getQueryParamsForPreviousPage();
 
+    /**
+     * Get a parameter map that contains the grid's current state with a
+     * value that will set the current page to the next page.
+     *
+     * @return the parameter map
+     */
     public abstract Map getQueryParamsForNextPage();
 
+    /**
+     * Get a parameter map that contains the grid's current state with a
+     * value that will set the current page to the last page.
+     *
+     * @return the parameter map
+     */
     public abstract Map getQueryParamsForLastPage();
 
+    /**
+     * Get a String array that contains the values which can be used to
+     * reach any page in the data grid.
+     *
+     * @return an array of the query parameter values for each page
+     */
     public abstract String[] getPagerParamValues();
 
+    /**
+     * Get the String for the pager query parameter key.
+     *
+     * @return the query parameter key for accessing the current page from the 
URL
+     */
     public abstract String getPagerRowQueryParamKey();
 
+    /**
+     * Get a parameter map that contains the grid's current state with the
+     * sort matching the given <code>sortExpression</code> switched to the
+     * next available sort direction.
+     *
+     * @param sortExpression the sort expression whose sort value to change
+     * @return the parameter map
+     */
     public abstract Map buildSortQueryParamsMap(String sortExpression);
 }

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractCell.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractCell.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractCell.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractCell.java
 Fri May  6 14:32:58 2005
@@ -33,7 +33,7 @@
 import org.apache.beehive.netui.util.logging.Logger;
 
 /**
- *
+ * Abstract base class that provides support for rendering HTML table cells to 
tag subclasses.   
  */
 public abstract class AbstractCell
     extends AbstractDataGridHtmlTag {

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageCell.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageCell.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageCell.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageCell.java
 Fri May  6 14:32:58 2005
@@ -33,8 +33,15 @@
 import org.apache.beehive.netui.tags.IHtmlI18n;
 
 /**
- * @jsptagref.tagdescription Renders a column of images in a data grid.
- * @netui:tag name="imageCell" description="Renders a column of images in a 
NetUI data grid" body-content="scriptless"
+ * Data grid cell that renders an HTML &lt;image&gt; tag containing the tag's 
<code>source</code> attribute.  The
+ * span cell is rendered inside of an HTML table &lt;td&gt;.  The image cell 
supports various nested tags including
+ * those that augment the available attribute set via the NetUI [EMAIL 
PROTECTED] org.apache.beehive.netui.tags.IAttributeConsumer}
+ * interface.
+ * </p>
+ *
+ * @jsptagref.tagdescription Data grid cell that renders an HTML &lt;image&gt; 
tag with the image source specified by
+ * the tag's <code>source</code> attribute.
+ * @netui:tag name="imageCell" description="" body-content="scriptless"
  */
 public class ImageCell
     extends AbstractHtmlTableCell
@@ -46,135 +53,140 @@
     private ImageCellModel _imageCellModel = new ImageCellModel();
     private ImageTag.State _imageState = _imageCellModel.getImageState();
 
+    /**
+     * The name of this tag; this value is used for error reporting.
+     *
+     * @return the String name of this tag
+     */
     public String getTagName() {
         return "ImageCell";
     }
 
     /**
-     * Sets the onClick javascript event.
+     * Sets the onClick javascript event on the image tag.
      *
      * @param onClick - the onClick event.
-     * @jsptagref.attributedescription The onClick JavaScript event.
+     * @jsptagref.attributedescription The onClick javascript event on the 
image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_onClick</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
onClick JavaScript event."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
onClick javascript event on the image tag."
      */
     public void setOnClick(String onClick) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, 
HtmlConstants.ONCLICK, onClick);
     }
 
     /**
-     * Sets the onDblClick javascript event.
+     * Sets the onDblClick javascript event on the image tag.
      *
      * @param onDblClick - the onDblClick event.
-     * @jsptagref.attributedescription The onDblClick JavaScript event.
+     * @jsptagref.attributedescription The onDblClick javascript event on the 
image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_onDblClick</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
onDblClick JavaScript event."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
onDblClick javascript event on the image tag."
      */
     public void setOnDblClick(String onDblClick) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, 
HtmlConstants.ONDBLCLICK, onDblClick);
     }
 
     /**
-     * Sets the onKeyDown javascript event.
+     * Sets the onKeyDown javascript event on the image tag.
      *
      * @param onKeyDown - the onKeyDown event.
-     * @jsptagref.attributedescription The onKeyDown JavaScript event.
+     * @jsptagref.attributedescription The onKeyDown javascript event on the 
image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_onKeyDown</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
onKeyDown JavaScript event."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
onKeyDown javascript event on the image tag."
      */
     public void setOnKeyDown(String onKeyDown) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, 
HtmlConstants.ONKEYDOWN, onKeyDown);
     }
 
     /**
-     * Sets the onKeyUp javascript event.
+     * Sets the onKeyUp javascript event on the image tag.
      *
      * @param onKeyUp - the onKeyUp event.
-     * @jsptagref.attributedescription The onKeyUp JavaScript event.
+     * @jsptagref.attributedescription The onKeyUp javascript event on the 
image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_onKeyUp</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
onKeyUp JavaScript event."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
onKeyUp javascript event on the image tag."
      */
     public void setOnKeyUp(String onKeyUp) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, 
HtmlConstants.ONKEYUP, onKeyUp);
     }
 
     /**
-     * Sets the onKeyPress javascript event.
+     * Sets the onKeyPress javascript event on the image tag.
      *
      * @param onKeyPress - the onKeyPress event.
-     * @jsptagref.attributedescription The onKeyPress JavaScript event.
+     * @jsptagref.attributedescription The onKeyPress javascript event on the 
image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_onKeyPress</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
onKeyPress JavaScript event."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
onKeyPress javascript event on the image tag."
      */
     public void setOnKeyPress(String onKeyPress) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, 
HtmlConstants.ONKEYPRESS, onKeyPress);
     }
 
     /**
-     * Sets the onMouseDown javascript event.
+     * Sets the onMouseDown javascript event on the image tag.
      *
      * @param onMouseDown - the onMouseDown event.
-     * @jsptagref.attributedescription The onMouseDown JavaScript event.
+     * @jsptagref.attributedescription The onMouseDown javascript event on the 
image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_onMouseDown</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
onMouseDown JavaScript event."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
onMouseDown javascript event on the image tag."
      */
     public void setOnMouseDown(String onMouseDown) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, 
HtmlConstants.ONMOUSEDOWN, onMouseDown);
     }
 
     /**
-     * Sets the onMouseUp javascript event.
+     * Sets the onMouseUp javascript event on the image tag.
      *
      * @param onMouseUp - the onMouseUp event.
-     * @jsptagref.attributedescription The onMouseUp JavaScript event.
+     * @jsptagref.attributedescription The onMouseUp javascript event on the 
image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_onMouseUp</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
onMouseUp JavaScript event."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
onMouseUp javascript event on the image tag."
      */
     public void setOnMouseUp(String onMouseUp) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, 
HtmlConstants.ONMOUSEUP, onMouseUp);
     }
 
     /**
-     * Sets the onMouseMove javascript event.
+     * Sets the onMouseMove javascript event on the image tag.
      *
      * @param onMouseMove - the onMouseMove event.
-     * @jsptagref.attributedescription The onMouseMove JavaScript event.
+     * @jsptagref.attributedescription The onMouseMove javascript event on the 
image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_onMouseMove</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
onMouseMove JavaScript event."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
onMouseMove javascript event on the image tag."
      */
     public void setOnMouseMove(String onMouseMove) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, 
HtmlConstants.ONMOUSEMOVE, onMouseMove);
     }
 
     /**
-     * Sets the onMouseOut javascript event.
+     * Sets the onMouseOut javascript event on the image tag.
      *
      * @param onMouseOut - the onMouseOut event.
-     * @jsptagref.attributedescription The onMouseOut JavaScript event.
+     * @jsptagref.attributedescription The onMouseOut javascript event on the 
image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_onMouseOut</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
onMouseOut JavaScript event."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
onMouseOut javascript event on the image tag."
      */
     public void setOnMouseOut(String onMouseOut) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, 
HtmlConstants.ONMOUSEOUT, onMouseOut);
     }
 
     /**
-     * Sets the onMouseOver javascript event.
+     * Sets the onMouseOver javascript event on the image tag.
      *
      * @param onMouseOver - the onMouseOver event.
-     * @jsptagref.attributedescription The onMouseOver JavaScript event.
+     * @jsptagref.attributedescription The onMouseOver javascript event on the 
image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_onMouseOver</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
onMouseOver JavaScript event."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
onMouseOver javascript event on the image tag."
      */
     public void setOnMouseOver(String onMouseOver) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, 
HtmlConstants.ONMOUSEOVER, onMouseOver);
@@ -238,13 +250,12 @@
     }
 
     /**
-     * Sets the lang attribute for the HTML element.
+     * Sets the dir attribute for the HTML image tag.
      * @param dir
-     * @jsptagref.attributedescription The dir.
+     * @jsptagref.attributedescription The dir for the image tag.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_dir</i>
-     * @netui:attribute required="false" rtexprvalue="true"
-     * description="The dir."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
dir attribhte on the image tag."
      */
     public void setDir(String dir)
     {
@@ -252,10 +263,12 @@
     }
 
     /**
+     * Set the image source to render on the HTML image tag.
+     *
      * @jsptagref.attributedescription The source of the image to display.
      * @jsptagref.databindable Read Only
      * @jsptagref.attributesyntaxvalue <i>literal_or_expression_src</i>
-     * @netui:attribute required="true" rtexprvalue="true"
+     * @netui:attribute required="true" rtexprvalue="true" description="The 
image source to render on the HTML image tag"
      */
     public void setSrc(String src) {
         _imageState.src = src;
@@ -288,84 +301,113 @@
     }
 
     /**
-     * @jsptagref.attributedescription Integer. The width of the border around 
the image.
+     * Set the vertical spacing around the image.
+     *
+     * @jsptagref.attributedescription The width of the border around the 
image.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>integer_border</i>
-     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
vertical spacing around the image"
      */
     public void setVspace(String vspace) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, 
HtmlConstants.VSPACE, vspace);
     }
 
     /**
-     * @netui:attribute required="false" rtexprvalue="true"
+     * Set the border attribute for the image.
+     *
+     * @jsptagref.attributedescription The border attribute of the image.
+     * @jsptagref.databindable false
+     * @jsptagref.attributesyntaxvalue <i>height</i>
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
border attribute for the image"
      */
     public void setBorder(String border) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, 
HtmlConstants.BORDER, border);
     }
 
     /**
-     * @jsptagref.attributedescription Integer. The height of the image to be 
displayed in pixels.
+     * Set the height of the image to display.
+     *
+     * @jsptagref.attributedescription The height of the image to be displayed.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>integer_height</i>
-     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
height attribute for the image."
      */
     public void setHeight(String height) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, 
HtmlConstants.HEIGHT, height);
     }
 
     /**
-     * @jsptagref.attributedescription Integer. The width of the image to be 
displayed in pixels.
+     * Set the width of the image to display.
+     *
+     * @jsptagref.attributedescription The width of the image to be displayed.
      * @jsptagref.databindable false
-     * @jsptagref.attributesyntaxvalue <i>integer_width</i>
-     * @netui:attribute required="false" rtexprvalue="true"
+     * @jsptagref.attributesyntaxvalue <i>width</i>
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
width attribute for the image"
      */
     public void setWidth(String width) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, 
HtmlConstants.WIDTH, width);
     }
 
     /**
-     * Sets the property to specify the longdesc of the image.
+     * Sets the property to specify the longdesc of the image tag.
      *
      * @param longdesc - the longdesc attribute
-     * @jsptagref.attributedescription The alternative text of the image
+     * @jsptagref.attributedescription The alternative text of the image tag
      * @jsptagref.databindable Read Only
      * @jsptagref.attributesyntaxvalue <i>string_longdesc</i>
-     * @netui:attribute required="false" rtexprvalue="true" description="The 
longdesc of the image."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
longdesc of the image tag."
      */
     public void setLongdesc(String longdesc) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, 
HtmlConstants.LONGDESC, longdesc);
     }
 
     /**
-     * Sets the property to specify the alt text of the image.
+     * Sets the property to specify the alt text of the image tag.
      *
      * @param alt - the image alignment.
-     * @jsptagref.attributedescription The alternative text of the image
+     * @jsptagref.attributedescription The alternative text of the image tag
      * @jsptagref.databindable Read Only
      * @jsptagref.attributesyntaxvalue <i>string_alt</i>
-     * @netui:attribute required="false" rtexprvalue="true"
-     * description="The alternative text of the image."
+     * @netui:attribute required="false" rtexprvalue="true" description="The 
alternative text for the image tag."
      */
     public void setAlt(String alt) {
         _imageState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, 
HtmlConstants.ALT, alt);
     }
 
     /**
-     * Set the name of the tagId for the image.
+     * Set the name of the tagId for the image tag.
      *
-     * @param tagId - the the name of the tagId for the image.
+     * @param tagId - the the name of the tagId for the image tag.
      * @jsptagref.attributedescription The tagId.
      * @jsptagref.databindable false
      * @jsptagref.attributesyntaxvalue <i>string_tagId</i>
      * @netui:attribute required="false" rtexprvalue="true"
-     * description="String value. Sets the id (or name) attribute of the 
rendered HTML tag. "
+     * description="String value. Sets the id (or name) attribute of the 
rendered HTML image tag."
      */
     public void setTagId(String tagId)
         throws JspException {
         applyIndexedTagId(_imageState, tagId);
     }
 
+    /**
+     * <p>
+     * Implementation of [EMAIL PROTECTED] 
org.apache.beehive.netui.tags.IAttributeConsumer} interface.  This
+     * allows a page author to add additional attributes to the HTML rendered 
by this tag.  The attribute
+     * facets which can be consumed include:
+     * <ul>
+     * <li><code>image</code> -- attributes set using this facet will be 
rendered as HTML attributes on the
+     * rendered HTML &lt;image&gt; tag.</li>
+     * </ul>
+     * </p>
+     * <p>
+     * This tag also accepts facets supported by [EMAIL PROTECTED] 
AbstractHtmlTableCell#setAttribute(String, String, String)}
+     * </p>
+     *
+     * @param name the name of the attribute
+     * @param value the value of the attribute
+     * @param facet the facet for the attribute; this value must be match one 
of the facets supported by the JSP tags
+     * @throws JspException thrown when the given facet String is not 
recognized as a valid facet name
+     */
     public void setAttribute(String name, String value, String facet)
             throws JspException {
         if(facet == null || facet.equals(IMAGE_FACET_NAME))
@@ -374,6 +416,12 @@
             super.setAttribute(name, value, facet);
     }
 
+    /**
+     * Render the cell's contents.  This method implements support for 
executing the image cell's decorator.
+     *
+     * @param appender the [EMAIL PROTECTED] AbstractRenderAppender} used to 
collect the rendered output
+     * @param jspFragmentOutput the String result of having evaluated the 
image cell's [EMAIL PROTECTED] javax.servlet.jsp.tagext.JspFragment}
+     */
     protected void renderDataCellContents(AbstractRenderAppender appender, 
String jspFragmentOutput) {
         /* render any JavaScript needed to support framework features */
         if (_imageState.id != null) {
@@ -388,5 +436,4 @@
     protected CellModel internalGetCellModel() {
         return _imageCellModel;
     }
-}
-
+}
\ No newline at end of file

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/RenderPager.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/RenderPager.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/RenderPager.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/RenderPager.java
 Fri May  6 14:32:58 2005
@@ -23,17 +23,50 @@
 import org.apache.beehive.netui.util.Bundle;
 
 /**
- * @jsptagref.tagdescription Renders a pager in a specific spot inside of a 
data grid.
+ * <p>
+ * Data grid tag used to render the grid's pager at a specific location in a 
JSP.  By default,
+ * the data grid renders its pager in a fixed location.  In order to change 
the location of the pager,
+ * this tag can be used to move the rendered pager or to render multiple 
pagers.  For example, to render
+ * a pager in both the grid's header and footer, the tag can be used as:
+ * <pre>
+ *     <netui-data:header>
+ *         ....
+ *         <netui-data;renderPager/>
+ *         ....
+ *     </netui-data:header>
+ *     <netui-data:footer>
+ *         ....
+ *         <netui-data;renderPager/>
+ *         ....
+ *     </netui-data:footer>
+ * </pre>
+ * </p>
+ *
+ * @jsptagref.tagdescription Data grid tag used to render the grid's pager at 
a specific location in a JSP.
  * @netui:tag name="renderPager" body-content="empty"
- * description="Tag for rendering a pager in a specific spot inside of a data 
grid tag"
+ * description="Data grid tag used to render the grid's pager at a specific 
location in a JSP."
  */
 public class RenderPager
         extends AbstractDataGridHtmlTag {
 
+    /**
+     * The tag's name; this is used for NetUI tag error reporting.
+     *
+     * @return the tag's name
+     */
     public String getTagName() {
         return "RenderPager";
     }
 
+    /**
+     * <p>
+     * Tag rendering method that renders the data grid's registered
+     * [EMAIL PROTECTED] 
org.apache.beehive.netui.databinding.datagrid.api.rendering.PagerRenderer} into 
the
+     * page's output.
+     * </p>
+     *
+     * @throws JspException when an error occurs rendering or no [EMAIL 
PROTECTED] DataGridTagModel} can be found.
+     */
     public void doTag()
             throws JspException {
 

Modified: 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/ArrayIterator.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/ArrayIterator.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/ArrayIterator.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/ArrayIterator.java
 Fri May  6 14:32:58 2005
@@ -36,8 +36,6 @@
 public class ArrayIterator
     implements Iterator {
 
-    private static final Logger logger = 
Logger.getInstance(ArrayIterator.class);
-
     /**
      * The array object supplied to the iterator
      */

Modified: 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/AtomicObjectIterator.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/AtomicObjectIterator.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/AtomicObjectIterator.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/AtomicObjectIterator.java
 Fri May  6 14:32:58 2005
@@ -44,8 +44,7 @@
     public boolean hasNext() {
         if(_nextCalled || _object == null)
             return false;
-        else
-            return true;
+        else return true;
     }
 
     public Object next() {

Modified: 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java
 Fri May  6 14:32:58 2005
@@ -24,7 +24,7 @@
 import org.apache.beehive.netui.util.Bundle;
 
 /**
- * An [EMAIL PROTECTED] java.util.Iterator} implementation an [EMAIL 
PROTECTED] java.util.Enumeration}.
+ * This class implements the [EMAIL PROTECTED] java.util.Iterator} interface 
for an [EMAIL PROTECTED] java.util.Enumeration}.
  */
 public class EnumerationIterator
     implements Iterator {
@@ -38,15 +38,13 @@
     public boolean hasNext() {
         if(_enum == null)
             return false;
-        else
-            return _enum.hasMoreElements();
+        else return _enum.hasMoreElements();
     }
 
     public Object next() {
         if(_enum == null || hasNext() == false)
             throw new 
NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
-        else
-            return _enum.nextElement();
+        else return _enum.nextElement();
     }
 
     public void remove() {

Modified: 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactory.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactory.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactory.java
 Fri May  6 14:32:58 2005
@@ -32,26 +32,29 @@
 import org.apache.beehive.netui.util.logging.Logger;
 
 /**
- * <code>IteratorFactory</code> provides a way to create an
- * <code>Iterator</code> for different kinds of objects. The supported types
- * are:
+ * <p>
+ * This class provides a factory that can create an [EMAIL PROTECTED] 
Iterator} for various types
+ * of Java objects.  Supported types include:
  * <ul>
- * <li><code>java.util.Iterator</code></li>
- * <li><code>java.util.Collection</code></li>
- * <li><code>java.util.Map</code></li>
- * <li><code>javax.sql.RowSet</code></li>
- * <li><code>java.util.Enumeration</code></li>
+ * <li>[EMAIL PROTECTED] java.util.Iterator</li>
+ * <li>[EMAIL PROTECTED] java.util.Collection}</li>
+ * <li>[EMAIL PROTECTED] java.util.Map}</li>
+ * <li>[EMAIL PROTECTED] java.sql.ResultSet}</li>
+ * <li>[EMAIL PROTECTED] javax.sql.RowSet}</li>
+ * <li>[EMAIL PROTECTED] java.util.Enumeration}</li>
  * <li>Any Java Object array</li>
  * </ul>
  * <p/>
- * If a <code>java.util.Iterator</code> is supplied, the
- * <code>Iterator</code> will simply be returned to the caller.
- * <p/>
+ * <p>
  * If an object type not listed above is supplied the object will be wrapped in
- * an iterator that has a single item, the provided object.
+ * an iterator that contains only the provided object.
+ * </p>
  */
 public class IteratorFactory {
 
+    /**
+     * Convenience field for accessing an empty [EMAIL PROTECTED] Iterator}.
+     */
     public static final Iterator EMPTY_ITERATOR = 
Collections.EMPTY_LIST.iterator();
 
     private static final Logger LOGGER = 
Logger.getInstance(IteratorFactory.class);
@@ -74,21 +77,16 @@
     }
 
     /**
-     * Create a new <code>Iterator</code> for the supplied object.  If the
-     * passed object is null, this method will return null;
+     * Create a new [EMAIL PROTECTED] Iterator} for the supplied object.
      *
      * @param object the object to build an iterator from
-     * @return an iterator for the supplied object or <code>null</code>
+     * @return an [EMAIL PROTECTED] Iterator} for the <code>object</code> or 
<code>null</code> if the value is null.
      */
     public static final Iterator createIterator(Object object) {
-        if(LOGGER.isDebugEnabled())
-            LOGGER.debug("Trying to make an iterator for class: " + (object == 
null ? "null" : object.getClass().getName()));
+        LOGGER.debug("Create an iterator for class: " + (object == null ? 
"null" : object.getClass().getName()));
 
-        if(object == null) {
-            // if the object is null we will return a null.  The caller will
-            // have to grab the EMPTY_ITERATOR if it wants to handle this.
+        if(object == null)
             return null;
-        }
 
         if(object instanceof Iterator) {
             return (Iterator)object;
@@ -160,24 +158,17 @@
                 Class type = Class.forName(className);
                 plant = (IteratorPlant)type.newInstance();
             } catch(ClassNotFoundException cnf) {
-                if(LOGGER.isWarnEnabled())
-                    LOGGER.warn("Could not create an IteratorPlant for type 
\"" + className + "\" because the implementation class could not be found.");
-
+                LOGGER.warn("Could not create an IteratorPlant for type \"" + 
className + "\" because the implementation class could not be found.");
                 continue;
             } catch(Exception e) {
                 assert e instanceof InstantiationException || e instanceof 
IllegalAccessException;
-
-                if(LOGGER.isWarnEnabled())
-                    LOGGER.warn("Could not create an IteratorPlant for type 
\"" + className + "\" because an error occurred creating the plant.  Cause: " + 
e, e);
+                LOGGER.warn("Could not create an IteratorPlant for type \"" + 
className + "\" because an error occurred creating the plant.  Cause: " + e, e);
                 continue;
             }
 
             if(ITERATOR_FACTORIES.containsKey(name)) {
-                if(LOGGER.isWarnEnabled())
-                    LOGGER.warn("Overwriting a previously defined 
IteratorPlant named \"" + name +
-                        "\" with a new IteratorPlant of type \"" + className + 
"\"");
-            } else if(LOGGER.isInfoEnabled())
-                LOGGER.info("Adding an IteratorPlant named \"" + name + "\" 
with implementation \"" + className + "\"");
+                LOGGER.warn("Overwriting a previously defined IteratorPlant 
named \"" + name + "\" with a new IteratorPlant of type \"" + className + "\"");
+            } else LOGGER.info("Adding an IteratorPlant named \"" + name + "\" 
with implementation \"" + className + "\"");
 
             ITERATOR_FACTORIES.put(name, plant);
         }

Modified: 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/MapIterator.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/MapIterator.java?rev=168663&r1=168662&r2=168663&view=diff
==============================================================================
--- 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/MapIterator.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/MapIterator.java
 Fri May  6 14:32:58 2005
@@ -24,9 +24,8 @@
 import org.apache.beehive.netui.util.Bundle;
 
 /**
- * <code>MapIterator</code> provides an <code>Iterator</code> over map values.
- * <code>MapIterator</code> iterates over the sequence of values stored in the
- * map.
+ * This class implements the [EMAIL PROTECTED] Iterator} interface for 
accessing the set of
+ * values stored in a [EMAIL PROTECTED] Map}.
  */
 public class MapIterator
     implements Iterator {
@@ -36,6 +35,10 @@
      */
     private Iterator _mapIterator = null;
 
+    /**
+     * Create the [EMAIL PROTECTED] Iterator} for the given [EMAIL PROTECTED] 
Map}
+     * @param map
+     */
     public MapIterator(Map map) {
         if(map == null)
             return;
@@ -43,18 +46,32 @@
         _mapIterator = map.values().iterator();
     }
 
+    /**
+     * Advance to the next value in the [EMAIL PROTECTED] Map}.
+     *
+     * @return <code>true</code> if there is a next item; <code>false</code> 
otherwise
+     */
     public boolean hasNext() {
         if(_mapIterator == null)
             return false;
         else return _mapIterator.hasNext();
     }
 
+    /**
+     * Advance to the next item in the [EMAIL PROTECTED] Map}
+     *
+     * @return the next item
+     * @throws NoSuchElementException if the map has no more elements
+     */
     public Object next() {
         if(_mapIterator == null)
             throw new 
NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
         else return _mapIterator.next();
     }
 
+    /**
+     * Remove the current item in the iterator.
+     */
     public void remove() {
         if(_mapIterator == null)
             throw new 
UnsupportedOperationException(Bundle.getErrorString("IteratorFactory_Iterator_removeUnsupported",
 new Object[]{this.getClass().getName()}));


Reply via email to