You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by Dragan Sahpaski <dr...@gmail.com> on 2011/10/25 15:53:50 UTC

Re: svn commit: r1188655 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/transform/ test/java/org/apache/tapestry5/integration/app1/ test/java/org/apache/tapestry5/integration/app1/pages/ test/resources/org/a

Hi Robert,
Thanks for reviewing it so quickly. Just one thing.

It seems that you forgot to commit EchoValueWithId.java (mixin).

Cheers,
Dragan Sahpaski



On Tue, Oct 25, 2011 at 3:42 PM, <ro...@apache.org> wrote:

> Author: robertdzeigler
> Date: Tue Oct 25 13:42:33 2011
> New Revision: 1188655
>
> URL: http://svn.apache.org/viewvc?rev=1188655&view=rev
> Log:
> TAP5-1663: The @BindParameter annotation should support inherited
> parameters
>
> Modified:
>
>  tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BindParameterWorker.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/BindParameterDemo.java
>
>  tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/BindParameterDemo.tml
>
> Modified:
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BindParameterWorker.java
> URL:
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BindParameterWorker.java?rev=1188655&r1=1188654&r2=1188655&view=diff
>
> ==============================================================================
> ---
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BindParameterWorker.java
> (original)
> +++
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BindParameterWorker.java
> Tue Oct 25 13:42:33 2011
> @@ -1,4 +1,4 @@
> -// Copyright 2009, 2010 The Apache Software Foundation
> +// Copyright 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.
> @@ -26,6 +26,7 @@ import org.apache.tapestry5.ioc.services
>  import org.apache.tapestry5.ioc.util.AvailableValues;
>  import org.apache.tapestry5.ioc.util.UnknownValueException;
>  import org.apache.tapestry5.model.ComponentModel;
> +import org.apache.tapestry5.model.EmbeddedComponentModel;
>  import org.apache.tapestry5.model.MutableComponentModel;
>  import org.apache.tapestry5.plastic.*;
>  import
> org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
> @@ -71,7 +72,12 @@ public class BindParameterWorker impleme
>         {
>             if (conduit == null)
>             {
> -                conduit =
> containerResources.getParameterConduit(containerParameterName);
> +                // if the parameter is not a formal parameter then it must
> be a published parameter
> +                if
> (containerResources.getComponentModel().isFormalParameter(containerParameterName))
> +                    conduit =
> containerResources.getParameterConduit(containerParameterName);
> +                else
> +                       conduit =
> getEmbeddedComponentResourcesForPublishedParameter(containerResources,
> containerParameterName)
> +
> .getParameterConduit(containerParameterName);
>             }
>
>             return conduit;
> @@ -184,9 +190,12 @@ public class BindParameterWorker impleme
>         {
>             if (model.isFormalParameter(name))
>                 return name;
> +
> +            if(isPublishedParameter(model, name))
> +               return name;
>         }
> -
> -        String message = String.format("Containing component %s does not
> contain a formal parameter %s %s.",
> +
> +        String message = String.format("Containing component %s does not
> contain a formal parameter or a published parameter %s %s.",
>
>                 model.getComponentClassName(),
>
> @@ -194,7 +203,78 @@ public class BindParameterWorker impleme
>
>                 InternalUtils.joinSorted(guesses));
>
> -        throw new UnknownValueException(message, new
> AvailableValues("Formal parameters", model
> -                .getDeclaredParameterNames()));
> +        List<String> formalAndPublishedParameters =
> CollectionFactory.newList(model.getParameterNames());
> +
>  formalAndPublishedParameters.addAll(getPublishedParameters(model));
> +
> +        throw new UnknownValueException(message, new
> AvailableValues("Formal and published parameters",
> formalAndPublishedParameters));
> +    }
> +
> +    /**
> +     * Returns true if the parameter with the given parameterName is a
> published parameter
> +     * of any of the embedded components for the component with the given
> model.
> +     */
> +    private boolean isPublishedParameter(ComponentModel model,  String
> parameterName)
> +       {
> +       for (String embeddedComponentId : model.getEmbeddedComponentIds())
> +               {
> +               EmbeddedComponentModel embeddedComponentModel = model
> +
> .getEmbeddedComponentModel(embeddedComponentId);
> +               if
> (embeddedComponentModel.getPublishedParameters().contains(parameterName))
> return true;
> +               }
> +
> +       return false;
> +       }
> +
> +    private List<String> getPublishedParameters(ComponentModel model)
> +    {
> +       List<String> publishedParameters = CollectionFactory.newList();
> +       for (String embeddedComponentId : model.getEmbeddedComponentIds())
> +       {
> +               EmbeddedComponentModel embeddedComponentModel =
> model.getEmbeddedComponentModel(embeddedComponentId);
> +
> publishedParameters.addAll(embeddedComponentModel.getPublishedParameters());
> +       }
> +       return publishedParameters;
>     }
> +
> +       /**
> +     * Returns the {@link InternalComponentResources} of an
> embeddedComponent that contains the published parameter
> +     * publishedParameterName. This is basically a recursive search for
> published parameters.
> +     */
> +       private InternalComponentResources
> getEmbeddedComponentResourcesForPublishedParameter(InternalComponentResources
> containerResources,
> +                       String publishedParameterName)
> +       {
> +               List<InternalComponentResources>
> embeddedComponentResourcesList = CollectionFactory.newList();
> +
> +               embeddedComponentResourcesList.add(containerResources);
> +
> +               while(!embeddedComponentResourcesList.isEmpty())
> +               {
> +                       InternalComponentResources resources =
> embeddedComponentResourcesList.remove(0);
> +
> +                       ComponentModel containerComponentModel =
> resources.getComponentModel();
> +
> +                       for(String embeddedComponentId :
> containerComponentModel.getEmbeddedComponentIds())
> +                       {
> +                               EmbeddedComponentModel
> embeddedComponentModel = containerComponentModel
> +
> .getEmbeddedComponentModel(embeddedComponentId);
> +
> +                               InternalComponentResources
> embeddedComponentResources = (InternalComponentResources) resources
> +
> .getEmbeddedComponent(embeddedComponentId).getComponentResources();
> +                               /**
> +                        * If the parameter is not a formal parameter, then
> the parameter must be a published parameter
> +                        * of an embeddedComponent of the component we are
> currently examining.
> +                        */
> +
> if(embeddedComponentModel.getPublishedParameters().contains(publishedParameterName)
> +                                               &&
> embeddedComponentResources.getComponentModel().isFormalParameter(publishedParameterName))
> +                               {
> +                                       return embeddedComponentResources;
> +                               }
> +
> +
> embeddedComponentResourcesList.add(embeddedComponentResources);
> +                       }
> +               }
> +
> +               return null;
> +       }
>  }
> +
>
> 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=1188655&r1=1188654&r2=1188655&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
> Tue Oct 25 13:42:33 2011
> @@ -1261,6 +1261,12 @@ public class CoreBehaviorsTests extends
>         // load invocation order)
>         assertEchoMixins("defaultbinding", "goodbye", 0, -1, -1, 1, false);
>         assertText("mypropertyoutput5", "goodbye");
> +
> +        // binding to a published parameter
> +        assertText("publishedparameter_before", "publishedvalue-before");
> +        assertText("p3-value", "publishedvaluetemporaryvalue");
> +        assertText("publishedparameter_after", "publishedvalue-after");
> +        assertText("mypropertyoutput6", "publishedvalue");
>     }
>
>     /**
> @@ -1429,7 +1435,7 @@ public class CoreBehaviorsTests extends
>
>                 "Failure binding parameter field 'boundParameter' of mixin
> BindParameterNoSuchParameter:throwexception$echovalue2 (type
> org.apache.tapestry5.integration.app1.mixins.EchoValue2)",
>
> -                "Containing component
> org.apache.tapestry5.corelib.components.Any does not contain a formal
> parameter matching any of boundParameter, value.");
> +                "Containing component
> org.apache.tapestry5.corelib.components.Any does not contain a formal
> parameter or a published parameter matching any of boundParameter, value.");
>     }
>
>     @Test
>
> Modified:
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BindParameterDemo.java
> URL:
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BindParameterDemo.java?rev=1188655&r1=1188654&r2=1188655&view=diff
>
> ==============================================================================
> ---
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BindParameterDemo.java
> (original)
> +++
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BindParameterDemo.java
> Tue Oct 25 13:42:33 2011
> @@ -38,6 +38,9 @@ public class BindParameterDemo
>     @Property
>     private String myproperty5;
>
> +    @Property
> +    private String myproperty6;
> +
>     @SetupRender
>     void initMyprop()
>     {
> @@ -46,5 +49,6 @@ public class BindParameterDemo
>         myproperty3="hello";
>         myproperty4="supervalue";
>         myproperty5="goodbye";
> +        myproperty6="publishedvalue";
>     }
>  }
>
> Modified:
> tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/BindParameterDemo.tml
> URL:
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/BindParameterDemo.tml?rev=1188655&r1=1188654&r2=1188655&view=diff
>
> ==============================================================================
> ---
> tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/BindParameterDemo.tml
> (original)
> +++
> tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/BindParameterDemo.tml
> Tue Oct 25 13:42:33 2011
> @@ -22,6 +22,7 @@
>       <t:textfield t:id="testmixin3" value="myproperty3"
> t:mixins="echovalue3"/>
>       <t:textfield t:id="multimixins" value="myproperty4"
> t:mixins="echovalue::before:*, echovalue2::before:echovalue3, echovalue3"/>
>       <t:textonlyondisabledtextfield t:id="defaultbinding"
> value="myproperty5" disabled="true" t:mixins="echovalue"/>
> +      <t:publish1 value="prop:myproperty6" t:mixins="echoValueWithId"
> id="literal:publishedparameter"/>
>   </t:form>
>
>   <div id="mypropertyoutput">${myproperty}</div>
> @@ -29,4 +30,5 @@
>   <div id="mypropertyoutput3">${myproperty3}</div>
>   <div id="mypropertyoutput4">${myproperty4}</div>
>   <div id="mypropertyoutput5">${myproperty5}</div>
> +  <div id="mypropertyoutput6">${myproperty6}</div>
>  </html>
>
>
>

Re: svn commit: r1188655 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/transform/ test/java/org/apache/tapestry5/integration/app1/ test/java/org/apache/tapestry5/integration/app1/pages/ test/resources/org/a

Posted by Robert Zeigler <ro...@roxanemy.com>.
Good catch!

Committed now.

Robert

On Oct 25, 2011, at 10/258:53 AM , Dragan Sahpaski wrote:

>> The @BindParameter annotation should support inherited


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org