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 2011/04/30 00:53:39 UTC
svn commit: r1097981 - in /tapestry/tapestry5/trunk:
tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/
tapestry-core/src/main/java/org/apache/tapestry5/services/
tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/
Author: hlship
Date: Fri Apr 29 22:53:38 2011
New Revision: 1097981
URL: http://svn.apache.org/viewvc?rev=1097981&view=rev
Log:
TAP5-853: Initial work on converting component class transformation to work on top of Plastic
Added:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/CCTWToCCTW2Coercion.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker2.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodAdvice.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodInvocation.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentValueProvider.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/MethodAccess.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/FieldValueConduit.java
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java?rev=1097981&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java Fri Apr 29 22:53:38 2011
@@ -0,0 +1,569 @@
+// Copyright 2011 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.transform;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.func.F;
+import org.apache.tapestry5.func.Mapper;
+import org.apache.tapestry5.func.Predicate;
+import org.apache.tapestry5.internal.plastic.PlasticInternalUtils;
+import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+import org.apache.tapestry5.ioc.services.FieldValueConduit;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.ComputedValue;
+import org.apache.tapestry5.plastic.FieldConduit;
+import org.apache.tapestry5.plastic.FieldHandle;
+import org.apache.tapestry5.plastic.InstanceContext;
+import org.apache.tapestry5.plastic.MethodAdvice;
+import org.apache.tapestry5.plastic.MethodDescription;
+import org.apache.tapestry5.plastic.MethodHandle;
+import org.apache.tapestry5.plastic.MethodInvocation;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticField;
+import org.apache.tapestry5.plastic.PlasticMethod;
+import org.apache.tapestry5.plastic.PlasticUtils;
+import org.apache.tapestry5.runtime.Component;
+import org.apache.tapestry5.runtime.ComponentEvent;
+import org.apache.tapestry5.services.ClassTransformation;
+import org.apache.tapestry5.services.ComponentEventHandler;
+import org.apache.tapestry5.services.ComponentInstanceOperation;
+import org.apache.tapestry5.services.ComponentMethodAdvice;
+import org.apache.tapestry5.services.ComponentMethodInvocation;
+import org.apache.tapestry5.services.ComponentValueProvider;
+import org.apache.tapestry5.services.FieldAccess;
+import org.apache.tapestry5.services.MethodAccess;
+import org.apache.tapestry5.services.MethodInvocationResult;
+import org.apache.tapestry5.services.TransformConstants;
+import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.services.TransformMethod;
+import org.apache.tapestry5.services.TransformMethodSignature;
+import org.slf4j.Logger;
+
+/**
+ * A re-implementation of {@link ClassTransformation} around an instance of {@link PlasticClass}, acting as a bridge
+ * for code written against the 5.2 and earlier APIs to work with the 5.3 API.
+ *
+ * @since 5.3.0
+ */
+@SuppressWarnings("deprecation")
+public class BridgeClassTransformation implements ClassTransformation
+{
+ private final PlasticClass plasticClass;
+
+ private final MutableComponentModel model;
+
+ private static <T> ComputedValue<T> toComputedValue(final ComponentValueProvider<T> provider)
+ {
+ return new ComputedValue<T>()
+ {
+ public T get(InstanceContext context)
+ {
+ ComponentResources resources = context.get(ComponentResources.class);
+
+ return provider.get(resources);
+ }
+ };
+ }
+
+ private static class BridgeTransformField implements TransformField
+ {
+ private final PlasticField plasticField;
+
+ public BridgeTransformField(PlasticField plasticField)
+ {
+ this.plasticField = plasticField;
+ }
+
+ public int compareTo(TransformField o)
+ {
+ throw new IllegalStateException("compareTo() not yet implemented.");
+ }
+
+ public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+ {
+ return plasticField.getAnnotation(annotationClass);
+ }
+
+ public String getName()
+ {
+ return plasticField.getName();
+ }
+
+ public String getType()
+ {
+ return plasticField.getTypeName();
+ }
+
+ public String getSignature()
+ {
+ throw new IllegalStateException("getSignature() not yet implemented.");
+ }
+
+ public void claim(Object tag)
+ {
+ plasticField.claim(tag);
+ }
+
+ public void replaceAccess(final ComponentValueProvider<FieldValueConduit> conduitProvider)
+ {
+ throw new IllegalStateException("replaceAccess() not yet implemented.");
+ }
+
+ public void replaceAccess(TransformField conduitField)
+ {
+ throw new IllegalStateException("replaceAccess() not yet implemented.");
+ }
+
+ public void replaceAccess(final FieldValueConduit conduit)
+ {
+ plasticField.setConduit(new FieldConduit()
+ {
+ public Object get(InstanceContext context)
+ {
+ return conduit.get();
+ }
+
+ public void set(InstanceContext context, Object newValue)
+ {
+ conduit.set(newValue);
+ }
+ });
+ }
+
+ public int getModifiers()
+ {
+ throw new IllegalStateException("getModifiers() not yet implemented.");
+ }
+
+ public void inject(Object value)
+ {
+ plasticField.inject(value);
+ }
+
+ public <T> void injectIndirect(ComponentValueProvider<T> provider)
+ {
+ plasticField.injectComputed(toComputedValue(provider));
+ }
+
+ public FieldAccess getAccess()
+ {
+ final FieldHandle handle = plasticField.getHandle();
+
+ return new FieldAccess()
+ {
+
+ public void write(Object instance, Object value)
+ {
+ handle.set(instance, value);
+ }
+
+ public Object read(Object instance)
+ {
+ return handle.get(instance);
+ }
+ };
+ }
+ }
+
+ private static Mapper<PlasticField, TransformField> TO_TRANSFORM_FIELD = new Mapper<PlasticField, TransformField>()
+ {
+ public TransformField map(PlasticField element)
+ {
+ return new BridgeTransformField(element);
+ }
+ };
+
+ private static class BridgeTransformMethod implements TransformMethod
+ {
+ private final PlasticMethod plasticMethod;
+
+ public BridgeTransformMethod(PlasticMethod plasticMethod)
+ {
+ this.plasticMethod = plasticMethod;
+ }
+
+ public int compareTo(TransformMethod o)
+ {
+ throw new IllegalStateException("compareTo() not yet implemented.");
+ }
+
+ public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+ {
+ return plasticMethod.getAnnotation(annotationClass);
+ }
+
+ public TransformMethodSignature getSignature()
+ {
+ throw new IllegalStateException("getSignature() not yet implemented.");
+ }
+
+ public String getName()
+ {
+ return plasticMethod.getDescription().methodName;
+ }
+
+ public MethodAccess getAccess()
+ {
+ final MethodHandle handle = plasticMethod.getHandle();
+
+ return new MethodAccess()
+ {
+ public MethodInvocationResult invoke(Object target, Object... arguments)
+ {
+ final org.apache.tapestry5.plastic.MethodInvocationResult plasticResult = handle.invoke(target,
+ arguments);
+
+ return new MethodInvocationResult()
+ {
+ public void rethrow()
+ {
+ plasticResult.rethrow();
+ }
+
+ public boolean isFail()
+ {
+ return plasticResult.didThrowCheckedException();
+ }
+
+ public <T extends Throwable> T getThrown(Class<T> throwableClass)
+ {
+ return plasticResult.getCheckedException(throwableClass);
+ }
+
+ public Object getReturnValue()
+ {
+ return plasticResult.getReturnValue();
+ }
+ };
+ }
+ };
+ }
+
+ public void addAdvice(final ComponentMethodAdvice advice)
+ {
+ MethodAdvice plasticAdvice = new MethodAdvice()
+ {
+ public void advise(final MethodInvocation invocation)
+ {
+ advice.advise(new ComponentMethodInvocation()
+ {
+ public ComponentResources getComponentResources()
+ {
+ return invocation.getInstanceContext().get(ComponentResources.class);
+ }
+
+ public void rethrow()
+ {
+ invocation.rethrow();
+ }
+
+ public void proceed()
+ {
+ invocation.proceed();
+ }
+
+ public void overrideThrown(Exception thrown)
+ {
+ invocation.setCheckedException(thrown);
+ }
+
+ public void overrideResult(Object newResult)
+ {
+ invocation.setReturnValue(newResult);
+ }
+
+ public void override(int index, Object newParameter)
+ {
+ invocation.setParameter(index, newParameter);
+ }
+
+ public boolean isFail()
+ {
+ return invocation.didThrowCheckedException();
+ }
+
+ public <T extends Throwable> T getThrown(Class<T> throwableClass)
+ {
+ return invocation.getCheckedException(throwableClass);
+ }
+
+ public Class getResultType()
+ {
+ return invocation.getReturnType();
+ }
+
+ public Object getResult()
+ {
+ return invocation.getReturnValue();
+ }
+
+ public Class getParameterType(int index)
+ {
+ return invocation.getParameterType(index);
+ }
+
+ public int getParameterCount()
+ {
+ return invocation.getParameterCount();
+ }
+
+ public Object getParameter(int index)
+ {
+ return invocation.getParameter(index);
+ }
+
+ public String getMethodName()
+ {
+ return invocation.getMethodName();
+ }
+
+ public <T extends Annotation> T getMethodAnnotation(Class<T> annotationClass)
+ {
+ return invocation.getAnnotation(annotationClass);
+ }
+
+ public Component getInstance()
+ {
+ return (Component) invocation.getInstance();
+ }
+ });
+ }
+ };
+
+ plasticMethod.addAdvice(plasticAdvice);
+ }
+
+ public void addOperationBefore(final ComponentInstanceOperation operation)
+ {
+ addAdvice(new ComponentMethodAdvice()
+ {
+ public void advise(ComponentMethodInvocation invocation)
+ {
+ operation.invoke(invocation.getInstance());
+
+ invocation.proceed();
+ }
+ });
+ }
+
+ public void addOperationAfter(final ComponentInstanceOperation operation)
+ {
+ addAdvice(new ComponentMethodAdvice()
+ {
+ public void advise(ComponentMethodInvocation invocation)
+ {
+ invocation.proceed();
+
+ operation.invoke(invocation.getInstance());
+ }
+ });
+ }
+
+ public String getMethodIdentifier()
+ {
+ throw new IllegalStateException("getMethodIdentifer() not yet implemented");
+ }
+
+ public boolean isOverride()
+ {
+ throw new IllegalStateException("isOverride() not yet implemented");
+ }
+
+ public <A extends Annotation> A getParameterAnnotation(int index, Class<A> annotationType)
+ {
+ return plasticMethod.getParameters().get(index).getAnnotation(annotationType);
+ }
+
+ }
+
+ private static final Mapper<PlasticMethod, TransformMethod> TO_TRANSFORM_METHOD = new Mapper<PlasticMethod, TransformMethod>()
+ {
+ public TransformMethod map(PlasticMethod element)
+ {
+ return new BridgeTransformMethod(element);
+ }
+ };
+
+ public BridgeClassTransformation(PlasticClass plasticClass, MutableComponentModel model)
+ {
+ this.plasticClass = plasticClass;
+ this.model = model;
+ }
+
+ public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+ {
+ return plasticClass.getAnnotation(annotationClass);
+ }
+
+ public String getClassName()
+ {
+ return plasticClass.getClassName();
+ }
+
+ public String newMemberName(String suggested)
+ {
+ return newMemberName("_", PlasticInternalUtils.toPropertyName(suggested));
+ }
+
+ public String newMemberName(String prefix, String baseName)
+ {
+ return new StringBuilder(prefix).append(PlasticUtils.nextUID()).append(baseName).toString();
+ }
+
+ public List<TransformField> matchFieldsWithAnnotation(Class<? extends Annotation> annotationClass)
+ {
+ return F.flow(plasticClass.getFieldsWithAnnotation(annotationClass)).map(TO_TRANSFORM_FIELD).toList();
+ }
+
+ public List<TransformMethod> matchMethods(Predicate<TransformMethod> predicate)
+ {
+ return F.flow(plasticClass.getMethods()).map(TO_TRANSFORM_METHOD).filter(predicate).toList();
+ }
+
+ public List<TransformMethod> matchMethodsWithAnnotation(Class<? extends Annotation> annotationType)
+ {
+ return F.flow(plasticClass.getMethodsWithAnnotation(annotationType)).map(TO_TRANSFORM_METHOD).toList();
+ }
+
+ public List<TransformField> matchFields(Predicate<TransformField> predicate)
+ {
+ return F.flow(plasticClass.getUnclaimedFields()).map(TO_TRANSFORM_FIELD).filter(predicate).toList();
+ }
+
+ public TransformField getField(String fieldName)
+ {
+ throw new IllegalArgumentException("getField() not yet implemented.");
+ }
+
+ public List<TransformField> matchUnclaimedFields()
+ {
+ return F.flow(plasticClass.getUnclaimedFields()).map(TO_TRANSFORM_FIELD).toList();
+ }
+
+ public boolean isField(String fieldName)
+ {
+ throw new IllegalArgumentException("isField() not yet implemented.");
+ }
+
+ public TransformField createField(int modifiers, String type, String suggestedName)
+ {
+ // TODO: modifiers are ignored
+
+ PlasticField newField = plasticClass.introduceField(type, suggestedName);
+
+ return new BridgeTransformField(newField);
+ }
+
+ public String addInjectedField(Class type, String suggestedName, Object value)
+ {
+ // TODO: The injected field is not actually protected or shared
+
+ PlasticField field = plasticClass.introduceField(type, suggestedName).inject(value);
+
+ return field.getName();
+ }
+
+ public <T> TransformField addIndirectInjectedField(Class<T> type, String suggestedName,
+ ComponentValueProvider<T> provider)
+ {
+
+ PlasticField field = plasticClass.introduceField(type, suggestedName).injectComputed(toComputedValue(provider));
+
+ return new BridgeTransformField(field);
+ }
+
+ public void addImplementedInterface(Class interfaceClass)
+ {
+ plasticClass.introduceInterface(interfaceClass);
+ }
+
+ public Class toClass(String type)
+ {
+ throw new IllegalArgumentException("toClass() not yet implemented.");
+ }
+
+ public Logger getLogger()
+ {
+ return model.getLogger();
+ }
+
+ public boolean isRootTransformation()
+ {
+ throw new IllegalArgumentException("isRootTransformation() not yet implemented.");
+ }
+
+ public TransformMethod getOrCreateMethod(TransformMethodSignature signature)
+ {
+ MethodDescription md = new MethodDescription(signature.getModifiers(), signature.getReturnType(),
+ signature.getMethodName(), signature.getParameterTypes(), signature.getExceptionTypes());
+
+ PlasticMethod plasticMethod = plasticClass.introduceMethod(md);
+
+ return new BridgeTransformMethod(plasticMethod);
+ }
+
+ public boolean isDeclaredMethod(TransformMethodSignature signature)
+ {
+ throw new IllegalArgumentException("isDeclaredMethod() not yet implemented.");
+ }
+
+ // TODO: This is very handy, there should be an additional object passed around that encapsulates
+ // this kind of logic.
+
+ public void addComponentEventHandler(String eventType, int minContextValues, String methodDescription,
+ ComponentEventHandler handler)
+ {
+ assert InternalUtils.isNonBlank(eventType);
+ assert InternalUtils.isNonBlank(methodDescription);
+ assert handler != null;
+
+ model.addEventHandler(eventType);
+
+ getOrCreateMethod(TransformConstants.DISPATCH_COMPONENT_EVENT).addAdvice(
+ createEventHandlerAdvice(eventType, minContextValues, methodDescription, handler));
+
+ }
+
+ private static ComponentMethodAdvice createEventHandlerAdvice(final String eventType, final int minContextValues,
+ final String methodDescription, final ComponentEventHandler handler)
+ {
+ return new ComponentMethodAdvice()
+ {
+ public void advise(ComponentMethodInvocation invocation)
+ {
+ // Invoke the super-class implementation first.
+
+ invocation.proceed();
+
+ ComponentEvent event = (ComponentEvent) invocation.getParameter(0);
+
+ if (!event.isAborted() && event.matches(eventType, "", minContextValues))
+ {
+ event.setMethodDescription(methodDescription);
+
+ handler.handleEvent(invocation.getInstance(), event);
+
+ // Ensure that the caller knows that some event handler method
+ // was invoked.
+ invocation.overrideResult(true);
+ }
+ }
+ };
+ }
+
+}
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/CCTWToCCTW2Coercion.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/CCTWToCCTW2Coercion.java?rev=1097981&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/CCTWToCCTW2Coercion.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/CCTWToCCTW2Coercion.java Fri Apr 29 22:53:38 2011
@@ -0,0 +1,43 @@
+// Copyright 2011 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.transform;
+
+import org.apache.tapestry5.ioc.services.Coercion;
+import org.apache.tapestry5.ioc.services.CoercionTuple;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.services.ClassTransformation;
+import org.apache.tapestry5.services.ComponentClassTransformWorker;
+import org.apache.tapestry5.services.ComponentClassTransformWorker2;
+
+@SuppressWarnings("deprecation")
+public class CCTWToCCTW2Coercion implements Coercion<ComponentClassTransformWorker, ComponentClassTransformWorker2>
+{
+ public ComponentClassTransformWorker2 coerce(final ComponentClassTransformWorker oldStyleWorker)
+ {
+ return new ComponentClassTransformWorker2()
+ {
+ public void transform(PlasticClass plasticClass, MutableComponentModel model)
+ {
+ ClassTransformation ct = new BridgeClassTransformation(plasticClass, model);
+
+ oldStyleWorker.transform(ct, model);
+ }
+ };
+ }
+
+ public static final CoercionTuple<ComponentClassTransformWorker, ComponentClassTransformWorker2> TUPLE = new CoercionTuple<ComponentClassTransformWorker, ComponentClassTransformWorker2>(
+ ComponentClassTransformWorker.class, ComponentClassTransformWorker2.class, new CCTWToCCTW2Coercion());
+}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2010, 2011 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.
@@ -21,6 +21,7 @@ import org.apache.tapestry5.ComponentRes
import org.apache.tapestry5.func.Predicate;
import org.apache.tapestry5.ioc.AnnotationProvider;
import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.PlasticClass;
import org.apache.tapestry5.runtime.Component;
import org.apache.tapestry5.runtime.Event;
import org.slf4j.Logger;
@@ -55,6 +56,8 @@ import org.slf4j.Logger;
*
* @see org.apache.tapestry5.services.TapestryModule#contributeComponentClassTransformWorker(org.apache.tapestry5.ioc.OrderedConfiguration,
* org.apache.tapestry5.ioc.ObjectLocator, InjectionProvider, ComponentClassResolver)
+ * @deprecated In 5.3
+ * @see {@link PlasticClass}
*/
public interface ClassTransformation extends AnnotationProvider
{
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java Fri Apr 29 22:53:38 2011
@@ -1,10 +1,10 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2011 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,
@@ -18,14 +18,18 @@ import org.apache.tapestry5.model.Mutabl
/**
* Interface for a set of objects that can perform component class transformations. Implementations should be
- * multithreaded, ideally they should be stateless (all necessary state can be stored in the {@link
- * org.apache.tapestry5.services.ClassTransformation}).
+ * multithreaded, ideally they should be stateless (all necessary state can be stored in the
+ * {@link org.apache.tapestry5.services.ClassTransformation}).
+ *
+ * @deprecated In 5.3
+ * @see {@link ComponentClassTransformWorker2}
*/
public interface ComponentClassTransformWorker
{
/**
- * Invoked to perform a transformation on an as-yet unloaded component class, represented by the {@link
- * ClassTransformation} instance. In some cases, the worker may make changes to the component model -- for example,
+ * Invoked to perform a transformation on an as-yet unloaded component class, represented by the
+ * {@link ClassTransformation} instance. In some cases, the worker may make changes to the component model -- for
+ * example,
* a worker that deals with parameters may update the model to reflect those parameters.
*/
void transform(ClassTransformation transformation, MutableComponentModel model);
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker2.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker2.java?rev=1097981&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker2.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker2.java Fri Apr 29 22:53:38 2011
@@ -0,0 +1,37 @@
+// Copyright 2011 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;
+
+import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+import org.apache.tapestry5.ioc.services.ChainBuilder;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.PlasticClass;
+
+/**
+ * Interface for a set of objects that can perform transformation of component classes. Implementations should
+ * be thread safe and ideally stateless (all necessary state can be stored inside the {@link PlasticClass}).
+ * <p>
+ * The ComponentClassTransformWorker service uses an ordered configuration of these works as a {@linkplain ChainBuilder
+ * chain of command}. For compatibility with the code compiled for Tapestry 5.2, contributions of type
+ * {@link ComponentClassTransformWorker} are type coerced into this type automatically.
+ *
+ * @since 5.3
+ * @see {@link PlasticClass}
+ */
+@UsesOrderedConfiguration(ComponentClassTransformWorker2.class)
+public interface ComponentClassTransformWorker2
+{
+ void transform(PlasticClass plasticClass, MutableComponentModel model);
+}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodAdvice.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodAdvice.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodAdvice.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodAdvice.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2008, 2010 The Apache Software Foundation
+// Copyright 2008, 2010, 2011 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.
@@ -14,6 +14,10 @@
package org.apache.tapestry5.services;
+import org.apache.tapestry5.plastic.MethodAdvice;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticMethod;
+
/**
* An object that receives control around an "advised" method of a component. The advise can query or even replace
* method parameters. After invoking {@link org.apache.tapestry5.services.ComponentMethodInvocation#proceed()}, the
@@ -21,6 +25,8 @@ package org.apache.tapestry5.services;
*
* @see TransformMethod#addAdvice(ComponentMethodAdvice)
* @see ComponentInstanceOperation
+ * @deprecated Deprecated in 5.3
+ * @see {@link PlasticClass}, {@link PlasticMethod}, {@link MethodAdvice}
*/
public interface ComponentMethodAdvice
{
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodInvocation.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodInvocation.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodInvocation.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodInvocation.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2008, 2011 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.
@@ -15,6 +15,10 @@
package org.apache.tapestry5.services;
import org.apache.tapestry5.ioc.Invocation;
+import org.apache.tapestry5.plastic.MethodAdvice;
+import org.apache.tapestry5.plastic.MethodInvocation;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticMethod;
import org.apache.tapestry5.runtime.Component;
import org.apache.tapestry5.runtime.ComponentResourcesAware;
@@ -22,6 +26,9 @@ import org.apache.tapestry5.runtime.Comp
* Encapsulates the parameters, thrown exceptions, and result of a method invocation, allowing a
* {@link org.apache.tapestry5.services.ComponentMethodAdvice} to encapsulate the invocation. Extends Invocation with
* the {@link org.apache.tapestry5.ComponentResources} of the component for which a method is being advised.
+ *
+ * @deprecated Deprecated in 5.3
+ * @see {@link PlasticClass}, {@link PlasticMethod}, {@link MethodAdvice}, {@link MethodInvocation}
*/
public interface ComponentMethodInvocation extends Invocation, ComponentResourcesAware
{
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentValueProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentValueProvider.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentValueProvider.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentValueProvider.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2011 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.
@@ -15,17 +15,20 @@
package org.apache.tapestry5.services;
import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.plastic.ComputedValue;
+import org.apache.tapestry5.plastic.PlasticField;
/**
* An object used to provide a value of a specific type to a component (represented by an
* instance of {@link ComponentResources}). The provider will create and return the value
* (some providers may be smart enough to cache a value, but should be implemented in
- * a thread-safe manner). Often the provider is an inner class of a
- * {@link ComponentClassTransformWorker}.
+ * a thread-safe manner). Often the provider is an inner class of a {@link ComponentClassTransformWorker}.
*
* @param <T>
* type of object provided
* @since 5.2.0
+ * @deprecated Deprecated in 5.3.0, using Plastic equivalents
+ * @see {@link PlasticField}, {@link ComputedValue}
*/
public interface ComponentValueProvider<T>
{
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/MethodAccess.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/MethodAccess.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/MethodAccess.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/MethodAccess.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2011 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.
@@ -14,6 +14,10 @@
package org.apache.tapestry5.services;
+import org.apache.tapestry5.plastic.MethodHandle;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticMethod;
+
/**
* Represents a bridge to an object method, when that method may not be public. A MethodAccess object
* encapsulates the approach for invoking the method and capturing the result (either the return value,
@@ -21,6 +25,8 @@ package org.apache.tapestry5.services;
*
* @since 5.2.0
* @see TransformMethod#getAccess()
+ * @deprecated Deprecated in 5.3.0
+ * @see {@link PlasticClass}, {@link {@link PlasticMethod}, {@link MethodHandle}
*/
public interface MethodAccess
{
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java Fri Apr 29 22:53:38 2011
@@ -41,7 +41,7 @@ public interface TransformField extends
String getType();
/**
- * Returns the fields fully qualified generic type, or null if not defined.
+ * Returns the field's fully qualified generic type, or null if not defined.
* (in Java source syntax, i.e., "()Ljava/util/List<Ljava/lang/String;>;"
*
* @since 5.3.0
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/FieldValueConduit.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/FieldValueConduit.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/FieldValueConduit.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/FieldValueConduit.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2011 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.
@@ -14,11 +14,15 @@
package org.apache.tapestry5.ioc.services;
+import org.apache.tapestry5.plastic.FieldConduit;
+import org.apache.tapestry5.plastic.PlasticField;
/**
* Used as a replacement for a field.
*
* @since 5.2.0
+ * @deprecated Deprecated in 5.3.0, using Plastic equivalents
+ * @see {@link PlasticField}, {@link FieldConduit}
*/
public interface FieldValueConduit
{