Author: dadams
Date: Mon Dec 20 21:12:29 2010
New Revision: 1051293

URL: http://svn.apache.org/viewvc?rev=1051293&view=rev
Log:
(closed TAP5-1378) Allow Delegate component to be used for creating in-template 
components

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DelegateInline.tml
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DelegateInline.java
Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Delegate.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/conf/   (props changed)
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GeneralComponentTests.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Delegate.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Delegate.java?rev=1051293&r1=1051292&r2=1051293&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Delegate.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Delegate.java
 Mon Dec 20 21:12:29 2010
@@ -15,12 +15,25 @@
 package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.Block;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.annotations.InjectContainer;
 import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.annotations.SupportsInformalParameters;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.runtime.Component;
 
 /**
  * A component that does not do any rendering of its own, but will delegate to 
some other object that can do rendering.
  * This other object may be a component or a {...@link Block} (among other 
things).
+ * <p>
+ * This component may also be used to create inline components. For each 
informal parameter the value will be stored as a 
+ * render variable. To create an inline component, create a block
+ * and use Delegate multiple times in the template to render the block passing 
parameters to Delegate. In the block body
+ * reference the render variables using the "var:" binding prefix and the name 
of the parameter.
+ * <p>
+ * Note that the default binding prefix for parameter values is "literal".
  */
+...@supportsinformalparameters
 public class Delegate
 {
     /**
@@ -30,8 +43,16 @@ public class Delegate
     @Parameter(required = true)
     private Object to;
 
-    Object beginRender()
-    {
+       @Inject private ComponentResources resources;
+       @InjectContainer private Component container;
+       
+       Object beginRender()
+       {
+       for(String name : resources.getInformalParameterNames()) {
+               Object value = resources.getInformalParameter(name, 
Object.class);
+               container.getComponentResources().storeRenderVariable(name, 
value);
+       }
+       
         return to;
     }
 }

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DelegateInline.tml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DelegateInline.tml?rev=1051293&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DelegateInline.tml 
(added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DelegateInline.tml Mon 
Dec 20 21:12:29 2010
@@ -0,0 +1,11 @@
+<t:border xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"; 
xmlns:p="tapestry:parameter">
+       <h1>Inline Components using Delegate</h1>
+
+       <t:delegate to="block:block1" />
+       <t:delegate to="block:block2" firstName="Steve" lastName="Rogers" />
+       <t:delegate to="block:block2" firstName="Bruce" lastName="Banner" />
+       
+       <t:block id="block1"><span id="block1">block 1</span></t:block>
+       <t:block id="block2"><p class="superhero">${var:firstName} 
${var:lastName}</p></t:block>
+</t:border>
+

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/test/conf/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Dec 20 21:12:29 2010
@@ -0,0 +1 @@
+testng-custom.xml

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GeneralComponentTests.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GeneralComponentTests.java?rev=1051293&r1=1051292&r2=1051293&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GeneralComponentTests.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GeneralComponentTests.java
 Mon Dec 20 21:12:29 2010
@@ -81,4 +81,16 @@ public class GeneralComponentTests exten
 
         assertText("//t...@class='t-location-content t-location-current']", 
"<t:unavailablecomponent/>");
     }
+    
+    /** TAP5-1378 */
+    @Test public void using_delegate_for_inline_components() {
+       clickThru("Inline Delegate");
+       
+       // no params
+       assertText("block1", "block 1");
+       
+       // multiple renders w/ multiple parameters
+       assertText("xpath=(//p...@class='superhero'])[1]", "Steve Rogers");
+       assertText("xpath=(//p...@class='superhero'])[2]", "Bruce Banner");
+    }
 }

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DelegateInline.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DelegateInline.java?rev=1051293&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DelegateInline.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DelegateInline.java
 Mon Dec 20 21:12:29 2010
@@ -0,0 +1,19 @@
+// Copyright 2006, 2007, 2008, 2009, 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;
+
+public class DelegateInline {
+
+}

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=1051293&r1=1051292&r2=1051293&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
 Mon Dec 20 21:12:29 2010
@@ -356,6 +356,8 @@ public class Index
                             "Actions can exist on pages other than the active 
page, via Blocks."),
 
                     new Item("unlessdemo", "Unless Demo", "use of the Unless 
component"),
+                    
+                    new Item("delegateinline", "Inline Delegate", "Using the 
delegate component to create inline components"),
 
                     new Item("MagicValueEncoder", "Magic ValueEncoder Demo",
                             "Automatic creation of ValueEncoder using the 
TypeCoercer"),


Reply via email to