Author: hlship
Date: Fri Dec 22 17:45:41 2006
New Revision: 489825

URL: http://svn.apache.org/viewvc?view=rev&rev=489825
Log:
Extend the ComponentModel API to differentiate between declared and inherited 
parameters

Modified:
    
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/model/MutableComponentModelImpl.java
    
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/model/ComponentModel.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/model/MutableComponentModelImplTest.java

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/model/MutableComponentModelImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/model/MutableComponentModelImpl.java?view=diff&rev=489825&r1=489824&r2=489825
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/model/MutableComponentModelImpl.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/model/MutableComponentModelImpl.java
 Fri Dec 22 17:45:41 2006
@@ -16,6 +16,7 @@
 
 import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
 import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
+import static org.apache.tapestry.ioc.internal.util.Defense.notBlank;
 
 import java.util.Collections;
 import java.util.List;
@@ -23,7 +24,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.tapestry.ioc.Resource;
-import org.apache.tapestry.ioc.internal.util.Defense;
 import org.apache.tapestry.ioc.internal.util.IdAllocator;
 import org.apache.tapestry.ioc.internal.util.InternalUtils;
 import org.apache.tapestry.model.ComponentModel;
@@ -102,6 +102,8 @@
 
     public void addParameter(String name, boolean required)
     {
+        notBlank(name, "name");
+
         // TODO: Check for conflict with base model
 
         if (_parameters == null)
@@ -114,8 +116,6 @@
                         _componentClassName));
         }
 
-        Defense.notBlank(name, "name");
-
         _parameters.put(name, new ParameterModelImpl(name, required));
     }
 
@@ -131,8 +131,6 @@
 
     public List<String> getParameterNames()
     {
-        // TODO: Parameters from base model
-
         List<String> names = newList();
 
         if (_parameters != null)
@@ -144,6 +142,11 @@
         Collections.sort(names);
 
         return names;
+    }
+
+    public List<String> getDeclaredParameterNames()
+    {
+        return InternalUtils.sortedKeys(_parameters);
     }
 
     public MutableEmbeddedComponentModel addEmbeddedComponent(String id, 
String type,

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/model/ComponentModel.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/model/ComponentModel.java?view=diff&rev=489825&r1=489824&r2=489825
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/model/ComponentModel.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/model/ComponentModel.java
 Fri Dec 22 17:45:41 2006
@@ -82,6 +82,12 @@
     List<String> getParameterNames();
 
     /**
+     * Returns an alphabetically sorted list of the names of all formal 
parameters defined by this
+     * specific class (parameters inherited from base classes are not 
identified).
+     */
+    List<String> getDeclaredParameterNames();
+
+    /**
      * Returns a list of the names of all persistent fields (within this 
class, or any super-class).
      * The names are sorted alphabetically.
      * 

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=489825&r1=489824&r2=489825
==============================================================================
--- 
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
 Fri Dec 22 17:45:41 2006
@@ -570,4 +570,9 @@
     {
         expect(resources.getComponent()).andReturn(component).atLeastOnce();
     }
+
+    protected final void train_getPersistentFieldNames(ComponentModel model, 
String... names)
+    {
+        
expect(model.getPersistentFieldNames()).andReturn(Arrays.asList(names)).atLeastOnce();
+    }
 }

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java?view=diff&rev=489825&r1=489824&r2=489825
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java
 Fri Dec 22 17:45:41 2006
@@ -75,6 +75,51 @@
         assertEquals(pm.getName(), parameterName);
         assertEquals(true, pm.isRequired());
 
+        assertEquals(model.getDeclaredParameterNames(), 
Arrays.asList(parameterName));
+
+        verify();
+    }
+
+    @Test
+    public void parameter_names_are_sorted()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new 
MutableComponentModelImpl(CLASS_NAME, log, r, null);
+
+        model.addParameter("fred", true);
+        model.addParameter("wilma", true);
+        model.addParameter("barney", true);
+
+        assertEquals(model.getDeclaredParameterNames(), 
Arrays.asList("barney", "fred", "wilma"));
+
+        verify();
+    }
+
+    @Test
+    public void 
declared_parameter_names_does_not_include_superclass_parameters()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+        ComponentModel parent = newComponentModel();
+
+        train_getPersistentFieldNames(parent);
+        train_getParameterNames(parent, "betty");
+
+        replay();
+
+        MutableComponentModel model = new 
MutableComponentModelImpl(CLASS_NAME, log, r, parent);
+
+        model.addParameter("fred", true);
+        model.addParameter("wilma", true);
+        model.addParameter("barney", true);
+
+        assertEquals(model.getDeclaredParameterNames(), 
Arrays.asList("barney", "fred", "wilma"));
+        assertEquals(model.getParameterNames(), Arrays.asList("barney", 
"betty", "fred", "wilma"));
+
         verify();
     }
 


Reply via email to