You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2006/11/15 19:23:32 UTC

svn commit: r475344 - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/annotations/ main/java/org/apache/tapestry/internal/ioc/services/ main/java/org/apache/tapestry/internal/model/ main/java/org/apache/tapestry/internal/s...

Author: hlship
Date: Wed Nov 15 10:23:31 2006
New Revision: 475344

URL: http://svn.apache.org/viewvc?view=rev&rev=475344
Log:
Start adding support for the SupportsInformalParameters annotation (and ComponentModel property).
Remove some compiler warnings.

Added:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/SupportsInformalParameters.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorker.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorkerTest.java
Modified:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/services/StrategyServiceBuilderImpl.java
    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/internal/services/PageLoaderImpl.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/model/MutableComponentModel.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/BaseTestCase.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/InstanceMixin.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/PropBindingFactoryTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/SupportsInformalParameters.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/SupportsInformalParameters.java?view=auto&rev=475344
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/SupportsInformalParameters.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/SupportsInformalParameters.java Wed Nov 15 10:23:31 2006
@@ -0,0 +1,25 @@
+package org.apache.tapestry.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import org.apache.tapestry.model.ComponentModel;
+
+/** Used, in conjunction with {@link ComponentClass}, to identify a component that
+ * can support informal parameters.
+ * 
+ * @see ComponentModel#getSupportsInformalParameters()
+ *
+ */
+@Target(TYPE)
+@Retention(RUNTIME)
+@Documented
+@Inherited
+public @interface SupportsInformalParameters {
+
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/services/StrategyServiceBuilderImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/services/StrategyServiceBuilderImpl.java?view=diff&rev=475344&r1=475343&r2=475344
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/services/StrategyServiceBuilderImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/services/StrategyServiceBuilderImpl.java Wed Nov 15 10:23:31 2006
@@ -14,21 +14,15 @@
 
 package org.apache.tapestry.internal.ioc.services;
 
-import org.apache.tapestry.ioc.services.ClassFactory;
 import org.apache.tapestry.ioc.services.StrategyServiceBuilder;
 import org.apache.tapestry.util.StrategyRegistry;
 
-/**
- * 
- */
 public class StrategyServiceBuilderImpl implements StrategyServiceBuilder
 {
-    private ClassFactory _classFactory;
-
+    
     public <S> S build(StrategyRegistry<S> registry)
     {
-        Class interfaceType = registry.getAdapterType();
-
+    
         return null;
     }
 

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=475344&r1=475343&r2=475344
==============================================================================
--- 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 Wed Nov 15 10:23:31 2006
@@ -56,6 +56,8 @@
 
     private List<String> _mixinClassNames;
 
+    private boolean _informalParametersSupported;
+
     public MutableComponentModelImpl(String componentClassName, Log log, Resource baseResource,
             ComponentModel parentModel)
     {
@@ -241,4 +243,13 @@
         return Collections.unmodifiableList(_mixinClassNames);
     }
 
+    public void enableSupportsInformalParameters()
+    {
+        _informalParametersSupported = true;
+    }
+
+    public boolean getSupportsInformalParameters()
+    {
+      return _informalParametersSupported;
+    }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLoaderImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLoaderImpl.java?view=diff&rev=475344&r1=475343&r2=475344
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLoaderImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLoaderImpl.java Wed Nov 15 10:23:31 2006
@@ -361,14 +361,6 @@
         }
     }
 
-    private void addMixinsToComponent(ComponentPageElement component, ComponentModel model)
-    {
-        for (String mixinClassName : model.getMixinClassNames())
-        {
-            _pageElementFactory.addMixinByClassName(component, mixinClassName);
-        }
-    }
-
     private void addMixinsToComponent(ComponentPageElement component, EmbeddedComponentModel model,
             String mixins)
     {

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorker.java?view=auto&rev=475344
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorker.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorker.java Wed Nov 15 10:23:31 2006
@@ -0,0 +1,22 @@
+package org.apache.tapestry.internal.services;
+
+import org.apache.tapestry.annotations.SupportsInformalParameters;
+import org.apache.tapestry.model.MutableComponentModel;
+import org.apache.tapestry.services.ClassTransformation;
+import org.apache.tapestry.services.ComponentClassTransformWorker;
+
+/**
+ * Checks for the {@link SupportsInformalParameters} annotation, settting the corresponding
+ * flag on the model if present. 
+ *
+ */
+public class SupportsInformalParametersWorker implements ComponentClassTransformWorker
+{
+
+    public void transform(ClassTransformation transformation, MutableComponentModel model)
+    {
+        if (transformation.getAnnotation(SupportsInformalParameters.class) != null)
+            model.enableSupportsInformalParameters();
+    }
+
+}

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=475344&r1=475343&r2=475344
==============================================================================
--- 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 Wed Nov 15 10:23:31 2006
@@ -20,37 +20,25 @@
 import org.apache.tapestry.Resource;
 import org.apache.tapestry.annotations.ComponentClass;
 import org.apache.tapestry.annotations.Persist;
+import org.apache.tapestry.annotations.SupportsInformalParameters;
 
 /**
  * Defines a component in terms of its capabilities, parameters, sub-components, etc. During
  * <em>runtime</em>, the component model is immutable. During <em>construction</em> time, when
- * the class is being transformed a loaded, the model is mutable.
+ * the class is being transformed and loaded, the model is mutable.
  * 
- * @see
+ * @see MutableComponentModel
  */
 public interface ComponentModel
 {
-    /** The FQCN of the component. */
-    String getComponentClassName();
-
     /**
      * Returns the resource corresponding to the class file for this component. This is used to find
      * related resources, such as the component's template and message catalog.
      */
     Resource getBaseResource();
 
-    /** Returns object that will be used to log warnings and errors related to this component. */
-    Log getLog();
-
-    /**
-     * Returns an alphabetically sorted list of the names of all formal parameters. This includes
-     * parameters defined by a base class.
-     */
-
-    List<String> getParameterNames();
-
-    /** Return a single parameter model by parameter name, or null if the parameter is not defined. */
-    ParameterModel getParameterModel(String parameterName);
+    /** The FQCN of the component. */
+    String getComponentClassName();
 
     /**
      * Returns the ids of all embedded components defined within the component class (via the
@@ -68,14 +56,6 @@
     EmbeddedComponentModel getEmbeddedComponentModel(String componentId);
 
     /**
-     * Returns a list of the names of all persistent fields (within this class, or any super-class).
-     * The names are sorted alphabetically.
-     * 
-     * @see Persist
-     */
-    List<String> getPersistentFieldNames();
-
-    /**
      * Returns the persistent strategy associated with the field.
      * 
      * @param fieldName
@@ -84,6 +64,30 @@
      */
     String getFieldPersistenceStrategy(String fieldName);
 
+    /** Returns object that will be used to log warnings and errors related to this component. */
+    Log getLog();
+
+    /** Returns a list of the class names of mixins that are part of the component's implementation. */
+    List<String> getMixinClassNames();
+
+    /** Return a single parameter model by parameter name, or null if the parameter is not defined. */
+    ParameterModel getParameterModel(String parameterName);
+
+    /**
+     * Returns an alphabetically sorted list of the names of all formal parameters. This includes
+     * parameters defined by a base class.
+     */
+
+    List<String> getParameterNames();
+
+    /**
+     * Returns a list of the names of all persistent fields (within this class, or any super-class).
+     * The names are sorted alphabetically.
+     * 
+     * @see Persist
+     */
+    List<String> getPersistentFieldNames();
+
     /**
      * Returns true if the modeled component is a root class, a component class whose parent does
      * not have the {@link ComponentClass} annotation. This is often used to determine whether to
@@ -93,6 +97,13 @@
      */
     boolean isRootClass();
 
-    /** Returns a list of the class names of mixins that are part of the component's implementation. */
-    List<String> getMixinClassNames();
+    /**
+     * Returns true if the model indicates that informal parameters, additional parameters beyond
+     * the formal parameter defined for the component, are supported. This is false in most cases,
+     * but may be set to true for specific classes (when the {@link SupportsInformalParameters}
+     * annotation is present, or inherited from a super-class).
+     * 
+     * @return true if this component model supports informal parameters
+     */
+    boolean getSupportsInformalParameters();
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/model/MutableComponentModel.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/model/MutableComponentModel.java?view=diff&rev=475344&r1=475343&r2=475344
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/model/MutableComponentModel.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/model/MutableComponentModel.java Wed Nov 15 10:23:31 2006
@@ -67,4 +67,7 @@
 
     /** Adds a mixin to the component's implementation. */
     void addMixinClassName(String mixinClassName);
+    
+    /** Sets the internal flag to indicate that this model (and all models that extend from it) support informal parameters. */
+    void enableSupportsInformalParameters();
 }

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=475344&r1=475343&r2=475344
==============================================================================
--- 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 Wed Nov 15 10:23:31 2006
@@ -69,6 +69,7 @@
 import org.apache.tapestry.internal.services.RetainWorker;
 import org.apache.tapestry.internal.services.SessionPersistentFieldStrategy;
 import org.apache.tapestry.internal.services.StaticFilesFilter;
+import org.apache.tapestry.internal.services.SupportsInformalParametersWorker;
 import org.apache.tapestry.internal.services.UnclaimedFieldWorker;
 import org.apache.tapestry.internal.services.WebContextImpl;
 import org.apache.tapestry.internal.services.WebRequestImpl;
@@ -379,7 +380,7 @@
         add(configuration, locator, PersistentFieldManager.class);
         add(configuration, locator, Environment.class);
         add(configuration, locator, ComponentSource.class);
-        
+
         configuration.add(new InfrastructureContribution("request", request));
         configuration.add(new InfrastructureContribution("response", response));
         configuration.add(new InfrastructureContribution("typeCoercer", typeCoercer));
@@ -493,6 +494,7 @@
      * <li>Mixin -- adds a mixin as part of a component's implementation</li>
      * <li>Environment -- allows fields to contain values extracted from the {@link Environment}
      * service</li>
+     * <li>SupportsInformalParameters -- checks for the annotation</li>
      * <li>UnclaimedField -- identifies unclaimed fields and resets them to null/0/false at the end
      * of the request</li>
      * <li>SetupRender, BeginRender, etc. -- correspond to component render phases and annotations</li>
@@ -516,6 +518,7 @@
         configuration.add("Environment", new EnvironmentalWorker(environment));
         configuration.add("Mixin", new MixinWorker(resolver));
         configuration.add("OnEvent", new OnEventWorker());
+        configuration.add("SupportsInformalParameters", new SupportsInformalParametersWorker());
 
         // Workers for the component rendering state machine methods; this is in typical
         // execution order.

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java?view=diff&rev=475344&r1=475343&r2=475344
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java Wed Nov 15 10:23:31 2006
@@ -590,4 +590,10 @@
         response.encodeRedirectURL(URI);
         setReturnValue(encoded);
     }
+
+    protected final <T extends Annotation> void train_getAnnotation(ClassTransformation transformation, Class<T> annotationClass, T annotation)
+    {
+        transformation.getAnnotation(annotationClass);
+        setReturnValue(annotation);
+    }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/InstanceMixin.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/InstanceMixin.java?view=diff&rev=475344&r1=475343&r2=475344
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/InstanceMixin.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/InstanceMixin.java Wed Nov 15 10:23:31 2006
@@ -32,11 +32,13 @@
 @ComponentClass
 public class InstanceMixin
 {
+    @SuppressWarnings("unused")
     @Component(parameters =
     { "value=date2", "format=format", "test=showEmphasis" })
     @Mixins("Emphasis")
     private Output _output2;
 
+    @SuppressWarnings("unused")
     @Component(parameters =
     { "value=date3", "format=format", "test=showEmphasis" })
     @MixinClasses(Emphasis.class)

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/PropBindingFactoryTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/PropBindingFactoryTest.java?view=diff&rev=475344&r1=475343&r2=475344
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/PropBindingFactoryTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/PropBindingFactoryTest.java Wed Nov 15 10:23:31 2006
@@ -33,8 +33,6 @@
 
 public class PropBindingFactoryTest extends InternalBaseTestCase
 {
-    private static final String BEAN_CLASS = TargetBean.class.getName();
-
     private BindingFactory _factory;
 
     @BeforeClass

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=475344&r1=475343&r2=475344
==============================================================================
--- 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 Wed Nov 15 10:23:31 2006
@@ -496,4 +496,23 @@
         verify();
     }
 
+    @Test
+    public void default_for_supports_informal_parameters_is_false()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, r, null);
+
+        assertFalse(model.getSupportsInformalParameters());
+
+        model.enableSupportsInformalParameters();
+
+        assertTrue(model.getSupportsInformalParameters());
+
+        verify();
+    }
+    
 }

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorkerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorkerTest.java?view=auto&rev=475344
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorkerTest.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/SupportsInformalParametersWorkerTest.java Wed Nov 15 10:23:31 2006
@@ -0,0 +1,45 @@
+package org.apache.tapestry.internal.services;
+
+
+import org.apache.tapestry.annotations.SupportsInformalParameters;
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.model.MutableComponentModel;
+import org.apache.tapestry.services.ClassTransformation;
+import org.testng.annotations.Test;
+
+public class SupportsInformalParametersWorkerTest extends InternalBaseTestCase
+{
+
+    @Test
+    public void annotation_present()
+    {
+        ClassTransformation ct = newClassTransformation();
+        MutableComponentModel model = newMutableComponentModel();
+        SupportsInformalParameters annotation = newMock(SupportsInformalParameters.class);
+        
+        train_getAnnotation(ct, SupportsInformalParameters.class, annotation);
+        model.enableSupportsInformalParameters();
+        
+        replay();
+        
+        new SupportsInformalParametersWorker().transform(ct, model);
+        
+        verify();
+    }
+    
+    @Test
+    public void annotation_missing()
+    {
+        ClassTransformation ct = newClassTransformation();
+        MutableComponentModel model = newMutableComponentModel();
+        
+        train_getAnnotation(ct, SupportsInformalParameters.class, null);
+        
+        replay();
+        
+        new SupportsInformalParametersWorker().transform(ct, model);
+        
+        verify();
+    
+    }
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java?view=diff&rev=475344&r1=475343&r2=475344
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java Wed Nov 15 10:23:31 2006
@@ -361,6 +361,9 @@
 
         Registry r = buildRegistry(EagerLoadModule.class);
 
+        // Prevents warning: r is never read
+        assertNotNull(r);
+        
         assertTrue(EagerLoadModule._eagerLoadDidHappen);
 
         r = null;