Author: hlship
Date: Tue Jun  7 01:22:37 2011
New Revision: 1132847

URL: http://svn.apache.org/viewvc?rev=1132847&view=rev
Log:
TAP5-1542: Support for skinning/theming Tapestry pages

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElement.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/SkinningTests.groovy
    
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Index.groovy
    
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app5/pages/Index.tml

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
 Tue Jun  7 01:22:37 2011
@@ -1,10 +1,10 @@
-// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 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.
 // You may obtain a copy of the License at
 //
-//     http://www.apache.org/licenses/LICENSE-2.0
+// 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,
@@ -15,15 +15,17 @@
 package org.apache.tapestry5;
 
 import org.apache.tapestry5.ioc.Locatable;
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 import org.slf4j.Logger;
 
 import java.util.Locale;
 
 /**
- * Operations shared by the public {@link 
org.apache.tapestry5.ComponentResources} interface and {@link
- * org.apache.tapestry5.internal.structure.ComponentPageElement} interface (on 
the internal side).
+ * Operations shared by the public {@link 
org.apache.tapestry5.ComponentResources} interface and
+ * {@link org.apache.tapestry5.internal.structure.ComponentPageElement} 
interface (on the internal side).
  */
-@SuppressWarnings({ "JavaDoc" })
+@SuppressWarnings(
+{ "JavaDoc" })
 public interface ComponentResourcesCommon extends Locatable
 {
     /**
@@ -38,13 +40,12 @@ public interface ComponentResourcesCommo
      */
     String getNestedId();
 
-
     /**
      * Returns a string consisting of the logical name of the containing page, 
and the {@link #getNestedId() nested id}
      * of this component, separated by a colon. I.e., "MyPage:foo.bar.baz". 
For a page, returns just the page's name.
      * <p/>
      * This value is often used to obtain an equivalent component instance in 
a later request.
-     *
+     * 
      * @see org.apache.tapestry5.services.ComponentSource#getComponent(String)
      */
     String getCompleteId();
@@ -52,16 +53,19 @@ public interface ComponentResourcesCommo
     /**
      * A convienience for invoking {@link #triggerContextEvent(String, 
EventContext , ComponentEventCallback)}. Wraps
      * the context values into an {@link org.apache.tapestry5.EventContext}.
-     *
-     * @param eventType     event type (as determined from the request, or 
otherwise by design)
-     * @param contextValues Values that may be provided to the event handler 
method as method parameters, or null if no
-     *                      context values are available
-     * @param callback      the handler to be informed of the result, or null 
if the event is a notification that does
-     *                      not support return values from event handler 
methods (the value true is allowed even if the
-     *                      handler is null).
+     * 
+     * @param eventType
+     *            event type (as determined from the request, or otherwise by 
design)
+     * @param contextValues
+     *            Values that may be provided to the event handler method as 
method parameters, or null if no
+     *            context values are available
+     * @param callback
+     *            the handler to be informed of the result, or null if the 
event is a notification that does
+     *            not support return values from event handler methods (the 
value true is allowed even if the
+     *            handler is null).
      * @return true if any event handler was invoked (even if no event handler 
method returns a non-null value)
      * @throws org.apache.tapestry5.runtime.ComponentEventException
-     *          if an event handler method throws a checked or unchecked 
exception
+     *             if an event handler method throws a checked or unchecked 
exception
      * @see org.apache.tapestry5.internal.transform.OnEventWorker
      * @see org.apache.tapestry5.annotations.OnEvent
      */
@@ -74,16 +78,19 @@ public interface ComponentResourcesCommo
      * non-null value).
      * <p/>
      * Resolution of event type to event handler methods is case insensitive.
-     *
-     * @param eventType event type (as determined from the request, or 
otherwise by design)
-     * @param context   the context (as extracted from the request, or 
provided by the triggering component); these
-     *                  values may be provided to event handler methods via 
their parameters (may not be null)
-     * @param callback  the handler to be informed of the result, or null if 
the event is a notification that does not
-     *                  support return values from event handler methods (the 
value true is allowed even if the handler
-     *                  is null).
+     * 
+     * @param eventType
+     *            event type (as determined from the request, or otherwise by 
design)
+     * @param context
+     *            the context (as extracted from the request, or provided by 
the triggering component); these
+     *            values may be provided to event handler methods via their 
parameters (may not be null)
+     * @param callback
+     *            the handler to be informed of the result, or null if the 
event is a notification that does not
+     *            support return values from event handler methods (the value 
true is allowed even if the handler
+     *            is null).
      * @return true if any event handler was invoked (even if no event handler 
method returns a non-null value)
      * @throws org.apache.tapestry5.runtime.ComponentEventException
-     *          if an event handler method throws a checked or unchecked 
exception
+     *             if an event handler method throws a checked or unchecked 
exception
      * @see org.apache.tapestry5.internal.transform.OnEventWorker
      * @see org.apache.tapestry5.annotations.OnEvent
      */
@@ -97,39 +104,52 @@ public interface ComponentResourcesCommo
 
     /**
      * Returns the log instance associated with the component (which is based 
on the component or mixin's class name).
-     *
+     * 
      * @see org.apache.tapestry5.model.ComponentModel#getLogger()
      */
     Logger getLogger();
 
     /**
      * Returns the locale for the page containing this component.
+     * 
+     * @see #getResourceSelector()
      */
     Locale getLocale();
 
     /**
+     * Returns the selector used when constructing the component and its 
containing page.
+     * 
+     * @since 5.3.0
+     */
+    ComponentResourceSelector getResourceSelector();
+
+    /**
      * Returns the name of element that represents the component in its 
template, or the provided default element name
      * if the element was a component type (in the Tapestry namespace).
-     *
-     * @param defaultElementName element name to return if the element name is 
not known (may be null)
+     * 
+     * @param defaultElementName
+     *            element name to return if the element name is not known (may 
be null)
      * @return the element name
      */
     String getElementName(String defaultElementName);
 
     /**
      * Returns a block from the component's template, referenced by its id.
-     *
-     * @param blockId the id of the block (case insensitive)
+     * 
+     * @param blockId
+     *            the id of the block (case insensitive)
      * @return the identified Block
-     * @throws BlockNotFoundException if no block with the given id exists
+     * @throws BlockNotFoundException
+     *             if no block with the given id exists
      * @see #findBlock(String)
      */
     Block getBlock(String blockId);
 
     /**
      * As with {@link #getBlock(String)}, but returns null if the block is not 
found.
-     *
-     * @param blockId the id of the block (case insensitive)
+     * 
+     * @param blockId
+     *            the id of the block (case insensitive)
      * @return the block, or null
      */
     Block findBlock(String blockId);
@@ -137,50 +157,56 @@ public interface ComponentResourcesCommo
     /**
      * Returns the <em>logical</em> name of the page containing this 
component. This is the short name (it often appears
      * in URLs)
-     *
+     * 
      * @return the logical name of the page which contains this component
      */
     String getPageName();
 
-
     /**
-     * Returns true if the element has a body and false otherwise.  Only 
components may have a body; pages and mixins
+     * Returns true if the element has a body and false otherwise. Only 
components may have a body; pages and mixins
      * will return false.
      */
     boolean hasBody();
 
     /**
-     * Returns the body of this component as a (possibly empty) block.  When 
invoked on a mixin, returns the containing
+     * Returns the body of this component as a (possibly empty) block. When 
invoked on a mixin, returns the containing
      * component's body.
      */
     Block getBody();
 
     /**
      * Creates a component event request link as a callback for this 
component. The event type and context (as well as
-     * the page name and nested component id) will be encoded into a URL. A 
request for the URL will {@linkplain
-     * #triggerEvent(String, Object[], 
org.apache.tapestry5.ComponentEventCallback)}  trigger} the named event on the
+     * the page name and nested component id) will be encoded into a URL. A 
request for the URL will
+     * {@linkplain #triggerEvent(String, Object[], 
org.apache.tapestry5.ComponentEventCallback)} trigger} the named
+     * event on the
      * component.
-     *
-     * @param eventType the type of event to be triggered.  Event types should 
be Java identifiers (contain only
-     *                  letters, numbers and the underscore).
-     * @param context   additional objects to be encoded into the path portion 
of the link; each is converted to a
-     *                  string and URI encoded
+     * 
+     * @param eventType
+     *            the type of event to be triggered. Event types should be 
Java identifiers (contain only
+     *            letters, numbers and the underscore).
+     * @param context
+     *            additional objects to be encoded into the path portion of 
the link; each is converted to a
+     *            string and URI encoded
      * @return link object for the callback
      */
     Link createEventLink(String eventType, Object... context);
 
     /**
      * Creates a component event request link as a callback for this 
component. The event type and context (as well as
-     * the page name and nested component id) will be encoded into a URL. A 
request for the URL will {@linkplain
-     * #triggerEvent(String, Object[], 
org.apache.tapestry5.ComponentEventCallback)}  trigger} the named event on the
+     * the page name and nested component id) will be encoded into a URL. A 
request for the URL will
+     * {@linkplain #triggerEvent(String, Object[], 
org.apache.tapestry5.ComponentEventCallback)} trigger} the named
+     * event on the
      * component.
-     *
-     * @param eventType the type of event to be triggered.  Event types should 
be Java identifiers (contain only
-     *                  letters, numbers and the underscore).
-     * @param forForm   if true, the link will be used as the eventType for an 
HTML form submission, which may affect
-     *                  what information is encoded into the link
-     * @param context   additional objects to be encoded into the path portion 
of the link; each is converted to a
-     *                  string and URI encoded
+     * 
+     * @param eventType
+     *            the type of event to be triggered. Event types should be 
Java identifiers (contain only
+     *            letters, numbers and the underscore).
+     * @param forForm
+     *            if true, the link will be used as the eventType for an HTML 
form submission, which may affect
+     *            what information is encoded into the link
+     * @param context
+     *            additional objects to be encoded into the path portion of 
the link; each is converted to a
+     *            string and URI encoded
      * @return link object for the callback
      * @deprecated Use {@link #createEventLink(String, Object[])} instead
      */
@@ -188,30 +214,36 @@ public interface ComponentResourcesCommo
 
     /**
      * Creates a component event request link as a callback for this 
component. The event type and context (as well as
-     * the page name and nested component id) will be encoded into a URL. A 
request for the URL will {@linkplain
-     * #triggerEvent(String, Object[], 
org.apache.tapestry5.ComponentEventCallback)}  trigger} the named event on the
+     * the page name and nested component id) will be encoded into a URL. A 
request for the URL will
+     * {@linkplain #triggerEvent(String, Object[], 
org.apache.tapestry5.ComponentEventCallback)} trigger} the named
+     * event on the
      * component. This is only used for form submission events, as extra data 
may be encoded in the form as hidden
      * fields.
-     *
-     * @param eventType the type of event to be triggered.  Event types should 
be Java identifiers (contain only
-     *                  letters, numbers and the underscore).
-     * @param context   additional objects to be encoded into the path portion 
of the link; each is converted to a
-     *                  string and URI encoded
+     * 
+     * @param eventType
+     *            the type of event to be triggered. Event types should be 
Java identifiers (contain only
+     *            letters, numbers and the underscore).
+     * @param context
+     *            additional objects to be encoded into the path portion of 
the link; each is converted to a
+     *            string and URI encoded
      * @return link object for the callback
      */
     Link createFormEventLink(String eventType, Object... context);
 
     /**
      * Creates a page render request link to render a specific page.
-     *
-     * @param pageName the logical name of the page to link to
-     * @param override if true, the context is used even if empty (normally, 
the target page is allowed to passivate,
-     *                 providing a context, when the provided context is empty)
-     * @param context  the activation context for the page. If omitted, the 
activation context is obtained from the
-     *                 target page
+     * 
+     * @param pageName
+     *            the logical name of the page to link to
+     * @param override
+     *            if true, the context is used even if empty (normally, the 
target page is allowed to passivate,
+     *            providing a context, when the provided context is empty)
+     * @param context
+     *            the activation context for the page. If omitted, the 
activation context is obtained from the
+     *            target page
      * @return link for a render request to the targetted page
-     * @deprecated Use {@link 
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLink(String)}
 or {@link
-     *             
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLinkWithContext(String,
 Object[])}
+     * @deprecated Use {@link 
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLink(String)}
 or
+     *             {@link 
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLinkWithContext(String,
 Object[])}
      *             instead
      */
     Link createPageLink(String pageName, boolean override, Object... context);
@@ -219,15 +251,18 @@ public interface ComponentResourcesCommo
     /**
      * Creates a page render request link to render a specific page. Using a 
page class, rather than a page name, is
      * more refactoring safe (in the even the page is renamed or moved).
-     *
-     * @param pageClass identifies the page to link to
-     * @param override  if true, the context is used even if empty (normally, 
the target page is allowed to passivate,
-     *                  providing a context, when the provided context is 
empty)
-     * @param context   the activation context for the page. If omitted, the 
activation context is obtained from the
-     *                  target page
+     * 
+     * @param pageClass
+     *            identifies the page to link to
+     * @param override
+     *            if true, the context is used even if empty (normally, the 
target page is allowed to passivate,
+     *            providing a context, when the provided context is empty)
+     * @param context
+     *            the activation context for the page. If omitted, the 
activation context is obtained from the
+     *            target page
      * @return link for a render request to the targetted page
-     * @deprecated Use {@link 
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLink(Class)} 
or {@link
-     *             
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLinkWithContext(Class,
 Object[])}
+     * @deprecated Use {@link 
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLink(Class)} 
or
+     *             {@link 
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLinkWithContext(Class,
 Object[])}
      *             instead
      */
     Link createPageLink(Class pageClass, boolean override, Object... context);

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
 Tue Jun  7 01:22:37 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -25,6 +25,7 @@ import org.apache.tapestry5.model.Mutabl
 import org.apache.tapestry5.services.ClassTransformation;
 import org.apache.tapestry5.services.ComponentValueProvider;
 import org.apache.tapestry5.services.InjectionProvider;
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 import org.slf4j.Logger;
 
 /**
@@ -32,6 +33,14 @@ import org.slf4j.Logger;
  */
 public class CommonResourcesInjectionProvider implements InjectionProvider
 {
+    private static ComponentValueProvider<ComponentResourceSelector> 
selectorProvider = new ComponentValueProvider<ComponentResourceSelector>()
+    {
+        public ComponentResourceSelector get(ComponentResources resources)
+        {
+            return resources.getResourceSelector();
+        }
+    };
+
     private static ComponentValueProvider<Messages> messagesProvider = new 
ComponentValueProvider<Messages>()
     {
 
@@ -67,10 +76,10 @@ public class CommonResourcesInjectionPro
         }
     };
 
-    private static final Map<Class, ComponentValueProvider> configuration = 
CollectionFactory
-            .newMap();
+    private static final Map<Class, ComponentValueProvider> configuration = 
CollectionFactory.newMap();
 
     {
+        configuration.put(ComponentResourceSelector.class, selectorProvider);
         configuration.put(Messages.class, messagesProvider);
         configuration.put(Locale.class, localeProvider);
         configuration.put(Logger.class, loggerProvider);

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElement.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElement.java?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElement.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElement.java
 Tue Jun  7 01:22:37 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 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.

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
 Tue Jun  7 01:22:37 2011
@@ -68,6 +68,7 @@ import org.apache.tapestry5.runtime.Page
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.runtime.RenderQueue;
 import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 import org.slf4j.Logger;
 
 /**
@@ -1350,4 +1351,9 @@ public class ComponentPageElementImpl ex
     {
         return !productionMode && (componentTracingEnabled || 
"true".equals(request.getParameter("t:component-trace")));
     }
+
+    public ComponentResourceSelector getResourceSelector()
+    {
+        return page.getSelector();
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
 Tue Jun  7 01:22:37 2011
@@ -44,6 +44,7 @@ import org.apache.tapestry5.model.Compon
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.PageLifecycleListener;
 import org.apache.tapestry5.runtime.RenderQueue;
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 import org.slf4j.Logger;
 
 /**
@@ -400,6 +401,11 @@ public class InternalComponentResourcesI
         return element.getLocale();
     }
 
+    public ComponentResourceSelector getResourceSelector()
+    {
+        return element.getResourceSelector();
+    }
+
     public synchronized Messages getMessages()
     {
         if (messages == null)

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/SkinningTests.groovy
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/SkinningTests.groovy?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/SkinningTests.groovy
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/SkinningTests.groovy
 Tue Jun  7 01:22:37 2011
@@ -60,4 +60,16 @@ class SkinningTests extends TapestryCore
 
         assertText "page-over", "Overridden page catalog message (Barney)"
     }
+    
+    @Test
+    void injection_of_selector()
+    {
+        openLinks "reset session", "English"
+        
+        assertText "selector", "ComponentResourcesSelector[en]"
+        
+        clickAndWait "link=French"
+        
+        assertText "selector", "ComponentResourcesSelector[fr]"        
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Index.groovy
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Index.groovy?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Index.groovy
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Index.groovy
 Tue Jun  7 01:22:37 2011
@@ -14,11 +14,13 @@
 
 package org.apache.tapestry5.integration.app5.pages
 
+import org.apache.tapestry5.annotations.Property
 import org.apache.tapestry5.annotations.SessionState
 import org.apache.tapestry5.integration.app5.Client
 import org.apache.tapestry5.integration.app5.ClientTracker
 import org.apache.tapestry5.ioc.annotations.Inject
 import org.apache.tapestry5.services.PersistentLocale
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector
 
 class Index {
 
@@ -27,6 +29,10 @@ class Index {
 
     @SessionState
     private ClientTracker tracker
+    
+    @Property
+    @Inject
+    private ComponentResourceSelector selector
 
     void onActionFromFred() {
         tracker.client = Client.FRED

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app5/pages/Index.tml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app5/pages/Index.tml?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app5/pages/Index.tml
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app5/pages/Index.tml
 Tue Jun  7 01:22:37 2011
@@ -11,6 +11,8 @@
     <dd id="page-over">${message:page-perclient-message}</dd>
     <dt>hello</dt>
     <dd id="hello">${message:hello}</dd>
+    <dt>selector</dt>
+    <dd id="selector">${selector}</dd>
   </dl>
 
 


Reply via email to