indeed - thx (fixed)

On Mon, Nov 23, 2009 at 4:47 PM, Ulrich Stärk <[email protected]> wrote:
> shouldn't it be @since 5.1.0.6?
>
> Uli
>
> Am 22.11.2009 15:10 schrieb [email protected]:
>>
>> Author: drobiazko
>> Date: Sun Nov 22 14:10:08 2009
>> New Revision: 883081
>>
>> URL: http://svn.apache.org/viewvc?rev=883081&view=rev
>> Log:
>> TAP5-138: Add Zone parameter to Select component
>>
>> Added:
>>
>>  tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/app1/SelectZoneDemo.tml
>>
>>  tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/CarMaker.java
>>   (with props)
>>
>>  tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java
>>   (with props)
>> Modified:
>>
>>  tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
>>
>>  tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
>>
>>  tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.xdoc
>>
>>  tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
>>
>>  tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
>>
>>  tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>>
>> Modified:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java?rev=883081&r1=883080&r2=883081&view=diff
>>
>> ==============================================================================
>> ---
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
>> (original)
>> +++
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
>> Sun Nov 22 14:10:08 2009
>> @@ -149,4 +149,13 @@
>>      * @SINCE 5.1.0.4
>>      */
>>     public static final String PROVIDE_COMPLETIONS = "providecompletions";
>> +    +    /**
>> +     * Event triggered by {...@link
>> org.apache.tapestry5.corelib.components.Select} component to inform its
>> +     * container that Select's value has changed.
>> +     *
>> +     * @since 5.2.0.0
>> +     */
>> +    public static final String VALUE_CHANGED = "valuechanged";
>> +     }
>>
>> Modified:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java?rev=883081&r1=883080&r2=883081&view=diff
>>
>> ==============================================================================
>> ---
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
>> (original)
>> +++
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
>> Sun Nov 22 14:10:08 2009
>> @@ -18,14 +18,22 @@
>>  import org.apache.tapestry5.annotations.*;
>>  import org.apache.tapestry5.corelib.base.AbstractField;
>>  import org.apache.tapestry5.corelib.data.BlankOption;
>> +import org.apache.tapestry5.corelib.internal.ComponentActionSink;
>> +import org.apache.tapestry5.corelib.internal.HiddenFieldPositioner;
>>  import org.apache.tapestry5.corelib.mixins.RenderDisabled;
>>  import org.apache.tapestry5.internal.TapestryInternalUtils;
>> +import org.apache.tapestry5.internal.services.PageRenderQueue;
>> +import org.apache.tapestry5.internal.util.Holder;
>>  import org.apache.tapestry5.internal.util.SelectModelRenderer;
>>  import org.apache.tapestry5.ioc.Messages;
>>  import org.apache.tapestry5.ioc.annotations.Inject;
>> +import org.apache.tapestry5.ioc.internal.util.IdAllocator;
>>  import org.apache.tapestry5.ioc.internal.util.InternalUtils;
>> +import org.apache.tapestry5.json.JSONArray;
>> +import org.apache.tapestry5.json.JSONObject;
>>  import org.apache.tapestry5.services.*;
>>  import org.apache.tapestry5.util.EnumSelectModel;
>> +import org.slf4j.Logger;
>>   import java.util.Locale;
>>  @@ -39,9 +47,12 @@
>>  * can be overriden by binding the encoder parameter, or extended by
>> contributing a {...@link ValueEncoderFactory} into the
>>  * service's configuration.
>>  */
>> -...@events(EventConstants.VALIDATE)
>> +...@events({EventConstants.VALIDATE, EventConstants.VALUE_CHANGED + " when
>> 'zone' parameter is bound"})
>>  public class Select extends AbstractField
>>  {
>> +    public static final String FORM_COMPONENTID_PARAMETER =
>> "t:formcomponentid";
>> +    public static final String CHANGE_EVENT = "change";
>> +
>>     private class Renderer extends SelectModelRenderer
>>     {
>>  @@ -116,9 +127,47 @@
>>      */
>>     @Parameter(required = true, principal = true, autoconnect = true)
>>     private Object value;
>> +    +    /**
>> +     * Binding the zone parameter will cause any change of Select's value
>> to be handled as an Ajax request that updates the
>> +     * indicated zone. The component will trigger the event {...@link
>> EventConstants#VALUE_CHANGED} to inform its
>> +     * container that Select's value has changed.
>> +     * +     * @since 5.2.0.0
>> +     */
>> +   �...@parameter(defaultPrefix = BindingConstants.LITERAL)
>> +    private String zone;
>> +
>> +   �...@inject
>> +    private FieldValidationSupport fieldValidationSupport;    +    +
>> �...@environmental
>> +    private FormSupport formSupport;
>> +
>> +   �...@inject
>> +    private Environment environment;
>> +
>> +   �...@inject
>> +    private RenderSupport renderSupport;
>> +
>> +   �...@inject
>> +    private ComponentResources componentResources;
>> +
>> +   �...@inject
>> +    private HiddenFieldLocationRules rules;
>>       @Inject
>> -    private FieldValidationSupport fieldValidationSupport;
>> +    private Logger logger;
>> +
>> +   �...@inject
>> +    private ClientDataEncoder clientDataEncoder;
>> +
>> +   �...@inject
>> +    private ComponentSource componentSource;
>> +
>> +   �...@inject
>> +    private PageRenderQueue pageRenderQueue;
>> +
>>       @SuppressWarnings("unused")
>>     @Mixin
>> @@ -139,9 +188,7 @@
>>           tracker.recordInput(this, submittedValue);
>>  -        Object selectedValue = InternalUtils.isBlank(submittedValue)
>> -                               ? null :
>> -                               encoder.toValue(submittedValue);
>> +        Object selectedValue = toValue(submittedValue);
>>           try
>>         {
>> @@ -169,7 +216,86 @@
>>         resources.renderInformalParameters(writer);
>>           // Disabled is via a mixin
>> +        +        if (this.zone != null) +        {
>> +            final Link link =
>> this.resources.createEventLink(CHANGE_EVENT);
>> +
>> +            link.addParameter(FORM_COMPONENTID_PARAMETER,
>> this.formSupport.getFormComponentId());
>> +
>> +            final JSONArray spec = new JSONArray();
>> +            spec.put("change");
>> +            spec.put(getClientId());
>> +            spec.put(this.zone);
>> +            spec.put(link.toAbsoluteURI());
>> +
>> +            this.renderSupport.addInit("updateZoneOnEvent", spec);
>> +        }
>> +
>>     }
>> +    +    Object onChange() +    {
>> +        final String formId =
>> this.request.getParameter(FORM_COMPONENTID_PARAMETER);
>> +
>> +        final String changedValue =
>> this.request.getParameter("t:selectvalue");
>> +
>> +        final Object newValue = toValue(changedValue);
>> +
>> +        final Holder<Object> holder = Holder.create();
>> +
>> +        final ComponentEventCallback callback = new
>> ComponentEventCallback() +        {
>> +            public boolean handleResult(final Object result) +
>>  {
>> +
>> +                holder.put(result);
>> +
>> +                Select.this.value = newValue;
>> +
>> +                return true;
>> +            }
>> +        };
>> +
>> +
>>  this.componentResources.triggerEvent(EventConstants.VALUE_CHANGED, new
>> Object[] { newValue }, callback);
>> +
>> +        final PartialMarkupRendererFilter filter = new
>> PartialMarkupRendererFilter() +        {
>> +            public void renderMarkup(MarkupWriter writer, JSONObject
>> reply, PartialMarkupRenderer renderer) +            {
>> +
>> +                HiddenFieldPositioner hiddenFieldPositioner = new
>> HiddenFieldPositioner(writer, Select.this.rules);
>> +
>> +                final ComponentActionSink actionSink = new
>> ComponentActionSink(Select.this.logger, Select.this.clientDataEncoder);
>> +
>> +                final Form form = (Form)
>> Select.this.componentSource.getComponent(formId);
>> +
>> +                FormSupport formSupport =
>> form.createRenderTimeFormSupport(form.getClientId(), actionSink, new
>> IdAllocator());
>> +
>> +                Select.this.environment.push(FormSupport.class,
>> formSupport);
>> +                Select.this.environment.push(ValidationTracker.class, new
>> ValidationTrackerImpl());
>> +
>> +                renderer.renderMarkup(writer, reply);
>> +
>> +                Select.this.environment.pop(ValidationTracker.class);
>> +                Select.this.environment.pop(FormSupport.class);
>> +
>> +                hiddenFieldPositioner.getElement().attributes("type",
>> "hidden", "name", Form.FORM_DATA, +                        "value",
>> actionSink.getClientData());
>> +
>> +            }
>> +        };
>> +
>> +        this.pageRenderQueue.addPartialMarkupRendererFilter(filter);
>> +
>> +        return holder.get();
>> +    }
>> +
>> +    protected Object toValue(final String submittedValue) +    {
>> +        return InternalUtils.isBlank(submittedValue) ? null :
>> this.encoder.toValue(submittedValue);
>> +    }
>> +
>>       @SuppressWarnings("unchecked")
>>     ValueEncoder defaultEncoder()
>>
>> Modified:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.xdoc
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.xdoc?rev=883081&r1=883080&r2=883081&view=diff
>>
>> ==============================================================================
>> ---
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.xdoc
>> (original)
>> +++
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.xdoc
>> Sun Nov 22 14:10:08 2009
>> @@ -171,5 +171,119 @@
>>           </section>
>>  +        <section name="Chaining of Select components">
>> +               There is often a requirement for chaining Select
>> components. When a value of a Select component is changed +
>> another Select should become visible. Let's consider the following example:
>> you create an online shop for a car seller.
>> +               A make is modeled as enumeration CarMaker.  +
>>
>> +               <subsection name="CarMaker.java">
>> +                <source><![CDATA[
>>                           +public enum CarMaker
>> +{
>> +    MERCEDES, AUDI, BMW;
>> +}]]></source>  +                       </subsection>
>> +
>> +                       <subsection name="SelectZoneDemo.tml">
>> +                               The Select component 'carMaker' of the
>> page SelectZoneDemo shows all available car makers. +
>>         When a user selects a car maker, another Select component for
>> selecting available models of the make should appear.
>> +                               This can be accomplished by the parameter
>> <em>zone</em> of the Select component 'carMaker'. When <em>zone</em>
>> parameter is bound +                               every change of the
>> Select's value causes an ajax request. In this case the Select component
>> publishes the event <em>valuechanged</em> which can +
>>         be used to provide the <em>model</em> for the second Select
>> component.
>> +                               <source><![CDATA[
>>                                           +<html
>> xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";>
>> +   <t:form>
>> +      <p>
>> +         <t:errors />
>> +      </p>
>> +      <p>
>> +         <t:select t:id="carMaker" validate="required"
>> blankOption="always"
>> +                   model="makeModel" zone="modelZone"
>> encoder="makeEncoder" />
>> +      </p>
>> +      +      <t:zone t:id="modelZone">
>> +         <t:if test="carMaker">
>> +            <t:delegate to="modelBlock" />
>> +         </t:if>
>> +      </t:zone>
>> +      +      <t:block id="modelBlock">
>> +         <p>
>> +            <t:select t:id="carModel" model="availableModels"
>> validate="required"/>
>> +         </p>
>> +      </t:block>
>> +      +      <p>
>> +         <t:submit value="literal:Submit" />
>> +      </p>
>> +   </t:form>
>> +
>> +</html>]]></source>
>> +        </subsection>
>> +        +           <subsection name="SelectZoneDemo.java">
>> +                       The event handler method for the event
>> <em>valuechanged</em> is used to provide the available car models of the
>> currently selected car maker.
>> +                       The new Select's value is passed as context. +
>>                           <source><![CDATA[
>>                                   +public class SelectZoneDemo
>> +{
>> +   +   @Inject
>> +   private Messages messages;
>> +   +   @Property
>> +   @Persist
>> +   private CarMaker carMaker;
>> +   +   @Property
>> +   @Persist
>> +   private String carModel;
>> +   +   @Inject
>> +   @Property
>> +   private Block modelBlock;
>> +   +   @Property
>> +   @Persist
>> +   private List<String> availableModels;
>> +    +    public Object onValueChanged(final CarMaker maker) +    {
>> +       availableModels = findAvailableModels(maker);
>> +       +       return this.modelBlock;
>> +    }
>> +    +    public List<String> findAvailableModels(final CarMaker maker) +
>>    {
>> +      switch (maker) +      {
>> +         case AUDI:
>> +            return Arrays.asList("A4", "A6", "A8");
>> +         case BMW:
>> +            return Arrays.asList("3 Series", "5 Series", "7 Series");
>> +         case MERCEDES:
>> +            return Arrays.asList("C-Class", "E-Class", "S-Class");
>> +         default:
>> +            return Arrays.asList();
>> +       }
>> +    }
>> +    +    public SelectModel getMakeModel()
>> +    {
>> +       return new EnumSelectModel(CarMaker.class, this.messages);
>> +    }
>> +    +    public ValueEncoder<CarMaker> getMakeEncoder() +    {
>> +       return new EnumValueEncoder<CarMaker>(CarMaker.class);
>> +    }
>> +
>> +}]]></source>
>> +
>> +                       </subsection>
>> +        +        </section>
>> +
>>     </body>
>>  </document>
>> \ No newline at end of file
>>
>> Modified:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js?rev=883081&r1=883080&r2=883081&view=diff
>>
>> ==============================================================================
>> ---
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
>> (original)
>> +++
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
>> Sun Nov 22 14:10:08 2009
>> @@ -763,6 +763,11 @@
>>      */
>>     linkZone : function(element, zoneId, url)
>>     {
>> +       Tapestry.Initializer.updateZoneOnEvent("click", element, zoneId,
>> url);
>> +    },
>> +    +    updateZoneOnEvent : function(eventName, element, zoneId, url)
>> +    {
>>         element = $(element);
>>           // Update the element with the id of zone div. This may be
>> changed dynamically on the client
>> @@ -799,17 +804,24 @@
>>             return;
>>         }
>>  -        // Otherwise, assume it's just an ordinary link.
>> +        // Otherwise, assume it's just an ordinary link or input field.
>>  -        element.observe("click", function(event)
>> +        element.observe(eventName, function(event)
>>         {
>>             Event.stop(event);
>>               var zoneObject = Tapestry.findZoneManager(element);
>>               if (!zoneObject) return;
>> +            +            var newUrl = url;
>> +
>> +            if(element.tagName == "SELECT" && element.value)
>> +            {
>> +               newUrl+='&t:selectvalue='+element.value;
>> +            }
>>  -            zoneObject.updateFromURL(url);
>> +            zoneObject.updateFromURL(newUrl);
>>         });
>>     },
>>
>> Added:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/app1/SelectZoneDemo.tml
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/app1/SelectZoneDemo.tml?rev=883081&view=auto
>>
>> ==============================================================================
>> ---
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/app1/SelectZoneDemo.tml
>> (added)
>> +++
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/app1/SelectZoneDemo.tml
>> Sun Nov 22 14:10:08 2009
>> @@ -0,0 +1,30 @@
>> +<t:border xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";>
>> +       <p>Car Maker: ${carMaker}</p>
>> +       <p>Car Model: ${carModel}</p>
>> +       <t:form>
>> +               <p>
>> +                       <t:errors />
>> +               </p>
>> +               <p>
>> +                       <t:select t:id="carMaker" validate="required"
>> blankOption="always"
>> +                               model="makeModel" zone="modelZone"
>> encoder="makeEncoder" />
>> +               </p>
>> +
>> +               <t:zone t:id="modelZone">
>> +                       <t:if test="carMaker">
>> +                               <t:delegate to="modelBlock" />
>> +                       </t:if>
>> +               </t:zone>
>> +
>> +               <t:block id="modelBlock">
>> +                       <p id="carModelContainer">
>> +                               <t:select t:id="carModel"
>> model="availableModels" validate="required" blankOption="always" />
>> +                       </p>
>> +               </t:block>
>> +
>> +               <p>
>> +                       <t:submit value="literal:Submit" />
>> +               </p>
>> +       </t:form>
>> +
>> +</t:border>
>> \ No newline at end of file
>>
>> Modified:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java?rev=883081&r1=883080&r2=883081&view=diff
>>
>> ==============================================================================
>> ---
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
>> (original)
>> +++
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
>> Sun Nov 22 14:10:08 2009
>> @@ -2291,6 +2291,16 @@
>>           waitForCondition(condition, PAGE_LOAD_TIMEOUT);
>>     }
>> +    +    private void waitForElementToDisappear(String elementId)
>> +    {
>> +
>> +        String condition =
>> String.format("selenium.browserbot.getCurrentWindow().$(\"%s\").hide()",
>> +                                         elementId);
>> +
>> +        waitForCondition(condition, PAGE_LOAD_TIMEOUT);
>> +    }
>> +
>>       private void waitForCSSSelectedElementToAppear(String cssRule)
>>     {
>> @@ -2963,4 +2973,48 @@
>>                 assertText("eventfired", "true");
>>     }
>> +    +    /**
>> +     * TAP5-138
>> +     */
>> +   �...@test
>> +    public void select_zone()
>> +    {
>> +        start("Select Zone Demo");
>> +        +        type("carMaker", "BMW");
>> +        +        waitForElementToAppear("carModelContainer");
>> +        +        click(SUBMIT);
>> +        +        String condition =
>> String.format("selenium.browserbot.getCurrentWindow().$$(\"%s\")",
>> "t-error-popup");
>> +
>> +        waitForCondition(condition, PAGE_LOAD_TIMEOUT);
>> +        +        assertText(String.format("//d...@class='%s']/span",
>> "t-error-popup"), "You must provide a value for Car Model.");
>> +        +        type("carModel", "7 Series");
>> +        +        clickAndWait(SUBMIT);
>> +        +        assertTextPresent("Car Maker: BMW");
>> +        +        assertTextPresent("Car Model: 7 Series");
>> +        +        waitForElementToDisappear("carModelContainer");
>> +        +        type("carMaker", "MERCEDES");
>> +        +        waitForElementToAppear("carModelContainer");
>> +      +        type("carModel", "E-Class");
>> +        +        clickAndWait(SUBMIT);
>> +        +        assertTextPresent("Car Maker: MERCEDES");
>> +        +        assertTextPresent("Car Model: E-Class");
>> +    }
>> +
>>  }
>> \ No newline at end of file
>>
>> Added:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/CarMaker.java
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/CarMaker.java?rev=883081&view=auto
>>
>> ==============================================================================
>> ---
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/CarMaker.java
>> (added)
>> +++
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/CarMaker.java
>> Sun Nov 22 14:10:08 2009
>> @@ -0,0 +1,19 @@
>> +// Copyright 2009 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.data;
>> +
>> +public enum CarMaker
>> +{
>> +    MERCEDES, AUDI, BMW;
>> +}
>>
>> Propchange:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/CarMaker.java
>>
>> ------------------------------------------------------------------------------
>>    svn:eol-style = native
>>
>> Propchange:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/CarMaker.java
>>
>> ------------------------------------------------------------------------------
>>    svn:mime-type = text/plain
>>
>> Modified:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java?rev=883081&r1=883080&r2=883081&view=diff
>>
>> ==============================================================================
>> ---
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>> (original)
>> +++
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>> Sun Nov 22 14:10:08 2009
>> @@ -352,7 +352,10 @@
>>             new Item("SubmitWithContext", "Submit With Context",
>>                      "Providing a context for Submit component"),
>>             -            new Item("ImageSubmitDemo", "Submit with an Image
>> Demo", "Make sure that submit with the image parameter set triggers the
>> 'selected' event.")
>> +            new Item("ImageSubmitDemo", "Submit with an Image Demo",
>> "Make sure that submit with the image parameter set triggers the 'selected'
>> event."),
>> +            +            new Item("SelectZoneDemo", "Select Zone Demo",
>> "Use a Select component to update a zone.")
>> +
>>       );
>>
>> Added:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java?rev=883081&view=auto
>>
>> ==============================================================================
>> ---
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java
>> (added)
>> +++
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java
>> Sun Nov 22 14:10:08 2009
>> @@ -0,0 +1,84 @@
>> +// Copyright 2009 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 java.util.Arrays;
>> +import java.util.List;
>> +
>> +import org.apache.tapestry5.Block;
>> +import org.apache.tapestry5.SelectModel;
>> +import org.apache.tapestry5.ValueEncoder;
>> +import org.apache.tapestry5.annotations.Persist;
>> +import org.apache.tapestry5.annotations.Property;
>> +import org.apache.tapestry5.integration.app1.data.CarMaker;
>> +import org.apache.tapestry5.ioc.Messages;
>> +import org.apache.tapestry5.ioc.annotations.Inject;
>> +import org.apache.tapestry5.util.EnumSelectModel;
>> +import org.apache.tapestry5.util.EnumValueEncoder;
>> +
>> +public class SelectZoneDemo
>> +{
>> +
>> +   �...@inject
>> +    private Messages messages;
>> +
>> +   �...@property
>> +   �...@persist
>> +    private CarMaker carMaker;
>> +
>> +   �...@property
>> +   �...@persist
>> +    private String carModel;
>> +
>> +   �...@inject
>> +   �...@property
>> +    private Block modelBlock;
>> +
>> +   �...@property
>> +   �...@persist
>> +    private List<String> availableModels;
>> +
>> +    public Object onValueChanged(final CarMaker maker)
>> +    {
>> +        availableModels = findAvailableModels(maker);
>> +
>> +        return this.modelBlock;
>> +    }
>> +
>> +    public List<String> findAvailableModels(final CarMaker maker)
>> +    {
>> +        switch (maker)
>> +        {
>> +            case AUDI:
>> +                return Arrays.asList("A4", "A6", "A8");
>> +            case BMW:
>> +                return Arrays.asList("3 Series", "5 Series", "7 Series");
>> +            case MERCEDES:
>> +                return Arrays.asList("C-Class", "E-Class", "S-Class");
>> +            default:
>> +                return Arrays.asList();
>> +        }
>> +    }
>> +
>> +    public SelectModel getMakeModel()
>> +    {
>> +        return new EnumSelectModel(CarMaker.class, this.messages);
>> +    }
>> +
>> +    public ValueEncoder<CarMaker> getMakeEncoder()
>> +    {
>> +        return new EnumValueEncoder<CarMaker>(CarMaker.class);
>> +    }
>> +
>> +}
>>
>> Propchange:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java
>>
>> ------------------------------------------------------------------------------
>>    svn:eol-style = native
>>
>> Propchange:
>> tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java
>>
>> ------------------------------------------------------------------------------
>>    svn:mime-type = text/plain
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>



-- 
Andreas Andreou - [email protected] - http://blog.andyhot.gr
Tapestry / Tacos developer
Open Source / JEE Consulting

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to