Author: hlship
Date: Tue Feb 10 19:43:28 2009
New Revision: 743077
URL: http://svn.apache.org/viewvc?rev=743077&view=rev
Log:
TAP5-496: Change If and Unless to render thier template element if provided
(i.e., when using t:type) as well as informal parameters
Added:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractConditional.java
Removed:
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/IfTest.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/UnlessTest.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/If.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Unless.java
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/ExceptionDisplay.tml
Added:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractConditional.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractConditional.java?rev=743077&view=auto
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractConditional.java
(added)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractConditional.java
Tue Feb 10 19:43:28 2009
@@ -0,0 +1,90 @@
+// 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.corelib.base;
+
+import org.apache.tapestry5.BindingConstants;
+import org.apache.tapestry5.Block;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.annotations.SupportsInformalParameters;
+import org.apache.tapestry5.ioc.annotations.Inject;
+
+/**
+ * Base class for {...@link org.apache.tapestry5.corelib.components.If} and
{...@link org.apache.tapestry5.corelib.components.Unless}.
+ * Will render its body or the block from its else parameter. If it renders
anything and it has an element name, then
+ * it renders the element and its informal parameters.
+ */
+...@supportsinformalparameters
+public abstract class AbstractConditional
+{
+ @Inject
+ private ComponentResources resources;
+
+ /**
+ * Performs the test via the parameters; return true to render the body of
the component, false to render the else
+ * block (or nothing).
+ *
+ * @return true to render body
+ */
+ protected abstract boolean test();
+
+ /**
+ * An alternate {...@link org.apache.tapestry5.Block} to render if
{...@link #test()} is false. The default, null, means
+ * render nothing in that situation.
+ */
+ @Parameter(name = "else", defaultPrefix = BindingConstants.LITERAL)
+ private Block elseBlock;
+
+ private boolean renderTag;
+
+ /**
+ * Returns null if the {...@link #test()} is true, which allows normal
rendering (of the body). If the test parameter
+ * is false, returns the else parameter (this may also be null).
+ */
+ Object beginRender(MarkupWriter writer)
+ {
+ Block toRender = test() ? resources.getBody() : elseBlock;
+
+ String elementName = resources.getElementName();
+
+ renderTag = toRender != null && elementName != null;
+
+ if (renderTag)
+ {
+ writer.element(elementName);
+ resources.renderInformalParameters(writer);
+ }
+
+ return toRender;
+ }
+
+ /**
+ * If {...@link #test()} is true, then the body is rendered, otherwise
not. The component does not have a template or
+ * do any other rendering besides its body.
+ */
+ boolean beforeRenderBody()
+ {
+ return false;
+ }
+
+ void afterRenderBody(MarkupWriter writer)
+ {
+ if (renderTag)
+ writer.end();
+ }
+
+
+}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/If.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/If.java?rev=743077&r1=743076&r2=743077&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/If.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/If.java
Tue Feb 10 19:43:28 2009
@@ -14,14 +14,13 @@
package org.apache.tapestry5.corelib.components;
-import org.apache.tapestry5.BindingConstants;
-import org.apache.tapestry5.Block;
import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.corelib.base.AbstractConditional;
/**
- * Conditionally renders its body.
+ * Conditionally renders its body. May render its tag and any informal
parameters.
*/
-public class If
+public class If extends AbstractConditional
{
/**
* If true, then the body of the If component is rendered. If false, the
body is omitted.
@@ -39,34 +38,12 @@
private boolean negate;
/**
- * An alternate {...@link org.apache.tapestry5.Block} to render if the
test parameter is false. The default, null,
- * means render nothing in that situation.
+ * @return test parameter (if negate is false), or test parameter inverted
(if negate is true)
*/
- @Parameter(name = "else", defaultPrefix = BindingConstants.LITERAL)
- private Block elseBlock;
-
- /**
- * Returns null if the test parameter is true, which allows normal
rendering (of the body). If the test parameter is
- * false, returns the else parameter (this may also be null).
- */
- Object beginRender()
- {
- return test != negate ? null : elseBlock;
- }
-
- /**
- * If the test parameter is true, then the body is rendered, otherwise
not. The component does not have a template
- * or do any other rendering besides its body.
- */
- boolean beforeRenderBody()
+ protected boolean test()
{
return test != negate;
}
- void setup(boolean test, boolean negate, Block elseBlock)
- {
- this.test = test;
- this.negate = negate;
- this.elseBlock = elseBlock;
- }
+
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Unless.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Unless.java?rev=743077&r1=743076&r2=743077&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Unless.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Unless.java
Tue Feb 10 19:43:28 2009
@@ -14,15 +14,14 @@
package org.apache.tapestry5.corelib.components;
-import org.apache.tapestry5.BindingConstants;
-import org.apache.tapestry5.Block;
import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.corelib.base.AbstractConditional;
/**
* A close relative of the {...@link
org.apache.tapestry5.corelib.components.If} component that inverts the meaning
of its
* test. This is easier than an If component with the negate parameter set to
true.
*/
-public class Unless
+public class Unless extends AbstractConditional
{
/**
* If true, then the body of the If component is rendered. If false, the
body is omitted.
@@ -31,33 +30,10 @@
private boolean test;
/**
- * An alternate {...@link org.apache.tapestry5.Block} to render if the
test parameter is false. The default, null,
- * means render nothing in that situation.
+ * @return test parameter inverted
*/
- @Parameter(name = "else", defaultPrefix = BindingConstants.LITERAL)
- private Block elseBlock;
-
- /**
- * Returns null if the test parameter is true, which allows normal
rendering (of the body). If the test parameter is
- * false, returns the else parameter (this may also be null).
- */
- Object beginRender()
- {
- return !test ? null : elseBlock;
- }
-
- /**
- * If the test parameter is true, then the body is rendered, otherwise
not. The component does not have a template
- * or do any other rendering besides its body.
- */
- boolean beforeRenderBody()
+ protected boolean test()
{
return !test;
}
-
- void setup(boolean test, Block elseBlock)
- {
- this.test = test;
- this.elseBlock = elseBlock;
- }
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/ExceptionDisplay.tml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/ExceptionDisplay.tml?rev=743077&r1=743076&r2=743077&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/ExceptionDisplay.tml
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/ExceptionDisplay.tml
Tue Feb 10 19:43:28 2009
@@ -4,36 +4,32 @@
<li>
<span class="t-exception-class-name">${info.className}</span>
- <t:if test="info.message">
- <div class="t-exception-message">${info.message}</div>
- </t:if>
+ <div t:type="if" test="info.message"
class="t-exception-message">${info.message}</div>
- <t:if test="showPropertyList">
- <dl>
- <t:loop source="info.propertyNames"
value="propertyName">
- <dt>${propertyName}</dt>
- <dd>
- <t:renderobject object="propertyValue"/>
- </dd>
- </t:loop>
- <t:if test="info.stackTrace">
- <dt>
- <span class="t-exception-stack-controls">
- <input type="checkbox" id="${toggleId}"
checked="checked"/>
- <label for="${toggleId}">Hide
uninteresting stack frames</label>
- </span>
- Stack trace
- </dt>
- <dd>
- <ul class="t-stack-trace">
- <t:loop source="info.stackTrace"
value="frame">
- <li class="${frameClass}">${frame}</li>
- </t:loop>
- </ul>
- </dd>
- </t:if>
- </dl>
- </t:if>
+ <dl t:type="if" test="showPropertyList">
+ <t:loop source="info.propertyNames" value="propertyName">
+ <dt>${propertyName}</dt>
+ <dd>
+ <t:renderobject object="propertyValue"/>
+ </dd>
+ </t:loop>
+ <t:if test="info.stackTrace">
+ <dt>
+ <span class="t-exception-stack-controls">
+ <input type="checkbox" id="${toggleId}"
checked="checked"/>
+ <label for="${toggleId}">Hide uninteresting
stack frames</label>
+ </span>
+ Stack trace
+ </dt>
+ <dd>
+ <ul class="t-stack-trace">
+ <li t:type="loop" source="info.stackTrace"
value="frame" class="${frameClass}">
+ ${frame}
+ </li>
+ </ul>
+ </dd>
+ </t:if>
+ </dl>
</li>
</t:loop>
</ul>