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]
