You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by gv...@apache.org on 2006/01/19 05:37:11 UTC
svn commit: r370369 - in /struts/shale/trunk/clay-plugin/src:
java/org/apache/shale/clay/Bundle.properties
java/org/apache/shale/clay/component/chain/CreateComponentCommand.java
test/org/apache/shale/clay/config/SymbolsTestCase.java
Author: gvanmatre
Date: Wed Jan 18 20:36:48 2006
New Revision: 370369
URL: http://svn.apache.org/viewcvs?rev=370369&view=rev
Log:
Fixed Bug#: 38314 reported by Ryan Wynn.
Modified:
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/CreateComponentCommand.java
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/SymbolsTestCase.java
Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties?rev=370369&r1=370368&r2=370369&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties Wed Jan 18 20:36:48 2006
@@ -79,6 +79,7 @@
create.component=Child component id: {0}, jsfid: {1} child#: {2} created.
create.facet.component=Facet component {0}, jsfid: {1} created.
create.component.exists=Child component {0}, jsfid: {1} child#: {2} exists.
+create.component.invalid.id=The component symbol substitution failed for id "{0}".\nThe current symbol table includes: {1}.
#org.apache.shale.clay.component.chain.CreateConverterCommand
create.converter.error=Cannot create Converter {0}
@@ -134,9 +135,6 @@
#org.apache.shale.clay.parser.builder.Builder
encode.begin=Begin encoding node: {0}
encode.end=End encoding node: {0}
-
-#org.apache.shale.clay.utils.PropUtils
-unable.to.set.property.error="Could not set property {0} in bean {1}
#org.apache.shale.clay.utils.ClayAmalgam
missing.attribute=The "{0}" attribute is required when using the ClayAmalgam.{1}() validator method binding event.
Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/CreateComponentCommand.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/CreateComponentCommand.java?rev=370369&r1=370368&r2=370369&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/CreateComponentCommand.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/CreateComponentCommand.java Wed Jan 18 20:36:48 2006
@@ -78,6 +78,15 @@
if (facesContext == null)
throw new NullPointerException(messages
.getMessage("clay.null.facesContext"));
+
+ // create a new scoped symbol table
+ Map symbolTable = new TreeMap();
+ // inherit the parents symbols
+ symbolTable.putAll(clayContext.getSymbols());
+ // override config (XML, HTML) symbols
+ symbolTable.putAll(displayElement.getSymbols());
+ // push to context
+ clayContext.setSymbols(symbolTable);
String id = null;
if ((id = displayElement.getId()) == null)
@@ -85,6 +94,19 @@
else
id = replaceMnemonic(clayContext, id);
+ //Check to see if the replacement failed. This can happen if the
+ //symbol is missing. The id will still containing the symbol delimiter
+ //character. The other scenario is if the value of the symbol is null.
+
+ if (id == null || id.indexOf('@') > -1) {
+
+ if (id == null)
+ id = displayElement.getId();
+
+ throw new RuntimeException(messages.getMessage("create.component.invalid.id",
+ new Object[] {id, symbolTable}));
+ }
+
UIComponent child = null;
if (displayElement.getFacetName() != null)
child = parent.getFacet(displayElement.getFacetName());
@@ -132,23 +154,19 @@
log.debug(messages.getMessage("create.component.exists",
new Object[] { id, displayElement.getJsfid(), new Integer(clayContext.getChildIndex()) }));
}
-
- // create a new scoped symbol table
- Map symbolTable = new TreeMap();
- // inherit the parents symbols
- symbolTable.putAll(clayContext.getSymbols());
- // override config (XML, HTML) symbols
- symbolTable.putAll(displayElement.getSymbols());
- // if target is a Clay component it might contain symbols
+
+ // if target is a Clay component it might contain symbols
if (child instanceof Clay) {
// override symbols from nested clay component
symbolTable.putAll(((Clay) child).getSymbols());
// capture current symbols for the root of the nested component
((Clay) child).getSymbols().putAll(symbolTable);
+
+ // push to context
+ clayContext.setSymbols(symbolTable);
}
- // push to context
- clayContext.setSymbols(symbolTable);
+
// reassign the child to the converter for the
// AssignPropertiesCommand
clayContext.setChild(child);
Modified: struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/SymbolsTestCase.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/SymbolsTestCase.java?rev=370369&r1=370368&r2=370369&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/SymbolsTestCase.java (original)
+++ struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/SymbolsTestCase.java Wed Jan 18 20:36:48 2006
@@ -17,11 +17,14 @@
import java.util.Iterator;
+import javax.faces.component.UIComponent;
+
import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.commons.chain.Command;
import org.apache.shale.clay.component.chain.ClayContext;
+import org.apache.shale.clay.component.chain.CreateComponentCommand;
import org.apache.shale.clay.component.chain.PropertyValueCommand;
import org.apache.shale.clay.config.beans.AttributeBean;
import org.apache.shale.clay.config.beans.ComponentBean;
@@ -122,7 +125,7 @@
// test symbolic property replacement
public void testSymbolicProperties() throws Exception {
- javax.faces.component.html.HtmlOutputText child = (javax.faces.component.html.HtmlOutputText)
+ javax.faces.component.html.HtmlOutputText child = (javax.faces.component.html.HtmlOutputText)
facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
assertNotNull("javax.faces.HtmlOutputText", child);
@@ -144,7 +147,6 @@
clayContext.setChild(child);
clayContext.setAttribute(attr);
clayContext.setDisplayElement(displayElement);
- // normally done in the AssignChildrenCommand
clayContext.setSymbols(displayElement.getSymbols());
//shale core utility class
@@ -169,7 +171,6 @@
clayContext.setChild(child);
clayContext.setAttribute(attr);
clayContext.setDisplayElement(displayElement);
- // normally done in the AssignChildrenCommand
clayContext.setSymbols(displayElement.getSymbols());
isFinal = command.execute(clayContext);
@@ -189,7 +190,6 @@
clayContext.setChild(child);
clayContext.setAttribute(attr);
clayContext.setDisplayElement(displayElement);
- // normally done in the AssignChildrenCommand
clayContext.setSymbols(displayElement.getSymbols());
isFinal = command.execute(clayContext);
@@ -210,7 +210,6 @@
clayContext.setChild(child);
clayContext.setAttribute(attr);
clayContext.setDisplayElement(displayElement);
- // normally done in the AssignChildrenCommand
clayContext.setSymbols(displayElement.getSymbols());
isFinal = command.execute(clayContext);
@@ -256,6 +255,101 @@
assertEquals("value = \"rock, rock never stop; rock, rock till ya drop\"",
child.getValue(), "rock, rock never stop; rock, rock till ya drop");
+ }
+
+ //test component creation using symbols for component id's
+ public void testCreateComponent()throws Exception {
+
+ UIComponent parent = (UIComponent)
+ facesContext.getApplication().createComponent("javax.faces.NamingContainer");
+ assertNotNull("javax.faces.NamingContainer", parent);
+ parent.setId("parent");
+
+ ComponentBean displayElement = new ComponentBean();
+ displayElement.setJsfid("inputText");
+ displayElement.setComponentType("javax.faces.HtmlOutputText");
+ displayElement.setId("@wynn");
+ displayElement.addSymbol("@wynn", "test");
+
+ ClayContext clayContext = new ClayContext();
+ clayContext.setFacesContext(facesContext);
+ clayContext.setParent(parent);
+ clayContext.setDisplayElement(displayElement);
+ clayContext.setSymbols(displayElement.getSymbols());
+
+ // shale core utility class
+ servletContext.setAttribute(ShaleConstants.TAG_UTILITY_BEAN, new Tags());
+
+ Command command = new CreateComponentCommand();
+ boolean isFinal = command.execute(clayContext);
+ assertEquals("command finished", isFinal, false);
+
+ UIComponent child = (UIComponent) clayContext.getChild();
+ assertNotNull("child", child);
+
+ assertEquals("id = test", child.getId(), "test");
+
+
+ //null component id symbol replacement
+ parent = (UIComponent)
+ facesContext.getApplication().createComponent("javax.faces.NamingContainer");
+ assertNotNull("javax.faces.NamingContainer", parent);
+ parent.setId("parent");
+
+ displayElement = new ComponentBean();
+ displayElement.setJsfid("inputText");
+ displayElement.setComponentType("javax.faces.HtmlOutputText");
+ displayElement.setId("@wynn");
+ displayElement.addSymbol("@wynn", null);
+
+ clayContext = new ClayContext();
+ clayContext.setFacesContext(facesContext);
+ clayContext.setParent(parent);
+ clayContext.setDisplayElement(displayElement);
+ clayContext.setSymbols(displayElement.getSymbols());
+
+// shale core utility class
+ servletContext.setAttribute(ShaleConstants.TAG_UTILITY_BEAN, new Tags());
+
+ command = new CreateComponentCommand();
+ try {
+ isFinal = command.execute(clayContext);
+ assertTrue("id replacement failed", false);
+ } catch (RuntimeException e) {
+ assertTrue("null component id",
+ e.getMessage().startsWith("The component symbol substitution failed for id \"@wynn\""));
+ }
+
+ //missing component id symbol replacement
+ parent = (UIComponent)
+ facesContext.getApplication().createComponent("javax.faces.NamingContainer");
+ assertNotNull("javax.faces.NamingContainer", parent);
+ parent.setId("parent");
+
+ displayElement = new ComponentBean();
+ displayElement.setJsfid("inputText");
+ displayElement.setComponentType("javax.faces.HtmlOutputText");
+ displayElement.setId("@wynn");
+
+ clayContext = new ClayContext();
+ clayContext.setFacesContext(facesContext);
+ clayContext.setParent(parent);
+ clayContext.setDisplayElement(displayElement);
+ clayContext.setSymbols(displayElement.getSymbols());
+
+// shale core utility class
+ servletContext.setAttribute(ShaleConstants.TAG_UTILITY_BEAN, new Tags());
+
+ command = new CreateComponentCommand();
+ try {
+ isFinal = command.execute(clayContext);
+ assertTrue("id replacement failed", false);
+ } catch (RuntimeException e) {
+ assertTrue("missing component id",
+ e.getMessage().startsWith("The component symbol substitution failed for id \"@wynn\""));
+ }
+
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org