Author: hlship Date: Sat Apr 22 13:15:32 2006 New Revision: 396157 URL: http://svn.apache.org/viewcvs?rev=396157&view=rev Log: Start building code into HiveMind services
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/hivemodule.xml tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.internal.transform.xml tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.transform.xml Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImpl.java tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/worker/UnclaimedFieldWorker.java tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/transform/TransformConstants.java tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/worker/UnclaimedFieldWorkerTest.java tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImpl.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImpl.java?rev=396157&r1=396156&r2=396157&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImpl.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImpl.java Sat Apr 22 13:15:32 2006 @@ -26,6 +26,8 @@ import javassist.NotFoundException; import javassist.Translator; +import org.apache.commons.logging.Log; +import org.apache.hivemind.ClassResolver; import org.apache.tapestry.util.Defense; import static org.apache.tapestry.util.CollectionFactory.newMap; @@ -43,13 +45,15 @@ { private final Set<String> _packages = newSet(); - private final ClassLoader _parent; + private ClassLoader _parent; - private final ClassPool _classPool; + private ClassPool _classPool; - private final Loader _loader; + private Loader _loader; - private final ClassTransformer _transformer; + private ClassTransformer _transformer; + + private Log _log; /** Map from class name to Instantiator. */ private final Map<String, Instantiator> _instantiatorMap = newMap(); @@ -60,10 +64,18 @@ return _loader; } - public ComponentInstantiatorSourceImpl(ClassLoader parent, ClassTransformer transformer) + public ComponentInstantiatorSourceImpl(ClassResolver resolver) + { + this(resolver.getClassLoader()); + } + + public ComponentInstantiatorSourceImpl(ClassLoader parent) { _parent = notNull(parent, "parent"); + } + public void initializeService() + { _classPool = new ClassPool(); ClassPath path = new LoaderClassPath(_parent); @@ -72,8 +84,6 @@ _loader = new Loader(_classPool); - _transformer = notNull(transformer, "transformer"); - try { _loader.addTranslator(_classPool, this); @@ -87,7 +97,7 @@ public void onLoad(ClassPool pool, String classname) throws NotFoundException, CannotCompileException { - System.out.println("BEGIN onLoad " + classname); + _log.debug("BEGIN onLoad " + classname); // This is our chance to make changes to the CtClass before it is loaded into memory. @@ -107,7 +117,7 @@ throw new CannotCompileException(ex); } - System.out.println(" END onLoad " + classname); + _log.debug(" END onLoad " + classname); } private void forceSuperclassTransform(CtClass ctClass) throws NotFoundException, @@ -132,7 +142,7 @@ Class instanceClass = findClass(classname); result = _transformer.createInstantiator(instanceClass); - + _instantiatorMap.put(classname, result); } @@ -196,6 +206,18 @@ // TODO: Should we check that pacakages are not nested? _packages.add(Defense.notBlank(packageName, "packageName")); + } + + /** For injection. */ + public void setTransformer(ClassTransformer transformer) + { + _transformer = transformer; + } + + /** For injection. */ + public void setLog(Log log) + { + _log = log; } } Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/worker/UnclaimedFieldWorker.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/worker/UnclaimedFieldWorker.java?rev=396157&r1=396156&r2=396157&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/worker/UnclaimedFieldWorker.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/worker/UnclaimedFieldWorker.java Sat Apr 22 13:15:32 2006 @@ -16,12 +16,13 @@ import java.lang.reflect.Modifier; -import org.apache.hivemind.service.BodyBuilder; import org.apache.tapestry.events.ComponentLifecycle; import org.apache.tapestry.model.MutableComponentModel; import org.apache.tapestry.transform.ClassTransformWorker; import org.apache.tapestry.transform.ClassTransformation; -import org.apache.tapestry.transform.TransformConstants; + +import static org.apache.tapestry.transform.TransformConstants.CONTAINING_PAGE_DID_DETACH_SIGNATURE; +import static org.apache.tapestry.transform.TransformConstants.CONTAINING_PAGE_DID_LOAD_SIGNATURE; /** * Designed to be just about the last worker in the pipeline. Its job is to add cleanup code that @@ -53,26 +54,13 @@ // initial value of the field. transformation.addImplementedInterface(ComponentLifecycle.class); - BodyBuilder builder = new BodyBuilder(); - builder.begin(); - builder.addln("$proceed($$);"); - builder.addln("{0} = {1};", defaultFieldName, fieldName); - builder.end(); - - transformation.extendMethod(TransformConstants.CONTAINING_PAGE_DID_LOAD_SIGNATURE, builder - .toString()); + transformation.extendMethod(CONTAINING_PAGE_DID_LOAD_SIGNATURE, defaultFieldName + " = " + + fieldName + ";"); // At the end of the request, we want to move the default value back over the // active field value. This will most often be null. - builder.clear(); - - builder.begin(); - builder.addln("$proceed($$);"); - builder.addln("{0} = {1};", fieldName, defaultFieldName); - builder.end(); - - transformation.extendMethod(TransformConstants.CONTAINING_PAGE_DID_DETACH, builder - .toString()); + transformation.extendMethod(CONTAINING_PAGE_DID_DETACH_SIGNATURE, fieldName + " = " + + defaultFieldName + ";"); } } Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java?rev=396157&r1=396156&r2=396157&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java Sat Apr 22 13:15:32 2006 @@ -80,4 +80,10 @@ setReturnValue(fieldName); } + protected final void trainFindUnclaimedFields(ClassTransformation transformation, String... fieldNames) + { + transformation.findUnclaimedFields(); + setReturnValue(fieldNames); + } + } Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/transform/TransformConstants.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/transform/TransformConstants.java?rev=396157&r1=396156&r2=396157&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/transform/TransformConstants.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/transform/TransformConstants.java Sat Apr 22 13:15:32 2006 @@ -35,7 +35,7 @@ /** * Signature for [EMAIL PROTECTED] org.apache.tapestry.events.ComponentLifecycle#containingPageDidDetach()}. */ - public static final MethodSignature CONTAINING_PAGE_DID_DETACH = new MethodSignature( + public static final MethodSignature CONTAINING_PAGE_DID_DETACH_SIGNATURE = new MethodSignature( "containingPageDidDetach"); /** Prevent instantiation. */ Added: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/hivemodule.xml URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/hivemodule.xml?rev=396157&view=auto ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/hivemodule.xml (added) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/hivemodule.xml Sat Apr 22 13:15:32 2006 @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<module id="tapestry" version="5.0.0"> + + Master module for Tapestry 5. + + <sub-module descriptor="org.apache.tapestry.transform.xml"/> + <sub-module descriptor="org.apache.tapestry.internal.transform.xml"/> + +</module> \ No newline at end of file Added: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.internal.transform.xml URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.internal.transform.xml?rev=396157&view=auto ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.internal.transform.xml (added) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.internal.transform.xml Sat Apr 22 13:15:32 2006 @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<module id="org.apache.tapestry.internal.transform" version="5.0.0"> + + <contribution configuration-id="org.apache.tapestry.transform.TransformWorkers"> + + <command id="ImplementResourceAware" before="*" object="instance:worker.ImplementResourceAwareWorker"/> + <command id="Retain" object="instance:worker.RetainWorker"/> + <command id="UnclaimedField" object="instance:worker.UnclaimedFieldWorker" after="*"/> + + </contribution> + + <service-point id="TransformWorkersChain" + interface="org.apache.tapestry.transform.TransformWorker" + visibility="private""> + <invoke-factory service-id="hivemind.lib.ChainFactory"> + <construct configuration-id="org.apache.tapestry.transform.TransformWorkers"/> + </invoke-factory> + </service-point> + + <service-point id="ClassTransformer" visibility="private"> + + Encapsulates all the AOP-ish transformations that occur during + the loading of component classes. + + <invoke-factory> + <construct class="ClassTransformerImpl"> + <set-object class="workers" value="service:TransformWorkersChain"/> + </construct> + </invoke-factory> + <interceptor service-id="hivemind.LoggingInterceptor"/> + </service-point> + + + <service-point id="ComponentInstantiatorSource"> + + Responsible for providing component instantiators. + Runs the class transformation process. + + <invoke-factory> + <construct class="ComponentInstantiatorSourceImpl"> + <class-resolver/> + <object>service:ClassTransformer</object> + </construct> + </invoke-factory> + <interceptor service-id="hivemind.LoggingInterceptor"/> + </service-point> +</module> Added: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.transform.xml URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.transform.xml?rev=396157&view=auto ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.transform.xml (added) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.transform.xml Sat Apr 22 13:15:32 2006 @@ -0,0 +1,10 @@ +<module id="org.apache.tapestry.transform" version="5.0.0"> + <configuration-point id="TransformWorkers" schema-id="hivemind.lib.ChainContribution"> + + Defines a command chain of workers objects (implementing the + ClassTransformWorker interface). + + </configuration-point> + + +</module> \ No newline at end of file Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java?rev=396157&r1=396156&r2=396157&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java Sat Apr 22 13:15:32 2006 @@ -32,12 +32,8 @@ @Test public void controlledPackagesTest() throws Exception { - ClassTransformer transformer = newMock(ClassTransformer.class); - replay(); - - ComponentInstantiatorSourceImpl e = new ComponentInstantiatorSourceImpl( - _defaultClassLoader, transformer); + ComponentInstantiatorSourceImpl e = new ComponentInstantiatorSourceImpl(_defaultClassLoader); assertEquals(e.inControlledPackage("foo.bar.Baz"), false); @@ -58,7 +54,5 @@ // Parents of controlled packages are not controlled assertEquals(e.inControlledPackage("foo.Gloop"), false); - - verify(); } } Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/worker/UnclaimedFieldWorkerTest.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/worker/UnclaimedFieldWorkerTest.java?rev=396157&r1=396156&r2=396157&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/worker/UnclaimedFieldWorkerTest.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/worker/UnclaimedFieldWorkerTest.java Sat Apr 22 13:15:32 2006 @@ -16,14 +16,15 @@ import java.lang.reflect.Modifier; -import org.apache.hivemind.service.BodyBuilder; import org.apache.tapestry.events.ComponentLifecycle; import org.apache.tapestry.model.MutableComponentModel; import org.apache.tapestry.test.BaseTestCase; import org.apache.tapestry.transform.ClassTransformation; -import org.apache.tapestry.transform.TransformConstants; import org.testng.annotations.Test; +import static org.apache.tapestry.transform.TransformConstants.CONTAINING_PAGE_DID_DETACH_SIGNATURE; +import static org.apache.tapestry.transform.TransformConstants.CONTAINING_PAGE_DID_LOAD_SIGNATURE; + /** * @author Howard M. Lewis Ship */ @@ -35,7 +36,7 @@ ClassTransformation ct = newClassTransformation(); MutableComponentModel model = newMutableComponentModel(); - trainFindUnclaimedFields(ct, new String[0]); + trainFindUnclaimedFields(ct); replay(); @@ -44,21 +45,13 @@ verify(); } - protected final void trainFindUnclaimedFields(ClassTransformation transformation, - String[] fieldNames) - { - transformation.findUnclaimedFields(); - setReturnValue(fieldNames); - } - @Test public void normal() { ClassTransformation ct = newClassTransformation(); MutableComponentModel model = newMutableComponentModel(); - trainFindUnclaimedFields(ct, new String[] - { "_fred" }); + trainFindUnclaimedFields(ct, "_fred"); ct.getFieldType("_fred"); setReturnValue("foo.Bar"); @@ -68,21 +61,8 @@ ct.addImplementedInterface(ComponentLifecycle.class); - BodyBuilder builder = new BodyBuilder(); - builder.begin(); - builder.addln("$proceed($$);"); - builder.addln("_$fredDefault = _fred;"); - builder.end(); - - ct.extendMethod(TransformConstants.CONTAINING_PAGE_DID_LOAD_SIGNATURE, builder.toString()); - - builder.clear(); - builder.begin(); - builder.addln("$proceed($$);"); - builder.addln("_fred = _$fredDefault;"); - builder.end(); - - ct.extendMethod(TransformConstants.CONTAINING_PAGE_DID_DETACH, builder.toString()); + ct.extendMethod(CONTAINING_PAGE_DID_LOAD_SIGNATURE, "_$fredDefault = _fred;"); + ct.extendMethod(CONTAINING_PAGE_DID_DETACH_SIGNATURE, "_fred = _$fredDefault;"); replay(); Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties?rev=396157&r1=396156&r2=396157&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties Sat Apr 22 13:15:32 2006 @@ -21,4 +21,4 @@ log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%c{1} [%p] %m%n -log4j.category.org.apache.tapestry5=debug +log4j.category.org.apache.tapestry=debug --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]