Author: apetrelli
Date: Fri Jan 21 20:45:36 2011
New Revision: 1062019
URL: http://svn.apache.org/viewvc?rev=1062019&view=rev
Log:
TILES-519
Applied a modified patch by Vitaly Polonetsky.
Fixed a problem with compose stack not accepting null values.
Modified:
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java
Modified:
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java?rev=1062019&r1=1062018&r2=1062019&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
(original)
+++
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
Fri Jan 21 20:45:36 2011
@@ -106,16 +106,20 @@ public class GetAsStringModel {
String defaultValueType, @Parameter(required = true) String name,
Attribute value, Request request, ModelBody modelBody)
throws IOException {
- TilesContainer container = TilesAccess.getCurrentContainer(request);
+ TilesContainer container = TilesAccess.getCurrentContainer(request);
Deque<Object> composeStack = ComposeStackUtil.getComposeStack(request);
Attribute attribute = resolveAttribute(container, ignore, preparer,
role, defaultValue, defaultValueRole, defaultValueType, name,
value, request);
- composeStack.push(attribute);
+ if (attribute != null) {
+ composeStack.push(attribute);
+ }
modelBody.evaluateWithoutWriting();
container = TilesAccess.getCurrentContainer(request);
Writer writer = request.getWriter();
- attribute = (Attribute) composeStack.pop();
+ if (attribute != null) {
+ attribute = (Attribute) composeStack.pop();
+ }
renderAttribute(attribute, container, writer, ignore, request);
}
@@ -167,10 +171,10 @@ public class GetAsStringModel {
private void renderAttribute(Attribute attribute, TilesContainer container,
Writer writer, boolean ignore, Request request)
throws IOException {
- if (attribute == null && ignore) {
- return;
- }
try {
+ if (attribute == null && ignore) {
+ return;
+ }
writer.write(attribute.getValue().toString());
} catch (IOException e) {
if (!ignore) {
Modified:
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java?rev=1062019&r1=1062018&r2=1062019&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
(original)
+++
tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
Fri Jan 21 20:45:36 2011
@@ -122,10 +122,14 @@ public class InsertAttributeModel {
Attribute attribute = resolveAttribute(container, ignore, preparer,
role, defaultValue, defaultValueRole, defaultValueType, name,
value, request);
- composeStack.push(attribute);
+ if (attribute != null) {
+ composeStack.push(attribute);
+ }
modelBody.evaluateWithoutWriting();
container = TilesAccess.getCurrentContainer(request);
- attribute = (Attribute) composeStack.pop();
+ if (attribute != null) {
+ attribute = (Attribute) composeStack.pop();
+ }
renderAttribute(container, ignore, attribute, request);
if (flush) {
request.getWriter().flush();
Modified:
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java?rev=1062019&r1=1062018&r2=1062019&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java
(original)
+++
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java
Fri Jan 21 20:45:36 2011
@@ -106,4 +106,40 @@ public class GetAsStringModelTest {
verify(resolver, container, writer, request, applicationContext,
modelBody);
}
+ /**
+ * Test method for {@link org.apache.tiles.template.GetAsStringModel
+ * #execute(boolean, java.lang.String, java.lang.String,
+ * java.lang.Object, java.lang.String, java.lang.String, java.lang.String,
+ * org.apache.tiles.Attribute, Request, ModelBody)} when ignore flag is
set.
+ * @throws IOException If something goes wrong.
+ */
+ @Test
+ public void testExecuteIgnore() throws IOException {
+ TilesContainer container = createMock(TilesContainer.class);
+ AttributeContext attributeContext = createMock(AttributeContext.class);
+ Request request = createMock(Request.class);
+ Writer writer = createMock(Writer.class);
+ Map<String, Object> requestScope = new HashMap<String, Object>();
+ Deque<Object> composeStack = new ArrayDeque<Object>();
+ requestScope.put(ComposeStackUtil.COMPOSE_STACK_ATTRIBUTE_NAME,
composeStack);
+ requestScope.put(TilesAccess.CURRENT_CONTAINER_ATTRIBUTE_NAME,
container);
+ ApplicationContext applicationContext =
createMock(ApplicationContext.class);
+ ModelBody modelBody = createMock(ModelBody.class);
+
+ modelBody.evaluateWithoutWriting();
+
expect(request.getApplicationContext()).andReturn(applicationContext).times(2);
+
expect(request.getContext("request")).andReturn(requestScope).anyTimes();
+ expect(request.getWriter()).andReturn(writer);
+ container.prepare("myPreparer", request);
+ expect(resolver.computeAttribute(container, null, "myName", "myRole",
true, "myDefaultValue",
+ "myDefaultValueRole", "myDefaultValueType",
request)).andReturn(null);
+ expect(container.startContext(request)).andReturn(attributeContext);
+ container.endContext(request);
+
+ replay(resolver, container, writer, request, applicationContext,
modelBody);
+ model.execute(true, "myPreparer", "myRole", "myDefaultValue",
"myDefaultValueRole", "myDefaultValueType",
+ "myName", null, request, modelBody);
+ verify(resolver, container, writer, request, applicationContext,
modelBody);
+ }
+
}
Modified:
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java?rev=1062019&r1=1062018&r2=1062019&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java
(original)
+++
tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java
Fri Jan 21 20:45:36 2011
@@ -24,6 +24,8 @@ package org.apache.tiles.template;
import static org.easymock.EasyMock.*;
import java.io.IOException;
+import java.util.ArrayDeque;
+import java.util.Deque;
import java.util.HashMap;
import java.util.Map;
@@ -32,6 +34,7 @@ import org.apache.tiles.AttributeContext
import org.apache.tiles.TilesContainer;
import org.apache.tiles.access.TilesAccess;
import org.apache.tiles.autotag.core.runtime.ModelBody;
+import org.apache.tiles.autotag.core.runtime.composition.ComposeStackUtil;
import org.apache.tiles.request.ApplicationContext;
import org.apache.tiles.request.Request;
import org.junit.Before;
@@ -97,4 +100,37 @@ public class InsertAttributeModelTest {
verify(resolver, container, request, applicationContext, modelBody);
}
+ /**
+ * Test method for {@link org.apache.tiles.template.InsertAttributeModel
+ * #execute(boolean, String, String, Object, String, String, String,
+ * Attribute, boolean, Request, ModelBody)} when ignore flag is set.
+ * @throws IOException If something goes wrong.
+ */
+ @Test
+ public void testExecuteIgnore() throws IOException {
+ TilesContainer container = createMock(TilesContainer.class);
+ Request request = createMock(Request.class);
+ AttributeContext attributeContext = createMock(AttributeContext.class);
+ Map<String, Object> requestScope = new HashMap<String, Object>();
+ Deque<Object> composeStack = new ArrayDeque<Object>();
+ requestScope.put(ComposeStackUtil.COMPOSE_STACK_ATTRIBUTE_NAME,
composeStack);
+ requestScope.put(TilesAccess.CURRENT_CONTAINER_ATTRIBUTE_NAME,
container);
+ ApplicationContext applicationContext =
createMock(ApplicationContext.class);
+ ModelBody modelBody = createMock(ModelBody.class);
+
+ modelBody.evaluateWithoutWriting();
+
expect(request.getApplicationContext()).andReturn(applicationContext).times(2);
+
expect(request.getContext("request")).andReturn(requestScope).anyTimes();
+
+ container.prepare("myPreparer", request);
+ expect(resolver.computeAttribute(container, null, "myName", "myRole",
true, "myDefaultValue",
+ "myDefaultValueRole", "myDefaultValueType",
request)).andReturn(null);
+ expect(container.startContext(request)).andReturn(attributeContext);
+ container.endContext(request);
+
+ replay(resolver, container, request, applicationContext, modelBody);
+ model.execute(true, "myPreparer", "myRole", "myDefaultValue",
"myDefaultValueRole",
+ "myDefaultValueType", "myName", null, false, request,
modelBody);
+ verify(resolver, container, request, applicationContext, modelBody);
+ }
}