You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2007/02/13 02:59:51 UTC

svn commit: r506801 - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/beaneditor/ main/java/org/apache/tapestry/corelib/components/ main/java/org/apache/tapestry/grid/ main/java/org/apache/tapestry/internal/beaneditor/ mai...

Author: hlship
Date: Mon Feb 12 17:59:49 2007
New Revision: 506801

URL: http://svn.apache.org/viewvc?view=rev&rev=506801
Log:
Consolidate BeanEditModel and GridDataModel into a single interface: BeanModel (and PropertyModel).

Added:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanModel.java
      - copied, changed from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanEditorModel.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/PropertyModel.java
      - copied, changed from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/PropertyEditModel.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelImpl.java
      - copied, changed from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanEditorModelImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyModelImpl.java
      - copied, changed from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyEditModelImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BeanModelSourceImpl.java
      - copied, changed from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BeanEditorModelSourceImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/BeanModelSource.java
      - copied, changed from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/BeanEditorModelSource.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java
      - copied, changed from r506764, tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanEditorModelSourceImplTest.java
Removed:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanEditorModel.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/PropertyEditModel.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/ColumnModel.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridDataModel.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanEditorModelImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyEditModelImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/grid/ColumnModelImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/grid/GridDataModelImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/grid/GridMessages.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BeanEditorModelSourceImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/GridDataModelSourceImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/BeanEditorModelSource.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/GridDataModelSource.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/grid/GridStrings.properties
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanEditorModelSourceImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/GridDataModelSourceImplTest.java
Modified:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Grid.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridCell.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridColumns.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridRows.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridModelProvider.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TapestryTestCase.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ReadOnlyBean.java

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanModel.java (from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanEditorModel.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanModel.java?view=diff&rev=506801&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanEditorModel.java&r1=506764&p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanModel.java&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanEditorModel.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanModel.java Mon Feb 12 17:59:49 2007
@@ -16,18 +16,23 @@
 
 import java.util.List;
 
+import org.apache.tapestry.services.BeanModelSource;
+
 /**
- * Provides the information necessary to build a user interface to create or edit an instance of a
- * particular type.
+ * Provides the information necessary to build a user interface to view, create or edit an instance
+ * of a particular type.
  * <p>
- * BeanEditorModels are not threadsafe, they are also not serializable.
+ * BeanModels are not threadsafe, they are also not serializable.
+ * 
+ * @see BeanModelSource
  */
-public interface BeanEditorModel
+public interface BeanModel
 {
+    /** Returns the type of bean for which this model was initially created. */
+    Class getBeanType();
+
     /**
      * Returns a list of the editable properties of the bean, in <em>presentation</em> order.
-     * 
-     * @return
      */
     List<String> getPropertyNames();
 
@@ -40,7 +45,7 @@
      * @throws RuntimeException
      *             if the bean editor model does not have a property model for the provided name
      */
-    PropertyEditModel get(String propertyName);
+    PropertyModel get(String propertyName);
 
     /**
      * Adds a new property to the model, returning its mutable model for further refinement.
@@ -51,5 +56,5 @@
      * @throws RuntimeException
      *             if the property already exists
      */
-    PropertyEditModel add(String propertyName);
+    PropertyModel add(String propertyName);
 }

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/PropertyModel.java (from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/PropertyEditModel.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/PropertyModel.java?view=diff&rev=506801&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/PropertyEditModel.java&r1=506764&p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/PropertyModel.java&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/PropertyEditModel.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/PropertyModel.java Mon Feb 12 17:59:49 2007
@@ -17,12 +17,11 @@
 import org.apache.tapestry.PropertyConduit;
 
 /**
- * Part of a {@link BeanEditorModel} that defines the attributes of a single edittable property of a
- * bean.
+ * Part of a {@link BeanModel} that defines the attributes of a single property of a bean.
  */
-public interface PropertyEditModel
+public interface PropertyModel
 {
-    /** Returns the name of the property. */
+    /** Returns the name of the property (which may, in fact, be a property expression). */
     String getPropertyName();
 
     /**
@@ -52,7 +51,7 @@
      * @param editorType
      * @return the property edit model, for further changes
      */
-    PropertyEditModel editorType(String editorType);
+    PropertyModel editorType(String editorType);
 
     /**
      * Returns an object used to read or update the property. For virtual properties (properties
@@ -68,14 +67,14 @@
      *            new label for property
      * @return the property edit model, for further changes
      */
-    PropertyEditModel label(String label);
+    PropertyModel label(String label);
 
     /**
      * Changes the order for the property. The properties are sorted by order (and then by name for
      * identical orders) when building the user interface.
      */
-    PropertyEditModel order(int order);
+    PropertyModel order(int order);
 
     /** Returns the containing model, often used for "fluent" construction of the model. */
-    BeanEditorModel model();
+    BeanModel model();
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java?view=diff&rev=506801&r1=506800&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java Mon Feb 12 17:59:49 2007
@@ -29,10 +29,10 @@
 import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.annotations.Parameter;
 import org.apache.tapestry.annotations.SupportsInformalParameters;
-import org.apache.tapestry.beaneditor.BeanEditorModel;
-import org.apache.tapestry.beaneditor.PropertyEditModel;
+import org.apache.tapestry.beaneditor.BeanModel;
+import org.apache.tapestry.beaneditor.PropertyModel;
 import org.apache.tapestry.ioc.Messages;
-import org.apache.tapestry.services.BeanEditorModelSource;
+import org.apache.tapestry.services.BeanModelSource;
 import org.apache.tapestry.services.FieldValidatorDefaultSource;
 import org.apache.tapestry.services.TranslatorDefaultSource;
 
@@ -52,8 +52,8 @@
  * This component is likely to change more than any other thing in Tapestry! What's available now is
  * a very limited preview of its eventual functionality.
  * 
- * @see BeanEditorModel
- * @see BeanEditorModelSource
+ * @see BeanModel
+ * @see BeanModelSource
  */
 @SupportsInformalParameters
 public class BeanEditForm
@@ -68,8 +68,8 @@
     @Inject
     private ComponentResources _resources;
 
-    @Inject("infrastructure:BeanEditorModelSource")
-    private BeanEditorModelSource _modelSource;
+    @Inject("infrastructure:BeanModelSource")
+    private BeanModelSource _modelSource;
 
     @Inject("infrastructure:TranslatorDefaultSource")
     private TranslatorDefaultSource _translatorDefaultSource;
@@ -112,19 +112,19 @@
     private Locale _locale;
 
     @Parameter
-    private BeanEditorModel _model;
+    private BeanModel _model;
 
     // Values that change with each change to the current property:
 
     private String _propertyName;
 
-    private PropertyEditModel _propertyEditModel;
+    private PropertyModel _propertyEditModel;
 
     private Block _blockForProperty;
 
     private Field _fieldForProperty;
 
-    public BeanEditorModel getModel()
+    public BeanModel getModel()
     {
         return _model;
     }
@@ -188,7 +188,7 @@
         {
             Class<? extends Object> beanType = _object.getClass();
 
-            _model = _modelSource.create(beanType, _resources.getContainerResources());
+            _model = _modelSource.create(beanType, true, _resources.getContainerResources());
         }
 
         return true; // abort the form's prepare event
@@ -210,7 +210,7 @@
                 _propertyEditModel.getConduit());
     }
 
-    public PropertyEditModel getPropertyEditModel()
+    public PropertyModel getPropertyEditModel()
     {
         return _propertyEditModel;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Grid.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Grid.java?view=diff&rev=506801&r1=506800&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Grid.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Grid.java Mon Feb 12 17:59:49 2007
@@ -22,12 +22,12 @@
 import org.apache.tapestry.annotations.Parameter;
 import org.apache.tapestry.annotations.Persist;
 import org.apache.tapestry.annotations.SupportsInformalParameters;
-import org.apache.tapestry.grid.GridDataModel;
+import org.apache.tapestry.beaneditor.BeanModel;
 import org.apache.tapestry.grid.GridDataSource;
 import org.apache.tapestry.grid.GridModelProvider;
 import org.apache.tapestry.internal.bindings.AbstractBinding;
 import org.apache.tapestry.ioc.services.TypeCoercer;
-import org.apache.tapestry.services.GridDataModelSource;
+import org.apache.tapestry.services.BeanModelSource;
 
 /**
  * A grid presents tabular data. It is a composite component, created in terms of several
@@ -50,7 +50,7 @@
     private Object _row;
 
     @Parameter
-    private GridDataModel _model;
+    private BeanModel _model;
 
     @Parameter(value = "block:empty")
     private Block _empty;
@@ -58,8 +58,8 @@
     @Inject
     private ComponentResources _resources;
 
-    @Inject("infrastructure:GridDataModelSource")
-    private GridDataModelSource _modelSource;
+    @Inject("infrastructure:BeanModelSource")
+    private BeanModelSource _modelSource;
 
     @Inject("infrastructure:TypeCoercer")
     private TypeCoercer _typeCoercer;
@@ -77,19 +77,24 @@
             "row=row" })
     private GridRows _rows;
 
+    @SuppressWarnings("unused")
     @Component(parameters =
     { "source=dataSource", "rowsPerPage=rowsPerPage", "currentPage=currentPage" })
     private GridPager _pager;
 
+    /**
+     * Dynamically computes the model based on the row type (determined from the
+     * {@link GridDataSource#getRowType() data model).  
+     */
     static class ModelBinding extends AbstractBinding
     {
         private final Grid _grid;
 
-        private final GridDataModelSource _modelSource;
+        private final BeanModelSource _modelSource;
 
         private final ComponentResources _containerResources;
 
-        public ModelBinding(final Grid grid, final GridDataModelSource modelSource,
+        public ModelBinding(final Grid grid, final BeanModelSource modelSource,
                 final ComponentResources containerResources)
         {
             _grid = grid;
@@ -106,18 +111,30 @@
             if (rowType == null)
                 throw new RuntimeException("xxx -- no source to determine list type from");
 
-            return _modelSource.create(rowType, _containerResources);
+            // Properties do not have to be read/write
+
+            return _modelSource.create(rowType, false, _containerResources);
         }
 
+        /**
+         * Returns false. This may be overkill, but it basically exists because the model is
+         * inherently mutable and therefore may contain client-specific state and needs to be
+         * discard at the end of the request. If the model were immutable, then we could leave
+         * invariant as true.
+         */
         @Override
         public boolean isInvariant()
         {
             return false;
         }
+
     }
 
     Binding defaultModel()
     {
+        // This should be done as an inner class, but Javassist has been barfing on that
+        // for some reason. This could be a problem!
+
         return new ModelBinding(this, _modelSource, _resources.getContainerResources());
     }
 
@@ -144,7 +161,7 @@
         return null;
     }
 
-    public GridDataModel getDataModel()
+    public BeanModel getDataModel()
     {
         return _model;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridCell.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridCell.java?view=diff&rev=506801&r1=506800&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridCell.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridCell.java Mon Feb 12 17:59:49 2007
@@ -18,13 +18,13 @@
 import org.apache.tapestry.ComponentResources;
 import org.apache.tapestry.MarkupWriter;
 import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.grid.ColumnModel;
+import org.apache.tapestry.beaneditor.PropertyModel;
 
 public class GridCell
 {
     /** Model for property displayed by the cell. */
     @Parameter(required = true)
-    private ColumnModel _model;
+    private PropertyModel _model;
 
     /** Resources used to search for overrides. */
     @Parameter(required = true)

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridColumns.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridColumns.java?view=diff&rev=506801&r1=506800&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridColumns.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridColumns.java Mon Feb 12 17:59:49 2007
@@ -17,7 +17,7 @@
 import java.util.List;
 
 import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.grid.ColumnModel;
+import org.apache.tapestry.beaneditor.PropertyModel;
 import org.apache.tapestry.grid.GridModelProvider;
 
 /**
@@ -29,14 +29,14 @@
     @Parameter(value = "componentResources.container", required = true)
     private GridModelProvider _dataProvider;
 
-    private ColumnModel _columnModel;
+    private PropertyModel _columnModel;
 
     public List<String> getColumnNames()
     {
         return _dataProvider.getDataModel().getPropertyNames();
     }
 
-    public ColumnModel getColumnModel()
+    public PropertyModel getColumnModel()
     {
         return _columnModel;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridRows.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridRows.java?view=diff&rev=506801&r1=506800&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridRows.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridRows.java Mon Feb 12 17:59:49 2007
@@ -17,7 +17,7 @@
 import java.util.List;
 
 import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.grid.ColumnModel;
+import org.apache.tapestry.beaneditor.PropertyModel;
 import org.apache.tapestry.grid.GridDataSource;
 import org.apache.tapestry.grid.GridModelProvider;
 
@@ -50,7 +50,7 @@
 
     private String _propertyName;
 
-    private ColumnModel _columnModel;
+    private PropertyModel _columnModel;
 
     public String getRowClass()
     {
@@ -117,7 +117,7 @@
         return _row;
     }
 
-    public ColumnModel getColumnModel()
+    public PropertyModel getColumnModel()
     {
         return _columnModel;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridModelProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridModelProvider.java?view=diff&rev=506801&r1=506800&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridModelProvider.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridModelProvider.java Mon Feb 12 17:59:49 2007
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry.grid;
 
+import org.apache.tapestry.beaneditor.BeanModel;
 import org.apache.tapestry.corelib.components.Grid;
 
 /**
@@ -26,7 +27,7 @@
      * Returns the data model, which defines the columns (in terms of properties of the row type),
      * and provides access to actual values for a given row instance.
      */
-    GridDataModel getDataModel();
+    BeanModel getDataModel();
 
     /** Returns the source for the data to be presented in the Grid. */
     GridDataSource getDataSource();

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelImpl.java (from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanEditorModelImpl.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelImpl.java?view=diff&rev=506801&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanEditorModelImpl.java&r1=506764&p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelImpl.java&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanEditorModelImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelImpl.java Mon Feb 12 17:59:49 2007
@@ -23,14 +23,14 @@
 import java.util.Map;
 
 import org.apache.tapestry.PropertyConduit;
-import org.apache.tapestry.beaneditor.BeanEditorModel;
-import org.apache.tapestry.beaneditor.PropertyEditModel;
+import org.apache.tapestry.beaneditor.BeanModel;
+import org.apache.tapestry.beaneditor.PropertyModel;
 import org.apache.tapestry.internal.services.CoercingPropertyConduitWrapper;
 import org.apache.tapestry.ioc.Messages;
 import org.apache.tapestry.ioc.services.TypeCoercer;
 import org.apache.tapestry.services.PropertyConduitSource;
 
-public class BeanEditorModelImpl implements BeanEditorModel, Comparator<PropertyEditModel>
+public class BeanModelImpl implements BeanModel, Comparator<PropertyModel>
 {
     private final Class _beanType;
 
@@ -40,9 +40,9 @@
 
     private final Messages _messages;
 
-    private final Map<String, PropertyEditModel> _properties = newCaseInsensitiveMap();
+    private final Map<String, PropertyModel> _properties = newCaseInsensitiveMap();
 
-    public BeanEditorModelImpl(Class beanType, PropertyConduitSource propertyConduitSource,
+    public BeanModelImpl(Class beanType, PropertyConduitSource propertyConduitSource,
             TypeCoercer typeCoercer, Messages messages)
     {
         _beanType = beanType;
@@ -51,7 +51,12 @@
         _messages = messages;
     }
 
-    public PropertyEditModel add(String propertyName)
+    public Class getBeanType()
+    {
+        return _beanType;
+    }
+
+    public PropertyModel add(String propertyName)
     {
         if (_properties.containsKey(propertyName))
             throw new RuntimeException(BeanEditorMessages.duplicatePropertyName(
@@ -60,7 +65,7 @@
 
         PropertyConduit conduit = createConduit(propertyName);
 
-        PropertyEditModel propertyModel = new PropertyEditModelImpl(this, propertyName, conduit,
+        PropertyModel propertyModel = new PropertyModelImpl(this, propertyName, conduit,
                 _messages);
 
         _properties.put(propertyName, propertyModel);
@@ -75,9 +80,9 @@
                 propertyName), _typeCoercer);
     }
 
-    public PropertyEditModel get(String propertyName)
+    public PropertyModel get(String propertyName)
     {
-        PropertyEditModel propertyModel = _properties.get(propertyName);
+        PropertyModel propertyModel = _properties.get(propertyName);
 
         if (propertyModel == null)
             throw new RuntimeException(BeanEditorMessages.unknownProperty(
@@ -90,21 +95,21 @@
 
     public List<String> getPropertyNames()
     {
-        List<PropertyEditModel> propertyModels = newList(_properties.values());
+        List<PropertyModel> propertyModels = newList(_properties.values());
 
         // Sort the list of models by their order property.
-        
+
         Collections.sort(propertyModels, this);
 
         List<String> result = newList();
 
-        for (PropertyEditModel propertyModel : propertyModels)
+        for (PropertyModel propertyModel : propertyModels)
             result.add(propertyModel.getPropertyName());
 
         return result;
     }
 
-    public int compare(PropertyEditModel o1, PropertyEditModel o2)
+    public int compare(PropertyModel o1, PropertyModel o2)
     {
         int result = o1.getOrder() - o2.getOrder();
 

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyModelImpl.java (from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyEditModelImpl.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyModelImpl.java?view=diff&rev=506801&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyEditModelImpl.java&r1=506764&p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyModelImpl.java&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyEditModelImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyModelImpl.java Mon Feb 12 17:59:49 2007
@@ -17,14 +17,14 @@
 import static org.apache.tapestry.ioc.internal.util.Defense.notBlank;
 
 import org.apache.tapestry.PropertyConduit;
-import org.apache.tapestry.beaneditor.BeanEditorModel;
-import org.apache.tapestry.beaneditor.PropertyEditModel;
+import org.apache.tapestry.beaneditor.BeanModel;
+import org.apache.tapestry.beaneditor.PropertyModel;
 import org.apache.tapestry.internal.TapestryUtils;
 import org.apache.tapestry.ioc.Messages;
 
-public class PropertyEditModelImpl implements PropertyEditModel
+public class PropertyModelImpl implements PropertyModel
 {
-    private final BeanEditorModel _model;
+    private final BeanModel _model;
 
     private final String _name;
 
@@ -38,7 +38,7 @@
 
     private String _editorType;
 
-    public PropertyEditModelImpl(BeanEditorModel model, final String name,
+    public PropertyModelImpl(BeanModel model, final String name,
             final PropertyConduit conduit, Messages messages)
     {
         _model = model;
@@ -67,7 +67,7 @@
         return _conduit;
     }
 
-    public PropertyEditModel label(String label)
+    public PropertyModel label(String label)
     {
         notBlank(label, "label");
 
@@ -91,19 +91,19 @@
         return _order;
     }
 
-    public PropertyEditModel order(int order)
+    public PropertyModel order(int order)
     {
         _order = order;
 
         return this;
     }
 
-    public BeanEditorModel model()
+    public BeanModel model()
     {
         return _model;
     }
 
-    public PropertyEditModel editorType(String editorType)
+    public PropertyModel editorType(String editorType)
     {
         _editorType = editorType;
 

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BeanModelSourceImpl.java (from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BeanEditorModelSourceImpl.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BeanModelSourceImpl.java?view=diff&rev=506801&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BeanEditorModelSourceImpl.java&r1=506764&p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BeanModelSourceImpl.java&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BeanEditorModelSourceImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BeanModelSourceImpl.java Mon Feb 12 17:59:49 2007
@@ -21,10 +21,10 @@
 import java.util.Map;
 
 import org.apache.tapestry.ComponentResources;
-import org.apache.tapestry.beaneditor.BeanEditorModel;
+import org.apache.tapestry.beaneditor.BeanModel;
 import org.apache.tapestry.events.InvalidationListener;
 import org.apache.tapestry.internal.TapestryUtils;
-import org.apache.tapestry.internal.beaneditor.BeanEditorModelImpl;
+import org.apache.tapestry.internal.beaneditor.BeanModelImpl;
 import org.apache.tapestry.ioc.Messages;
 import org.apache.tapestry.ioc.services.ClassFactory;
 import org.apache.tapestry.ioc.services.ClassPropertyAdapter;
@@ -32,10 +32,10 @@
 import org.apache.tapestry.ioc.services.PropertyAdapter;
 import org.apache.tapestry.ioc.services.TypeCoercer;
 import org.apache.tapestry.ioc.util.StrategyRegistry;
-import org.apache.tapestry.services.BeanEditorModelSource;
+import org.apache.tapestry.services.BeanModelSource;
 import org.apache.tapestry.services.PropertyConduitSource;
 
-public class BeanEditorModelSourceImpl implements BeanEditorModelSource, InvalidationListener
+public class BeanModelSourceImpl implements BeanModelSource, InvalidationListener
 {
     private final TypeCoercer _typeCoercer;
 
@@ -47,7 +47,7 @@
 
     private final StrategyRegistry<String> _registry;
 
-    public BeanEditorModelSourceImpl(final TypeCoercer typeCoercer,
+    public BeanModelSourceImpl(final TypeCoercer typeCoercer,
             final PropertyAccess propertyAccess, final PropertyConduitSource propertyConduitSource,
             ClassFactory classFactory, Map<Class, String> configuration)
     {
@@ -64,7 +64,8 @@
         _registry.clearCache();
     }
 
-    public BeanEditorModel create(Class beanClass, ComponentResources resources)
+    public BeanModel create(Class beanClass, boolean filterReadOnlyProperties,
+            ComponentResources resources)
     {
         notNull(beanClass, "beanClass");
         notNull(resources, "resources");
@@ -73,7 +74,7 @@
 
         ClassPropertyAdapter adapter = _propertyAccess.getAdapter(beanClass);
 
-        BeanEditorModel model = new BeanEditorModelImpl(beanClass, _propertyConduitSource,
+        BeanModel model = new BeanModelImpl(beanClass, _propertyConduitSource,
                 _typeCoercer, messages);
 
         List<String> propertyNames = newList();
@@ -82,19 +83,22 @@
         {
             PropertyAdapter pa = adapter.getPropertyAdapter(propertyName);
 
-            if (pa.isRead() && pa.isUpdate())
-            {
-                String editorType = _registry.get(pa.getType());
+            if (!pa.isRead())
+                continue;
 
-                // If an unregistered type, then ignore the property.
+            if (filterReadOnlyProperties && !pa.isUpdate())
+                continue;
 
-                if (editorType.equals(""))
-                    continue;
+            String editorType = _registry.get(pa.getType());
 
-                model.add(propertyName).editorType(editorType);
+            // If an unregistered type, then ignore the property.
 
-                propertyNames.add(propertyName);
-            }
+            if (editorType.equals(""))
+                continue;
+
+            model.add(propertyName).editorType(editorType);
+
+            propertyNames.add(propertyName);
         }
 
         // Set default property order for properties that are not explicit.

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/BeanModelSource.java (from r506764, tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/BeanEditorModelSource.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/BeanModelSource.java?view=diff&rev=506801&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/BeanEditorModelSource.java&r1=506764&p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/BeanModelSource.java&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/BeanEditorModelSource.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/BeanModelSource.java Mon Feb 12 17:59:49 2007
@@ -15,14 +15,14 @@
 package org.apache.tapestry.services;
 
 import org.apache.tapestry.ComponentResources;
-import org.apache.tapestry.beaneditor.BeanEditorModel;
+import org.apache.tapestry.beaneditor.BeanModel;
 import org.apache.tapestry.beaneditor.Order;
 
 /**
- * Used by a component to create a default {@link BeanEditorModel} for a particular bean class. Also
+ * Used by a component to create a default {@link BeanModel} for a particular bean class. Also
  * provides support to the model by generating validation information for individual fields.
  */
-public interface BeanEditorModelSource
+public interface BeanModelSource
 {
     /**
      * Creates a new model used for editting the indicated bean class. The model will represent all
@@ -36,10 +36,15 @@
      * 
      * @param beanClass
      *            class of object to be editted
+     * @param filterReadOnlyProperties
+     *            if true, then properties that are read-only will be skipped (leaving only
+     *            read-write properties). If false, then both read-only and read-write properties
+     *            will be included.
      * @param resources
      *            used when resolving resources, especially component messages (used to access
      *            labels)
      * @return a model
      */
-    BeanEditorModel create(Class beanClass, ComponentResources resources);
+    BeanModel create(Class beanClass, boolean filterReadOnlyProperties,
+            ComponentResources resources);
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java?view=diff&rev=506801&r1=506800&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java Mon Feb 12 17:59:49 2007
@@ -67,7 +67,7 @@
 import org.apache.tapestry.internal.services.ApplicationStateWorker;
 import org.apache.tapestry.internal.services.AssetDispatcher;
 import org.apache.tapestry.internal.services.AssetSourceImpl;
-import org.apache.tapestry.internal.services.BeanEditorModelSourceImpl;
+import org.apache.tapestry.internal.services.BeanModelSourceImpl;
 import org.apache.tapestry.internal.services.BindingSourceImpl;
 import org.apache.tapestry.internal.services.ClasspathAssetAliasManagerImpl;
 import org.apache.tapestry.internal.services.CommonResourcesInjectionProvider;
@@ -94,7 +94,6 @@
 import org.apache.tapestry.internal.services.FieldValidatorDefaultSourceImpl;
 import org.apache.tapestry.internal.services.FieldValidatorSourceImpl;
 import org.apache.tapestry.internal.services.FlashPersistentFieldStrategy;
-import org.apache.tapestry.internal.services.GridDataModelSourceImpl;
 import org.apache.tapestry.internal.services.HeartbeatImpl;
 import org.apache.tapestry.internal.services.InfrastructureImpl;
 import org.apache.tapestry.internal.services.InfrastructureManagerImpl;
@@ -550,7 +549,7 @@
                 ApplicationStateManager.class,
                 ApplicationStatePersistenceStrategySource.class,
                 AssetSource.class,
-                BeanEditorModelSource.class,
+                BeanModelSource.class,
                 BindingSource.class,
                 ClasspathAssetAliasManager.class,
                 ComponentClassResolver.class,
@@ -560,7 +559,6 @@
                 Environment.class,
                 FieldValidatorDefaultSource.class,
                 FieldValidatorSource.class,
-                GridDataModelSource.class,
                 MarkupWriterFactory.class,
                 MetaDataLocator.class,
                 PersistentFieldManager.class,
@@ -1320,18 +1318,18 @@
     }
 
     /**
-     * The configurationof the model source is a mapping from type to string. The types are property
-     * types and the values, the strings, represent different type of editors.
+     * The configuration of the model source is a mapping from type to string. The types are
+     * property types and the values, the strings, represent different type of editors.
      */
-    public BeanEditorModelSource buildBeanEditorModelSource(
+    public BeanModelSource buildBeanModelSource(
 
     @Inject("infrastructure:TypeCoercer")
     TypeCoercer typeCoercer,
 
     Map<Class, String> configuration)
     {
-        BeanEditorModelSourceImpl service = new BeanEditorModelSourceImpl(typeCoercer,
-                _propertyAccess, _propertyConduitSource, _componentClassFactory, configuration);
+        BeanModelSourceImpl service = new BeanModelSourceImpl(typeCoercer, _propertyAccess,
+                _propertyConduitSource, _componentClassFactory, configuration);
 
         _componentInstantiatorSource.addInvalidationListener(service);
 
@@ -1347,7 +1345,7 @@
      * <li>Boolean --&gt; checkbox
      * </ul>
      */
-    public static void contributeBeanEditorModelSource(
+    public static void contributeBeanModelSource(
             MappedConfiguration<Class, String> configuration)
     {
         configuration.add(Object.class, "");
@@ -1396,12 +1394,6 @@
         _componentInstantiatorSource.addInvalidationListener(service);
 
         return service;
-    }
-
-    public GridDataModelSource buildGridDataModelSource()
-    {
-        return new GridDataModelSourceImpl(_propertyAccess, _componentClassFactory,
-                _propertyConduitSource);
     }
 
     public MetaDataLocator buildMetaDataLocator(@Inject("infrastructure:ComponentClassResolver")

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TapestryTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TapestryTestCase.java?view=diff&rev=506801&r1=506800&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TapestryTestCase.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TapestryTestCase.java Mon Feb 12 17:59:49 2007
@@ -49,7 +49,7 @@
 import org.apache.tapestry.Validator;
 import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.beaneditor.PropertyEditModel;
+import org.apache.tapestry.beaneditor.PropertyModel;
 import org.apache.tapestry.ioc.Location;
 import org.apache.tapestry.ioc.Messages;
 import org.apache.tapestry.ioc.Resource;
@@ -777,7 +777,7 @@
         expect(provider.getAnnotation(annotationClass)).andReturn(annotation).atLeastOnce();
     }
 
-    protected final void train_getConduit(PropertyEditModel model, PropertyConduit conduit)
+    protected final void train_getConduit(PropertyModel model, PropertyConduit conduit)
     {
         expect(model.getConduit()).andReturn(conduit).atLeastOnce();
     }
@@ -787,9 +787,9 @@
         return newMock(PropertyConduit.class);
     }
 
-    protected final PropertyEditModel newPropertyEditModel()
+    protected final PropertyModel newPropertyEditModel()
     {
-        return newMock(PropertyEditModel.class);
+        return newMock(PropertyModel.class);
     }
 
     protected final AnnotationProvider newAnnotationProvider()

Copied: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java (from r506764, tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanEditorModelSourceImplTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java?view=diff&rev=506801&p1=tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanEditorModelSourceImplTest.java&r1=506764&p2=tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanEditorModelSourceImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java Mon Feb 12 17:59:49 2007
@@ -19,24 +19,24 @@
 
 import org.apache.tapestry.ComponentResources;
 import org.apache.tapestry.PropertyConduit;
-import org.apache.tapestry.beaneditor.BeanEditorModel;
-import org.apache.tapestry.beaneditor.PropertyEditModel;
+import org.apache.tapestry.beaneditor.BeanModel;
+import org.apache.tapestry.beaneditor.PropertyModel;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import org.apache.tapestry.ioc.Messages;
-import org.apache.tapestry.services.BeanEditorModelSource;
+import org.apache.tapestry.services.BeanModelSource;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 /** Tests for the bean editor model source itself, as well as the model classes. */
-public class BeanEditorModelSourceImplTest extends InternalBaseTestCase
+public class BeanModelSourceImplTest extends InternalBaseTestCase
 {
-    private BeanEditorModelSource _source;
+    private BeanModelSource _source;
 
     @BeforeClass
     public void setup()
     {
-        _source = getObject("infrastructure:BeanEditorModelSource", BeanEditorModelSource.class);
+        _source = getObject("infrastructure:BeanModelSource", BeanModelSource.class);
     }
 
     @AfterClass
@@ -57,19 +57,21 @@
 
         replay();
 
-        BeanEditorModel model = _source.create(SimpleBean.class, resources);
+        BeanModel model = _source.create(SimpleBean.class, true, resources);
+
+        assertSame(model.getBeanType(), SimpleBean.class);
 
         // Based on order of the getter methods (no longer alphabetical)
 
         assertEquals(model.getPropertyNames(), Arrays.asList("firstName", "lastName", "age"));
 
-        PropertyEditModel age = model.get("age");
+        PropertyModel age = model.get("age");
 
         assertEquals(age.getLabel(), "Age");
         assertSame(age.getPropertyType(), int.class);
         assertEquals(age.getEditorType(), "text");
 
-        PropertyEditModel firstName = model.get("firstName");
+        PropertyModel firstName = model.get("firstName");
 
         assertEquals(firstName.getLabel(), "First Name");
         assertEquals(firstName.getPropertyType(), String.class);
@@ -99,6 +101,28 @@
     }
 
     @Test
+    public void filtering_out_read_only_properties()
+    {
+        ComponentResources resources = newComponentResources();
+        Messages messages = newMessages();
+
+        train_getMessages(resources, messages);
+        stub_contains(messages, false);
+
+        replay();
+
+        BeanModel model = _source.create(ReadOnlyBean.class, true, resources);
+
+        assertEquals(model.getPropertyNames(), Arrays.asList("value"));
+
+        model = _source.create(ReadOnlyBean.class, false, resources);
+
+        assertEquals(model.getPropertyNames(), Arrays.asList("value", "readOnly"));
+
+        verify();
+    }
+
+    @Test
     public void non_text_property()
     {
         ComponentResources resources = newComponentResources();
@@ -109,7 +133,7 @@
 
         replay();
 
-        BeanEditorModel model = _source.create(EnumBean.class, resources);
+        BeanModel model = _source.create(EnumBean.class, true, resources);
 
         assertEquals(model.getPropertyNames(), Arrays.asList("token"));
 
@@ -129,7 +153,7 @@
 
         replay();
 
-        BeanEditorModel model = _source.create(SimpleBean.class, resources);
+        BeanModel model = _source.create(SimpleBean.class, true, resources);
 
         try
         {
@@ -157,7 +181,7 @@
 
         replay();
 
-        BeanEditorModel model = _source.create(SimpleBean.class, resources);
+        BeanModel model = _source.create(SimpleBean.class, true, resources);
 
         try
         {
@@ -186,7 +210,7 @@
 
         replay();
 
-        BeanEditorModel model = _source.create(StoogeBean.class, resources);
+        BeanModel model = _source.create(StoogeBean.class, true, resources);
 
         assertEquals(model.getPropertyNames(), Arrays.asList("larry", "moe", "shemp", "curly"));
 
@@ -204,7 +228,7 @@
 
         replay();
 
-        BeanEditorModel model = _source.create(SimpleBean.class, resources).get("age").label(
+        BeanModel model = _source.create(SimpleBean.class, true, resources).get("age").label(
                 "Decrepitude").model();
 
         assertEquals(model.get("age").getLabel(), "Decrepitude");
@@ -226,7 +250,7 @@
 
         replay();
 
-        BeanEditorModel model = _source.create(SimpleBean.class, resources);
+        BeanModel model = _source.create(SimpleBean.class, true, resources);
 
         assertEquals(model.get("age").getLabel(), "Decrepitude");
 
@@ -244,11 +268,11 @@
 
         replay();
 
-        BeanEditorModel model = _source.create(StringArrayBean.class, resources);
+        BeanModel model = _source.create(StringArrayBean.class, true, resources);
 
         // There's not editor for string arrays yet, so it won't show up normally.
 
-        PropertyEditModel propertyModel = model.add("array");
+        PropertyModel propertyModel = model.add("array");
 
         assertSame(propertyModel.getPropertyType(), String[].class);
 
@@ -282,7 +306,7 @@
 
         replay();
 
-        BeanEditorModel model = _source.create(CompositeBean.class, resources);
+        BeanModel model = _source.create(CompositeBean.class, true, resources);
 
         // No editor for CompositeBean, so this will be empty.
 
@@ -290,11 +314,11 @@
 
         // There's not editor for string arrays yet, so it won't show up normally.
 
-        PropertyEditModel firstName = model.add("simple.firstName");
+        PropertyModel firstName = model.add("simple.firstName");
 
         assertEquals(firstName.getLabel(), "First Name");
 
-        PropertyEditModel age = model.add("simple.age");
+        PropertyModel age = model.add("simple.age");
         assertEquals(age.getLabel(), "Years of Age");
 
         CompositeBean bean = new CompositeBean();
@@ -308,6 +332,24 @@
         bean.getSimple().setAge(24);
 
         assertEquals(age.getConduit().get(bean), new Integer(24));
+
+        verify();
+    }
+
+    @Test
+    public void default_properties_exclude_write_only()
+    {
+        ComponentResources resources = newComponentResources();
+        Messages messages = newMessages();
+
+        train_getMessages(resources, messages);
+        stub_contains(messages, false);
+
+        replay();
+
+        BeanModel model = _source.create(WriteOnlyBean.class, false, resources);
+
+        assertEquals(model.getPropertyNames(), Arrays.asList("readOnly", "readWrite"));
 
         verify();
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ReadOnlyBean.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ReadOnlyBean.java?view=diff&rev=506801&r1=506800&r2=506801
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ReadOnlyBean.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ReadOnlyBean.java Mon Feb 12 17:59:49 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,20 +12,24 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
-
-public class ReadOnlyBean
-{
-    private String _value;
-
-    public String getValue()
-    {
-        return _value;
-    }
-
-    public void setValue(String value)
-    {
-        _value = value;
-    }
-
-}
+package org.apache.tapestry.internal.services;
+
+public class ReadOnlyBean
+{
+    private String _value;
+
+    public String getValue()
+    {
+        return _value;
+    }
+
+    public void setValue(String value)
+    {
+        _value = value;
+    }
+
+    public String getReadOnly()
+    {
+        return null;
+    }
+}