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 2005/10/27 07:34:32 UTC

svn commit: r328794 - in /struts/shale/trunk/clay-plugin/src: conf/ java/org/apache/shale/clay/component/ java/org/apache/shale/clay/component/chain/ java/org/apache/shale/clay/config/beans/ java/org/apache/shale/clay/parser/builder/ test/org/apache/sh...

Author: gvanmatre
Date: Wed Oct 26 22:34:15 2005
New Revision: 328794

URL: http://svn.apache.org/viewcvs?rev=328794&view=rev
Log:
Added use of replacement symbols within the Clay component attribute definitions. 

Modified:
    struts/shale/trunk/clay-plugin/src/conf/clay-config.xml
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/Clay.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AbstractCommand.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AssignChildrenCommand.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/ClayContext.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentBean.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/Builder.java
    struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java

Modified: struts/shale/trunk/clay-plugin/src/conf/clay-config.xml
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/conf/clay-config.xml?rev=328794&r1=328793&r2=328794&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/conf/clay-config.xml (original)
+++ struts/shale/trunk/clay-plugin/src/conf/clay-config.xml Wed Oct 26 22:34:15 2005
@@ -66,7 +66,8 @@
         <set name="readonly" bindingType="VB" />
         <set name="onselect" bindingType="VB" />
         <set name="tabindex" bindingType="VB" />
-        
+
+        <set name="required" bindingType="VB" />        
         <set name="value" bindingType="VB" />
         <set name="converter" bindingType="VB" />
         <set name="immediate" bindingType="VB" />

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/Clay.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/Clay.java?rev=328794&r1=328793&r2=328794&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/Clay.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/Clay.java Wed Oct 26 22:34:15 2005
@@ -21,6 +21,8 @@
 import java.io.IOException;
 import java.net.URL;
 import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
 
 import javax.faces.component.UIComponent;
 import javax.faces.component.UINamingContainer;
@@ -290,7 +292,10 @@
                 
                 ClayContext clayContext = new ClayContext();
                 clayContext.setAttribute(attr);
-                clayContext.setManagedBeanName(getManagedBeanName());
+                
+                Map symbolTable = new TreeMap();
+                symbolTable.put(Globals.MANAGED_BEAN_MNEMONIC, getManagedBeanName());
+                clayContext.setSymbols(symbolTable);
                 
                 String expr = AbstractCommand.replaceMnemonic(clayContext);
                 Class[] methodSignature = {
@@ -321,7 +326,12 @@
         clayContext.setDisplayElement(getDisplayElementRoot());
         clayContext.setJsfid(getJsfid());
         clayContext.setFacesContext(getFacesContext());
-        clayContext.setManagedBeanName(getManagedBeanName());
+        
+        Map symbolTable = new TreeMap();
+        symbolTable.putAll(getDisplayElementRoot().getSymbols());
+        symbolTable.put(Globals.MANAGED_BEAN_MNEMONIC, getManagedBeanName());
+        clayContext.setSymbols(symbolTable);
+        
         clayContext.setRootElement(getDisplayElementRoot());
         clayContext.setParent(this);
         

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AbstractCommand.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AbstractCommand.java?rev=328794&r1=328793&r2=328794&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AbstractCommand.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AbstractCommand.java Wed Oct 26 22:34:15 2005
@@ -19,6 +19,8 @@
 package org.apache.shale.clay.component.chain;
 
 import java.net.URL;
+import java.util.Iterator;
+import java.util.Map;
 
 import org.apache.commons.chain.Catalog;
 import org.apache.commons.chain.CatalogFactory;
@@ -77,25 +79,40 @@
     /**
      * <p>
      * This call is used to substitue an attribute binding expression containing
-     * the literal string <strong>managed-bean-name</strong> with the
-     * <code>managedBeanName</code> property value in the {@link ClayContext}.
+     * the <code>symbols</code> with the target property value in the {@link ClayContext}.
      * </p>
      */
     public static String replaceMnemonic(ClayContext context) {
         
         StringBuffer buff = new StringBuffer(context.getAttribute().getValue());
+        Map symbols = context.getSymbols();
+        Iterator si = symbols.entrySet().iterator();
         
-        for (int i = 0; i < (buff.length() - Globals.MANAGED_BEAN_MNEMONIC
-                .length()); i++) {
-            String token = buff.substring(i, i
-                    + Globals.MANAGED_BEAN_MNEMONIC.length());
-            if (token.compareToIgnoreCase(Globals.MANAGED_BEAN_MNEMONIC) == 0) {
-                buff.delete(i, i + Globals.MANAGED_BEAN_MNEMONIC.length());
-                buff.insert(i, context.getManagedBeanName());
+        while (si.hasNext()) {
+            Map.Entry e = (Map.Entry) si.next();
+            String key = (String) e.getKey();
+            String value = (String) e.getValue();
+            
+            int i = 0;
+            while (i <= (buff.length() - key.length())) {
+                String token = buff.substring(i, i + key.length());
+                if (token.compareToIgnoreCase(key) == 0) {
+                    buff.delete(i, i + key.length());
+                    buff.insert(i, value);
+                    i = i + value.length();
+                } else { 
+                    i++;
+                }
+                
+                token = null;
             }
             
-            token = null;
+            e = null;
+            key = null;
+            value = null;
         }
+        symbols = null;
+        si = null;
         
         return buff.toString();
         

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AssignChildrenCommand.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AssignChildrenCommand.java?rev=328794&r1=328793&r2=328794&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AssignChildrenCommand.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AssignChildrenCommand.java Wed Oct 26 22:34:15 2005
@@ -19,6 +19,8 @@
 package org.apache.shale.clay.component.chain;
 
 import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
 
 import javax.faces.component.UIComponent;
 
@@ -73,12 +75,7 @@
                     .getMessage("clay.null.componentBean"));
         
         Iterator vi = displayElement.getChildrenIterator();
-        String managedBeanName = clayContext.getManagedBeanName();
-        if (parent instanceof Clay) {
-            if (((Clay) parent).getManagedBeanName() != null)
-               managedBeanName = ((Clay) parent).getManagedBeanName();   
-        }
-        
+    
         int childIndex = 0;
         while (vi.hasNext()) {
             ComponentBean childDisplayElement = (ComponentBean) vi.next();
@@ -88,7 +85,16 @@
             subContext.setParent(parent);
             subContext.setChild(null);
             subContext.setChildIndex(childIndex);
-            subContext.setManagedBeanName(managedBeanName);
+           
+            Map symbolTable = new TreeMap();
+            symbolTable.putAll(clayContext.getSymbols());
+            symbolTable.putAll(childDisplayElement.getSymbols());
+            if (parent instanceof Clay) {
+                if (((Clay) parent).getManagedBeanName() != null)
+                   symbolTable.put(Globals.MANAGED_BEAN_MNEMONIC, ((Clay) parent).getManagedBeanName());
+            }
+
+            subContext.setSymbols(symbolTable);
             
             Catalog catalog = getCatalog();
             Command command = catalog

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/ClayContext.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/ClayContext.java?rev=328794&r1=328793&r2=328794&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/ClayContext.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/ClayContext.java Wed Oct 26 22:34:15 2005
@@ -18,6 +18,9 @@
 
 package org.apache.shale.clay.component.chain;
 
+import java.util.Map;
+import java.util.TreeMap;
+
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 
@@ -37,30 +40,30 @@
     private static final long serialVersionUID = 3618132372818901298L;
     
     /**
-     * <p>The name of the ViewController or back bean that
-     * is bound to the {@link org.apache.shale.clay.component.Clay} component.
-     * </p>
+     * <p>Symbol table that holds literal strings that 
+     * will be replaced within the value of an attribute.</p>
      */
-    private String managedBeanName = null;
+    private Map symbols = null;
     
     /**
-     * <p>Returns the managed bean name that will replace the
-     * literal string <strong>managed-bean-name</strong> in
-     * value and action component expressions.
-     * </p>
+     * <p>Returns a Map containing replacement symbols  
+     * within meta-component attributes.</p>
      */
-    public String getManagedBeanName() {
-        return managedBeanName;
+    public Map getSymbols() {
+        if (symbols == null)
+           symbols = new TreeMap();
+        
+        return symbols;
     }
-    
+
     /**
-     * <p>Sets the managed bean name that the {@link org.apache.shale.clay.component.Clay} component
-     * and all sub components are bound to.
-     * </p>
+     * <p>Sets a Map containing replacement symbols  
+     * within meta-component attributes.</p>
      */
-    public void setManagedBeanName(String managedBeanName) {
-        this.managedBeanName = managedBeanName;
+    public void setSymbols(Map symbols) {
+        this.symbols = symbols;
     }
+    
     
     /**
      * <p>Unique identifier for a component metadata definition.</p>

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java?rev=328794&r1=328793&r2=328794&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java Wed Oct 26 22:34:15 2005
@@ -109,11 +109,7 @@
         boolean isEarly = bindingType.equals(AttributeBean.BINDING_TYPE_EARLY); 
         
         
-        String expr = null;
-        if (isEL)
-           expr = replaceMnemonic(clayContext);
-        else 
-           expr = attributeBean.getValue();  
+        String expr = replaceMnemonic(clayContext);
         
         if (isEL && isVB)
            tagUtils.setValueBinding((UIComponentBase) child, attributeBean.getName(), expr);

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentBean.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentBean.java?rev=328794&r1=328793&r2=328794&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentBean.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentBean.java Wed Oct 26 22:34:15 2005
@@ -218,6 +218,13 @@
     
     
     /**
+     * <p>The replacement symbol table for the component meta-data.</p>
+     */
+    private Map symbols = new TreeMap();
+    
+    
+    
+    /**
      * <p>This property only applies when using the {@link org.apache.shale.clay.component.Clay}
      * template features.  A <code>"true"</code> value is returned if the HTML child nodes under
      * the node that this meta component is bound to should be rendered; otherwise, a <code>"false"</code>
@@ -686,6 +693,24 @@
      */    
     public void setId(String string) {
         id = string;
+    }
+    
+    /**
+     * <p>Adds a symbol identified by the <code>key</code>
+     * and replacement <code>value</code> to the symbols 
+     * collection.</p>  
+     */
+    public void addSymbol(String key, String value) {
+       symbols.put(key, value);     
+    }
+    
+    /**
+     * <p>Returns the replacement symbols assigned to the component.
+     * The key value represents the literal replacement string.  
+     * The value Map property represents target string.</p>
+     */
+    public Map getSymbols() {
+       return symbols;    
     }
     
 }

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/Builder.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/Builder.java?rev=328794&r1=328793&r2=328794&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/Builder.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/Builder.java Wed Oct 26 22:34:15 2005
@@ -287,15 +287,24 @@
         next: while (ai.hasNext()) {
             Map.Entry e = (Map.Entry) ai.next(); 
             
-            if (e.getKey().equals("jsfid"))
+            if (e.getKey().equals("id") ||
+                e.getKey().equals("jsfid") ||
+                e.getKey().equals("allowbody") ||
+                e.getKey().equals("facetname"))
                 continue next;
                
             AttributeBean original = null;
-            Token valueToken = null;
-            if (((original = (AttributeBean) target.getAttribute((String) e.getKey())) != null) &&
-                ((valueToken = (Token) e.getValue()) != null)) 
-                  createAttribute(original, valueToken.getRawText(), target);
-            
+            Token valueToken = (Token) e.getValue();
+            if (valueToken != null) { 
+                if ((original = (AttributeBean) target.getAttribute((String) e.getKey())) != null) { 
+                    createAttribute(original, valueToken.getRawText(), target);
+                } else  {
+                    //any token that is not an attribute in the target becomes a symbol
+                    StringBuffer identifier = new StringBuffer((String) e.getKey());
+                    identifier.insert(0, '@');
+                    target.addSymbol(identifier.toString(), valueToken.getRawText()); 
+                }
+            }    
         }
         
         if (node.getAttributes().containsKey("allowbody")) 

Modified: struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java?rev=328794&r1=328793&r2=328794&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java (original)
+++ struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java Wed Oct 26 22:34:15 2005
@@ -604,6 +604,42 @@
 
         
     }
+   
+    // test symbolic property replacement
+    public void testSymbolicProperties() throws Exception {
+            javax.faces.component.html.HtmlOutputText child = (javax.faces.component.html.HtmlOutputText) facesContext.getApplication().createComponent("javax.faces.HtmlOutputText"); 
+           assertNotNull("javax.faces.HtmlOutputText", child);
+           
+           
+           AttributeBean attr = new AttributeBean();
+           attr.setName("value");
+           attr.setBindingType(AttributeBean.BINDING_TYPE_NONE);
+           attr.setValue("@value");  //symbolic attribute 
+                      
+           ComponentBean displayElement = new ComponentBean();
+           displayElement.setJsfid("inputText");
+           displayElement.setComponentType("javax.faces.HtmlOutputText");
+           displayElement.setId("testId");
+           displayElement.addAttribute(attr);
+           displayElement.addSymbol("@value", "10");
+                      
+           ClayContext clayContext = new ClayContext();
+           clayContext.setFacesContext(facesContext);
+           clayContext.setChild(child);
+           clayContext.setAttribute(attr);
+           clayContext.setDisplayElement(displayElement);
+           // normally done in the AssignChildrenCommand
+           clayContext.setSymbols(displayElement.getSymbols());
+           
+           //shale core utility class
+           servletContext.setAttribute(ShaleConstants.TAG_UTILITY_BEAN, new Tags());
+           
+           Command command = new PropertyValueCommand();
+           boolean isFinal = command.execute(clayContext);
+           assertEquals("command finished", isFinal, true);       
+           assertEquals("value = 10", child.getValue(), "10");
+
+    }
     
     
     // test duplicate id check



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org