You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jo...@apache.org on 2011/06/27 05:49:56 UTC
svn commit: r1140012 - in
/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5:
internal/services/ internal/transform/ services/
Author: joshcanfield
Date: Mon Jun 27 03:49:55 2011
New Revision: 1140012
URL: http://svn.apache.org/viewvc?rev=1140012&view=rev
Log:
TAP5-1561 - migrating from ClassTransformer to ClassTransformer2
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EnvironmentalWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java?rev=1140012&r1=1140011&r2=1140012&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java Mon Jun 27 03:49:55 2011
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008, 2010 The Apache Software Foundation
+// Copyright 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.
@@ -68,12 +68,18 @@ public class BlockInjectionProvider impl
{
public FieldValueConduit get(final ComponentResources resources)
{
- return new ReadOnlyFieldValueConduit(resources, fieldName)
+ return new FieldValueConduit()
{
public Object get()
{
return resources.getBlock(blockId);
}
+
+ public void set(Object newValue)
+ {
+ String componentClassName = resources.getComponentModel().getComponentClassName();
+ throw new RuntimeException(String.format("Field %s.%s is read only.", componentClassName, fieldName));
+ }
};
}
};
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java?rev=1140012&r1=1140011&r2=1140012&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java Mon Jun 27 03:49:55 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -51,12 +51,19 @@ public class ComponentResourcesInjection
{
public FieldValueConduit get(final ComponentResources resources)
{
- return new ReadOnlyFieldValueConduit(resources, fieldName)
+ return new FieldValueConduit()
{
public Object get()
{
return resources;
}
+
+ public void set(Object newValue)
+ {
+ String componentClassName = resources.getComponentModel().getComponentClassName();
+ throw new RuntimeException(String.format("Field %s.%s is read only.",
+ componentClassName, fieldName));
+ }
};
}
};
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java Mon Jun 27 03:49:55 2011
@@ -14,23 +14,26 @@
package org.apache.tapestry5.internal.transform;
-import java.util.List;
-
import org.apache.tapestry5.annotations.SessionState;
+import org.apache.tapestry5.func.F;
import org.apache.tapestry5.func.Predicate;
import org.apache.tapestry5.internal.services.ComponentClassCache;
-import org.apache.tapestry5.ioc.services.FieldValueConduit;
import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.FieldConduit;
+import org.apache.tapestry5.plastic.InstanceContext;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticField;
import org.apache.tapestry5.services.ApplicationStateManager;
-import org.apache.tapestry5.services.ClassTransformation;
-import org.apache.tapestry5.services.ComponentClassTransformWorker;
-import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
+
+import java.util.List;
/**
- * Looks for the {@link ApplicationState} and {@link org.apache.tapestry5.annotations.SessionState} annotations and
+ * Looks for the {@link org.apache.tapestry5.annotations.SessionState} annotations and
* converts read and write access on such fields into calls to the {@link ApplicationStateManager}.
*/
-public class ApplicationStateWorker implements ComponentClassTransformWorker
+public class ApplicationStateWorker implements ComponentClassTransformWorker2
{
private final ApplicationStateManager applicationStateManager;
@@ -43,31 +46,31 @@ public class ApplicationStateWorker impl
this.componentClassCache = componentClassCache;
}
- public void transform(ClassTransformation transformation, MutableComponentModel model)
+ public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
{
- for (TransformField field : transformation.matchFieldsWithAnnotation(SessionState.class))
+ for (PlasticField field : plasticClass.getFieldsWithAnnotation(SessionState.class))
{
SessionState annotation = field.getAnnotation(SessionState.class);
- transform(transformation, field, annotation.create());
+ transform(plasticClass, field, annotation.create());
field.claim(annotation);
}
}
@SuppressWarnings("unchecked")
- private void transform(ClassTransformation transformation, TransformField field, final boolean create)
+ private void transform(PlasticClass transformation, PlasticField field, final boolean create)
{
- final Class fieldClass = componentClassCache.forName(field.getType());
+ final Class fieldClass = componentClassCache.forName(field.getTypeName());
- field.replaceAccess(new FieldValueConduit()
+ field.setConduit(new FieldConduit()
{
- public void set(Object newValue)
+ public void set(Object instance, InstanceContext context, Object newValue)
{
applicationStateManager.set(fieldClass, newValue);
}
- public Object get()
+ public Object get(Object instance, InstanceContext context)
{
return create ? applicationStateManager.get(fieldClass) : applicationStateManager
.getIfExists(fieldClass);
@@ -76,25 +79,25 @@ public class ApplicationStateWorker impl
final String expectedName = field.getName() + "Exists";
- List<TransformField> fields = transformation.matchFields(new Predicate<TransformField>()
+ List<PlasticField> fields = F.flow(transformation.getAllFields()).filter(new Predicate<PlasticField>()
{
- public boolean accept(TransformField field)
+ public boolean accept(PlasticField field)
{
- return field.getType().equals("boolean") && field.getName().equalsIgnoreCase(expectedName);
+ return field.getTypeName().equals("boolean") && field.getName().equalsIgnoreCase(expectedName);
}
- });
+ }).toList();
- for (TransformField existsField : fields)
+ for (PlasticField existsField : fields)
{
existsField.claim(this);
- String className = transformation.getClassName();
+ final String className = transformation.getClassName();
- String fieldName = existsField.getName();
+ final String fieldName = existsField.getName();
- existsField.replaceAccess(new ReadOnlyFieldValueConduit(className, fieldName)
+ existsField.setConduit(new ReadOnlyFieldValueConduit(className, fieldName)
{
- public Object get()
+ public Object get(Object instance, InstanceContext context)
{
return applicationStateManager.exists(fieldClass);
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java Mon Jun 27 03:49:55 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2009, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 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.
@@ -31,11 +31,14 @@ import org.apache.tapestry5.ioc.services
import org.apache.tapestry5.model.ComponentModel;
import org.apache.tapestry5.model.MutableComponentModel;
import org.apache.tapestry5.model.MutableEmbeddedComponentModel;
+import org.apache.tapestry5.plastic.*;
import org.apache.tapestry5.services.ClassTransformation;
import org.apache.tapestry5.services.ComponentClassResolver;
import org.apache.tapestry5.services.ComponentClassTransformWorker;
import org.apache.tapestry5.services.ComponentValueProvider;
import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
/**
* Finds fields with the {@link org.apache.tapestry5.annotations.Component} annotation and updates
@@ -43,7 +46,7 @@ import org.apache.tapestry5.services.Tra
* checks for the {@link Mixins} and {@link MixinClasses} annotations and uses them to update the {@link ComponentModel}
* .
*/
-public class ComponentWorker implements ComponentClassTransformWorker
+public class ComponentWorker implements ComponentClassTransformWorker2
{
private final ComponentClassResolver resolver;
@@ -52,15 +55,15 @@ public class ComponentWorker implements
this.resolver = resolver;
}
- public void transform(ClassTransformation transformation, MutableComponentModel model)
+ public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
{
- for (TransformField field : transformation.matchFieldsWithAnnotation(Component.class))
+ for (PlasticField field : plasticClass.getFieldsWithAnnotation(Component.class))
{
- transformField(transformation, model, field);
+ transformField(plasticClass, model, field);
}
}
- private void transformField(ClassTransformation transformation, MutableComponentModel model, TransformField field)
+ private void transformField(PlasticClass transformation, MutableComponentModel model, PlasticField field)
{
Component annotation = field.getAnnotation(Component.class);
@@ -72,7 +75,7 @@ public class ComponentWorker implements
String id = InternalUtils.isNonBlank(annotationId) ? annotationId : InternalUtils.stripMemberName(fieldName);
- String type = field.getType();
+ String type = field.getTypeName();
Location location = new StringLocation(String.format("%s.%s", transformation.getClassName(), fieldName), 0);
@@ -89,25 +92,27 @@ public class ComponentWorker implements
addMixinTypes(field, embedded);
}
- private void convertAccessToField(ClassTransformation transformation, TransformField field, String id)
+ private void convertAccessToField(PlasticClass plasticClass, PlasticField field, String id)
{
String fieldName = field.getName();
- ComponentValueProvider<FieldValueConduit> provider = createProviderForEmbeddedComponentConduit(fieldName, id);
+ ComputedValue<FieldConduit<?>> provider = createProviderForEmbeddedComponentConduit(fieldName, id);
- field.replaceAccess(provider);
+ field.setComputedConduit(provider);
}
- private ComponentValueProvider<FieldValueConduit> createProviderForEmbeddedComponentConduit(final String fieldName,
+ private ComputedValue<FieldConduit<?>> createProviderForEmbeddedComponentConduit(final String fieldName,
final String id)
{
- return new ComponentValueProvider<FieldValueConduit>()
+ return new ComputedValue<FieldConduit<?>>()
{
- public FieldValueConduit get(final ComponentResources resources)
+ public FieldConduit get(InstanceContext context)
{
+ final ComponentResources resources = context.get(ComponentResources.class);
+
return new ReadOnlyFieldValueConduit(resources, fieldName)
{
- public Object get()
+ public Object get(Object instance, InstanceContext context)
{
return resources.getEmbeddedComponent(id);
}
@@ -124,7 +129,7 @@ public class ComponentWorker implements
embedded.setPublishedParameters(CollectionFactory.newList(TapestryInternalUtils.splitAtCommas(names)));
}
- private void addMixinClasses(TransformField field, MutableEmbeddedComponentModel model)
+ private void addMixinClasses(PlasticField field, MutableEmbeddedComponentModel model)
{
MixinClasses annotation = field.getAnnotation(MixinClasses.class);
@@ -146,7 +151,7 @@ public class ComponentWorker implements
}
}
- private void addMixinTypes(TransformField field, MutableEmbeddedComponentModel model)
+ private void addMixinTypes(PlasticField field, MutableEmbeddedComponentModel model)
{
Mixins annotation = field.getAnnotation(Mixins.class);
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EnvironmentalWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EnvironmentalWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EnvironmentalWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EnvironmentalWorker.java Mon Jun 27 03:49:55 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.
@@ -14,48 +14,55 @@
package org.apache.tapestry5.internal.transform;
-import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.annotations.Environmental;
import org.apache.tapestry5.internal.services.ComponentClassCache;
-import org.apache.tapestry5.ioc.services.FieldValueConduit;
import org.apache.tapestry5.model.MutableComponentModel;
-import org.apache.tapestry5.services.ClassTransformation;
-import org.apache.tapestry5.services.ComponentClassTransformWorker;
-import org.apache.tapestry5.services.ComponentValueProvider;
+import org.apache.tapestry5.plastic.*;
import org.apache.tapestry5.services.Environment;
-import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
/**
* Obtains a value from the {@link Environment} service based on the field type. This is triggered by the presence of
* the {@link Environmental} annotation.
*/
@SuppressWarnings("rawtypes")
-public class EnvironmentalWorker implements ComponentClassTransformWorker
+public class EnvironmentalWorker implements ComponentClassTransformWorker2
{
private final Environment environment;
private final ComponentClassCache classCache;
+
@SuppressWarnings("unchecked")
- private final class EnvironmentalConduit extends ReadOnlyFieldValueConduit
+ private final class EnvironmentalConduit implements FieldConduit
{
+ private final String componentClassName;
+
+ private final String fieldName;
+
private final Class environmentalType;
private final boolean required;
- private EnvironmentalConduit(ComponentResources resources, String fieldName, final Class environmentalType,
+ private EnvironmentalConduit(String componentClassName, String fieldName, final Class environmentalType,
boolean required)
{
- super(resources, fieldName);
-
+ this.componentClassName = componentClassName;
+ this.fieldName = fieldName;
this.environmentalType = environmentalType;
this.required = required;
}
- public Object get()
+ public Object get(Object instance, InstanceContext context)
{
return required ? environment.peekRequired(environmentalType) : environment.peek(environmentalType);
}
+
+ public void set(Object instance, InstanceContext context, Object newValue)
+ {
+ throw new RuntimeException(String.format("Field %s.%s is read only.", componentClassName, fieldName));
+ }
}
public EnvironmentalWorker(Environment environment, ComponentClassCache classCache)
@@ -65,15 +72,15 @@ public class EnvironmentalWorker impleme
this.classCache = classCache;
}
- public void transform(ClassTransformation transformation, MutableComponentModel model)
+ public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
{
- for (TransformField field : transformation.matchFieldsWithAnnotation(Environmental.class))
+ for (PlasticField field : plasticClass.getFieldsWithAnnotation(Environmental.class))
{
- transform(field);
+ transform(model.getComponentClassName(), field);
}
}
- private void transform(TransformField field)
+ private void transform(final String componentClassName, PlasticField field)
{
Environmental annotation = field.getAnnotation(Environmental.class);
@@ -81,19 +88,25 @@ public class EnvironmentalWorker impleme
final String fieldName = field.getName();
- final Class fieldType = classCache.forName(field.getType());
+ final Class fieldType = classCache.forName(field.getTypeName());
final boolean required = annotation.value();
- ComponentValueProvider<FieldValueConduit> provider = new ComponentValueProvider<FieldValueConduit>()
+ ComputedValue<FieldConduit<?>> provider = new ComputedValue<FieldConduit<?>>()
{
- public FieldValueConduit get(ComponentResources resources)
+ public FieldConduit<?> get(InstanceContext context)
+ {
+ return new EnvironmentalConduit(componentClassName, fieldName, fieldType, required);
+ }
+
+ public void set(Object instance, InstanceContext context, Object newValue)
{
- return new EnvironmentalConduit(resources, fieldName, fieldType, required);
+ throw new RuntimeException(
+ String.format("Field %s of component %s is read only.", fieldName, componentClassName));
}
};
- field.replaceAccess(provider);
+ field.setComputedConduit(provider);
}
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java Mon Jun 27 03:49:55 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.
@@ -18,21 +18,19 @@ import org.apache.tapestry5.ComponentRes
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.internal.services.ComponentClassCache;
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.*;
import org.apache.tapestry5.runtime.Component;
import org.apache.tapestry5.runtime.PageLifecycleAdapter;
-import org.apache.tapestry5.services.ClassTransformation;
-import org.apache.tapestry5.services.ComponentClassTransformWorker;
-import org.apache.tapestry5.services.ComponentValueProvider;
-import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
/**
* Recognizes the {@link org.apache.tapestry5.annotations.InjectComponent} annotation, and converts the field into a
* read-only field containing the component. The id of the component may be explicitly stated or will be determined
* from the field name.
*/
-public class InjectComponentWorker implements ComponentClassTransformWorker
+public class InjectComponentWorker implements ComponentClassTransformWorker2
{
private final class InjectedComponentFieldValueConduit extends ReadOnlyFieldValueConduit
{
@@ -58,7 +56,7 @@ public class InjectComponentWorker imple
load();
resources.removePageLifecycleListener(this);
- };
+ }
});
}
@@ -77,7 +75,7 @@ public class InjectComponentWorker imple
.getName(), fieldType.getName()));
}
- public Object get()
+ public Object get(Object instance, InstanceContext context)
{
return embedded;
}
@@ -90,34 +88,36 @@ public class InjectComponentWorker imple
this.classCache = classCache;
}
- public void transform(ClassTransformation transformation, MutableComponentModel model)
+ public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
{
- for (TransformField field : transformation.matchFieldsWithAnnotation(InjectComponent.class))
+ for (PlasticField field : plasticClass.getFieldsWithAnnotation(InjectComponent.class))
{
InjectComponent annotation = field.getAnnotation(InjectComponent.class);
field.claim(annotation);
- final String type = field.getType();
+ final String type = field.getTypeName();
final String componentId = getComponentId(field, annotation);
final String fieldName = field.getName();
- ComponentValueProvider<FieldValueConduit> provider = new ComponentValueProvider<FieldValueConduit>()
+ ComputedValue<FieldConduit<?>> provider = new ComputedValue<FieldConduit<?>>()
{
- public FieldValueConduit get(final ComponentResources resources)
+ public FieldConduit<?> get(InstanceContext context)
{
+ ComponentResources resources = context.get(ComponentResources.class);
+
return new InjectedComponentFieldValueConduit(resources, fieldName, type, componentId);
}
};
- field.replaceAccess(provider);
+ field.setComputedConduit(provider);
}
}
- private String getComponentId(TransformField field, InjectComponent annotation)
+ private String getComponentId(PlasticField field, InjectComponent annotation)
{
String id = annotation.value();
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java Mon Jun 27 03:49:55 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.
@@ -17,20 +17,18 @@ package org.apache.tapestry5.internal.tr
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.annotations.InjectContainer;
import org.apache.tapestry5.internal.services.ComponentClassCache;
-import org.apache.tapestry5.ioc.services.FieldValueConduit;
import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.*;
import org.apache.tapestry5.runtime.Component;
-import org.apache.tapestry5.services.ClassTransformation;
-import org.apache.tapestry5.services.ComponentClassTransformWorker;
-import org.apache.tapestry5.services.ComponentValueProvider;
-import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
/**
* Identifies the {@link org.apache.tapestry5.annotations.InjectContainer} annotation and adds code
* to initialize it to
* the core component.
*/
-public class InjectContainerWorker implements ComponentClassTransformWorker
+public class InjectContainerWorker implements ComponentClassTransformWorker2
{
private final ComponentClassCache cache;
@@ -39,42 +37,42 @@ public class InjectContainerWorker imple
this.cache = cache;
}
- public void transform(ClassTransformation transformation, MutableComponentModel model)
+ public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
{
- for (final TransformField field : transformation.matchFieldsWithAnnotation(InjectContainer.class))
+ for (final PlasticField field : plasticClass.getFieldsWithAnnotation(InjectContainer.class))
{
- transformField(model, field);
+ transformField(field);
}
}
- private void transformField(MutableComponentModel model, TransformField field)
+ private void transformField(PlasticField field)
{
InjectContainer annotation = field.getAnnotation(InjectContainer.class);
field.claim(annotation);
- ComponentValueProvider<FieldValueConduit> provider = createFieldValueConduitProvider(field);
+ ComputedValue<FieldConduit<?>> provider = createFieldValueConduitProvider(field);
- field.replaceAccess(provider);
+ field.setComputedConduit(provider);
}
- private ComponentValueProvider<FieldValueConduit> createFieldValueConduitProvider(TransformField field)
+ private ComputedValue<FieldConduit<?>> createFieldValueConduitProvider(PlasticField field)
{
final String fieldName = field.getName();
- final String fieldTypeName = field.getType();
+ final String fieldTypeName = field.getTypeName();
- return new ComponentValueProvider<FieldValueConduit>()
+ return new ComputedValue<FieldConduit<?>> ()
{
- public FieldValueConduit get(final ComponentResources resources)
+ public FieldConduit<?> get(InstanceContext context)
{
final Class fieldType = cache.forName(fieldTypeName);
+ final ComponentResources resources = context.get(ComponentResources.class);
return new ReadOnlyFieldValueConduit(resources, fieldName)
{
-
- public Object get()
+ public Object get(Object instance, InstanceContext context)
{
Component container = resources.getContainer();
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java Mon Jun 27 03:49:55 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.
@@ -17,22 +17,20 @@ package org.apache.tapestry5.internal.tr
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.annotations.InjectPage;
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.*;
import org.apache.tapestry5.runtime.PageLifecycleAdapter;
-import org.apache.tapestry5.services.ClassTransformation;
import org.apache.tapestry5.services.ComponentClassResolver;
-import org.apache.tapestry5.services.ComponentClassTransformWorker;
import org.apache.tapestry5.services.ComponentSource;
-import org.apache.tapestry5.services.ComponentValueProvider;
-import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
/**
* Peforms transformations that allow pages to be injected into components.
*
* @see org.apache.tapestry5.annotations.InjectPage
*/
-public class InjectPageWorker implements ComponentClassTransformWorker
+public class InjectPageWorker implements ComponentClassTransformWorker2
{
private final class InjectedPageConduit extends ReadOnlyFieldValueConduit
{
@@ -57,7 +55,7 @@ public class InjectPageWorker implements
});
}
- public Object get()
+ public Object get(Object instance, InstanceContext context)
{
if (page == null)
page = componentSource.getPage(injectedPageName);
@@ -76,15 +74,15 @@ public class InjectPageWorker implements
this.resolver = resolver;
}
- public void transform(ClassTransformation transformation, MutableComponentModel model)
+ public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
{
- for (TransformField field : transformation.matchFieldsWithAnnotation(InjectPage.class))
+ for (PlasticField field : plasticClass.getFieldsWithAnnotation(InjectPage.class))
{
addInjectedPage(field);
}
}
- private void addInjectedPage(TransformField field)
+ private void addInjectedPage(PlasticField field)
{
InjectPage annotation = field.getAnnotation(InjectPage.class);
@@ -95,16 +93,17 @@ public class InjectPageWorker implements
final String fieldName = field.getName();
final String injectedPageName = InternalUtils.isBlank(pageName) ? resolver
- .resolvePageClassNameToPageName(field.getType()) : pageName;
+ .resolvePageClassNameToPageName(field.getTypeName()) : pageName;
- ComponentValueProvider<FieldValueConduit> provider = new ComponentValueProvider<FieldValueConduit>()
+ ComputedValue<FieldConduit<?>> provider = new ComputedValue<FieldConduit<?>>()
{
- public FieldValueConduit get(ComponentResources resources)
+ public FieldConduit<?> get(InstanceContext context)
{
+ ComponentResources resources = context.get(ComponentResources.class);
return new InjectedPageConduit(resources, fieldName, injectedPageName);
}
};
- field.replaceAccess(provider);
+ field.setComputedConduit(provider);
}
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java Mon Jun 27 03:49:55 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2008, 2009, 2010 The Apache Software Foundation
+// Copyright 2006, 2008, 2009, 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.
@@ -18,13 +18,11 @@ import org.apache.tapestry5.ComponentRes
import org.apache.tapestry5.annotations.Mixin;
import org.apache.tapestry5.internal.InternalComponentResources;
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.services.ClassTransformation;
+import org.apache.tapestry5.plastic.*;
import org.apache.tapestry5.services.ComponentClassResolver;
-import org.apache.tapestry5.services.ComponentClassTransformWorker;
-import org.apache.tapestry5.services.ComponentValueProvider;
-import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
/**
* Supports the {@link org.apache.tapestry5.annotations.Mixin} annotation, which allows a mixin to
@@ -33,7 +31,7 @@ import org.apache.tapestry5.services.Tra
* and contain a
* reference to the mixin instance.
*/
-public class MixinWorker implements ComponentClassTransformWorker
+public class MixinWorker implements ComponentClassTransformWorker2
{
private final ComponentClassResolver resolver;
@@ -42,15 +40,15 @@ public class MixinWorker implements Comp
this.resolver = resolver;
}
- public void transform(ClassTransformation transformation, MutableComponentModel model)
+ public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
{
- for (TransformField field : transformation.matchFieldsWithAnnotation(Mixin.class))
+ for (PlasticField field : plasticClass.getFieldsWithAnnotation(Mixin.class))
{
replaceFieldWithMixin(model, field);
}
}
- private void replaceFieldWithMixin(MutableComponentModel model, TransformField field)
+ private void replaceFieldWithMixin(MutableComponentModel model, PlasticField field)
{
Mixin annotation = field.getAnnotation(Mixin.class);
@@ -60,7 +58,7 @@ public class MixinWorker implements Comp
String[] order = annotation.order();
- String fieldType = field.getType();
+ String fieldType = field.getTypeName();
String mixinClassName = InternalUtils.isBlank(mixinType) ? fieldType : resolver
.resolveMixinTypeToClassName(mixinType);
@@ -70,25 +68,26 @@ public class MixinWorker implements Comp
replaceFieldAccessWithMixin(field, mixinClassName);
}
- private void replaceFieldAccessWithMixin(TransformField field, String mixinClassName)
+ private void replaceFieldAccessWithMixin(PlasticField field, String mixinClassName)
{
- ComponentValueProvider<FieldValueConduit> provider = createMixinFieldProvider(field.getName(), mixinClassName);
+ ComputedValue<FieldConduit<?>> provider = createMixinFieldProvider(field.getName(), mixinClassName);
- field.replaceAccess(provider);
+ field.setComputedConduit(provider);
}
- private ComponentValueProvider<FieldValueConduit> createMixinFieldProvider(final String fieldName,
+ private ComputedValue<FieldConduit<?>> createMixinFieldProvider(final String fieldName,
final String mixinClassName)
{
- return new ComponentValueProvider<FieldValueConduit>()
+ return new ComputedValue<FieldConduit<?>>()
{
- public FieldValueConduit get(ComponentResources resources)
+ public FieldConduit get(InstanceContext context)
{
+ ComponentResources resources = context.get(ComponentResources.class);
final InternalComponentResources icr = (InternalComponentResources) resources;
return new ReadOnlyFieldValueConduit(resources, fieldName)
{
- public Object get()
+ public Object get(Object instance, InstanceContext context)
{
return icr.getMixinByClassName(mixinClassName);
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java?rev=1140012&r1=1140011&r2=1140012&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java Mon Jun 27 03:49:55 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,15 +15,16 @@
package org.apache.tapestry5.internal.transform;
import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.ioc.services.FieldValueConduit;
+import org.apache.tapestry5.plastic.FieldConduit;
+import org.apache.tapestry5.plastic.InstanceContext;
/**
- * An implementation of {@link FieldValueConduit} for a read-only component field. Subclasses
- * provide an implementation of the {@link #get()} method.
- *
+ * An implementation of {@link FieldConduit} for a read-only component field. Subclasses
+ * provide an implementation of the {@link #get(Object, org.apache.tapestry5.plastic.InstanceContext)} method.
+ *
* @since 5.2.0
*/
-public abstract class ReadOnlyFieldValueConduit implements FieldValueConduit
+public abstract class ReadOnlyFieldValueConduit implements FieldConduit
{
private final String qualifiedFieldName;
@@ -42,7 +43,7 @@ public abstract class ReadOnlyFieldValue
this(resources.getComponentModel().getComponentClassName(), fieldName);
}
- public final void set(Object newValue)
+ public void set(Object instance, InstanceContext context, Object newValue)
{
throw new RuntimeException(String.format("Field %s is read only.", qualifiedFieldName));
}
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=1140012&r1=1140011&r2=1140012&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 Mon Jun 27 03:49:55 2011
@@ -14,103 +14,24 @@
package org.apache.tapestry5.services;
-import java.io.IOException;
-import java.lang.annotation.Annotation;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.URL;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.tapestry5.Asset;
-import org.apache.tapestry5.BindingConstants;
-import org.apache.tapestry5.Block;
-import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.Field;
-import org.apache.tapestry5.FieldValidationSupport;
-import org.apache.tapestry5.FieldValidator;
-import org.apache.tapestry5.Link;
-import org.apache.tapestry5.MarkupWriter;
-import org.apache.tapestry5.MetaDataConstants;
-import org.apache.tapestry5.NullFieldStrategy;
-import org.apache.tapestry5.OptimizedSessionPersistedObject;
-import org.apache.tapestry5.PersistenceConstants;
-import org.apache.tapestry5.PropertyOverrides;
-import org.apache.tapestry5.RenderSupport;
-import org.apache.tapestry5.Renderable;
-import org.apache.tapestry5.SelectModel;
-import org.apache.tapestry5.StreamResponse;
-import org.apache.tapestry5.SymbolConstants;
-import org.apache.tapestry5.TapestryConstants;
-import org.apache.tapestry5.Translator;
-import org.apache.tapestry5.ValidationDecorator;
-import org.apache.tapestry5.Validator;
-import org.apache.tapestry5.VersionUtils;
+import org.apache.tapestry5.*;
import org.apache.tapestry5.ajax.MultiZoneUpdate;
-import org.apache.tapestry5.annotations.ActivationRequestParameter;
+import org.apache.tapestry5.annotations.*;
import org.apache.tapestry5.annotations.ContentType;
-import org.apache.tapestry5.annotations.HeartbeatDeferred;
-import org.apache.tapestry5.annotations.Import;
-import org.apache.tapestry5.annotations.Meta;
-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.Secure;
-import org.apache.tapestry5.annotations.Service;
import org.apache.tapestry5.beaneditor.Validate;
import org.apache.tapestry5.corelib.ClientValidation;
import org.apache.tapestry5.grid.GridDataSource;
-import org.apache.tapestry5.internal.AssetConstants;
-import org.apache.tapestry5.internal.DefaultNullFieldStrategy;
-import org.apache.tapestry5.internal.DefaultValidationDecorator;
-import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.internal.InternalSymbols;
-import org.apache.tapestry5.internal.PropertyOverridesImpl;
-import org.apache.tapestry5.internal.TapestryInternalUtils;
-import org.apache.tapestry5.internal.ZeroNullFieldStrategy;
+import org.apache.tapestry5.internal.*;
import org.apache.tapestry5.internal.beaneditor.EnvironmentMessages;
import org.apache.tapestry5.internal.beaneditor.MessagesConstraintGenerator;
import org.apache.tapestry5.internal.beaneditor.PrimitiveFieldConstraintGenerator;
import org.apache.tapestry5.internal.beaneditor.ValidateAnnotationConstraintGenerator;
-import org.apache.tapestry5.internal.bindings.AssetBindingFactory;
-import org.apache.tapestry5.internal.bindings.BlockBindingFactory;
-import org.apache.tapestry5.internal.bindings.ComponentBindingFactory;
-import org.apache.tapestry5.internal.bindings.ContextBindingFactory;
-import org.apache.tapestry5.internal.bindings.LiteralBindingFactory;
-import org.apache.tapestry5.internal.bindings.MessageBindingFactory;
-import org.apache.tapestry5.internal.bindings.NullFieldStrategyBindingFactory;
-import org.apache.tapestry5.internal.bindings.PropBindingFactory;
-import org.apache.tapestry5.internal.bindings.RenderVariableBindingFactory;
-import org.apache.tapestry5.internal.bindings.SymbolBindingFactory;
-import org.apache.tapestry5.internal.bindings.TranslateBindingFactory;
-import org.apache.tapestry5.internal.bindings.ValidateBindingFactory;
+import org.apache.tapestry5.internal.bindings.*;
import org.apache.tapestry5.internal.dynamic.DynamicTemplateParserImpl;
import org.apache.tapestry5.internal.grid.CollectionGridDataSource;
import org.apache.tapestry5.internal.grid.NullDataSource;
import org.apache.tapestry5.internal.gzip.GZipFilter;
-import org.apache.tapestry5.internal.renderers.AvailableValuesRenderer;
-import org.apache.tapestry5.internal.renderers.ComponentResourcesRenderer;
-import org.apache.tapestry5.internal.renderers.EventContextRenderer;
-import org.apache.tapestry5.internal.renderers.ListRenderer;
-import org.apache.tapestry5.internal.renderers.LocationRenderer;
-import org.apache.tapestry5.internal.renderers.ObjectArrayRenderer;
-import org.apache.tapestry5.internal.renderers.RequestRenderer;
+import org.apache.tapestry5.internal.renderers.*;
import org.apache.tapestry5.internal.services.*;
import org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateFilter;
import org.apache.tapestry5.internal.services.ajax.JavaScriptSupportImpl;
@@ -130,87 +51,17 @@ import org.apache.tapestry5.internal.ser
import org.apache.tapestry5.internal.services.meta.MetaWorkerImpl;
import org.apache.tapestry5.internal.services.templates.DefaultTemplateLocator;
import org.apache.tapestry5.internal.services.templates.PageTemplateLocator;
-import org.apache.tapestry5.internal.transform.ActivationRequestParameterWorker;
-import org.apache.tapestry5.internal.transform.ApplicationStateWorker;
-import org.apache.tapestry5.internal.transform.BindParameterWorker;
-import org.apache.tapestry5.internal.transform.CCTWToCCTW2Coercion;
-import org.apache.tapestry5.internal.transform.CachedWorker;
-import org.apache.tapestry5.internal.transform.ComponentWorker;
-import org.apache.tapestry5.internal.transform.DiscardAfterWorker;
-import org.apache.tapestry5.internal.transform.EnvironmentalWorker;
-import org.apache.tapestry5.internal.transform.HeartbeatDeferredWorker;
-import org.apache.tapestry5.internal.transform.ImportWorker;
-import org.apache.tapestry5.internal.transform.InjectComponentWorker;
-import org.apache.tapestry5.internal.transform.InjectContainerWorker;
-import org.apache.tapestry5.internal.transform.InjectNamedWorker;
-import org.apache.tapestry5.internal.transform.InjectPageWorker;
-import org.apache.tapestry5.internal.transform.InjectServiceWorker;
-import org.apache.tapestry5.internal.transform.InjectWorker;
-import org.apache.tapestry5.internal.transform.InvokePostRenderCleanupOnResourcesWorker;
-import org.apache.tapestry5.internal.transform.LogWorker;
-import org.apache.tapestry5.internal.transform.MixinAfterWorker;
-import org.apache.tapestry5.internal.transform.MixinWorker;
-import org.apache.tapestry5.internal.transform.OnEventWorker;
-import org.apache.tapestry5.internal.transform.PageActivationContextWorker;
-import org.apache.tapestry5.internal.transform.PageLifecycleAnnotationWorker;
-import org.apache.tapestry5.internal.transform.PageResetAnnotationWorker;
-import org.apache.tapestry5.internal.transform.ParameterWorker;
-import org.apache.tapestry5.internal.transform.PersistWorker;
-import org.apache.tapestry5.internal.transform.PropertyWorker;
-import org.apache.tapestry5.internal.transform.RenderCommandWorker;
-import org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker;
-import org.apache.tapestry5.internal.transform.RetainWorker;
-import org.apache.tapestry5.internal.transform.SessionAttributeWorker;
-import org.apache.tapestry5.internal.transform.SupportsInformalParametersWorker;
-import org.apache.tapestry5.internal.transform.UnclaimedFieldWorker;
+import org.apache.tapestry5.internal.transform.*;
import org.apache.tapestry5.internal.translator.NumericTranslator;
import org.apache.tapestry5.internal.translator.NumericTranslatorSupport;
import org.apache.tapestry5.internal.translator.StringTranslator;
import org.apache.tapestry5.internal.util.RenderableAsBlock;
import org.apache.tapestry5.internal.util.StringRenderable;
import org.apache.tapestry5.internal.validator.ValidatorMacroImpl;
-import org.apache.tapestry5.ioc.AnnotationProvider;
-import org.apache.tapestry5.ioc.Configuration;
-import org.apache.tapestry5.ioc.Location;
-import org.apache.tapestry5.ioc.MappedConfiguration;
-import org.apache.tapestry5.ioc.Messages;
-import org.apache.tapestry5.ioc.MethodAdviceReceiver;
-import org.apache.tapestry5.ioc.ObjectLocator;
-import org.apache.tapestry5.ioc.ObjectProvider;
-import org.apache.tapestry5.ioc.OrderedConfiguration;
-import org.apache.tapestry5.ioc.Resource;
-import org.apache.tapestry5.ioc.ScopeConstants;
-import org.apache.tapestry5.ioc.ServiceBinder;
-import org.apache.tapestry5.ioc.annotations.Autobuild;
-import org.apache.tapestry5.ioc.annotations.Contribute;
-import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.ioc.annotations.InjectService;
-import org.apache.tapestry5.ioc.annotations.Local;
-import org.apache.tapestry5.ioc.annotations.Marker;
-import org.apache.tapestry5.ioc.annotations.Match;
-import org.apache.tapestry5.ioc.annotations.Primary;
-import org.apache.tapestry5.ioc.annotations.Scope;
-import org.apache.tapestry5.ioc.annotations.SubModule;
-import org.apache.tapestry5.ioc.annotations.Symbol;
+import org.apache.tapestry5.ioc.*;
+import org.apache.tapestry5.ioc.annotations.*;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.services.Builtin;
-import org.apache.tapestry5.ioc.services.ChainBuilder;
-import org.apache.tapestry5.ioc.services.ClassFactory;
-import org.apache.tapestry5.ioc.services.Coercion;
-import org.apache.tapestry5.ioc.services.CoercionTuple;
-import org.apache.tapestry5.ioc.services.LazyAdvisor;
-import org.apache.tapestry5.ioc.services.MasterObjectProvider;
-import org.apache.tapestry5.ioc.services.PerThreadValue;
-import org.apache.tapestry5.ioc.services.PerthreadManager;
-import org.apache.tapestry5.ioc.services.PipelineBuilder;
-import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
-import org.apache.tapestry5.ioc.services.PropertyAccess;
-import org.apache.tapestry5.ioc.services.PropertyShadowBuilder;
-import org.apache.tapestry5.ioc.services.ServiceOverride;
-import org.apache.tapestry5.ioc.services.StrategyBuilder;
-import org.apache.tapestry5.ioc.services.SymbolSource;
-import org.apache.tapestry5.ioc.services.ThreadLocale;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
+import org.apache.tapestry5.ioc.services.*;
import org.apache.tapestry5.ioc.util.AvailableValues;
import org.apache.tapestry5.ioc.util.IdAllocator;
import org.apache.tapestry5.ioc.util.StrategyRegistry;
@@ -224,8 +75,8 @@ import org.apache.tapestry5.services.aja
import org.apache.tapestry5.services.assets.AssetPathConstructor;
import org.apache.tapestry5.services.assets.AssetRequestHandler;
import org.apache.tapestry5.services.assets.AssetsModule;
-import org.apache.tapestry5.services.dynamic.DynamicTemplateParser;
import org.apache.tapestry5.services.dynamic.DynamicTemplate;
+import org.apache.tapestry5.services.dynamic.DynamicTemplateParser;
import org.apache.tapestry5.services.javascript.JavaScriptStack;
import org.apache.tapestry5.services.javascript.JavaScriptStackSource;
import org.apache.tapestry5.services.javascript.JavaScriptSupport;
@@ -242,17 +93,22 @@ import org.apache.tapestry5.services.pag
import org.apache.tapestry5.services.templates.ComponentTemplateLocator;
import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
import org.apache.tapestry5.util.StringToEnumCoercion;
-import org.apache.tapestry5.validator.Email;
-import org.apache.tapestry5.validator.Max;
-import org.apache.tapestry5.validator.MaxLength;
-import org.apache.tapestry5.validator.Min;
-import org.apache.tapestry5.validator.MinLength;
-import org.apache.tapestry5.validator.None;
-import org.apache.tapestry5.validator.Regexp;
-import org.apache.tapestry5.validator.Required;
-import org.apache.tapestry5.validator.ValidatorMacro;
+import org.apache.tapestry5.validator.*;
import org.slf4j.Logger;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.URL;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Pattern;
+
/**
* The root module for Tapestry.
*/
@@ -645,7 +501,9 @@ public final class TapestryModule
* </ul>
*/
@Contribute(ComponentClassTransformWorker2.class)
- public static void provideTransformWorkers(OrderedConfiguration<ComponentClassTransformWorker2> configuration)
+ public static void provideTransformWorkers(
+ OrderedConfiguration<ComponentClassTransformWorker2> configuration,
+ ComponentClassResolver resolver)
{
configuration.add("Property", new PropertyWorker());
configuration.addInstance("Import", ImportWorker.class, "after:SetupRender");
@@ -657,6 +515,17 @@ public final class TapestryModule
configuration.addInstance("UnclaimedField", UnclaimedFieldWorker.class, "after:*");
configuration.addInstance("OnEvent", OnEventWorker.class);
+
+ // These must come after Property, since they actually delete fields
+ // that may still have the annotation
+ configuration.addInstance("ApplicationState", ApplicationStateWorker.class, "after:Property");
+ configuration.addInstance("Environment", EnvironmentalWorker.class, "after:Property");
+
+ configuration.add("Component", new ComponentWorker(resolver));
+ configuration.add("Mixin", new MixinWorker(resolver));
+ configuration.addInstance("InjectPage", InjectPageWorker.class);
+ configuration.addInstance("InjectComponent", InjectComponentWorker.class);
+ configuration.addInstance("InjectContainer", InjectContainerWorker.class);
}
/**
@@ -725,14 +594,10 @@ public final class TapestryModule
configuration.addInstance("InjectNamed", InjectNamedWorker.class);
configuration.add("MixinAfter", new MixinAfterWorker());
- configuration.add("Component", new ComponentWorker(resolver));
- configuration.add("Mixin", new MixinWorker(resolver));
configuration
.addInstance("ActivationRequestParameter", ActivationRequestParameterWorker.class, "after:OnEvent");
configuration.add("SupportsInformalParameters", new SupportsInformalParametersWorker());
- configuration.addInstance("InjectPage", InjectPageWorker.class);
- configuration.addInstance("InjectContainer", InjectContainerWorker.class);
- configuration.addInstance("InjectComponent", InjectComponentWorker.class);
+
configuration.add("RenderCommand", new RenderCommandWorker());
// Default values for parameters are often some form of injection, so
@@ -765,10 +630,6 @@ public final class TapestryModule
configuration.add("InvokePostRenderCleanupOnResources", new InvokePostRenderCleanupOnResourcesWorker());
- // These must come after Property, since they actually delete fields
- // that may still have the annotation
- configuration.addInstance("ApplicationState", ApplicationStateWorker.class, "after:Property");
- configuration.addInstance("Environment", EnvironmentalWorker.class, "after:Property");
configuration.addInstance("Log", LogWorker.class);
@@ -1470,8 +1331,8 @@ public final class TapestryModule
/**
* Analyzes properties to determine the data types, used to
- * {@linkplain #contributeBeanBlockSource(org.apache.tapestry5.ioc.Configuration)} locale
- * display and edit blocks} for properties. The default behaviors
+ * {@linkplain #provideDefaultBeanBlocks(org.apache.tapestry5.ioc.Configuration)} locale
+ * display and edit blocks for properties. The default behaviors
* look for a {@link org.apache.tapestry5.beaneditor.DataType} annotation
* before deriving the data type from the property type.
*/
Re: svn commit: r1140012 - in /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5:
internal/services/ internal/transform/ services/
Posted by Howard Lewis Ship <hl...@gmail.com>.
Looking good! I don't have proof, but I have a strong intuition that
converting the existing CCTW to CCTW2 will result in faster
transformation and lower memory utilization.
On Sun, Jun 26, 2011 at 8:49 PM, <jo...@apache.org> wrote:
> Author: joshcanfield
> Date: Mon Jun 27 03:49:55 2011
> New Revision: 1140012
>
> URL: http://svn.apache.org/viewvc?rev=1140012&view=rev
> Log:
> TAP5-1561 - migrating from ClassTransformer to ClassTransformer2
>
> Modified:
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EnvironmentalWorker.java
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
>
> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java
> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java?rev=1140012&r1=1140011&r2=1140012&view=diff
> ==============================================================================
> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java (original)
> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java Mon Jun 27 03:49:55 2011
> @@ -1,4 +1,4 @@
> -// Copyright 2007, 2008, 2010 The Apache Software Foundation
> +// Copyright 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.
> @@ -68,12 +68,18 @@ public class BlockInjectionProvider impl
> {
> public FieldValueConduit get(final ComponentResources resources)
> {
> - return new ReadOnlyFieldValueConduit(resources, fieldName)
> + return new FieldValueConduit()
> {
> public Object get()
> {
> return resources.getBlock(blockId);
> }
> +
> + public void set(Object newValue)
> + {
> + String componentClassName = resources.getComponentModel().getComponentClassName();
> + throw new RuntimeException(String.format("Field %s.%s is read only.", componentClassName, fieldName));
> + }
> };
> }
> };
>
> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java
> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java?rev=1140012&r1=1140011&r2=1140012&view=diff
> ==============================================================================
> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java (original)
> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java Mon Jun 27 03:49:55 2011
> @@ -1,4 +1,4 @@
> -// Copyright 2006, 2007, 2010 The Apache Software Foundation
> +// Copyright 2006, 2007, 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.
> @@ -51,12 +51,19 @@ public class ComponentResourcesInjection
> {
> public FieldValueConduit get(final ComponentResources resources)
> {
> - return new ReadOnlyFieldValueConduit(resources, fieldName)
> + return new FieldValueConduit()
> {
> public Object get()
> {
> return resources;
> }
> +
> + public void set(Object newValue)
> + {
> + String componentClassName = resources.getComponentModel().getComponentClassName();
> + throw new RuntimeException(String.format("Field %s.%s is read only.",
> + componentClassName, fieldName));
> + }
> };
> }
> };
>
> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java
> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
> ==============================================================================
> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java (original)
> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java Mon Jun 27 03:49:55 2011
> @@ -14,23 +14,26 @@
>
> package org.apache.tapestry5.internal.transform;
>
> -import java.util.List;
> -
> import org.apache.tapestry5.annotations.SessionState;
> +import org.apache.tapestry5.func.F;
> import org.apache.tapestry5.func.Predicate;
> import org.apache.tapestry5.internal.services.ComponentClassCache;
> -import org.apache.tapestry5.ioc.services.FieldValueConduit;
> import org.apache.tapestry5.model.MutableComponentModel;
> +import org.apache.tapestry5.plastic.FieldConduit;
> +import org.apache.tapestry5.plastic.InstanceContext;
> +import org.apache.tapestry5.plastic.PlasticClass;
> +import org.apache.tapestry5.plastic.PlasticField;
> import org.apache.tapestry5.services.ApplicationStateManager;
> -import org.apache.tapestry5.services.ClassTransformation;
> -import org.apache.tapestry5.services.ComponentClassTransformWorker;
> -import org.apache.tapestry5.services.TransformField;
> +import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
> +import org.apache.tapestry5.services.transform.TransformationSupport;
> +
> +import java.util.List;
>
> /**
> - * Looks for the {@link ApplicationState} and {@link org.apache.tapestry5.annotations.SessionState} annotations and
> + * Looks for the {@link org.apache.tapestry5.annotations.SessionState} annotations and
> * converts read and write access on such fields into calls to the {@link ApplicationStateManager}.
> */
> -public class ApplicationStateWorker implements ComponentClassTransformWorker
> +public class ApplicationStateWorker implements ComponentClassTransformWorker2
> {
> private final ApplicationStateManager applicationStateManager;
>
> @@ -43,31 +46,31 @@ public class ApplicationStateWorker impl
> this.componentClassCache = componentClassCache;
> }
>
> - public void transform(ClassTransformation transformation, MutableComponentModel model)
> + public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
> {
> - for (TransformField field : transformation.matchFieldsWithAnnotation(SessionState.class))
> + for (PlasticField field : plasticClass.getFieldsWithAnnotation(SessionState.class))
> {
> SessionState annotation = field.getAnnotation(SessionState.class);
>
> - transform(transformation, field, annotation.create());
> + transform(plasticClass, field, annotation.create());
>
> field.claim(annotation);
> }
> }
>
> @SuppressWarnings("unchecked")
> - private void transform(ClassTransformation transformation, TransformField field, final boolean create)
> + private void transform(PlasticClass transformation, PlasticField field, final boolean create)
> {
> - final Class fieldClass = componentClassCache.forName(field.getType());
> + final Class fieldClass = componentClassCache.forName(field.getTypeName());
>
> - field.replaceAccess(new FieldValueConduit()
> + field.setConduit(new FieldConduit()
> {
> - public void set(Object newValue)
> + public void set(Object instance, InstanceContext context, Object newValue)
> {
> applicationStateManager.set(fieldClass, newValue);
> }
>
> - public Object get()
> + public Object get(Object instance, InstanceContext context)
> {
> return create ? applicationStateManager.get(fieldClass) : applicationStateManager
> .getIfExists(fieldClass);
> @@ -76,25 +79,25 @@ public class ApplicationStateWorker impl
>
> final String expectedName = field.getName() + "Exists";
>
> - List<TransformField> fields = transformation.matchFields(new Predicate<TransformField>()
> + List<PlasticField> fields = F.flow(transformation.getAllFields()).filter(new Predicate<PlasticField>()
> {
> - public boolean accept(TransformField field)
> + public boolean accept(PlasticField field)
> {
> - return field.getType().equals("boolean") && field.getName().equalsIgnoreCase(expectedName);
> + return field.getTypeName().equals("boolean") && field.getName().equalsIgnoreCase(expectedName);
> }
> - });
> + }).toList();
>
> - for (TransformField existsField : fields)
> + for (PlasticField existsField : fields)
> {
> existsField.claim(this);
>
> - String className = transformation.getClassName();
> + final String className = transformation.getClassName();
>
> - String fieldName = existsField.getName();
> + final String fieldName = existsField.getName();
>
> - existsField.replaceAccess(new ReadOnlyFieldValueConduit(className, fieldName)
> + existsField.setConduit(new ReadOnlyFieldValueConduit(className, fieldName)
> {
> - public Object get()
> + public Object get(Object instance, InstanceContext context)
> {
> return applicationStateManager.exists(fieldClass);
> }
>
> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java
> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
> ==============================================================================
> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java (original)
> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java Mon Jun 27 03:49:55 2011
> @@ -1,4 +1,4 @@
> -// Copyright 2006, 2007, 2008, 2009, 2010 The Apache Software Foundation
> +// Copyright 2006, 2007, 2008, 2009, 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.
> @@ -31,11 +31,14 @@ import org.apache.tapestry5.ioc.services
> import org.apache.tapestry5.model.ComponentModel;
> import org.apache.tapestry5.model.MutableComponentModel;
> import org.apache.tapestry5.model.MutableEmbeddedComponentModel;
> +import org.apache.tapestry5.plastic.*;
> import org.apache.tapestry5.services.ClassTransformation;
> import org.apache.tapestry5.services.ComponentClassResolver;
> import org.apache.tapestry5.services.ComponentClassTransformWorker;
> import org.apache.tapestry5.services.ComponentValueProvider;
> import org.apache.tapestry5.services.TransformField;
> +import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
> +import org.apache.tapestry5.services.transform.TransformationSupport;
>
> /**
> * Finds fields with the {@link org.apache.tapestry5.annotations.Component} annotation and updates
> @@ -43,7 +46,7 @@ import org.apache.tapestry5.services.Tra
> * checks for the {@link Mixins} and {@link MixinClasses} annotations and uses them to update the {@link ComponentModel}
> * .
> */
> -public class ComponentWorker implements ComponentClassTransformWorker
> +public class ComponentWorker implements ComponentClassTransformWorker2
> {
> private final ComponentClassResolver resolver;
>
> @@ -52,15 +55,15 @@ public class ComponentWorker implements
> this.resolver = resolver;
> }
>
> - public void transform(ClassTransformation transformation, MutableComponentModel model)
> + public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
> {
> - for (TransformField field : transformation.matchFieldsWithAnnotation(Component.class))
> + for (PlasticField field : plasticClass.getFieldsWithAnnotation(Component.class))
> {
> - transformField(transformation, model, field);
> + transformField(plasticClass, model, field);
> }
> }
>
> - private void transformField(ClassTransformation transformation, MutableComponentModel model, TransformField field)
> + private void transformField(PlasticClass transformation, MutableComponentModel model, PlasticField field)
> {
> Component annotation = field.getAnnotation(Component.class);
>
> @@ -72,7 +75,7 @@ public class ComponentWorker implements
>
> String id = InternalUtils.isNonBlank(annotationId) ? annotationId : InternalUtils.stripMemberName(fieldName);
>
> - String type = field.getType();
> + String type = field.getTypeName();
>
> Location location = new StringLocation(String.format("%s.%s", transformation.getClassName(), fieldName), 0);
>
> @@ -89,25 +92,27 @@ public class ComponentWorker implements
> addMixinTypes(field, embedded);
> }
>
> - private void convertAccessToField(ClassTransformation transformation, TransformField field, String id)
> + private void convertAccessToField(PlasticClass plasticClass, PlasticField field, String id)
> {
> String fieldName = field.getName();
>
> - ComponentValueProvider<FieldValueConduit> provider = createProviderForEmbeddedComponentConduit(fieldName, id);
> + ComputedValue<FieldConduit<?>> provider = createProviderForEmbeddedComponentConduit(fieldName, id);
>
> - field.replaceAccess(provider);
> + field.setComputedConduit(provider);
> }
>
> - private ComponentValueProvider<FieldValueConduit> createProviderForEmbeddedComponentConduit(final String fieldName,
> + private ComputedValue<FieldConduit<?>> createProviderForEmbeddedComponentConduit(final String fieldName,
> final String id)
> {
> - return new ComponentValueProvider<FieldValueConduit>()
> + return new ComputedValue<FieldConduit<?>>()
> {
> - public FieldValueConduit get(final ComponentResources resources)
> + public FieldConduit get(InstanceContext context)
> {
> + final ComponentResources resources = context.get(ComponentResources.class);
> +
> return new ReadOnlyFieldValueConduit(resources, fieldName)
> {
> - public Object get()
> + public Object get(Object instance, InstanceContext context)
> {
> return resources.getEmbeddedComponent(id);
> }
> @@ -124,7 +129,7 @@ public class ComponentWorker implements
> embedded.setPublishedParameters(CollectionFactory.newList(TapestryInternalUtils.splitAtCommas(names)));
> }
>
> - private void addMixinClasses(TransformField field, MutableEmbeddedComponentModel model)
> + private void addMixinClasses(PlasticField field, MutableEmbeddedComponentModel model)
> {
> MixinClasses annotation = field.getAnnotation(MixinClasses.class);
>
> @@ -146,7 +151,7 @@ public class ComponentWorker implements
> }
> }
>
> - private void addMixinTypes(TransformField field, MutableEmbeddedComponentModel model)
> + private void addMixinTypes(PlasticField field, MutableEmbeddedComponentModel model)
> {
> Mixins annotation = field.getAnnotation(Mixins.class);
>
>
> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EnvironmentalWorker.java
> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EnvironmentalWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
> ==============================================================================
> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EnvironmentalWorker.java (original)
> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EnvironmentalWorker.java Mon Jun 27 03:49:55 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.
> @@ -14,48 +14,55 @@
>
> package org.apache.tapestry5.internal.transform;
>
> -import org.apache.tapestry5.ComponentResources;
> import org.apache.tapestry5.annotations.Environmental;
> import org.apache.tapestry5.internal.services.ComponentClassCache;
> -import org.apache.tapestry5.ioc.services.FieldValueConduit;
> import org.apache.tapestry5.model.MutableComponentModel;
> -import org.apache.tapestry5.services.ClassTransformation;
> -import org.apache.tapestry5.services.ComponentClassTransformWorker;
> -import org.apache.tapestry5.services.ComponentValueProvider;
> +import org.apache.tapestry5.plastic.*;
> import org.apache.tapestry5.services.Environment;
> -import org.apache.tapestry5.services.TransformField;
> +import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
> +import org.apache.tapestry5.services.transform.TransformationSupport;
>
> /**
> * Obtains a value from the {@link Environment} service based on the field type. This is triggered by the presence of
> * the {@link Environmental} annotation.
> */
> @SuppressWarnings("rawtypes")
> -public class EnvironmentalWorker implements ComponentClassTransformWorker
> +public class EnvironmentalWorker implements ComponentClassTransformWorker2
> {
> private final Environment environment;
>
> private final ComponentClassCache classCache;
>
> +
> @SuppressWarnings("unchecked")
> - private final class EnvironmentalConduit extends ReadOnlyFieldValueConduit
> + private final class EnvironmentalConduit implements FieldConduit
> {
> + private final String componentClassName;
> +
> + private final String fieldName;
> +
> private final Class environmentalType;
>
> private final boolean required;
>
> - private EnvironmentalConduit(ComponentResources resources, String fieldName, final Class environmentalType,
> + private EnvironmentalConduit(String componentClassName, String fieldName, final Class environmentalType,
> boolean required)
> {
> - super(resources, fieldName);
> -
> + this.componentClassName = componentClassName;
> + this.fieldName = fieldName;
> this.environmentalType = environmentalType;
> this.required = required;
> }
>
> - public Object get()
> + public Object get(Object instance, InstanceContext context)
> {
> return required ? environment.peekRequired(environmentalType) : environment.peek(environmentalType);
> }
> +
> + public void set(Object instance, InstanceContext context, Object newValue)
> + {
> + throw new RuntimeException(String.format("Field %s.%s is read only.", componentClassName, fieldName));
> + }
> }
>
> public EnvironmentalWorker(Environment environment, ComponentClassCache classCache)
> @@ -65,15 +72,15 @@ public class EnvironmentalWorker impleme
> this.classCache = classCache;
> }
>
> - public void transform(ClassTransformation transformation, MutableComponentModel model)
> + public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
> {
> - for (TransformField field : transformation.matchFieldsWithAnnotation(Environmental.class))
> + for (PlasticField field : plasticClass.getFieldsWithAnnotation(Environmental.class))
> {
> - transform(field);
> + transform(model.getComponentClassName(), field);
> }
> }
>
> - private void transform(TransformField field)
> + private void transform(final String componentClassName, PlasticField field)
> {
> Environmental annotation = field.getAnnotation(Environmental.class);
>
> @@ -81,19 +88,25 @@ public class EnvironmentalWorker impleme
>
> final String fieldName = field.getName();
>
> - final Class fieldType = classCache.forName(field.getType());
> + final Class fieldType = classCache.forName(field.getTypeName());
>
> final boolean required = annotation.value();
>
> - ComponentValueProvider<FieldValueConduit> provider = new ComponentValueProvider<FieldValueConduit>()
> + ComputedValue<FieldConduit<?>> provider = new ComputedValue<FieldConduit<?>>()
> {
> - public FieldValueConduit get(ComponentResources resources)
> + public FieldConduit<?> get(InstanceContext context)
> + {
> + return new EnvironmentalConduit(componentClassName, fieldName, fieldType, required);
> + }
> +
> + public void set(Object instance, InstanceContext context, Object newValue)
> {
> - return new EnvironmentalConduit(resources, fieldName, fieldType, required);
> + throw new RuntimeException(
> + String.format("Field %s of component %s is read only.", fieldName, componentClassName));
> }
> };
>
> - field.replaceAccess(provider);
> + field.setComputedConduit(provider);
> }
>
> }
>
> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java
> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
> ==============================================================================
> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java (original)
> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java Mon Jun 27 03:49:55 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.
> @@ -18,21 +18,19 @@ import org.apache.tapestry5.ComponentRes
> import org.apache.tapestry5.annotations.InjectComponent;
> import org.apache.tapestry5.internal.services.ComponentClassCache;
> 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.*;
> import org.apache.tapestry5.runtime.Component;
> import org.apache.tapestry5.runtime.PageLifecycleAdapter;
> -import org.apache.tapestry5.services.ClassTransformation;
> -import org.apache.tapestry5.services.ComponentClassTransformWorker;
> -import org.apache.tapestry5.services.ComponentValueProvider;
> -import org.apache.tapestry5.services.TransformField;
> +import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
> +import org.apache.tapestry5.services.transform.TransformationSupport;
>
> /**
> * Recognizes the {@link org.apache.tapestry5.annotations.InjectComponent} annotation, and converts the field into a
> * read-only field containing the component. The id of the component may be explicitly stated or will be determined
> * from the field name.
> */
> -public class InjectComponentWorker implements ComponentClassTransformWorker
> +public class InjectComponentWorker implements ComponentClassTransformWorker2
> {
> private final class InjectedComponentFieldValueConduit extends ReadOnlyFieldValueConduit
> {
> @@ -58,7 +56,7 @@ public class InjectComponentWorker imple
> load();
>
> resources.removePageLifecycleListener(this);
> - };
> + }
> });
> }
>
> @@ -77,7 +75,7 @@ public class InjectComponentWorker imple
> .getName(), fieldType.getName()));
> }
>
> - public Object get()
> + public Object get(Object instance, InstanceContext context)
> {
> return embedded;
> }
> @@ -90,34 +88,36 @@ public class InjectComponentWorker imple
> this.classCache = classCache;
> }
>
> - public void transform(ClassTransformation transformation, MutableComponentModel model)
> + public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
> {
> - for (TransformField field : transformation.matchFieldsWithAnnotation(InjectComponent.class))
> + for (PlasticField field : plasticClass.getFieldsWithAnnotation(InjectComponent.class))
> {
> InjectComponent annotation = field.getAnnotation(InjectComponent.class);
>
> field.claim(annotation);
>
> - final String type = field.getType();
> + final String type = field.getTypeName();
>
> final String componentId = getComponentId(field, annotation);
>
> final String fieldName = field.getName();
>
> - ComponentValueProvider<FieldValueConduit> provider = new ComponentValueProvider<FieldValueConduit>()
> + ComputedValue<FieldConduit<?>> provider = new ComputedValue<FieldConduit<?>>()
> {
> - public FieldValueConduit get(final ComponentResources resources)
> + public FieldConduit<?> get(InstanceContext context)
> {
> + ComponentResources resources = context.get(ComponentResources.class);
> +
> return new InjectedComponentFieldValueConduit(resources, fieldName, type, componentId);
> }
> };
>
> - field.replaceAccess(provider);
> + field.setComputedConduit(provider);
> }
>
> }
>
> - private String getComponentId(TransformField field, InjectComponent annotation)
> + private String getComponentId(PlasticField field, InjectComponent annotation)
> {
> String id = annotation.value();
>
>
> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java
> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
> ==============================================================================
> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java (original)
> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java Mon Jun 27 03:49:55 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.
> @@ -17,20 +17,18 @@ package org.apache.tapestry5.internal.tr
> import org.apache.tapestry5.ComponentResources;
> import org.apache.tapestry5.annotations.InjectContainer;
> import org.apache.tapestry5.internal.services.ComponentClassCache;
> -import org.apache.tapestry5.ioc.services.FieldValueConduit;
> import org.apache.tapestry5.model.MutableComponentModel;
> +import org.apache.tapestry5.plastic.*;
> import org.apache.tapestry5.runtime.Component;
> -import org.apache.tapestry5.services.ClassTransformation;
> -import org.apache.tapestry5.services.ComponentClassTransformWorker;
> -import org.apache.tapestry5.services.ComponentValueProvider;
> -import org.apache.tapestry5.services.TransformField;
> +import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
> +import org.apache.tapestry5.services.transform.TransformationSupport;
>
> /**
> * Identifies the {@link org.apache.tapestry5.annotations.InjectContainer} annotation and adds code
> * to initialize it to
> * the core component.
> */
> -public class InjectContainerWorker implements ComponentClassTransformWorker
> +public class InjectContainerWorker implements ComponentClassTransformWorker2
> {
> private final ComponentClassCache cache;
>
> @@ -39,42 +37,42 @@ public class InjectContainerWorker imple
> this.cache = cache;
> }
>
> - public void transform(ClassTransformation transformation, MutableComponentModel model)
> + public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
> {
> - for (final TransformField field : transformation.matchFieldsWithAnnotation(InjectContainer.class))
> + for (final PlasticField field : plasticClass.getFieldsWithAnnotation(InjectContainer.class))
> {
> - transformField(model, field);
> + transformField(field);
> }
> }
>
> - private void transformField(MutableComponentModel model, TransformField field)
> + private void transformField(PlasticField field)
> {
> InjectContainer annotation = field.getAnnotation(InjectContainer.class);
>
> field.claim(annotation);
>
> - ComponentValueProvider<FieldValueConduit> provider = createFieldValueConduitProvider(field);
> + ComputedValue<FieldConduit<?>> provider = createFieldValueConduitProvider(field);
>
> - field.replaceAccess(provider);
> + field.setComputedConduit(provider);
> }
>
> - private ComponentValueProvider<FieldValueConduit> createFieldValueConduitProvider(TransformField field)
> + private ComputedValue<FieldConduit<?>> createFieldValueConduitProvider(PlasticField field)
> {
>
> final String fieldName = field.getName();
>
> - final String fieldTypeName = field.getType();
> + final String fieldTypeName = field.getTypeName();
>
> - return new ComponentValueProvider<FieldValueConduit>()
> + return new ComputedValue<FieldConduit<?>> ()
> {
> - public FieldValueConduit get(final ComponentResources resources)
> + public FieldConduit<?> get(InstanceContext context)
> {
> final Class fieldType = cache.forName(fieldTypeName);
> + final ComponentResources resources = context.get(ComponentResources.class);
>
> return new ReadOnlyFieldValueConduit(resources, fieldName)
> {
> -
> - public Object get()
> + public Object get(Object instance, InstanceContext context)
> {
> Component container = resources.getContainer();
>
>
> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java
> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
> ==============================================================================
> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java (original)
> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java Mon Jun 27 03:49:55 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.
> @@ -17,22 +17,20 @@ package org.apache.tapestry5.internal.tr
> import org.apache.tapestry5.ComponentResources;
> import org.apache.tapestry5.annotations.InjectPage;
> 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.*;
> import org.apache.tapestry5.runtime.PageLifecycleAdapter;
> -import org.apache.tapestry5.services.ClassTransformation;
> import org.apache.tapestry5.services.ComponentClassResolver;
> -import org.apache.tapestry5.services.ComponentClassTransformWorker;
> import org.apache.tapestry5.services.ComponentSource;
> -import org.apache.tapestry5.services.ComponentValueProvider;
> -import org.apache.tapestry5.services.TransformField;
> +import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
> +import org.apache.tapestry5.services.transform.TransformationSupport;
>
> /**
> * Peforms transformations that allow pages to be injected into components.
> *
> * @see org.apache.tapestry5.annotations.InjectPage
> */
> -public class InjectPageWorker implements ComponentClassTransformWorker
> +public class InjectPageWorker implements ComponentClassTransformWorker2
> {
> private final class InjectedPageConduit extends ReadOnlyFieldValueConduit
> {
> @@ -57,7 +55,7 @@ public class InjectPageWorker implements
> });
> }
>
> - public Object get()
> + public Object get(Object instance, InstanceContext context)
> {
> if (page == null)
> page = componentSource.getPage(injectedPageName);
> @@ -76,15 +74,15 @@ public class InjectPageWorker implements
> this.resolver = resolver;
> }
>
> - public void transform(ClassTransformation transformation, MutableComponentModel model)
> + public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
> {
> - for (TransformField field : transformation.matchFieldsWithAnnotation(InjectPage.class))
> + for (PlasticField field : plasticClass.getFieldsWithAnnotation(InjectPage.class))
> {
> addInjectedPage(field);
> }
> }
>
> - private void addInjectedPage(TransformField field)
> + private void addInjectedPage(PlasticField field)
> {
> InjectPage annotation = field.getAnnotation(InjectPage.class);
>
> @@ -95,16 +93,17 @@ public class InjectPageWorker implements
> final String fieldName = field.getName();
>
> final String injectedPageName = InternalUtils.isBlank(pageName) ? resolver
> - .resolvePageClassNameToPageName(field.getType()) : pageName;
> + .resolvePageClassNameToPageName(field.getTypeName()) : pageName;
>
> - ComponentValueProvider<FieldValueConduit> provider = new ComponentValueProvider<FieldValueConduit>()
> + ComputedValue<FieldConduit<?>> provider = new ComputedValue<FieldConduit<?>>()
> {
> - public FieldValueConduit get(ComponentResources resources)
> + public FieldConduit<?> get(InstanceContext context)
> {
> + ComponentResources resources = context.get(ComponentResources.class);
> return new InjectedPageConduit(resources, fieldName, injectedPageName);
> }
> };
>
> - field.replaceAccess(provider);
> + field.setComputedConduit(provider);
> }
> }
>
> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java
> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java?rev=1140012&r1=1140011&r2=1140012&view=diff
> ==============================================================================
> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java (original)
> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java Mon Jun 27 03:49:55 2011
> @@ -1,4 +1,4 @@
> -// Copyright 2006, 2008, 2009, 2010 The Apache Software Foundation
> +// Copyright 2006, 2008, 2009, 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.
> @@ -18,13 +18,11 @@ import org.apache.tapestry5.ComponentRes
> import org.apache.tapestry5.annotations.Mixin;
> import org.apache.tapestry5.internal.InternalComponentResources;
> 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.services.ClassTransformation;
> +import org.apache.tapestry5.plastic.*;
> import org.apache.tapestry5.services.ComponentClassResolver;
> -import org.apache.tapestry5.services.ComponentClassTransformWorker;
> -import org.apache.tapestry5.services.ComponentValueProvider;
> -import org.apache.tapestry5.services.TransformField;
> +import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
> +import org.apache.tapestry5.services.transform.TransformationSupport;
>
> /**
> * Supports the {@link org.apache.tapestry5.annotations.Mixin} annotation, which allows a mixin to
> @@ -33,7 +31,7 @@ import org.apache.tapestry5.services.Tra
> * and contain a
> * reference to the mixin instance.
> */
> -public class MixinWorker implements ComponentClassTransformWorker
> +public class MixinWorker implements ComponentClassTransformWorker2
> {
> private final ComponentClassResolver resolver;
>
> @@ -42,15 +40,15 @@ public class MixinWorker implements Comp
> this.resolver = resolver;
> }
>
> - public void transform(ClassTransformation transformation, MutableComponentModel model)
> + public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
> {
> - for (TransformField field : transformation.matchFieldsWithAnnotation(Mixin.class))
> + for (PlasticField field : plasticClass.getFieldsWithAnnotation(Mixin.class))
> {
> replaceFieldWithMixin(model, field);
> }
> }
>
> - private void replaceFieldWithMixin(MutableComponentModel model, TransformField field)
> + private void replaceFieldWithMixin(MutableComponentModel model, PlasticField field)
> {
> Mixin annotation = field.getAnnotation(Mixin.class);
>
> @@ -60,7 +58,7 @@ public class MixinWorker implements Comp
>
> String[] order = annotation.order();
>
> - String fieldType = field.getType();
> + String fieldType = field.getTypeName();
>
> String mixinClassName = InternalUtils.isBlank(mixinType) ? fieldType : resolver
> .resolveMixinTypeToClassName(mixinType);
> @@ -70,25 +68,26 @@ public class MixinWorker implements Comp
> replaceFieldAccessWithMixin(field, mixinClassName);
> }
>
> - private void replaceFieldAccessWithMixin(TransformField field, String mixinClassName)
> + private void replaceFieldAccessWithMixin(PlasticField field, String mixinClassName)
> {
> - ComponentValueProvider<FieldValueConduit> provider = createMixinFieldProvider(field.getName(), mixinClassName);
> + ComputedValue<FieldConduit<?>> provider = createMixinFieldProvider(field.getName(), mixinClassName);
>
> - field.replaceAccess(provider);
> + field.setComputedConduit(provider);
> }
>
> - private ComponentValueProvider<FieldValueConduit> createMixinFieldProvider(final String fieldName,
> + private ComputedValue<FieldConduit<?>> createMixinFieldProvider(final String fieldName,
> final String mixinClassName)
> {
> - return new ComponentValueProvider<FieldValueConduit>()
> + return new ComputedValue<FieldConduit<?>>()
> {
> - public FieldValueConduit get(ComponentResources resources)
> + public FieldConduit get(InstanceContext context)
> {
> + ComponentResources resources = context.get(ComponentResources.class);
> final InternalComponentResources icr = (InternalComponentResources) resources;
>
> return new ReadOnlyFieldValueConduit(resources, fieldName)
> {
> - public Object get()
> + public Object get(Object instance, InstanceContext context)
> {
> return icr.getMixinByClassName(mixinClassName);
> }
>
> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java
> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java?rev=1140012&r1=1140011&r2=1140012&view=diff
> ==============================================================================
> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java (original)
> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java Mon Jun 27 03:49:55 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,15 +15,16 @@
> package org.apache.tapestry5.internal.transform;
>
> import org.apache.tapestry5.ComponentResources;
> -import org.apache.tapestry5.ioc.services.FieldValueConduit;
> +import org.apache.tapestry5.plastic.FieldConduit;
> +import org.apache.tapestry5.plastic.InstanceContext;
>
> /**
> - * An implementation of {@link FieldValueConduit} for a read-only component field. Subclasses
> - * provide an implementation of the {@link #get()} method.
> - *
> + * An implementation of {@link FieldConduit} for a read-only component field. Subclasses
> + * provide an implementation of the {@link #get(Object, org.apache.tapestry5.plastic.InstanceContext)} method.
> + *
> * @since 5.2.0
> */
> -public abstract class ReadOnlyFieldValueConduit implements FieldValueConduit
> +public abstract class ReadOnlyFieldValueConduit implements FieldConduit
> {
> private final String qualifiedFieldName;
>
> @@ -42,7 +43,7 @@ public abstract class ReadOnlyFieldValue
> this(resources.getComponentModel().getComponentClassName(), fieldName);
> }
>
> - public final void set(Object newValue)
> + public void set(Object instance, InstanceContext context, Object newValue)
> {
> throw new RuntimeException(String.format("Field %s is read only.", qualifiedFieldName));
> }
>
> 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=1140012&r1=1140011&r2=1140012&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 Mon Jun 27 03:49:55 2011
> @@ -14,103 +14,24 @@
>
> package org.apache.tapestry5.services;
>
> -import java.io.IOException;
> -import java.lang.annotation.Annotation;
> -import java.math.BigDecimal;
> -import java.math.BigInteger;
> -import java.net.URL;
> -import java.text.DateFormat;
> -import java.text.SimpleDateFormat;
> -import java.util.Calendar;
> -import java.util.Collection;
> -import java.util.Date;
> -import java.util.List;
> -import java.util.Locale;
> -import java.util.Map;
> -import java.util.Random;
> -import java.util.Set;
> -import java.util.regex.Pattern;
> -
> -import javax.servlet.ServletContext;
> -import javax.servlet.http.HttpServletRequest;
> -import javax.servlet.http.HttpServletResponse;
> -
> -import org.apache.tapestry5.Asset;
> -import org.apache.tapestry5.BindingConstants;
> -import org.apache.tapestry5.Block;
> -import org.apache.tapestry5.ComponentResources;
> -import org.apache.tapestry5.EventContext;
> -import org.apache.tapestry5.Field;
> -import org.apache.tapestry5.FieldValidationSupport;
> -import org.apache.tapestry5.FieldValidator;
> -import org.apache.tapestry5.Link;
> -import org.apache.tapestry5.MarkupWriter;
> -import org.apache.tapestry5.MetaDataConstants;
> -import org.apache.tapestry5.NullFieldStrategy;
> -import org.apache.tapestry5.OptimizedSessionPersistedObject;
> -import org.apache.tapestry5.PersistenceConstants;
> -import org.apache.tapestry5.PropertyOverrides;
> -import org.apache.tapestry5.RenderSupport;
> -import org.apache.tapestry5.Renderable;
> -import org.apache.tapestry5.SelectModel;
> -import org.apache.tapestry5.StreamResponse;
> -import org.apache.tapestry5.SymbolConstants;
> -import org.apache.tapestry5.TapestryConstants;
> -import org.apache.tapestry5.Translator;
> -import org.apache.tapestry5.ValidationDecorator;
> -import org.apache.tapestry5.Validator;
> -import org.apache.tapestry5.VersionUtils;
> +import org.apache.tapestry5.*;
> import org.apache.tapestry5.ajax.MultiZoneUpdate;
> -import org.apache.tapestry5.annotations.ActivationRequestParameter;
> +import org.apache.tapestry5.annotations.*;
> import org.apache.tapestry5.annotations.ContentType;
> -import org.apache.tapestry5.annotations.HeartbeatDeferred;
> -import org.apache.tapestry5.annotations.Import;
> -import org.apache.tapestry5.annotations.Meta;
> -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.Secure;
> -import org.apache.tapestry5.annotations.Service;
> import org.apache.tapestry5.beaneditor.Validate;
> import org.apache.tapestry5.corelib.ClientValidation;
> import org.apache.tapestry5.grid.GridDataSource;
> -import org.apache.tapestry5.internal.AssetConstants;
> -import org.apache.tapestry5.internal.DefaultNullFieldStrategy;
> -import org.apache.tapestry5.internal.DefaultValidationDecorator;
> -import org.apache.tapestry5.internal.InternalConstants;
> -import org.apache.tapestry5.internal.InternalSymbols;
> -import org.apache.tapestry5.internal.PropertyOverridesImpl;
> -import org.apache.tapestry5.internal.TapestryInternalUtils;
> -import org.apache.tapestry5.internal.ZeroNullFieldStrategy;
> +import org.apache.tapestry5.internal.*;
> import org.apache.tapestry5.internal.beaneditor.EnvironmentMessages;
> import org.apache.tapestry5.internal.beaneditor.MessagesConstraintGenerator;
> import org.apache.tapestry5.internal.beaneditor.PrimitiveFieldConstraintGenerator;
> import org.apache.tapestry5.internal.beaneditor.ValidateAnnotationConstraintGenerator;
> -import org.apache.tapestry5.internal.bindings.AssetBindingFactory;
> -import org.apache.tapestry5.internal.bindings.BlockBindingFactory;
> -import org.apache.tapestry5.internal.bindings.ComponentBindingFactory;
> -import org.apache.tapestry5.internal.bindings.ContextBindingFactory;
> -import org.apache.tapestry5.internal.bindings.LiteralBindingFactory;
> -import org.apache.tapestry5.internal.bindings.MessageBindingFactory;
> -import org.apache.tapestry5.internal.bindings.NullFieldStrategyBindingFactory;
> -import org.apache.tapestry5.internal.bindings.PropBindingFactory;
> -import org.apache.tapestry5.internal.bindings.RenderVariableBindingFactory;
> -import org.apache.tapestry5.internal.bindings.SymbolBindingFactory;
> -import org.apache.tapestry5.internal.bindings.TranslateBindingFactory;
> -import org.apache.tapestry5.internal.bindings.ValidateBindingFactory;
> +import org.apache.tapestry5.internal.bindings.*;
> import org.apache.tapestry5.internal.dynamic.DynamicTemplateParserImpl;
> import org.apache.tapestry5.internal.grid.CollectionGridDataSource;
> import org.apache.tapestry5.internal.grid.NullDataSource;
> import org.apache.tapestry5.internal.gzip.GZipFilter;
> -import org.apache.tapestry5.internal.renderers.AvailableValuesRenderer;
> -import org.apache.tapestry5.internal.renderers.ComponentResourcesRenderer;
> -import org.apache.tapestry5.internal.renderers.EventContextRenderer;
> -import org.apache.tapestry5.internal.renderers.ListRenderer;
> -import org.apache.tapestry5.internal.renderers.LocationRenderer;
> -import org.apache.tapestry5.internal.renderers.ObjectArrayRenderer;
> -import org.apache.tapestry5.internal.renderers.RequestRenderer;
> +import org.apache.tapestry5.internal.renderers.*;
> import org.apache.tapestry5.internal.services.*;
> import org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateFilter;
> import org.apache.tapestry5.internal.services.ajax.JavaScriptSupportImpl;
> @@ -130,87 +51,17 @@ import org.apache.tapestry5.internal.ser
> import org.apache.tapestry5.internal.services.meta.MetaWorkerImpl;
> import org.apache.tapestry5.internal.services.templates.DefaultTemplateLocator;
> import org.apache.tapestry5.internal.services.templates.PageTemplateLocator;
> -import org.apache.tapestry5.internal.transform.ActivationRequestParameterWorker;
> -import org.apache.tapestry5.internal.transform.ApplicationStateWorker;
> -import org.apache.tapestry5.internal.transform.BindParameterWorker;
> -import org.apache.tapestry5.internal.transform.CCTWToCCTW2Coercion;
> -import org.apache.tapestry5.internal.transform.CachedWorker;
> -import org.apache.tapestry5.internal.transform.ComponentWorker;
> -import org.apache.tapestry5.internal.transform.DiscardAfterWorker;
> -import org.apache.tapestry5.internal.transform.EnvironmentalWorker;
> -import org.apache.tapestry5.internal.transform.HeartbeatDeferredWorker;
> -import org.apache.tapestry5.internal.transform.ImportWorker;
> -import org.apache.tapestry5.internal.transform.InjectComponentWorker;
> -import org.apache.tapestry5.internal.transform.InjectContainerWorker;
> -import org.apache.tapestry5.internal.transform.InjectNamedWorker;
> -import org.apache.tapestry5.internal.transform.InjectPageWorker;
> -import org.apache.tapestry5.internal.transform.InjectServiceWorker;
> -import org.apache.tapestry5.internal.transform.InjectWorker;
> -import org.apache.tapestry5.internal.transform.InvokePostRenderCleanupOnResourcesWorker;
> -import org.apache.tapestry5.internal.transform.LogWorker;
> -import org.apache.tapestry5.internal.transform.MixinAfterWorker;
> -import org.apache.tapestry5.internal.transform.MixinWorker;
> -import org.apache.tapestry5.internal.transform.OnEventWorker;
> -import org.apache.tapestry5.internal.transform.PageActivationContextWorker;
> -import org.apache.tapestry5.internal.transform.PageLifecycleAnnotationWorker;
> -import org.apache.tapestry5.internal.transform.PageResetAnnotationWorker;
> -import org.apache.tapestry5.internal.transform.ParameterWorker;
> -import org.apache.tapestry5.internal.transform.PersistWorker;
> -import org.apache.tapestry5.internal.transform.PropertyWorker;
> -import org.apache.tapestry5.internal.transform.RenderCommandWorker;
> -import org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker;
> -import org.apache.tapestry5.internal.transform.RetainWorker;
> -import org.apache.tapestry5.internal.transform.SessionAttributeWorker;
> -import org.apache.tapestry5.internal.transform.SupportsInformalParametersWorker;
> -import org.apache.tapestry5.internal.transform.UnclaimedFieldWorker;
> +import org.apache.tapestry5.internal.transform.*;
> import org.apache.tapestry5.internal.translator.NumericTranslator;
> import org.apache.tapestry5.internal.translator.NumericTranslatorSupport;
> import org.apache.tapestry5.internal.translator.StringTranslator;
> import org.apache.tapestry5.internal.util.RenderableAsBlock;
> import org.apache.tapestry5.internal.util.StringRenderable;
> import org.apache.tapestry5.internal.validator.ValidatorMacroImpl;
> -import org.apache.tapestry5.ioc.AnnotationProvider;
> -import org.apache.tapestry5.ioc.Configuration;
> -import org.apache.tapestry5.ioc.Location;
> -import org.apache.tapestry5.ioc.MappedConfiguration;
> -import org.apache.tapestry5.ioc.Messages;
> -import org.apache.tapestry5.ioc.MethodAdviceReceiver;
> -import org.apache.tapestry5.ioc.ObjectLocator;
> -import org.apache.tapestry5.ioc.ObjectProvider;
> -import org.apache.tapestry5.ioc.OrderedConfiguration;
> -import org.apache.tapestry5.ioc.Resource;
> -import org.apache.tapestry5.ioc.ScopeConstants;
> -import org.apache.tapestry5.ioc.ServiceBinder;
> -import org.apache.tapestry5.ioc.annotations.Autobuild;
> -import org.apache.tapestry5.ioc.annotations.Contribute;
> -import org.apache.tapestry5.ioc.annotations.Inject;
> -import org.apache.tapestry5.ioc.annotations.InjectService;
> -import org.apache.tapestry5.ioc.annotations.Local;
> -import org.apache.tapestry5.ioc.annotations.Marker;
> -import org.apache.tapestry5.ioc.annotations.Match;
> -import org.apache.tapestry5.ioc.annotations.Primary;
> -import org.apache.tapestry5.ioc.annotations.Scope;
> -import org.apache.tapestry5.ioc.annotations.SubModule;
> -import org.apache.tapestry5.ioc.annotations.Symbol;
> +import org.apache.tapestry5.ioc.*;
> +import org.apache.tapestry5.ioc.annotations.*;
> import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
> -import org.apache.tapestry5.ioc.services.Builtin;
> -import org.apache.tapestry5.ioc.services.ChainBuilder;
> -import org.apache.tapestry5.ioc.services.ClassFactory;
> -import org.apache.tapestry5.ioc.services.Coercion;
> -import org.apache.tapestry5.ioc.services.CoercionTuple;
> -import org.apache.tapestry5.ioc.services.LazyAdvisor;
> -import org.apache.tapestry5.ioc.services.MasterObjectProvider;
> -import org.apache.tapestry5.ioc.services.PerThreadValue;
> -import org.apache.tapestry5.ioc.services.PerthreadManager;
> -import org.apache.tapestry5.ioc.services.PipelineBuilder;
> -import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
> -import org.apache.tapestry5.ioc.services.PropertyAccess;
> -import org.apache.tapestry5.ioc.services.PropertyShadowBuilder;
> -import org.apache.tapestry5.ioc.services.ServiceOverride;
> -import org.apache.tapestry5.ioc.services.StrategyBuilder;
> -import org.apache.tapestry5.ioc.services.SymbolSource;
> -import org.apache.tapestry5.ioc.services.ThreadLocale;
> -import org.apache.tapestry5.ioc.services.TypeCoercer;
> +import org.apache.tapestry5.ioc.services.*;
> import org.apache.tapestry5.ioc.util.AvailableValues;
> import org.apache.tapestry5.ioc.util.IdAllocator;
> import org.apache.tapestry5.ioc.util.StrategyRegistry;
> @@ -224,8 +75,8 @@ import org.apache.tapestry5.services.aja
> import org.apache.tapestry5.services.assets.AssetPathConstructor;
> import org.apache.tapestry5.services.assets.AssetRequestHandler;
> import org.apache.tapestry5.services.assets.AssetsModule;
> -import org.apache.tapestry5.services.dynamic.DynamicTemplateParser;
> import org.apache.tapestry5.services.dynamic.DynamicTemplate;
> +import org.apache.tapestry5.services.dynamic.DynamicTemplateParser;
> import org.apache.tapestry5.services.javascript.JavaScriptStack;
> import org.apache.tapestry5.services.javascript.JavaScriptStackSource;
> import org.apache.tapestry5.services.javascript.JavaScriptSupport;
> @@ -242,17 +93,22 @@ import org.apache.tapestry5.services.pag
> import org.apache.tapestry5.services.templates.ComponentTemplateLocator;
> import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
> import org.apache.tapestry5.util.StringToEnumCoercion;
> -import org.apache.tapestry5.validator.Email;
> -import org.apache.tapestry5.validator.Max;
> -import org.apache.tapestry5.validator.MaxLength;
> -import org.apache.tapestry5.validator.Min;
> -import org.apache.tapestry5.validator.MinLength;
> -import org.apache.tapestry5.validator.None;
> -import org.apache.tapestry5.validator.Regexp;
> -import org.apache.tapestry5.validator.Required;
> -import org.apache.tapestry5.validator.ValidatorMacro;
> +import org.apache.tapestry5.validator.*;
> import org.slf4j.Logger;
>
> +import javax.servlet.ServletContext;
> +import javax.servlet.http.HttpServletRequest;
> +import javax.servlet.http.HttpServletResponse;
> +import java.io.IOException;
> +import java.lang.annotation.Annotation;
> +import java.math.BigDecimal;
> +import java.math.BigInteger;
> +import java.net.URL;
> +import java.text.DateFormat;
> +import java.text.SimpleDateFormat;
> +import java.util.*;
> +import java.util.regex.Pattern;
> +
> /**
> * The root module for Tapestry.
> */
> @@ -645,7 +501,9 @@ public final class TapestryModule
> * </ul>
> */
> @Contribute(ComponentClassTransformWorker2.class)
> - public static void provideTransformWorkers(OrderedConfiguration<ComponentClassTransformWorker2> configuration)
> + public static void provideTransformWorkers(
> + OrderedConfiguration<ComponentClassTransformWorker2> configuration,
> + ComponentClassResolver resolver)
> {
> configuration.add("Property", new PropertyWorker());
> configuration.addInstance("Import", ImportWorker.class, "after:SetupRender");
> @@ -657,6 +515,17 @@ public final class TapestryModule
> configuration.addInstance("UnclaimedField", UnclaimedFieldWorker.class, "after:*");
>
> configuration.addInstance("OnEvent", OnEventWorker.class);
> +
> + // These must come after Property, since they actually delete fields
> + // that may still have the annotation
> + configuration.addInstance("ApplicationState", ApplicationStateWorker.class, "after:Property");
> + configuration.addInstance("Environment", EnvironmentalWorker.class, "after:Property");
> +
> + configuration.add("Component", new ComponentWorker(resolver));
> + configuration.add("Mixin", new MixinWorker(resolver));
> + configuration.addInstance("InjectPage", InjectPageWorker.class);
> + configuration.addInstance("InjectComponent", InjectComponentWorker.class);
> + configuration.addInstance("InjectContainer", InjectContainerWorker.class);
> }
>
> /**
> @@ -725,14 +594,10 @@ public final class TapestryModule
> configuration.addInstance("InjectNamed", InjectNamedWorker.class);
>
> configuration.add("MixinAfter", new MixinAfterWorker());
> - configuration.add("Component", new ComponentWorker(resolver));
> - configuration.add("Mixin", new MixinWorker(resolver));
> configuration
> .addInstance("ActivationRequestParameter", ActivationRequestParameterWorker.class, "after:OnEvent");
> configuration.add("SupportsInformalParameters", new SupportsInformalParametersWorker());
> - configuration.addInstance("InjectPage", InjectPageWorker.class);
> - configuration.addInstance("InjectContainer", InjectContainerWorker.class);
> - configuration.addInstance("InjectComponent", InjectComponentWorker.class);
> +
> configuration.add("RenderCommand", new RenderCommandWorker());
>
> // Default values for parameters are often some form of injection, so
> @@ -765,10 +630,6 @@ public final class TapestryModule
>
> configuration.add("InvokePostRenderCleanupOnResources", new InvokePostRenderCleanupOnResourcesWorker());
>
> - // These must come after Property, since they actually delete fields
> - // that may still have the annotation
> - configuration.addInstance("ApplicationState", ApplicationStateWorker.class, "after:Property");
> - configuration.addInstance("Environment", EnvironmentalWorker.class, "after:Property");
>
> configuration.addInstance("Log", LogWorker.class);
>
> @@ -1470,8 +1331,8 @@ public final class TapestryModule
>
> /**
> * Analyzes properties to determine the data types, used to
> - * {@linkplain #contributeBeanBlockSource(org.apache.tapestry5.ioc.Configuration)} locale
> - * display and edit blocks} for properties. The default behaviors
> + * {@linkplain #provideDefaultBeanBlocks(org.apache.tapestry5.ioc.Configuration)} locale
> + * display and edit blocks for properties. The default behaviors
> * look for a {@link org.apache.tapestry5.beaneditor.DataType} annotation
> * before deriving the data type from the property type.
> */
>
>
>
--
Howard M. Lewis Ship
Creator of Apache Tapestry
The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!
(971) 678-5210
http://howardlewisship.com
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org