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;