Fair enough. If it works, it doesn't need to change ... perhaps I
have a too finely tuned sense of what is "clean". Meanwhile, plenty
of other stuff to work on!
On Tue, Jun 17, 2008 at 2:58 PM, Igor Drobiazko
<[EMAIL PROTECTED]> wrote:
> Ok, I'll take the option "before:OnEvent" cause the
> PageActivationContextWorker is already implemented without an advice. I'll
> also add the mentioned integration test to prove that no conflicts exist. We
> can rewrite it using the ComponentMethodAdvice if some problems will occur.
>
> On Mon, Jun 16, 2008 at 7:07 PM, Howard Lewis Ship <[EMAIL PROTECTED]> wrote:
>
>> If the method does not exist when OnEventWorker executes, it won't be
>> considered; in that case "before:OnEvent" makes sense.
>>
>> If using ComponentMethodAdvice, then the PageActivationContextWorker
>> should come after OnEvent, since it wants to advise the method created
>> by OnEventWorker.
>>
>> On Wed, Jun 11, 2008 at 3:36 PM, Igor Drobiazko
>> <[EMAIL PROTECTED]> wrote:
>> > According to the javadocs ClassTransformation#addTransformedMethod
>> replaces
>> > the existing method with the same signature. In seems to be unimportent
>> > whether befor:OnEvent or after:OnEvent is used for PageActivationContext.
>> I
>> > have an integration test which proves this:
>> >
>> > public class MusicDetails2
>> > {
>> > @Property
>> > @PageActivationContext
>> > private Track track;
>> >
>> > void onActivate(Track track)
>> > {
>> > throw new RuntimeException("onActivate invoked");
>> > }
>> > }
>> >
>> > Relying on this integration test I assume that the generated method
>> doesn't
>> > conflict with an existing one.
>> >
>> >
>> >
>> > On Wed, Jun 11, 2008 at 12:20 AM, Howard Lewis Ship <[EMAIL PROTECTED]>
>> > wrote:
>> >
>> >> Most of this looks good ... but I have one issue.
>> >>
>> >> public class PageActivationContextWorker implements
>> >> ComponentClassTransformWorker
>> >> {
>> >> public void transform(ClassTransformation transformation,
>> >> MutableComponentModel model)
>> >> {
>> >> List<String> fields =
>> >> transformation.findFieldsWithAnnotation(PageActivationContext.class);
>> >>
>> >> if(fields.size()>1)
>> >> throw new
>> >>
>> >>
>> RuntimeException(TransformMessages.illegalNumberOfPageActivationContextHandlers(fields));
>> >>
>> >> for (String fieldName : fields)
>> >> {
>> >> PageActivationContext annotation =
>> >> transformation.getFieldAnnotation(fieldName,
>> >> PageActivationContext.class);
>> >>
>> >> String fieldType = transformation.getFieldType(fieldName);
>> >>
>> >> if (annotation.activate())
>> >> {
>> >> TransformMethodSignature activate
>> >> = new
>> >> TransformMethodSignature(Modifier.PROTECTED | Modifier.FINAL, "void",
>> >> "onActivate",
>> >> new String[] {
>> >> fieldType }, null);
>> >> transformation.addTransformedMethod(activate,
>> >> fieldName + " = $1;");
>> >> }
>> >>
>> >> if (annotation.passivate())
>> >> {
>> >> TransformMethodSignature passivate
>> >> = new
>> >> TransformMethodSignature(Modifier.PROTECTED | Modifier.FINAL,
>> >> "java.lang.Object", "onPassivate",
>> >> null, null);
>> >> transformation.addTransformedMethod(passivate, "return
>> >> "+fieldName + ";");
>> >> }
>> >> }
>> >>
>> >> }
>> >> }
>> >>
>> >> This approach is to create a new method and I'm concerned that the new
>> >> method could conflict with an existing method. I suppose that's not a
>> >> likely case, as you would use the annotation instead of writing
>> >> onActivate() onPassivate().
>> >>
>> >> I had originally envisioned this as being ComponentMethodAdvice on the
>> >> dispatchComponentEvent() method.
>> >>
>> >> Also this change is troubling:
>> >>
>> >> configuration.add("PageActivationContext", new
>> >> PageActivationContextWorker(), "before:*");
>> >>
>> >> I think this needs to come before OnEvent (as currently coded).
>> >> Implemented using method advice, this would come after OnEvent. Using
>> >> before:* or after:* is dangerous, as only one item in the
>> >> configuration is allowed to be first or be last.
>> >>
>> >> Otherwise, looks really solid, very cool!
>> >>
>> >>
>> >> On Tue, Jun 10, 2008 at 2:31 PM, <[EMAIL PROTECTED]> wrote:
>> >> > Author: drobiazko
>> >> > Date: Tue Jun 10 14:31:25 2008
>> >> > New Revision: 666333
>> >> >
>> >> > URL: http://svn.apache.org/viewvc?rev=666333&view=rev
>> >> > Log:
>> >> > TAPESTRY-2235: Annotation for managing a property as the page
>> activation
>> >> context
>> >> >
>> >> > Added:
>> >> >
>> >>
>>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/PageActivationContext.java
>> >> >
>> >>
>>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java
>> >> >
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/music/MusicDetails2.tml
>> >> >
>> >>
>>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/music/MusicDetails2.java
>> >> >
>> >>
>>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/PageActivationContextWorkerTest.java
>> >> > Modified:
>> >> >
>> >>
>>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Path.java
>> >> >
>> >>
>>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Service.java
>> >> >
>> >>
>>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/TransformMessages.java
>> >> >
>> >>
>>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
>> >> >
>> >>
>>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/transform/TransformStrings.properties
>> >> > tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Music.tml
>> >> >
>> >>
>>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
>> >> >
>> tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt
>> >> >
>> >> > Added:
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/PageActivationContext.java
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/PageActivationContext.java?rev=666333&view=auto
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/PageActivationContext.java
>> >> (added)
>> >> > +++
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/PageActivationContext.java
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -0,0 +1,37 @@
>> >> > +// Copyright 2008 The Apache Software Foundation
>> >> > +//
>> >> > +// Licensed under the Apache License, Version 2.0 (the "License");
>> >> > +// you may not use this file except in compliance with the License.
>> >> > +// You may obtain a copy of the License at
>> >> > +//
>> >> > +// http://www.apache.org/licenses/LICENSE-2.0
>> >> > +//
>> >> > +// Unless required by applicable law or agreed to in writing,
>> software
>> >> > +// distributed under the License is distributed on an "AS IS" BASIS,
>> >> > +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> >> implied.
>> >> > +// See the License for the specific language governing permissions
>> and
>> >> > +// limitations under the License.
>> >> > +
>> >> > +package org.apache.tapestry5.annotations;
>> >> > +
>> >> > +import java.lang.annotation.Documented;
>> >> > +import static java.lang.annotation.ElementType.FIELD;
>> >> > +import java.lang.annotation.Retention;
>> >> > +import static java.lang.annotation.RetentionPolicy.RUNTIME;
>> >> > +import java.lang.annotation.Target;
>> >> > +
>> >> > +/**
>> >> > + * Annotation for a field for which the page activation context
>> handlers
>> >> (onActivate and onPassivate) should be created.
>> >> > + * In order to use this annotation you must contribute a [EMAIL
>> >> > PROTECTED]
>> >> ValueEncoder} for the class of the annotated property.
>> >> > + */
>> >> > [EMAIL PROTECTED](FIELD)
>> >> > [EMAIL PROTECTED]
>> >> > [EMAIL PROTECTED](RUNTIME)
>> >> > +public @interface PageActivationContext
>> >> > +{
>> >> > + /** Whether to create an activate event handler. */
>> >> > + boolean activate() default true;
>> >> > +
>> >> > + /** Whether to create a passivate event handler */
>> >> > + boolean passivate() default true;
>> >> > +}
>> >> >
>> >> > Modified:
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Path.java
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Path.java?rev=666333&r1=666332&r2=666333&view=diff
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Path.java
>> >> (original)
>> >> > +++
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Path.java
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -14,8 +14,6 @@
>> >> >
>> >> > package org.apache.tapestry5.annotations;
>> >> >
>> >> > -import org.apache.tapestry5.Asset;
>> >> > -import org.apache.tapestry5.ioc.annotations.Inject;
>> >> >
>> >> > import java.lang.annotation.Documented;
>> >> > import static java.lang.annotation.ElementType.FIELD;
>> >> >
>> >> > Modified:
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Service.java
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Service.java?rev=666333&r1=666332&r2=666333&view=diff
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Service.java
>> >> (original)
>> >> > +++
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Service.java
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -14,7 +14,6 @@
>> >> >
>> >> > package org.apache.tapestry5.annotations;
>> >> >
>> >> > -import org.apache.tapestry5.ioc.annotations.Inject;
>> >> >
>> >> > import java.lang.annotation.Documented;
>> >> > import static java.lang.annotation.ElementType.FIELD;
>> >> >
>> >> > Added:
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java?rev=666333&view=auto
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java
>> >> (added)
>> >> > +++
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -0,0 +1,65 @@
>> >> > +// Copyright 2008 The Apache Software Foundation
>> >> > +//
>> >> > +// Licensed under the Apache License, Version 2.0 (the "License");
>> >> > +// you may not use this file except in compliance with the License.
>> >> > +// You may obtain a copy of the License at
>> >> > +//
>> >> > +// http://www.apache.org/licenses/LICENSE-2.0
>> >> > +//
>> >> > +// Unless required by applicable law or agreed to in writing,
>> software
>> >> > +// distributed under the License is distributed on an "AS IS" BASIS,
>> >> > +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> >> implied.
>> >> > +// See the License for the specific language governing permissions
>> and
>> >> > +// limitations under the License.
>> >> > +
>> >> > +package org.apache.tapestry5.internal.transform;
>> >> > +
>> >> > +import java.lang.reflect.Modifier;
>> >> > +import java.util.List;
>> >> > +
>> >> > +import org.apache.tapestry5.annotations.PageActivationContext;
>> >> > +import org.apache.tapestry5.model.MutableComponentModel;
>> >> > +import org.apache.tapestry5.services.ClassTransformation;
>> >> > +import org.apache.tapestry5.services.ComponentClassTransformWorker;
>> >> > +import org.apache.tapestry5.services.TransformMethodSignature;
>> >> > +
>> >> > +/**
>> >> > + * Provides the page activation context handlers.
>> >> > + *
>> >> > + * @see org.apache.tapestry5.annotations.PageActivationContext
>> >> > + */
>> >> > +public class PageActivationContextWorker implements
>> >> ComponentClassTransformWorker
>> >> > +{
>> >> > + public void transform(ClassTransformation transformation,
>> >> MutableComponentModel model)
>> >> > + {
>> >> > + List<String> fields =
>> >> transformation.findFieldsWithAnnotation(PageActivationContext.class);
>> >> > +
>> >> > + if(fields.size()>1)
>> >> > + throw new
>> >>
>> RuntimeException(TransformMessages.illegalNumberOfPageActivationContextHandlers(fields));
>> >> > +
>> >> > + for (String fieldName : fields)
>> >> > + {
>> >> > + PageActivationContext annotation =
>> >> transformation.getFieldAnnotation(fieldName,
>> PageActivationContext.class);
>> >> > +
>> >> > + String fieldType =
>> transformation.getFieldType(fieldName);
>> >> > +
>> >> > + if (annotation.activate())
>> >> > + {
>> >> > + TransformMethodSignature activate
>> >> > + = new
>> >> TransformMethodSignature(Modifier.PROTECTED | Modifier.FINAL, "void",
>> >> > + "onActivate",
>> >> > + new String[] {
>> >> fieldType }, null);
>> >> > + transformation.addTransformedMethod(activate,
>> fieldName
>> >> + " = $1;");
>> >> > + }
>> >> > +
>> >> > + if (annotation.passivate())
>> >> > + {
>> >> > + TransformMethodSignature passivate
>> >> > + = new
>> >> TransformMethodSignature(Modifier.PROTECTED | Modifier.FINAL,
>> >> "java.lang.Object", "onPassivate",
>> >> > + null, null);
>> >> > + transformation.addTransformedMethod(passivate,
>> "return
>> >> "+fieldName + ";");
>> >> > + }
>> >> > + }
>> >> > +
>> >> > + }
>> >> > +}
>> >> >
>> >> > Modified:
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/TransformMessages.java
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/TransformMessages.java?rev=666333&r1=666332&r2=666333&view=diff
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/TransformMessages.java
>> >> (original)
>> >> > +++
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/TransformMessages.java
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -14,7 +14,10 @@
>> >> >
>> >> > package org.apache.tapestry5.internal.transform;
>> >> >
>> >> > +import java.util.List;
>> >> > +
>> >> > import org.apache.tapestry5.ioc.Messages;
>> >> > +import org.apache.tapestry5.ioc.internal.util.InternalUtils;
>> >> > import org.apache.tapestry5.ioc.internal.util.MessagesImpl;
>> >> > import org.apache.tapestry5.runtime.Component;
>> >> > import org.apache.tapestry5.services.TransformMethodSignature;
>> >> > @@ -43,4 +46,9 @@
>> >> > {
>> >> > return MESSAGES.format("cached-no-parameters", method);
>> >> > }
>> >> > +
>> >> > + static String
>> >> illegalNumberOfPageActivationContextHandlers(List<String> fields)
>> >> > + {
>> >> > + return
>> >> MESSAGES.format("illegal-number-of-page-activation-context-handlers",
>> >> InternalUtils.joinSorted(fields));
>> >> > + }
>> >> > }
>> >> >
>> >> > 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=666333&r1=666332&r2=666333&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
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -380,6 +380,8 @@
>> >> > // be converted to clear out at the end of the request.
>> >> >
>> >> > configuration.add("UnclaimedField", new
>> UnclaimedFieldWorker(),
>> >> "after:*");
>> >> > +
>> >> > + configuration.add("PageActivationContext", new
>> >> PageActivationContextWorker(), "before:*");
>> >> > }
>> >> >
>> >> > /**
>> >> >
>> >> > Modified:
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/transform/TransformStrings.properties
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/transform/TransformStrings.properties?rev=666333&r1=666332&r2=666333&view=diff
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/transform/TransformStrings.properties
>> >> (original)
>> >> > +++
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/transform/TransformStrings.properties
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -16,3 +16,4 @@
>> >> > component-not-assignable-to-field=Component %s is not assignable to
>> >> field %s (of type %s).
>> >> > [EMAIL PROTECTED] may only be used with methods that
>> return
>> >> values: %s
>> >> > [EMAIL PROTECTED] cannot be used with methods that accept
>> >> parameters: %s
>> >> > +illegal-number-of-page-activation-context-handlers=Illegal number of
>> >> fields annotated with @PageActivationContext: %s. Only one field is
>> allowed.
>> >> >
>> >> > Modified:
>> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Music.tml
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Music.tml?rev=666333&r1=666332&r2=666333&view=diff
>> >> >
>> >>
>> ==============================================================================
>> >> > --- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Music.tml
>> >> (original)
>> >> > +++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Music.tml Tue
>> >> Jun 10 14:31:25 2008
>> >> > @@ -2,13 +2,16 @@
>> >> >
>> >> > <h1>Music Library</h1>
>> >> >
>> >> > - <t:grid source="tracks" row="track"
>> remove="genre,artist,playcount">
>> >> > + <t:grid source="tracks" row="track"
>> remove="genre,artist,playcount"
>> >> add="titleCopy">
>> >> > <t:parameter name="titleCell">
>> >> > <t:pagelink page="music/details"
>> >> context="track">${track.title}</t:pagelink>
>> >> > </t:parameter>
>> >> > <t:parameter name="ratingcell">
>> >> > <t:outputRating rating="track.rating"/>
>> >> > </t:parameter>
>> >> > + <t:parameter name="titleCopyCell">
>> >> > + <t:pagelink page="music/details2"
>> >> context="track">${track.title} (Copy)</t:pagelink>
>> >> > + </t:parameter>
>> >> > </t:grid>
>> >> >
>> >> > </html>
>> >> >
>> >> > Added:
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/music/MusicDetails2.tml
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/music/MusicDetails2.tml?rev=666333&view=auto
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/music/MusicDetails2.tml
>> >> (added)
>> >> > +++
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/music/MusicDetails2.tml
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -0,0 +1,11 @@
>> >> > +<html t:type="Border" xmlns:t="
>> >> http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
>> >> > +
>> >> > + <h1>Track Details</h1>
>> >> > +
>> >> > + <t:beandisplay object="track"/>
>> >> > +
>> >> > + <p>
>> >> > + <t:pagelink page="music">Back to music library</t:pagelink>
>> >> > + </p>
>> >> > +
>> >> > +</html>
>> >> >
>> >> > Modified:
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java?rev=666333&r1=666332&r2=666333&view=diff
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
>> >> (original)
>> >> > +++
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -1823,6 +1823,25 @@
>> >> >
>> >> > assertText("activePageName", "music/Details");
>> >> > }
>> >> > +
>> >> > + /**
>> >> > + * TAPESTRY-2235
>> >> > + */
>> >> > + @Test
>> >> > + public void generated_activation_context_handlers()
>> >> > + {
>> >> > + start("Music Page", "69");
>> >> > +
>> >> > + assertText("activePageName", "Music");
>> >> > +
>> >> > + clickAndWait("link=Wake Me Up (Copy)");
>> >> > +
>> >> > + assertText("activePageName", "music/Details2");
>> >> > +
>> >> > + assertText("//[EMAIL PROTECTED]'t-beandisplay-value title']",
>> >> > "Wake
>> Me
>> >> Up");
>> >> > +
>> >> > + assertText("//[EMAIL PROTECTED]'t-beandisplay-value artist']",
>> "Norah
>> >> Jones");
>> >> > + }
>> >> >
>> >> > /**
>> >> > * TAPESTRY-1869
>> >> >
>> >> > Added:
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/music/MusicDetails2.java
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/music/MusicDetails2.java?rev=666333&view=auto
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/music/MusicDetails2.java
>> >> (added)
>> >> > +++
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/music/MusicDetails2.java
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -0,0 +1,27 @@
>> >> > +// Copyright 2008 The Apache Software Foundation
>> >> > +//
>> >> > +// Licensed under the Apache License, Version 2.0 (the "License");
>> >> > +// you may not use this file except in compliance with the License.
>> >> > +// You may obtain a copy of the License at
>> >> > +//
>> >> > +// http://www.apache.org/licenses/LICENSE-2.0
>> >> > +//
>> >> > +// Unless required by applicable law or agreed to in writing,
>> software
>> >> > +// distributed under the License is distributed on an "AS IS" BASIS,
>> >> > +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> >> implied.
>> >> > +// See the License for the specific language governing permissions
>> and
>> >> > +// limitations under the License.
>> >> > +
>> >> > +package org.apache.tapestry5.integration.app1.pages.music;
>> >> > +
>> >> > +
>> >> > +import org.apache.tapestry5.annotations.PageActivationContext;
>> >> > +import org.apache.tapestry5.annotations.Property;
>> >> > +import org.apache.tapestry5.integration.app1.data.Track;
>> >> > +
>> >> > +public class MusicDetails2
>> >> > +{
>> >> > + @Property
>> >> > + @PageActivationContext
>> >> > + private Track track;
>> >> > +}
>> >> >
>> >> > Added:
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/PageActivationContextWorkerTest.java
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/PageActivationContextWorkerTest.java?rev=666333&view=auto
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/PageActivationContextWorkerTest.java
>> >> (added)
>> >> > +++
>> >>
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/PageActivationContextWorkerTest.java
>> >> Tue Jun 10 14:31:25 2008
>> >> > @@ -0,0 +1,137 @@
>> >> > +// Copyright 2008 The Apache Software Foundation
>> >> > +//
>> >> > +// Licensed under the Apache License, Version 2.0 (the "License");
>> >> > +// you may not use this file except in compliance with the License.
>> >> > +// You may obtain a copy of the License at
>> >> > +//
>> >> > +// http://www.apache.org/licenses/LICENSE-2.0
>> >> > +//
>> >> > +// Unless required by applicable law or agreed to in writing,
>> software
>> >> > +// distributed under the License is distributed on an "AS IS" BASIS,
>> >> > +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> >> implied.
>> >> > +// See the License for the specific language governing permissions
>> and
>> >> > +// limitations under the License.
>> >> > +package org.apache.tapestry5.internal.transform;
>> >> > +
>> >> > +import java.lang.reflect.Modifier;
>> >> > +
>> >> > +import org.apache.tapestry5.annotations.PageActivationContext;
>> >> > +import org.apache.tapestry5.integration.app1.data.Track;
>> >> > +import org.apache.tapestry5.model.MutableComponentModel;
>> >> > +import org.apache.tapestry5.services.ClassTransformation;
>> >> > +import org.apache.tapestry5.services.ComponentClassTransformWorker;
>> >> > +import org.apache.tapestry5.services.TransformMethodSignature;
>> >> > +import org.apache.tapestry5.test.TapestryTestCase;
>> >> > +import org.testng.annotations.Test;
>> >> > +
>> >> > +public class PageActivationContextWorkerTest extends TapestryTestCase
>> {
>> >> > +
>> >> > + private static final String CLASS_NAME =
>> Track.class.getName();
>> >> > +
>> >> > + @Test
>> >> > + public void activate_dafault_passivate_false() {
>> >> > + ClassTransformation ct = mockClassTransformation();
>> >> > + MutableComponentModel model =
>> >> mockMutableComponentModel();
>> >> > + PageActivationContext annotation =
>> >> newMock(PageActivationContext.class);
>> >> > + ComponentClassTransformWorker worker = new
>> >> PageActivationContextWorker();
>> >> > +
>> >> > + train_findFieldsWithAnnotation(ct,
>> >> PageActivationContext.class,
>> >> > + "myfield");
>> >> > + train_getFieldAnnotation(ct, "myfield",
>> >> PageActivationContext.class,
>> >> > + annotation);
>> >> > + train_getFieldType(ct, "myfield", CLASS_NAME);
>> >> > + expect(annotation.activate()).andReturn(true);
>> >> > +
>> >> > + TransformMethodSignature sig = new
>> >> TransformMethodSignature(
>> >> > + Modifier.PROTECTED | Modifier.FINAL,
>> >> "void", "onActivate",
>> >> > + new String[] { CLASS_NAME }, null);
>> >> > +
>> >> > + ct.addTransformedMethod(sig, "myfield = $1;");
>> >> > +
>> >> > + expect(annotation.passivate()).andReturn(false);
>> >> > +
>> >> > + replay();
>> >> > +
>> >> > + worker.transform(ct, model);
>> >> > +
>> >> > + verify();
>> >> > + }
>> >> > +
>> >> > + @Test
>> >> > + public void activate_false_passivate_default() {
>> >> > + ClassTransformation ct = mockClassTransformation();
>> >> > + MutableComponentModel model =
>> >> mockMutableComponentModel();
>> >> > + PageActivationContext annotation =
>> >> newMock(PageActivationContext.class);
>> >> > + ComponentClassTransformWorker worker = new
>> >> PageActivationContextWorker();
>> >> > +
>> >> > + train_findFieldsWithAnnotation(ct,
>> >> PageActivationContext.class,
>> >> > + "myfield");
>> >> > + train_getFieldAnnotation(ct, "myfield",
>> >> PageActivationContext.class,
>> >> > + annotation);
>> >> > + train_getFieldType(ct, "myfield", CLASS_NAME);
>> >> > + expect(annotation.activate()).andReturn(false);
>> >> > +
>> >> > + expect(annotation.passivate()).andReturn(true);
>> >> > +
>> >> > + TransformMethodSignature sig = new
>> >> TransformMethodSignature(
>> >> > + Modifier.PROTECTED | Modifier.FINAL,
>> >> "java.lang.Object",
>> >> > + "onPassivate", null, null);
>> >> > +
>> >> > + ct.addTransformedMethod(sig, "return myfield;");
>> >> > +
>> >> > + replay();
>> >> > +
>> >> > + worker.transform(ct, model);
>> >> > +
>> >> > + verify();
>> >> > + }
>> >> > +
>> >> > + @Test
>> >> > + public void activate_false_passivate_false() {
>> >> > + ClassTransformation ct = mockClassTransformation();
>> >> > + MutableComponentModel model =
>> >> mockMutableComponentModel();
>> >> > + PageActivationContext annotation =
>> >> newMock(PageActivationContext.class);
>> >> > + ComponentClassTransformWorker worker = new
>> >> PageActivationContextWorker();
>> >> > +
>> >> > + train_findFieldsWithAnnotation(ct,
>> >> PageActivationContext.class,
>> >> > + "myfield");
>> >> > + train_getFieldAnnotation(ct, "myfield",
>> >> PageActivationContext.class,
>> >> > + annotation);
>> >> > + train_getFieldType(ct, "myfield", CLASS_NAME);
>> >> > + expect(annotation.activate()).andReturn(false);
>> >> > +
>> >> > + expect(annotation.passivate()).andReturn(false);
>> >> > +
>> >> > + replay();
>> >> > +
>> >> > + worker.transform(ct, model);
>> >> > +
>> >> > + verify();
>> >> > + }
>> >> > +
>> >> > + @Test
>> >> > + public void illegal_number_of_page_activation_context_handlers()
>> >> > + {
>> >> > + ClassTransformation ct = mockClassTransformation();
>> >> > + MutableComponentModel model = mockMutableComponentModel();
>> >> > + ComponentClassTransformWorker worker = new
>> >> PageActivationContextWorker();
>> >> > +
>> >> > + train_findFieldsWithAnnotation(ct,
>> PageActivationContext.class,
>> >> > + "myfield", "myfield2");
>> >> > +
>> >> > + replay();
>> >> > +
>> >> > + try
>> >> > + {
>> >> > + worker.transform(ct, model);
>> >> > + fail("did not throw");
>> >> > + }catch(RuntimeException e)
>> >> > + {
>> >> > + e.printStackTrace();
>> >> > + }
>> >> > +
>> >> > + verify();
>> >> > + }
>> >> > +
>> >> > +
>> >> > +}
>> >> >
>> >> > Modified:
>> >> tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt?rev=666333&r1=666332&r2=666333&view=diff
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >> tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt
>> >> (original)
>> >> > +++
>> >> tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt
>> Tue
>> >> Jun 10 14:31:25 2008
>> >> > @@ -36,6 +36,23 @@
>> >> >
>> >> > Accessing the page as <</viewperson/152>> would load the Person
>> entity
>> >> with id 152 and use that as the page context.
>> >> >
>> >> > +Using @PageActivationContext
>> >> > +
>> >> > + If you prefer to use annotations, you may let Tapestry generate the
>> >> page activation context handlers for you.
>> >> > + Relying on an existing ValueEncoder for the corresponding property
>> you
>> >> can use the @PageActivationContext annotation.
>> >> > + The disadvantage is that you can't access the handlers in a unit
>> test.
>> >> > +
>> >> > +
>> >> > ++----+
>> >> > +public class ViewPerson
>> >> > +{
>> >> > + @Property
>> >> > + @PageActivationContext
>> >> > + private Person person;
>> >> > +
>> >> > +}
>> >> > ++----+
>> >> > +
>> >> > Using @Persist with entities
>> >> >
>> >> > If you wish to persist an entity in the session, you may use the
>> >> "entity" persistence strategy:
>> >> >
>> >> >
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Howard M. Lewis Ship
>> >>
>> >> Creator Apache Tapestry and Apache HiveMind
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >> For additional commands, e-mail: [EMAIL PROTECTED]
>> >>
>> >>
>> >
>> >
>> > --
>> > Best regards,
>> >
>> > Igor Drobiazko
>> >
>>
>>
>>
>> --
>> Howard M. Lewis Ship
>>
>> Creator Apache Tapestry and Apache HiveMind
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
> --
> Best regards,
>
> Igor Drobiazko
>
--
Howard M. Lewis Ship
Creator Apache Tapestry and Apache HiveMind
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]