On Thu, Apr 29, 2010 at 10:56 PM, Igor Drobiazko
<[email protected]> wrote:
> On Fri, Apr 30, 2010 at 2:11 AM, Howard Lewis Ship <[email protected]> wrote:
>
>> Question: what should the behavior be in the case where the method
>> throws a checked exception?  As currently written, the persistent
>> field data will still be discarded ... is that what you want?
>>
>
> Good catch. I was not sure about the behavior in case of an exception and
> hoped to get some comments. Shall we keep the values in this case?

I think so, just document it.

>
> We can also add a parameter saying what to do in case of an exception. The
> param would default to "keep values".

-1 : The goal of these annotations is to keep it simple; if people
want more control, they can do it via the API rather than the
annotation.

>
>>
>> Anyway ... as you can see, meta programming Java in Tapestry is now
>> really, really fun and easy!
>>
>
> Yes, Tapestry becomes more and more fun.
>
>>
>> Also, I think there's a documentation annotation for DiscardAfter to
>> identify that it is only used with components.
>>
>> On Thu, Apr 29, 2010 at 2:50 PM,  <[email protected]> wrote:
>> > Author: drobiazko
>> > Date: Thu Apr 29 21:50:01 2010
>> > New Revision: 939490
>> >
>> > URL: http://svn.apache.org/viewvc?rev=939490&view=rev
>> > Log:
>> > TAP5-1121: Provide an annotation to support automatic discarding of the
>> persistent fields after a component or page method invocation
>> >
>> > Added:
>> >
>>  tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/DiscardAfter.java
>>   (with props)
>> >
>>  tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/DiscardAfterWorker.java
>>   (with props)
>> >
>>  tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DiscardAfterDemo.tml
>> >
>>  tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DiscardAfterDemo.java
>>   (with props)
>> > Modified:
>> >
>>  tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
>> >
>>  tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
>> >
>>  tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>> >
>> > Added:
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/DiscardAfter.java
>> > URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/DiscardAfter.java?rev=939490&view=auto
>> >
>> ==============================================================================
>> > ---
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/DiscardAfter.java
>> (added)
>> > +++
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/DiscardAfter.java
>> Thu Apr 29 21:50:01 2010
>> > @@ -0,0 +1,37 @@
>> > +// Copyright 2010 The Apache Software Foundation
>> > +//
>> > +// Licensed under the Apache License, Version 2.0 (the "License");
>> > +// you may not use this file except in compliance with the License.
>> > +// You may obtain a copy of the License at
>> > +//
>> > +// http://www.apache.org/licenses/LICENSE-2.0
>> > +//
>> > +// Unless required by applicable law or agreed to in writing, software
>> > +// distributed under the License is distributed on an "AS IS" BASIS,
>> > +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > +// See the License for the specific language governing permissions and
>> > +// limitations under the License.
>> > +
>> > +package org.apache.tapestry5.annotations;
>> > +
>> > +import static java.lang.annotation.ElementType.METHOD;
>> > +import static java.lang.annotation.RetentionPolicy.RUNTIME;
>> > +
>> > +import java.lang.annotation.Documented;
>> > +import java.lang.annotation.Retention;
>> > +import java.lang.annotation.Target;
>> > +
>> > +/**
>> > + * Marks a method of a page or a component to discard all persistent
>> field changes. The changes are
>> > + * eliminated from persistent storage after the marked method is
>> invoked.
>> > + *
>> > + * @see
>> org.apache.tapestry5.ComponentResources#discardPersistentFieldChanges()
>> > + * @since 5.2.0
>> > + */
>> > +...@target(METHOD)
>> > +...@retention(RUNTIME)
>> > +...@documented
>> > +public @interface DiscardAfter
>> > +{
>> > +
>> > +}
>> >
>> > Propchange:
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/DiscardAfter.java
>> >
>> ------------------------------------------------------------------------------
>> >    svn:eol-style = native
>> >
>> > Propchange:
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/annotations/DiscardAfter.java
>> >
>> ------------------------------------------------------------------------------
>> >    svn:mime-type = text/plain
>> >
>> > Added:
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/DiscardAfterWorker.java
>> > URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/DiscardAfterWorker.java?rev=939490&view=auto
>> >
>> ==============================================================================
>> > ---
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/DiscardAfterWorker.java
>> (added)
>> > +++
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/DiscardAfterWorker.java
>> Thu Apr 29 21:50:01 2010
>> > @@ -0,0 +1,58 @@
>> > +// Copyright 2010 The Apache Software Foundation
>> > +//
>> > +// Licensed under the Apache License, Version 2.0 (the "License");
>> > +// you may not use this file except in compliance with the License.
>> > +// You may obtain a copy of the License at
>> > +//
>> > +// http://www.apache.org/licenses/LICENSE-2.0
>> > +//
>> > +// Unless required by applicable law or agreed to in writing, software
>> > +// distributed under the License is distributed on an "AS IS" BASIS,
>> > +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > +// See the License for the specific language governing permissions and
>> > +
>> > +package org.apache.tapestry5.internal.transform;
>> > +
>> > +import java.util.List;
>> > +
>> > +import org.apache.tapestry5.ComponentResources;
>> > +import org.apache.tapestry5.annotations.DiscardAfter;
>> > +import org.apache.tapestry5.model.MutableComponentModel;
>> > +import org.apache.tapestry5.services.ClassTransformation;
>> > +import org.apache.tapestry5.services.ComponentClassTransformWorker;
>> > +import org.apache.tapestry5.services.ComponentMethodAdvice;
>> > +import org.apache.tapestry5.services.ComponentMethodInvocation;
>> > +import org.apache.tapestry5.services.TransformMethod;
>> > +
>> > +public class DiscardAfterWorker implements ComponentClassTransformWorker
>> > +{
>> > +
>> > +    private final ComponentMethodAdvice advice = new
>> ComponentMethodAdvice()
>> > +    {
>> > +
>> > +        public void advise(ComponentMethodInvocation invocation)
>> > +        {
>> > +            invocation.proceed();
>> > +
>> > +            ComponentResources resources =
>> invocation.getComponentResources();
>> > +
>> > +            resources.discardPersistentFieldChanges();
>> > +
>> > +        }
>> > +
>> > +    };
>> > +
>> > +    public void transform(final ClassTransformation transformation,
>> final MutableComponentModel model)
>> > +    {
>> > +        final List<TransformMethod> methods =
>> transformation.matchMethodsWithAnnotation(DiscardAfter.class);
>> > +
>> > +        if (methods.isEmpty())
>> > +            return;
>> > +
>> > +        for (final TransformMethod metod : methods)
>> > +        {
>> > +            metod.addAdvice(advice);
>> > +        }
>> > +
>> > +    }
>> > +}
>> >
>> > Propchange:
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/DiscardAfterWorker.java
>> >
>> ------------------------------------------------------------------------------
>> >    svn:eol-style = native
>> >
>> > Propchange:
>> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/DiscardAfterWorker.java
>> >
>> ------------------------------------------------------------------------------
>> >    svn:mime-type = text/plain
>> >
>> > 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=939490&r1=939489&r2=939490&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
>> Thu Apr 29 21:50:01 2010
>> > @@ -631,6 +631,8 @@ public final class TapestryModule
>> >
>> >         configuration.add("Retain", new RetainWorker());
>> >         configuration.addInstance("Persist", PersistWorker.class);
>> > +
>> > +        configuration.addInstance("DiscardAfter",
>> DiscardAfterWorker.class);
>> >
>> >         configuration.addInstance("IncludeStylesheet",
>> IncludeStylesheetWorker.class, "after:SetupRender");
>> >         configuration
>> >
>> > Added:
>> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DiscardAfterDemo.tml
>> > URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DiscardAfterDemo.tml?rev=939490&view=auto
>> >
>> ==============================================================================
>> > ---
>> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DiscardAfterDemo.tml
>> (added)
>> > +++
>> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DiscardAfterDemo.tml
>> Thu Apr 29 21:50:01 2010
>> > @@ -0,0 +1,18 @@
>> > +<html t:type="Border"
>> > +      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
>> > +
>> > +
>> > +    <h1>@DiscardAfter Demo</h1>
>> > +
>> > +    <t:form>
>> > +
>> > +        <t:textfield t:id="stringValue"/>
>> > +
>> > +        <t:submit t:id="keep" value="Keep Values"/>
>> > +        <t:submit t:id="discard" value="Discard Values"/>
>> > +    </t:form>
>> > +
>> > +    <p>
>> > +        Value is: '${stringValue}'
>> > +    </p>
>> > +</html>
>> > \ No newline at end of file
>> >
>> > Modified:
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
>> > URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java?rev=939490&r1=939489&r2=939490&view=diff
>> >
>> ==============================================================================
>> > ---
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
>> (original)
>> > +++
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
>> Thu Apr 29 21:50:01 2010
>> > @@ -1436,4 +1436,21 @@ public class CoreBehaviorsTests extends
>> >
>> >         assertText("status", "Application Catalog Working");
>> >     }
>> > +
>> > +    /** TAP5-1121 */
>> > +   �...@test
>> > +    public void discard_after()
>> > +    {
>> > +        clickThru("@DiscardAfter Demo");
>> > +
>> > +        type("stringValue", "foo bar baz");
>> > +
>> > +        clickAndWait("//inp...@id='keep']");
>> > +
>> > +        assertTextPresent("Value is: 'foo bar baz'");
>> > +
>> > +        clickAndWait("//inp...@id='discard']");
>> > +
>> > +        assertTextPresent("Value is: ''");
>> > +    }
>> >  }
>> >
>> > Added:
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DiscardAfterDemo.java
>> > URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DiscardAfterDemo.java?rev=939490&view=auto
>> >
>> ==============================================================================
>> > ---
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DiscardAfterDemo.java
>> (added)
>> > +++
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DiscardAfterDemo.java
>> Thu Apr 29 21:50:01 2010
>> > @@ -0,0 +1,32 @@
>> > +// Copyright 2010 The Apache Software Foundation
>> > +//
>> > +// Licensed under the Apache License, Version 2.0 (the "License");
>> > +// you may not use this file except in compliance with the License.
>> > +// You may obtain a copy of the License at
>> > +//
>> > +//     http://www.apache.org/licenses/LICENSE-2.0
>> > +//
>> > +// Unless required by applicable law or agreed to in writing, software
>> > +// distributed under the License is distributed on an "AS IS" BASIS,
>> > +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > +// See the License for the specific language governing permissions and
>> > +// limitations under the License.
>> > +package org.apache.tapestry5.integration.app1.pages;
>> > +
>> > +import org.apache.tapestry5.annotations.DiscardAfter;
>> > +import org.apache.tapestry5.annotations.Persist;
>> > +import org.apache.tapestry5.annotations.Property;
>> > +
>> > +
>> > +public class DiscardAfterDemo
>> > +{
>> > +   �...@property
>> > +   �...@persist
>> > +    private String stringValue;
>> > +
>> > +   �...@discardafter
>> > +    void onSelectedFromDiscard()
>> > +    {
>> > +
>> > +    }
>> > +}
>> >
>> > Propchange:
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DiscardAfterDemo.java
>> >
>> ------------------------------------------------------------------------------
>> >    svn:eol-style = native
>> >
>> > Propchange:
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DiscardAfterDemo.java
>> >
>> ------------------------------------------------------------------------------
>> >    svn:mime-type = text/plain
>> >
>> > Modified:
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>> > URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java?rev=939490&r1=939489&r2=939490&view=diff
>> >
>> ==============================================================================
>> > ---
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>> (original)
>> > +++
>> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>> Thu Apr 29 21:50:01 2010
>> > @@ -430,7 +430,10 @@ public class Index
>> >                             "User represenation of enum values is
>> correctly read from messages"),
>> >
>> >                     new Item("unavailablecomponentdemo", "Report Location
>> of Unavailable Component",
>> > -                            "Report Location of Unavailable Component")
>> > +                            "Report Location of Unavailable Component"),
>> > +
>> > +                    new Item("discardafterdemo", "@DiscardAfter Demo",
>> > +                                    "Demo using @DiscardAfter
>> annotation")
>> >
>> >             );
>> >
>> >
>> >
>> >
>>
>>
>>
>> --
>> 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: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
>
> --
> Best regards,
>
> Igor Drobiazko
> http://tapestry5.de/blog
>



-- 
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to