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 2010/05/19 03:02:39 UTC
svn commit: r945984 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/services/
main/java/org/apache/tapestry5/internal/services/meta/
main/java/org/apache/tapestry5/internal/transform/
main/java/org/apache/tapes...
Author: hlship
Date: Wed May 19 01:02:39 2010
New Revision: 945984
URL: http://svn.apache.org/viewvc?rev=945984&view=rev
Log:
TAP5-461: Create a service that fits into the ComponentClassTransformWorker chain and can be configured to extract component meta-data from class annotations
Added:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/ContentTypeExtractor.java (with props)
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaAnnotationExtractor.java (contents, props changed)
- copied, changed from r945983, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MetaWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaWorkerImpl.java (with props)
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/FixedExtractor.java (with props)
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaDataExtractor.java (with props)
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaWorker.java (with props)
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/meta/
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/meta/MetaWorkerTest.java (contents, props changed)
- copied, changed from r945983, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/MetaWorkerTest.java
Removed:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ContentTypeWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MetaWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/SecureWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/ContentTypeWorkerTest.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/MetaWorkerTest.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassTransformerImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassTransformerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassTransformerImpl.java?rev=945984&r1=945983&r2=945984&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassTransformerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassTransformerImpl.java Wed May 19 01:02:39 2010
@@ -14,14 +14,19 @@
package org.apache.tapestry5.internal.services;
+import java.lang.reflect.Modifier;
+import java.util.Map;
+
import javassist.CtClass;
import javassist.CtConstructor;
import javassist.NotFoundException;
+
import org.apache.tapestry5.TapestryMarkers;
import org.apache.tapestry5.internal.InternalConstants;
import org.apache.tapestry5.internal.model.MutableComponentModelImpl;
import org.apache.tapestry5.ioc.LoggerSource;
import org.apache.tapestry5.ioc.Resource;
+import org.apache.tapestry5.ioc.annotations.Primary;
import org.apache.tapestry5.ioc.internal.services.CtClassSource;
import org.apache.tapestry5.ioc.internal.util.ClasspathResource;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
@@ -33,9 +38,6 @@ import org.apache.tapestry5.services.Com
import org.apache.tapestry5.services.InvalidationListener;
import org.slf4j.Logger;
-import java.lang.reflect.Modifier;
-import java.util.Map;
-
/**
* Implementation of {@link org.apache.tapestry5.internal.services.ComponentClassTransformer}.
*/
@@ -69,10 +71,18 @@ public class ComponentClassTransformerIm
* @param classSource
* @param componentClassCache
*/
- public ComponentClassTransformerImpl(ComponentClassTransformWorker workerChain, LoggerSource loggerSource,
- @ComponentLayer
- ClassFactory classFactory, @ComponentLayer
- CtClassSource classSource, ComponentClassCache componentClassCache)
+ public ComponentClassTransformerImpl(@Primary
+ ComponentClassTransformWorker workerChain,
+
+ LoggerSource loggerSource,
+
+ @ComponentLayer
+ ClassFactory classFactory,
+
+ @ComponentLayer
+ CtClassSource classSource,
+
+ ComponentClassCache componentClassCache)
{
this.workerChain = workerChain;
this.loggerSource = loggerSource;
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/ContentTypeExtractor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/ContentTypeExtractor.java?rev=945984&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/ContentTypeExtractor.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/ContentTypeExtractor.java Wed May 19 01:02:39 2010
@@ -0,0 +1,28 @@
+// Copyright 2010 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services.meta;
+
+import org.apache.tapestry5.MetaDataConstants;
+import org.apache.tapestry5.annotations.ContentType;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.services.meta.MetaDataExtractor;
+
+public class ContentTypeExtractor implements MetaDataExtractor<ContentType>
+{
+ public void extractMetaData(MutableComponentModel model, ContentType annotation)
+ {
+ model.setMeta(MetaDataConstants.RESPONSE_CONTENT_TYPE, annotation.value());
+ }
+}
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/ContentTypeExtractor.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaAnnotationExtractor.java (from r945983, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MetaWorker.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaAnnotationExtractor.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaAnnotationExtractor.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MetaWorker.java&r1=945983&r2=945984&rev=945984&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MetaWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaAnnotationExtractor.java Wed May 19 01:02:39 2010
@@ -1,10 +1,10 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2010 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.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -12,28 +12,18 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry5.internal.transform;
+package org.apache.tapestry5.internal.services.meta;
import org.apache.tapestry5.annotations.Meta;
import org.apache.tapestry5.internal.KeyValue;
import org.apache.tapestry5.internal.TapestryInternalUtils;
import org.apache.tapestry5.model.MutableComponentModel;
-import org.apache.tapestry5.services.ClassTransformation;
-import org.apache.tapestry5.services.ComponentClassTransformWorker;
+import org.apache.tapestry5.services.meta.MetaDataExtractor;
-/**
- * Checks for the presence of a {@link Meta} annotation, and adds the data within to the component model.
- */
-public class MetaWorker implements ComponentClassTransformWorker
+public class MetaAnnotationExtractor implements MetaDataExtractor<Meta>
{
-
- public void transform(ClassTransformation transformation, MutableComponentModel model)
+ public void extractMetaData(MutableComponentModel model, Meta annotation)
{
- Meta annotation = transformation.getAnnotation(Meta.class);
-
- if (annotation == null)
- return;
-
for (String meta : annotation.value())
{
KeyValue kv = TapestryInternalUtils.parseKeyValue(meta);
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaAnnotationExtractor.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaWorkerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaWorkerImpl.java?rev=945984&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaWorkerImpl.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaWorkerImpl.java Wed May 19 01:02:39 2010
@@ -0,0 +1,50 @@
+// Copyright 2010 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services.meta;
+
+import java.lang.annotation.Annotation;
+import java.util.Map;
+
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.services.ClassTransformation;
+import org.apache.tapestry5.services.meta.MetaDataExtractor;
+import org.apache.tapestry5.services.meta.MetaWorker;
+
+@SuppressWarnings("unchecked")
+public class MetaWorkerImpl implements MetaWorker
+{
+ private final Map<Class, MetaDataExtractor> configuration;
+
+ public MetaWorkerImpl(Map<Class, MetaDataExtractor> configuration)
+ {
+ this.configuration = configuration;
+ }
+
+ public void transform(ClassTransformation transformation, MutableComponentModel model)
+ {
+ for (Class c : configuration.keySet())
+ {
+ Annotation annotation = transformation.getAnnotation(c);
+
+ if (annotation != null)
+ {
+ MetaDataExtractor extractor = configuration.get(c);
+
+ extractor.extractMetaData(model, annotation);
+ }
+ }
+ }
+
+}
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/MetaWorkerImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=945984&r1=945983&r2=945984&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Wed May 19 01:02:39 2010
@@ -37,13 +37,8 @@ import javax.servlet.http.HttpServletRes
import org.apache.tapestry5.*;
import org.apache.tapestry5.ajax.MultiZoneUpdate;
-import org.apache.tapestry5.annotations.HeartbeatDeferred;
-import org.apache.tapestry5.annotations.PageAttached;
-import org.apache.tapestry5.annotations.PageDetached;
-import org.apache.tapestry5.annotations.PageLoaded;
-import org.apache.tapestry5.annotations.PageReset;
-import org.apache.tapestry5.annotations.Path;
-import org.apache.tapestry5.annotations.Service;
+import org.apache.tapestry5.annotations.*;
+import org.apache.tapestry5.annotations.ContentType;
import org.apache.tapestry5.beaneditor.Validate;
import org.apache.tapestry5.corelib.LoopFormState;
import org.apache.tapestry5.corelib.SubmitMode;
@@ -85,6 +80,9 @@ import org.apache.tapestry5.internal.ser
import org.apache.tapestry5.internal.services.javascript.JavascriptStackPathConstructor;
import org.apache.tapestry5.internal.services.javascript.JavascriptStackSourceImpl;
import org.apache.tapestry5.internal.services.messages.PropertiesFileParserImpl;
+import org.apache.tapestry5.internal.services.meta.ContentTypeExtractor;
+import org.apache.tapestry5.internal.services.meta.MetaAnnotationExtractor;
+import org.apache.tapestry5.internal.services.meta.MetaWorkerImpl;
import org.apache.tapestry5.internal.transform.*;
import org.apache.tapestry5.internal.translator.NumericTranslator;
import org.apache.tapestry5.internal.translator.NumericTranslatorSupport;
@@ -115,6 +113,9 @@ import org.apache.tapestry5.services.jav
import org.apache.tapestry5.services.javascript.JavascriptSupport;
import org.apache.tapestry5.services.messages.ComponentMessagesSource;
import org.apache.tapestry5.services.messages.PropertiesFileParser;
+import org.apache.tapestry5.services.meta.FixedExtractor;
+import org.apache.tapestry5.services.meta.MetaDataExtractor;
+import org.apache.tapestry5.services.meta.MetaWorker;
import org.apache.tapestry5.util.StringToEnumCoercion;
import org.apache.tapestry5.validator.Email;
import org.apache.tapestry5.validator.Max;
@@ -374,6 +375,7 @@ public final class TapestryModule
binder.bind(AssetPathConstructor.class, AssetPathConstructorImpl.class);
binder.bind(JavascriptStackSource.class, JavascriptStackSourceImpl.class);
binder.bind(TranslatorAlternatesSource.class, TranslatorAlternatesSourceImpl.class);
+ binder.bind(MetaWorker.class, MetaWorkerImpl.class);
}
// ========================================================================
@@ -552,7 +554,7 @@ public final class TapestryModule
* <dt>SupportsInformalParameters</dt>
* <dd>Checks for the annotation</dd>
* <dt>Meta</dt>
- * <dd>Checks for meta data and adds it to the component model</dd>
+ * <dd>Checks for meta data annotations and adds it to the component model</dd>
* <dt>ApplicationState</dt>
* <dd>Converts fields that reference application state objects
* <dt>UnclaimedField</dt>
@@ -564,10 +566,6 @@ public final class TapestryModule
* <dt>InvokePostRenderCleanupOnResources</dt>
* <dd>Makes sure {@link org.apache.tapestry5.internal.InternalComponentResources#postRenderCleanup()} is invoked
* after a component finishes rendering</dd>
- * <dt>Secure</dt>
- * <dd>Checks for the {@link org.apache.tapestry5.annotations.Secure} annotation</dd>
- * <dt>ContentType</dt>
- * <dd>Checks for {@link org.apache.tapestry5.annotations.ContentType} annotation</dd>
* <dt>GenerateAccessors</dt>
* <dd>Generates accessor methods if {@link org.apache.tapestry5.annotations.Property} annotation is present</dd>
* <dt>Cached</dt>
@@ -587,17 +585,17 @@ public final class TapestryModule
InjectionProvider injectionProvider,
+ MetaWorker metaWorker,
+
ComponentClassResolver resolver)
{
configuration.addInstance("Cached", CachedWorker.class);
- configuration.add("Meta", new MetaWorker());
+ configuration.add("Meta", metaWorker);
configuration.add("Inject", new InjectWorker(locator, injectionProvider));
configuration.addInstance("InjectService", InjectServiceWorker.class);
- configuration.add("Secure", new SecureWorker());
-
configuration.add("MixinAfter", new MixinAfterWorker());
configuration.add("Component", new ComponentWorker(resolver));
configuration.add("Mixin", new MixinWorker(resolver));
@@ -642,8 +640,6 @@ public final class TapestryModule
configuration.add("InvokePostRenderCleanupOnResources", new InvokePostRenderCleanupOnResourcesWorker());
- configuration.add("ContentType", new ContentTypeWorker());
-
configuration.add("Property", new PropertyWorker());
// These must come after Property, since they actually delete fields
@@ -1399,6 +1395,7 @@ public final class TapestryModule
* Allows the exact steps in the component class transformation process to
* be defined.
*/
+ @Marker(Primary.class)
public ComponentClassTransformWorker buildComponentClassTransformWorker(
List<ComponentClassTransformWorker> configuration)
{
@@ -2896,4 +2893,16 @@ public final class TapestryModule
configuration.add("AppCatalog", applicationCatalog);
}
+ /**
+ * Contributes ....
+ *
+ * @since 5.2.0
+ */
+ @SuppressWarnings("unchecked")
+ public static void contributeMetaWorker(MappedConfiguration<Class, MetaDataExtractor> configuration)
+ {
+ configuration.addInstance(Meta.class, MetaAnnotationExtractor.class);
+ configuration.add(Secure.class, new FixedExtractor(MetaDataConstants.SECURE_PAGE));
+ configuration.addInstance(ContentType.class, ContentTypeExtractor.class);
+ }
}
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/FixedExtractor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/FixedExtractor.java?rev=945984&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/FixedExtractor.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/FixedExtractor.java Wed May 19 01:02:39 2010
@@ -0,0 +1,51 @@
+// Copyright 2010 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services.meta;
+
+import java.lang.annotation.Annotation;
+
+import org.apache.tapestry5.ioc.internal.util.Defense;
+import org.apache.tapestry5.model.MutableComponentModel;
+
+/**
+ * Implementation of {@link MetaDataExtractor} that is used to set a fixed
+ * value for a fixed meta-data key, when a given annotation is present.
+ *
+ * @since 5.2.0
+ */
+public class FixedExtractor<T extends Annotation> implements MetaDataExtractor<T>
+{
+ private final String key;
+
+ private final String value;
+
+ /** Defaults the value to "true". */
+ public FixedExtractor(String key)
+ {
+ this(key, "true");
+ }
+
+ public FixedExtractor(String key, String value)
+ {
+ this.key = Defense.notBlank(key, "key");
+ this.value = Defense.notBlank(value, "value");
+ }
+
+ public void extractMetaData(MutableComponentModel model, T annotation)
+ {
+ model.setMeta(key, value);
+ }
+
+}
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/FixedExtractor.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaDataExtractor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaDataExtractor.java?rev=945984&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaDataExtractor.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaDataExtractor.java Wed May 19 01:02:39 2010
@@ -0,0 +1,43 @@
+// Copyright 2010 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services.meta;
+
+import java.lang.annotation.Annotation;
+
+import org.apache.tapestry5.model.ComponentModel;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.services.MetaDataLocator;
+
+/**
+ * Used to extract a {@linkplain ComponentModel#getMeta(String) meta data value} from a component annotation. Instances
+ * of this interface are contributed into the MetaWorker service.
+ *
+ * @since 5.2.0
+ * @see MetaWorker
+ * @see MetaDataLocator
+ */
+public interface MetaDataExtractor<T extends Annotation>
+{
+ /**
+ * Invoked on the extractor to extract the appropriate value for the annotation and
+ * {@linkplain MutableComponentModel#setMeta(String, String) set the meta data on the model}.
+ *
+ * @param model
+ * on which to set meta data
+ * @param annotation
+ * class annotation, from whose attributes specific data may be extracted
+ */
+ void extractMetaData(MutableComponentModel model, T annotation);
+}
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaDataExtractor.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaWorker.java?rev=945984&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaWorker.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaWorker.java Wed May 19 01:02:39 2010
@@ -0,0 +1,32 @@
+// Copyright 2010 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services.meta;
+
+import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
+import org.apache.tapestry5.services.ComponentClassTransformWorker;
+
+/**
+ * Service that makes it easy to identify a class annotation and use its presence, or the value of an attribute,
+ * to set a meta-data key. The configuration map class annotation types to corresponding extractors who will be invoked
+ * when the annotation is present. Most commonly, a {@link FixedExtractor} is used to set a fixed value to a fixed key,
+ * triggered by the presence of the corresponding annotation.
+ *
+ * @since 5.2.0
+ */
+@UsesMappedConfiguration(key = Class.class, value = MetaDataExtractor.class)
+public interface MetaWorker extends ComponentClassTransformWorker
+{
+
+}
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/meta/MetaWorker.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml?rev=945984&r1=945983&r2=945984&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml Wed May 19 01:02:39 2010
@@ -39,7 +39,9 @@
<package name="org.apache.tapestry5.internal.model"/>
<package name="org.apache.tapestry5.internal.pageload"/>
<package name="org.apache.tapestry5.internal.services"/>
+ <package name="org.apache.tapestry5.internal.services.assets"/>
<package name="org.apache.tapestry5.internal.services.messages"/>
+ <package name="org.apache.tapestry5.internal.services.meta"/>
<package name="org.apache.tapestry5.internal.structure"/>
<package name="org.apache.tapestry5.internal.test"/>
<package name="org.apache.tapestry5.internal.transform"/>
@@ -49,10 +51,10 @@
</packages>
</test>
-<!-- We break these out by which of the test applications they apply to. We have a bunch. -->
+ <!-- We break these out by which of the test applications they apply to. We have a bunch. -->
<test name="Core Integration Tests" enabled="true">
<parameter name="tapestry.web-app-folder" value="src/test/app1"/>
-
+
<packages>
<package name="org.apache.tapestry5.integration.app1"/>
</packages>
@@ -60,10 +62,10 @@
<class name="org.apache.tapestry5.test.SeleniumLauncher"/>
</classes>
</test>
-
+
<test name="Additional Integration Tests" enabled="true">
<parameter name="tapestry.web-app-folder" value="src/test/app3"/>
-
+
<packages>
<package name="org.apache.tapestry5.integration.app3"/>
</packages>
@@ -71,7 +73,7 @@
<class name="org.apache.tapestry5.test.SeleniumLauncher"/>
</classes>
</test>
-
+
<test name="Immediate Mode Integration Tests" enabled="true">
<parameter name="tapestry.web-app-folder" value="src/test/app4"/>
@@ -85,7 +87,7 @@
<test name="URL Rewriter Tests" enabled="true">
<parameter name="tapestry.web-app-folder" value="src/test/app5"/>
-
+
<packages>
<package name="org.apache.tapestry5.urlrewriter"/>
</packages>
@@ -102,7 +104,7 @@
<class name="org.apache.tapestry5.test.SeleniumLauncher"/>
</classes>
</test>
-
+
<test name="PageTester Tests" enabled="true">
<packages>
<package name="org.apache.tapestry5.integration.pagetester"/>
Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/meta/MetaWorkerTest.java (from r945983, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/MetaWorkerTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/meta/MetaWorkerTest.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/meta/MetaWorkerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/MetaWorkerTest.java&r1=945983&r2=945984&rev=945984&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/MetaWorkerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/meta/MetaWorkerTest.java Wed May 19 01:02:39 2010
@@ -1,10 +1,10 @@
-// Copyright 2007, 2008 The Apache Software Foundation
+// Copyright 2007, 2008, 2010 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.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -12,49 +12,31 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry5.internal.transform;
+package org.apache.tapestry5.internal.services.meta;
import org.apache.tapestry5.annotations.Meta;
+import org.apache.tapestry5.internal.services.meta.MetaAnnotationExtractor;
import org.apache.tapestry5.internal.test.InternalBaseTestCase;
import org.apache.tapestry5.model.MutableComponentModel;
-import org.apache.tapestry5.services.ClassTransformation;
import org.testng.annotations.Test;
public class MetaWorkerTest extends InternalBaseTestCase
{
@Test
- public void no_annotation()
- {
- ClassTransformation ct = mockClassTransformation();
- MutableComponentModel model = mockMutableComponentModel();
-
- train_getAnnotation(ct, Meta.class, null);
-
- replay();
-
- new MetaWorker().transform(ct, model);
-
- verify();
- }
-
- @Test
public void has_meta_data()
{
- ClassTransformation ct = mockClassTransformation();
MutableComponentModel model = mockMutableComponentModel();
Meta annotation = newMock(Meta.class);
- train_getAnnotation(ct, Meta.class, annotation);
-
expect(annotation.value()).andReturn(new String[]
- { "foo=bar", "baz=biff" });
+ { "foo=bar", "baz=biff" });
model.setMeta("foo", "bar");
model.setMeta("baz", "biff");
replay();
- new MetaWorker().transform(ct, model);
+ new MetaAnnotationExtractor().extractMetaData(model, annotation);
verify();
}
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/meta/MetaWorkerTest.java
------------------------------------------------------------------------------
svn:eol-style = native