You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2013/10/25 23:24:10 UTC

svn commit: r1535874 [4/9] - in /myfaces/shared/trunk/core/src: main/java/org/apache/myfaces/shared/application/ main/java/org/apache/myfaces/shared/config/ main/java/org/apache/myfaces/shared/context/flash/ main/java/org/apache/myfaces/shared/renderki...

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceValidationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceValidationUtils.java?rev=1535874&r1=1535873&r2=1535874&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceValidationUtils.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ResourceValidationUtils.java Fri Oct 25 21:24:09 2013
@@ -1,199 +1,219 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.myfaces.shared.resource;
-
-public class ResourceValidationUtils
-{
-    public static boolean isValidResourceName(String resourceName)
-    {
-        return validateResourceName(resourceName, true);
-    }
-    
-    public static boolean isValidLibraryName(String libraryName)
-    {
-        return validate(libraryName, false);
-    }
-    
-    public static boolean isValidLibraryName(String libraryName, boolean allowSlash)
-    {
-        return validate(libraryName, allowSlash);
-    }
-    
-    public static boolean isValidLocalePrefix(String localePrefix)
-    {
-        for (int i = 0; i < localePrefix.length(); i++)
-        {
-            char c = localePrefix.charAt(i);
-            if ( (c >='A' && c <='Z') || c == '_' || (c >='a' && c <='z') || (c >='0' && c <='9') )
-            {
-                continue;
-            }
-            else
-            {
-                return false;
-            }
-        }
-        return true;
-    }
-    
-    private static boolean validate(String expression, boolean allowSlash)
-    {
-        if (expression.length() == 2 && 
-            expression.charAt(0) == '.' &&
-            expression.charAt(1) == '.')
-        {
-            return false;
-        }
-        for (int i = 0; i < expression.length(); i++)
-        {
-            char c = expression.charAt(i);
-
-            // Enforce NameChar convention as specified
-            // http://www.w3.org/TR/REC-xml/#NT-NameChar
-            // Valid characters for NameChar
-            // ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | 
-            // [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | 
-            // [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] 
-            // | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
-            // "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
-            // Excluding ":" 
-            if ( (c >='A' && c <='Z') || c == '_' || (c >='a' && c <='z') || 
-                 (c >=0xC0 && c <=0xD6) || (c >=0xD8 && c <=0xF6) || 
-                 (c >=0xF8 && c <=0x2FF) || (c >=0x370 && c <=0x37D) || 
-                 (c >=0x37F && c <=0x1FFF) || (c >=0x200C && c <=0x200D) ||
-                 (c >=0x2070 && c <=0x218F) || (c >=0x2C00 && c <=0x2FEF) || 
-                 (c >=0x3001 && c <=0xD7FF) || (c >=0xF900 && c <=0xFDCF) ||
-                 (c >=0xFDF0 && c <=0xFFFD) || (c >=0x10000 && c <=0xEFFFF) ||
-                 c == '-' || (c >='0' && c <='9') || c == 0xB7 || (c >=0x300 && c <=0x36F) || 
-                 (c >=0x203F && c <=0x2040) || (allowSlash && c == '/')
-                 )
-            {
-                continue;
-            }
-            else if (c == '.')
-            {
-                if (i+2 < expression.length())
-                {
-                    char c1 = expression.charAt(i+1);
-                    char c2 = expression.charAt(i+2);
-                    if (c == c1 && (c2 == '/' || c2 == '\\' ) )
-                    {
-                        return false;
-                    }
-                }
-                continue;
-            }
-            else
-            {
-                return false;
-            }
-        }
-        if (expression.length() >= 3)
-        {
-            int length = expression.length();
-            if ( (expression.charAt(length-3) == '/' || expression.charAt(length-3) == '\\' ) && 
-                  expression.charAt(length-2) == '.' &&
-                  expression.charAt(length-1) == '.' )
-            {
-                return false;
-            }
-        }
-        return true;
-    }
-    
-    private static boolean validateResourceName(String expression, boolean allowSlash)
-    {
-        if (expression.length() == 2 && 
-            expression.charAt(0) == '.' &&
-            expression.charAt(1) == '.')
-        {
-            return false;
-        }
-        for (int i = 0; i < expression.length(); i++)
-        {
-            char c = expression.charAt(i);
-
-            // Enforce NameChar convention as specified
-            // http://www.w3.org/TR/REC-xml/#NT-NameChar
-            // Valid characters for NameChar
-            // ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | 
-            // [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | 
-            // [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] 
-            // | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
-            // "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
-            // Excluding ":" 
-            
-            // Forbidden chars by win
-            // < (less than)
-            // > (greater than)
-            // : (colon)
-            // " (double quote)
-            // / (forward slash)
-            // \ (backslash)
-            // | (vertical bar or pipe)
-            // ? (question mark)
-            // * (asterisk)
-            // Do not use chars in UNIX because they have special meaning
-            // *&%$|^/\~
-            if ( (c >='A' && c <='Z') || c == '_' || (c >='a' && c <='z') || 
-                 (c >=0xC0 && c <=0xD6) || (c >=0xD8 && c <=0xF6) || 
-                 (c >=0xF8 && c <=0x2FF) || (c >=0x370 && c <=0x37D) || 
-                 (c >=0x37F && c <=0x1FFF) || (c >=0x200C && c <=0x200D) ||
-                 (c >=0x2070 && c <=0x218F) || (c >=0x2C00 && c <=0x2FEF) || 
-                 (c >=0x3001 && c <=0xD7FF) || (c >=0xF900 && c <=0xFDCF) ||
-                 (c >=0xFDF0 && c <=0xFFFD) || (c >=0x10000 && c <=0xEFFFF) ||
-                 (c == '-') || (c >='0' && c <='9') || c == 0xB7 || (c >=0x300 && c <=0x36F) || 
-                 (c >=0x203F && c <=0x2040) || (allowSlash && c == '/') ||
-                 (c == '!') || (c == '#') || (c == '\'') || (c == '(') || (c == ')') ||
-                 (c == '+') || (c == ',') || (c == ';' ) || (c == '=') || 
-                 (c == '@') || (c == '[') || (c == ']' ) || (c == '{') || (c == '}'))
-            {
-                continue;
-            }
-            else if (c == '.')
-            {
-                if (i+2 < expression.length())
-                {
-                    char c1 = expression.charAt(i+1);
-                    char c2 = expression.charAt(i+2);
-                    if (c == c1 && (c2 == '/' || c2 == '\\' ) )
-                    {
-                        return false;
-                    }
-                }
-                continue;
-            }
-            else
-            {
-                return false;
-            }
-        }
-        if (expression.length() >= 3)
-        {
-            int length = expression.length();
-            if ( (expression.charAt(length-3) == '/' || expression.charAt(length-3) == '\\' ) && 
-                  expression.charAt(length-2) == '.' &&
-                  expression.charAt(length-1) == '.' )
-            {
-                return false;
-            }
-        }
-        return true;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.myfaces.shared.resource;
+
+public class ResourceValidationUtils
+{
+    public static boolean isValidResourceName(String resourceName)
+    {
+        return validateResourceName(resourceName, true);
+    }
+    
+    public static boolean isValidLibraryName(String libraryName)
+    {
+        return validate(libraryName, false);
+    }
+    
+    public static boolean isValidLibraryName(String libraryName, boolean allowSlash)
+    {
+        return validate(libraryName, allowSlash);
+    }
+    
+    public static boolean isValidResourceId(String resourceId)
+    {
+        // Follow the same rules as for resourceName, but check resourceId does not
+        // start with '/'
+        return validateResourceName(resourceId, true) && 
+            resourceId.length() > 0 && resourceId.charAt(0) != '/';
+    }
+    
+    public static boolean isValidViewResource(String resourceId)
+    {
+        // Follow the same rules as for resourceName, but check resourceId does not
+        // start with '/'
+        return validateResourceName(resourceId, true);
+    }
+    
+    public static boolean isValidContractName(String contractName)
+    {
+        return validate(contractName, false);
+    }    
+    
+    public static boolean isValidLocalePrefix(String localePrefix)
+    {
+        for (int i = 0; i < localePrefix.length(); i++)
+        {
+            char c = localePrefix.charAt(i);
+            if ( (c >='A' && c <='Z') || c == '_' || (c >='a' && c <='z') || (c >='0' && c <='9') )
+            {
+                continue;
+            }
+            else
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+    
+    private static boolean validate(String expression, boolean allowSlash)
+    {
+        if (expression.length() == 2 && 
+            expression.charAt(0) == '.' &&
+            expression.charAt(1) == '.')
+        {
+            return false;
+        }
+        for (int i = 0; i < expression.length(); i++)
+        {
+            char c = expression.charAt(i);
+
+            // Enforce NameChar convention as specified
+            // http://www.w3.org/TR/REC-xml/#NT-NameChar
+            // Valid characters for NameChar
+            // ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | 
+            // [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | 
+            // [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] 
+            // | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
+            // "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
+            // Excluding ":" 
+            if ( (c >='A' && c <='Z') || c == '_' || (c >='a' && c <='z') || 
+                 (c >=0xC0 && c <=0xD6) || (c >=0xD8 && c <=0xF6) || 
+                 (c >=0xF8 && c <=0x2FF) || (c >=0x370 && c <=0x37D) || 
+                 (c >=0x37F && c <=0x1FFF) || (c >=0x200C && c <=0x200D) ||
+                 (c >=0x2070 && c <=0x218F) || (c >=0x2C00 && c <=0x2FEF) || 
+                 (c >=0x3001 && c <=0xD7FF) || (c >=0xF900 && c <=0xFDCF) ||
+                 (c >=0xFDF0 && c <=0xFFFD) || (c >=0x10000 && c <=0xEFFFF) ||
+                 c == '-' || (c >='0' && c <='9') || c == 0xB7 || (c >=0x300 && c <=0x36F) || 
+                 (c >=0x203F && c <=0x2040) || (allowSlash && c == '/')
+                 )
+            {
+                continue;
+            }
+            else if (c == '.')
+            {
+                if (i+2 < expression.length())
+                {
+                    char c1 = expression.charAt(i+1);
+                    char c2 = expression.charAt(i+2);
+                    if (c == c1 && (c2 == '/' || c2 == '\\' ) )
+                    {
+                        return false;
+                    }
+                }
+                continue;
+            }
+            else
+            {
+                return false;
+            }
+        }
+        if (expression.length() >= 3)
+        {
+            int length = expression.length();
+            if ( (expression.charAt(length-3) == '/' || expression.charAt(length-3) == '\\' ) && 
+                  expression.charAt(length-2) == '.' &&
+                  expression.charAt(length-1) == '.' )
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+    
+    private static boolean validateResourceName(String expression, boolean allowSlash)
+    {
+        if (expression.length() == 2 && 
+            expression.charAt(0) == '.' &&
+            expression.charAt(1) == '.')
+        {
+            return false;
+        }
+        for (int i = 0; i < expression.length(); i++)
+        {
+            char c = expression.charAt(i);
+
+            // Enforce NameChar convention as specified
+            // http://www.w3.org/TR/REC-xml/#NT-NameChar
+            // Valid characters for NameChar
+            // ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | 
+            // [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | 
+            // [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] 
+            // | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
+            // "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
+            // Excluding ":" 
+            
+            // Forbidden chars by win
+            // < (less than)
+            // > (greater than)
+            // : (colon)
+            // " (double quote)
+            // / (forward slash)
+            // \ (backslash)
+            // | (vertical bar or pipe)
+            // ? (question mark)
+            // * (asterisk)
+            // Do not use chars in UNIX because they have special meaning
+            // *&%$|^/\~
+            if ( (c >='A' && c <='Z') || c == '_' || (c >='a' && c <='z') || 
+                 (c >=0xC0 && c <=0xD6) || (c >=0xD8 && c <=0xF6) || 
+                 (c >=0xF8 && c <=0x2FF) || (c >=0x370 && c <=0x37D) || 
+                 (c >=0x37F && c <=0x1FFF) || (c >=0x200C && c <=0x200D) ||
+                 (c >=0x2070 && c <=0x218F) || (c >=0x2C00 && c <=0x2FEF) || 
+                 (c >=0x3001 && c <=0xD7FF) || (c >=0xF900 && c <=0xFDCF) ||
+                 (c >=0xFDF0 && c <=0xFFFD) || (c >=0x10000 && c <=0xEFFFF) ||
+                 (c == '-') || (c >='0' && c <='9') || c == 0xB7 || (c >=0x300 && c <=0x36F) || 
+                 (c >=0x203F && c <=0x2040) || (allowSlash && c == '/') ||
+                 (c == '!') || (c == '#') || (c == '\'') || (c == '(') || (c == ')') ||
+                 (c == '+') || (c == ',') || (c == ';' ) || (c == '=') || 
+                 (c == '@') || (c == '[') || (c == ']' ) || (c == '{') || (c == '}'))
+            {
+                continue;
+            }
+            else if (c == '.')
+            {
+                if (i+2 < expression.length())
+                {
+                    char c1 = expression.charAt(i+1);
+                    char c2 = expression.charAt(i+2);
+                    if (c == c1 && (c2 == '/' || c2 == '\\' ) )
+                    {
+                        return false;
+                    }
+                }
+                continue;
+            }
+            else
+            {
+                return false;
+            }
+        }
+        if (expression.length() >= 3)
+        {
+            int length = expression.length();
+            if ( (expression.charAt(length-3) == '/' || expression.charAt(length-3) == '\\' ) && 
+                  expression.charAt(length-2) == '.' &&
+                  expression.charAt(length-1) == '.' )
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+}

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ValueExpressionFilterInputStream.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ValueExpressionFilterInputStream.java?rev=1535874&r1=1535873&r2=1535874&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ValueExpressionFilterInputStream.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/resource/ValueExpressionFilterInputStream.java Fri Oct 25 21:24:09 2013
@@ -1,168 +1,204 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.myfaces.shared.resource;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PushbackInputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.ExceptionQueuedEventContext;
-
-import org.apache.myfaces.shared.util.io.DynamicPushbackInputStream;
-
-public class ValueExpressionFilterInputStream extends InputStream
-{
-    private PushbackInputStream delegate;
-    private String libraryName;
-    private String resourceName;
-    
-    public ValueExpressionFilterInputStream(InputStream in, String libraryName, String resourceName)
-    {
-        super();
-        delegate = new DynamicPushbackInputStream(in,300);
-    }
-
-    @Override
-    public int read() throws IOException
-    {
-        int c1 = delegate.read();
-        
-        if (c1 == -1)
-        {
-            return -1;
-        }
-        
-        if ( ((char)c1) == '#')
-        {
-            int c2 = delegate.read();
-            if (c2 == -1)
-            {
-                return -1;
-            }
-            if (((char)c2) == '{')
-            {
-                //It is a value expression. We need
-                //to look for a occurrence of } to 
-                //extract the expression and evaluate it,
-                //the result should be unread.
-                List<Integer> expressionList = new ArrayList<Integer>();
-                int c3 = delegate.read();
-                while ( c3 != -1 && ((char)c3) != '}' )
-                {
-                    expressionList.add(c3);
-                    c3 = delegate.read();
-                }
-                
-                if (c3 == -1)
-                {
-                    //get back the data, because we can't
-                    //extract any value expression
-                    for (int i = 0; i < expressionList.size(); i++)
-                    {
-                        delegate.unread(expressionList.get(i));
-                    }
-                    delegate.unread(c2);
-                    return c1;
-                }
-                else
-                {
-                    //EL expression found. Evaluate it and pushback
-                    //the result into the stream
-                    FacesContext context = FacesContext.getCurrentInstance();
-                    ELContext elContext = context.getELContext();
-                    try
-                    {
-                        ValueExpression ve = context.getApplication().
-                            getExpressionFactory().createValueExpression(
-                                    elContext,
-                                    "#{"+convertToExpression(expressionList)+"}",
-                                    String.class);
-                        String value = (String) ve.getValue(elContext);
-                        
-                        for (int i = value.length()-1; i >= 0 ; i--)
-                        {
-                            delegate.unread((int) value.charAt(i));
-                        }
-                    }
-                    catch(ELException e)
-                    {
-                        ExceptionQueuedEventContext equecontext = new ExceptionQueuedEventContext (
-                                context, e, null);
-                        context.getApplication().publishEvent (context, ExceptionQueuedEvent.class, equecontext);
-                        
-                        Logger log = Logger.getLogger(ResourceImpl.class.getName());
-                        if (log.isLoggable(Level.SEVERE))
-                        {
-                            log.severe("Cannot evaluate EL expression " + convertToExpression(expressionList)
-                                    + " in resource " + (libraryName == null?"":libraryName) + ":" + 
-                                    (resourceName == null?"":resourceName));
-                        }
-                        
-                        delegate.unread(c3);
-                        for (int i = expressionList.size()-1; i >= 0; i--)
-                        {
-                            delegate.unread(expressionList.get(i));
-                        }
-                        delegate.unread(c2);
-                        return c1;
-                    }
-                    
-                    //read again
-                    return delegate.read();
-                }
-            }
-            else
-            {
-                delegate.unread(c2);
-                return c1;
-            }
-        }
-        else
-        {
-            //just continue
-            return c1;
-        }
-    }
-    
-    private String convertToExpression(List<Integer> expressionList)
-    {
-        char[] exprArray = new char[expressionList.size()];
-        
-        for (int i = 0; i < expressionList.size(); i++)
-        {
-            exprArray[i] = (char) expressionList.get(i).intValue();
-        }
-        return String.valueOf(exprArray);
-    }
-
-    @Override
-    public void close() throws IOException
-    {
-        delegate.close();
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.myfaces.shared.resource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PushbackInputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.application.Resource;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.ExceptionQueuedEventContext;
+
+import org.apache.myfaces.shared.util.io.DynamicPushbackInputStream;
+
+public class ValueExpressionFilterInputStream extends InputStream
+{
+    private PushbackInputStream delegate;
+    private String libraryName;
+    private String resourceName;
+    private String contractName;
+    private Resource resource;
+    
+    public ValueExpressionFilterInputStream(InputStream in, String libraryName, String resourceName)
+    {
+        super();
+        delegate = new DynamicPushbackInputStream(in,300);
+        this.libraryName = libraryName;
+        this.resourceName = resourceName;
+        this.contractName = null;
+    }
+    
+    public ValueExpressionFilterInputStream(InputStream in, Resource resource)
+    {
+        super();
+        delegate = new DynamicPushbackInputStream(in,300);
+        this.resource = resource;
+        this.libraryName = resource.getLibraryName();
+        this.resourceName = resource.getResourceName();
+        this.contractName = (resource instanceof ContractResource) ? 
+                ((ContractResource)resource).getContractName() : null;
+    }
+
+    @Override
+    public int read() throws IOException
+    {
+        int c1 = delegate.read();
+        
+        if (c1 == -1)
+        {
+            return -1;
+        }
+        
+        if ( ((char)c1) == '#')
+        {
+            int c2 = delegate.read();
+            if (c2 == -1)
+            {
+                return -1;
+            }
+            if (((char)c2) == '{')
+            {
+                //It is a value expression. We need
+                //to look for a occurrence of } to 
+                //extract the expression and evaluate it,
+                //the result should be unread.
+                List<Integer> expressionList = new ArrayList<Integer>();
+                int c3 = delegate.read();
+                while ( c3 != -1 && ((char)c3) != '}' )
+                {
+                    expressionList.add(c3);
+                    c3 = delegate.read();
+                }
+                
+                if (c3 == -1)
+                {
+                    //get back the data, because we can't
+                    //extract any value expression
+                    for (int i = 0; i < expressionList.size(); i++)
+                    {
+                        delegate.unread(expressionList.get(i));
+                    }
+                    delegate.unread(c2);
+                    return c1;
+                }
+                else
+                {
+                    //EL expression found. Evaluate it and pushback
+                    //the result into the stream
+                    FacesContext context = FacesContext.getCurrentInstance();
+                    ELContext elContext = context.getELContext();
+                    try
+                    {
+                        if (libraryName != null)
+                        {
+                            ResourceELUtils.saveResourceLibraryForResolver(context, libraryName);
+                        }
+                        if (contractName != null)
+                        {
+                            ResourceELUtils.saveResourceContractForResolver(context, contractName);
+                        }
+                        ValueExpression ve = context.getApplication().
+                            getExpressionFactory().createValueExpression(
+                                    elContext,
+                                    "#{"+convertToExpression(expressionList)+"}",
+                                    String.class);
+                        String value = (String) ve.getValue(elContext);
+                        
+                        for (int i = value.length()-1; i >= 0 ; i--)
+                        {
+                            delegate.unread((int) value.charAt(i));
+                        }
+                    }
+                    catch(ELException e)
+                    {
+                        ExceptionQueuedEventContext equecontext = new ExceptionQueuedEventContext (
+                                context, e, null);
+                        context.getApplication().publishEvent (context, ExceptionQueuedEvent.class, equecontext);
+                        
+                        Logger log = Logger.getLogger(ResourceImpl.class.getName());
+                        if (log.isLoggable(Level.SEVERE))
+                        {
+                            log.severe("Cannot evaluate EL expression " + convertToExpression(expressionList)
+                                    + " in resource " + (libraryName == null?"":libraryName) + ":" + 
+                                    (resourceName == null?"":resourceName));
+                        }
+                        
+                        delegate.unread(c3);
+                        for (int i = expressionList.size()-1; i >= 0; i--)
+                        {
+                            delegate.unread(expressionList.get(i));
+                        }
+                        delegate.unread(c2);
+                        return c1;
+                    }
+                    finally
+                    {
+                        if (libraryName != null)
+                        {
+                            ResourceELUtils.removeResourceLibraryForResolver(context);
+                        }
+                        if (contractName != null)
+                        {
+                            ResourceELUtils.removeResourceContractForResolver(context);
+                        }
+                    }
+                    
+                    //read again
+                    return delegate.read();
+                }
+            }
+            else
+            {
+                delegate.unread(c2);
+                return c1;
+            }
+        }
+        else
+        {
+            //just continue
+            return c1;
+        }
+    }
+    
+    private String convertToExpression(List<Integer> expressionList)
+    {
+        char[] exprArray = new char[expressionList.size()];
+        
+        for (int i = 0; i < expressionList.size(); i++)
+        {
+            exprArray[i] = (char) expressionList.get(i).intValue();
+        }
+        return String.valueOf(exprArray);
+    }
+
+    @Override
+    public void close() throws IOException
+    {
+        delegate.close();
+    }
+}

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagBase.java?rev=1535874&r1=1535873&r2=1535874&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagBase.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagBase.java Fri Oct 25 21:24:09 2013
@@ -1,304 +1,304 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.myfaces.shared.taglib;
-
-import org.apache.myfaces.shared.renderkit.JSFAttr;
-
-import javax.el.MethodExpression;
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.webapp.UIComponentELTag;
-
-/**
- * @author Manfred Geiler (latest modification by $Author$)
- * @author Bruno Aranda (JSR-252)
- * @version $Revision$ $Date$
- */
-public abstract class UIComponentELTagBase extends UIComponentELTag
-{
-    //private static final Log log = LogFactory.getLog(UIComponentTagBase.class);
-
-    //UIComponent attributes
-    private ValueExpression _forceId;
-
-    private ValueExpression _forceIdIndex;
-    private static final Boolean DEFAULT_FORCE_ID_INDEX_VALUE = Boolean.TRUE;
-
-    private ValueExpression _javascriptLocation;
-    private ValueExpression _imageLocation;
-    private ValueExpression _styleLocation;
-
-    //Special UIComponent attributes (ValueHolder, ConvertibleValueHolder)
-    private ValueExpression _value;
-    private ValueExpression _converter;
-
-    //attributes id, rendered and binding are handled by UIComponentTag
-
-    public void release()
-    {
-        super.release();
-
-        _forceId = null;
-        _forceIdIndex = null;
-
-        _value = null;
-        _converter = null;
-
-        _javascriptLocation = null;
-        _imageLocation = null;
-        _styleLocation = null;
-    }
-
-    protected void setProperties(UIComponent component)
-    {
-        super.setProperties(component);
-
-        setBooleanProperty(component,
-                org.apache.myfaces.shared.renderkit.JSFAttr.FORCE_ID_ATTR,
-                _forceId);
-        setBooleanProperty(
-                component,
-                org.apache.myfaces.shared.renderkit.JSFAttr.FORCE_ID_INDEX_ATTR,
-                _forceIdIndex, DEFAULT_FORCE_ID_INDEX_VALUE);
-        if (_javascriptLocation != null)
-        {
-            setStringProperty(component, JSFAttr.JAVASCRIPT_LOCATION,
-                    _javascriptLocation);
-        }
-        if (_imageLocation != null)
-        {
-            setStringProperty(component, JSFAttr.IMAGE_LOCATION, _imageLocation);
-        }
-        if (_styleLocation != null)
-        {
-            setStringProperty(component, JSFAttr.STYLE_LOCATION, _styleLocation);
-        }
-
-        //rendererType already handled by UIComponentTag
-
-        setValueProperty(component, _value);
-        setConverterProperty(component, _converter);
-    }
-
-    /**
-     * Sets the forceId attribute of the tag.  NOTE: Not every tag that extends this class will
-     * actually make use of this attribute.  Check the TLD to see which components actually
-     * implement it.
-     *
-     * @param aForceId The value of the forceId attribute.
-     */
-    public void setForceId(ValueExpression aForceId)
-    {
-        _forceId = aForceId;
-    }
-
-    /**
-     * Sets the forceIdIndex attribute of the tag.  NOTE: Not every tag that extends this class will
-     * actually make use of this attribute.  Check the TLD to see which components actually implement it.
-     *
-     * @param aForceIdIndex The value of the forceIdIndex attribute.
-     */
-    public void setForceIdIndex(ValueExpression aForceIdIndex)
-    {
-        _forceIdIndex = aForceIdIndex;
-    }
-
-    public void setValue(ValueExpression value)
-    {
-        _value = value;
-    }
-
-    public void setConverter(ValueExpression converter)
-    {
-        _converter = converter;
-    }
-
-    /**
-     * Sets the javascript location attribute of the tag.  NOTE: Not every tag that extends this class will
-     * actually make use of this attribute.  Check the TLD to see which components actually implement it.
-     *
-     * @param aJavascriptLocation The alternate javascript location to use.
-     */
-    public void setJavascriptLocation(ValueExpression aJavascriptLocation)
-    {
-        _javascriptLocation = aJavascriptLocation;
-    }
-
-    /**
-     * Sets the image location attribute of the tag.  NOTE: Not every tag that extends this class will
-     * actually make use of this attribute.  Check the TLD to see which components actually implement it.
-     *
-     * @param aImageLocation The alternate image location to use.
-     */
-    public void setImageLocation(ValueExpression aImageLocation)
-    {
-        _imageLocation = aImageLocation;
-    }
-
-    /**
-     * Sets the style location attribute of the tag.  NOTE: Not every tag that extends this class will
-     * actually make use of this attribute.  Check the TLD to see which components actually implement it.
-     *
-     * @param aStyleLocation The alternate style location to use.
-     */
-    public void setStyleLocation(ValueExpression aStyleLocation)
-    {
-        _styleLocation = aStyleLocation;
-    }
-
-    // sub class helpers
-
-    protected void setIntegerProperty(UIComponent component, String propName,
-            ValueExpression value)
-    {
-        UIComponentELTagUtils.setIntegerProperty(component, propName, value);
-    }
-
-    protected void setIntegerProperty(UIComponent component, String propName,
-            ValueExpression value, Integer defaultValue)
-    {
-        UIComponentELTagUtils.setIntegerProperty(component, propName, value,
-                defaultValue);
-    }
-
-    protected void setLongProperty(UIComponent component, String propName,
-            ValueExpression value)
-    {
-        UIComponentELTagUtils.setLongProperty(component, propName, value);
-    }
-
-    protected void setLongProperty(UIComponent component, String propName,
-            ValueExpression value, Long defaultValue)
-    {
-        UIComponentELTagUtils.setLongProperty(component, propName, value,
-                defaultValue);
-    }
-
-    @Deprecated
-    protected void setStringProperty(UIComponent component, String propName,
-            String value)
-    {
-        UIComponentTagUtils.setStringProperty(getFacesContext(), component,
-                propName, value);
-    }
-
-    protected void setStringProperty(UIComponent component, String propName,
-            ValueExpression value)
-    {
-        UIComponentELTagUtils.setStringProperty(component, propName, value);
-    }
-
-    protected void setStringProperty(UIComponent component, String propName,
-            ValueExpression value, String defaultValue)
-    {
-        UIComponentELTagUtils.setStringProperty(component, propName, value,
-                defaultValue);
-    }
-
-    @Deprecated
-    protected void setBooleanProperty(UIComponent component, String propName,
-            String value)
-    {
-        UIComponentTagUtils.setBooleanProperty(getFacesContext(), component,
-                propName, value);
-    }
-
-    protected void setBooleanProperty(UIComponent component, String propName,
-            ValueExpression value)
-    {
-        UIComponentELTagUtils.setBooleanProperty(component, propName, value);
-    }
-
-    protected void setBooleanProperty(UIComponent component, String propName,
-            ValueExpression value, Boolean defaultValue)
-    {
-        UIComponentELTagUtils.setBooleanProperty(component, propName, value,
-                defaultValue);
-    }
-
-    private void setValueProperty(UIComponent component, ValueExpression value)
-    {
-        UIComponentELTagUtils.setValueProperty(getFacesContext(), component,
-                value);
-    }
-
-    private void setConverterProperty(UIComponent component,
-            ValueExpression value)
-    {
-        UIComponentELTagUtils.setConverterProperty(getFacesContext(),
-                component, value);
-    }
-
-    protected void addValidatorProperty(UIComponent component,
-            MethodExpression value)
-    {
-        UIComponentELTagUtils.addValidatorProperty(getFacesContext(),
-                component, value);
-    }
-
-    @Deprecated
-    protected void setActionProperty(UIComponent component, String action)
-    {
-        UIComponentTagUtils.setActionProperty(getFacesContext(), component,
-                action);
-    }
-
-    protected void setActionProperty(UIComponent component,
-            MethodExpression action)
-    {
-        UIComponentELTagUtils.setActionProperty(getFacesContext(), component,
-                action);
-    }
-
-    @Deprecated
-    protected void setActionListenerProperty(UIComponent component,
-            String actionListener)
-    {
-        UIComponentTagUtils.setActionListenerProperty(getFacesContext(),
-                component, actionListener);
-    }
-
-    protected void setActionListenerProperty(UIComponent component,
-            MethodExpression actionListener)
-    {
-        UIComponentELTagUtils.addActionListenerProperty(getFacesContext(),
-                component, actionListener);
-    }
-
-    protected void addValueChangedListenerProperty(UIComponent component,
-            MethodExpression valueChangedListener)
-    {
-        UIComponentELTagUtils.addValueChangedListenerProperty(
-                getFacesContext(), component, valueChangedListener);
-    }
-
-    protected void setValueBinding(UIComponent component, String propName,
-            ValueExpression value)
-    {
-        UIComponentELTagUtils.setValueBinding(getFacesContext(), component,
-                propName, value);
-    }
-
-    protected Object evaluateValueExpression(ValueExpression expression)
-    {
-        return UIComponentELTagUtils.evaluateValueExpression(getFacesContext()
-                .getELContext(), expression);
-    }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.myfaces.shared.taglib;
+
+import org.apache.myfaces.shared.renderkit.JSFAttr;
+
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.webapp.UIComponentELTag;
+
+/**
+ * @author Manfred Geiler (latest modification by $Author$)
+ * @author Bruno Aranda (JSR-252)
+ * @version $Revision$ $Date$
+ */
+public abstract class UIComponentELTagBase extends UIComponentELTag
+{
+    //private static final Log log = LogFactory.getLog(UIComponentTagBase.class);
+
+    //UIComponent attributes
+    private ValueExpression _forceId;
+
+    private ValueExpression _forceIdIndex;
+    private static final Boolean DEFAULT_FORCE_ID_INDEX_VALUE = Boolean.TRUE;
+
+    private ValueExpression _javascriptLocation;
+    private ValueExpression _imageLocation;
+    private ValueExpression _styleLocation;
+
+    //Special UIComponent attributes (ValueHolder, ConvertibleValueHolder)
+    private ValueExpression _value;
+    private ValueExpression _converter;
+
+    //attributes id, rendered and binding are handled by UIComponentTag
+
+    public void release()
+    {
+        super.release();
+
+        _forceId = null;
+        _forceIdIndex = null;
+
+        _value = null;
+        _converter = null;
+
+        _javascriptLocation = null;
+        _imageLocation = null;
+        _styleLocation = null;
+    }
+
+    protected void setProperties(UIComponent component)
+    {
+        super.setProperties(component);
+
+        setBooleanProperty(component,
+                org.apache.myfaces.shared.renderkit.JSFAttr.FORCE_ID_ATTR,
+                _forceId);
+        setBooleanProperty(
+                component,
+                org.apache.myfaces.shared.renderkit.JSFAttr.FORCE_ID_INDEX_ATTR,
+                _forceIdIndex, DEFAULT_FORCE_ID_INDEX_VALUE);
+        if (_javascriptLocation != null)
+        {
+            setStringProperty(component, JSFAttr.JAVASCRIPT_LOCATION,
+                    _javascriptLocation);
+        }
+        if (_imageLocation != null)
+        {
+            setStringProperty(component, JSFAttr.IMAGE_LOCATION, _imageLocation);
+        }
+        if (_styleLocation != null)
+        {
+            setStringProperty(component, JSFAttr.STYLE_LOCATION, _styleLocation);
+        }
+
+        //rendererType already handled by UIComponentTag
+
+        setValueProperty(component, _value);
+        setConverterProperty(component, _converter);
+    }
+
+    /**
+     * Sets the forceId attribute of the tag.  NOTE: Not every tag that extends this class will
+     * actually make use of this attribute.  Check the TLD to see which components actually
+     * implement it.
+     *
+     * @param aForceId The value of the forceId attribute.
+     */
+    public void setForceId(ValueExpression aForceId)
+    {
+        _forceId = aForceId;
+    }
+
+    /**
+     * Sets the forceIdIndex attribute of the tag.  NOTE: Not every tag that extends this class will
+     * actually make use of this attribute.  Check the TLD to see which components actually implement it.
+     *
+     * @param aForceIdIndex The value of the forceIdIndex attribute.
+     */
+    public void setForceIdIndex(ValueExpression aForceIdIndex)
+    {
+        _forceIdIndex = aForceIdIndex;
+    }
+
+    public void setValue(ValueExpression value)
+    {
+        _value = value;
+    }
+
+    public void setConverter(ValueExpression converter)
+    {
+        _converter = converter;
+    }
+
+    /**
+     * Sets the javascript location attribute of the tag.  NOTE: Not every tag that extends this class will
+     * actually make use of this attribute.  Check the TLD to see which components actually implement it.
+     *
+     * @param aJavascriptLocation The alternate javascript location to use.
+     */
+    public void setJavascriptLocation(ValueExpression aJavascriptLocation)
+    {
+        _javascriptLocation = aJavascriptLocation;
+    }
+
+    /**
+     * Sets the image location attribute of the tag.  NOTE: Not every tag that extends this class will
+     * actually make use of this attribute.  Check the TLD to see which components actually implement it.
+     *
+     * @param aImageLocation The alternate image location to use.
+     */
+    public void setImageLocation(ValueExpression aImageLocation)
+    {
+        _imageLocation = aImageLocation;
+    }
+
+    /**
+     * Sets the style location attribute of the tag.  NOTE: Not every tag that extends this class will
+     * actually make use of this attribute.  Check the TLD to see which components actually implement it.
+     *
+     * @param aStyleLocation The alternate style location to use.
+     */
+    public void setStyleLocation(ValueExpression aStyleLocation)
+    {
+        _styleLocation = aStyleLocation;
+    }
+
+    // sub class helpers
+
+    protected void setIntegerProperty(UIComponent component, String propName,
+            ValueExpression value)
+    {
+        UIComponentELTagUtils.setIntegerProperty(component, propName, value);
+    }
+
+    protected void setIntegerProperty(UIComponent component, String propName,
+            ValueExpression value, Integer defaultValue)
+    {
+        UIComponentELTagUtils.setIntegerProperty(component, propName, value,
+                defaultValue);
+    }
+
+    protected void setLongProperty(UIComponent component, String propName,
+            ValueExpression value)
+    {
+        UIComponentELTagUtils.setLongProperty(component, propName, value);
+    }
+
+    protected void setLongProperty(UIComponent component, String propName,
+            ValueExpression value, Long defaultValue)
+    {
+        UIComponentELTagUtils.setLongProperty(component, propName, value,
+                defaultValue);
+    }
+
+    @Deprecated
+    protected void setStringProperty(UIComponent component, String propName,
+            String value)
+    {
+        UIComponentTagUtils.setStringProperty(getFacesContext(), component,
+                propName, value);
+    }
+
+    protected void setStringProperty(UIComponent component, String propName,
+            ValueExpression value)
+    {
+        UIComponentELTagUtils.setStringProperty(component, propName, value);
+    }
+
+    protected void setStringProperty(UIComponent component, String propName,
+            ValueExpression value, String defaultValue)
+    {
+        UIComponentELTagUtils.setStringProperty(component, propName, value,
+                defaultValue);
+    }
+
+    @Deprecated
+    protected void setBooleanProperty(UIComponent component, String propName,
+            String value)
+    {
+        UIComponentTagUtils.setBooleanProperty(getFacesContext(), component,
+                propName, value);
+    }
+
+    protected void setBooleanProperty(UIComponent component, String propName,
+            ValueExpression value)
+    {
+        UIComponentELTagUtils.setBooleanProperty(component, propName, value);
+    }
+
+    protected void setBooleanProperty(UIComponent component, String propName,
+            ValueExpression value, Boolean defaultValue)
+    {
+        UIComponentELTagUtils.setBooleanProperty(component, propName, value,
+                defaultValue);
+    }
+
+    private void setValueProperty(UIComponent component, ValueExpression value)
+    {
+        UIComponentELTagUtils.setValueProperty(getFacesContext(), component,
+                value);
+    }
+
+    private void setConverterProperty(UIComponent component,
+            ValueExpression value)
+    {
+        UIComponentELTagUtils.setConverterProperty(getFacesContext(),
+                component, value);
+    }
+
+    protected void addValidatorProperty(UIComponent component,
+            MethodExpression value)
+    {
+        UIComponentELTagUtils.addValidatorProperty(getFacesContext(),
+                component, value);
+    }
+
+    @Deprecated
+    protected void setActionProperty(UIComponent component, String action)
+    {
+        UIComponentTagUtils.setActionProperty(getFacesContext(), component,
+                action);
+    }
+
+    protected void setActionProperty(UIComponent component,
+            MethodExpression action)
+    {
+        UIComponentELTagUtils.setActionProperty(getFacesContext(), component,
+                action);
+    }
+
+    @Deprecated
+    protected void setActionListenerProperty(UIComponent component,
+            String actionListener)
+    {
+        UIComponentTagUtils.setActionListenerProperty(getFacesContext(),
+                component, actionListener);
+    }
+
+    protected void setActionListenerProperty(UIComponent component,
+            MethodExpression actionListener)
+    {
+        UIComponentELTagUtils.addActionListenerProperty(getFacesContext(),
+                component, actionListener);
+    }
+
+    protected void addValueChangedListenerProperty(UIComponent component,
+            MethodExpression valueChangedListener)
+    {
+        UIComponentELTagUtils.addValueChangedListenerProperty(
+                getFacesContext(), component, valueChangedListener);
+    }
+
+    protected void setValueBinding(UIComponent component, String propName,
+            ValueExpression value)
+    {
+        UIComponentELTagUtils.setValueBinding(getFacesContext(), component,
+                propName, value);
+    }
+
+    protected Object evaluateValueExpression(ValueExpression expression)
+    {
+        return UIComponentELTagUtils.evaluateValueExpression(getFacesContext()
+                .getELContext(), expression);
+    }
+
+}

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java?rev=1535874&r1=1535873&r2=1535874&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java Fri Oct 25 21:24:09 2013
@@ -1,417 +1,417 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.myfaces.shared.taglib;
-
-import java.util.logging.Logger;
-
-import javax.el.ELContext;
-import javax.el.MethodExpression;
-import javax.el.ValueExpression;
-import javax.faces.component.ActionSource2;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UICommand;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIGraphic;
-import javax.faces.component.UIParameter;
-import javax.faces.component.UISelectBoolean;
-import javax.faces.component.ValueHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.event.MethodExpressionActionListener;
-import javax.faces.event.MethodExpressionValueChangeListener;
-import javax.faces.validator.MethodExpressionValidator;
-
-/**
- * @author Manfred Geiler (latest modification by $Author$)
- * @author Bruno Aranda (JSR-252)
- * @version $Revision$ $Date$
- *
- * @since 1.2
- */
-public class UIComponentELTagUtils
-{
-    //private static final Log log = LogFactory.getLog(UIComponentELTagUtils.class);
-    private static final Logger log = Logger
-            .getLogger(UIComponentELTagUtils.class.getName());
-
-    private UIComponentELTagUtils()
-    {
-    } //util class, no instantiation allowed
-
-    /**
-     * @since 1.2
-     */
-    public static void setIntegerProperty(UIComponent component,
-            String propName, ValueExpression value)
-    {
-        setIntegerProperty(component, propName, value, null);
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setIntegerProperty(UIComponent component,
-            String propName, ValueExpression value, Integer defaultValue)
-    {
-        if (value != null)
-        {
-            if (value.isLiteralText())
-            {
-                component.getAttributes().put(propName,
-                        Integer.valueOf(value.getExpressionString()));
-            }
-            else
-            {
-                component.setValueExpression(propName, value);
-            }
-        }
-        else
-        {
-            if (defaultValue != null)
-            {
-                component.getAttributes().put(propName, defaultValue);
-            }
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setLongProperty(UIComponent component, String propName,
-            ValueExpression value)
-    {
-        setLongProperty(component, propName, value, null);
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setLongProperty(UIComponent component, String propName,
-            ValueExpression value, Long defaultValue)
-    {
-        if (value != null)
-        {
-            if (value.isLiteralText())
-            {
-                component.getAttributes().put(propName,
-                        Long.valueOf(value.getExpressionString()));
-            }
-            else
-            {
-                component.setValueExpression(propName, value);
-            }
-        }
-        else
-        {
-            if (defaultValue != null)
-            {
-                component.getAttributes().put(propName, defaultValue);
-            }
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setStringProperty(UIComponent component,
-            String propName, ValueExpression value)
-    {
-        setStringProperty(component, propName, value, null);
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setStringProperty(UIComponent component,
-            String propName, ValueExpression value, String defaultValue)
-    {
-        if (value != null)
-        {
-            if (value.isLiteralText())
-            {
-                component.getAttributes().put(propName,
-                        value.getExpressionString());
-            }
-            else
-            {
-                component.setValueExpression(propName, value);
-            }
-        }
-        else
-        {
-            if (defaultValue != null)
-            {
-                component.getAttributes().put(propName, defaultValue);
-            }
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setBooleanProperty(UIComponent component,
-            String propName, ValueExpression value)
-    {
-        setBooleanProperty(component, propName, value, null);
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setBooleanProperty(UIComponent component,
-            String propName, ValueExpression value, Boolean defaultValue)
-    {
-        if (value != null)
-        {
-            if (value.isLiteralText())
-            {
-                component.getAttributes().put(propName,
-                        Boolean.valueOf(value.getExpressionString()));
-            }
-            else
-            {
-                component.setValueExpression(propName, value);
-            }
-        }
-        else
-        {
-            if (defaultValue != null)
-            {
-                component.getAttributes().put(propName, defaultValue);
-            }
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setValueProperty(FacesContext context,
-            UIComponent component, ValueExpression value)
-    {
-        if (value != null)
-        {
-            if (!value.isLiteralText())
-            {
-                component.setValueExpression(
-                        org.apache.myfaces.shared.renderkit.JSFAttr.VALUE_ATTR,
-                        value);
-            }
-            else if (component instanceof UICommand)
-            {
-                ((UICommand) component).setValue(value.getExpressionString());
-            }
-            else if (component instanceof UIParameter)
-            {
-                ((UIParameter) component).setValue(value.getExpressionString());
-            }
-            else if (component instanceof UISelectBoolean)
-            {
-                ((UISelectBoolean) component).setValue(Boolean.valueOf(value
-                        .getExpressionString()));
-            }
-            else if (component instanceof UIGraphic)
-            {
-                ((UIGraphic) component).setValue(value.getExpressionString());
-            }
-            //Since many input components are ValueHolders the special components
-            //must come first, ValueHolder is the last resort.
-            else if (component instanceof ValueHolder)
-            {
-                ((ValueHolder) component).setValue(value.getExpressionString());
-            }
-            else
-            {
-                log.severe("Component " + component.getClass().getName()
-                        + " is no ValueHolder, cannot set value.");
-            }
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setConverterProperty(FacesContext context,
-            UIComponent component, ValueExpression value)
-    {
-        if (value != null)
-        {
-            if (component instanceof ValueHolder)
-            {
-                if (value.isLiteralText())
-                {
-                    FacesContext facesContext = FacesContext
-                            .getCurrentInstance();
-                    Converter converter = facesContext.getApplication()
-                            .createConverter(value.getExpressionString());
-                    ((ValueHolder) component).setConverter(converter);
-                }
-                else
-                {
-                    component
-                            .setValueExpression(
-                                    org.apache.myfaces.shared.renderkit.JSFAttr.CONVERTER_ATTR,
-                                    value);
-                }
-            }
-            else
-            {
-                log.severe("Component " + component.getClass().getName()
-                        + " is no ValueHolder, cannot set value.");
-            }
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void addValidatorProperty(FacesContext context,
-            UIComponent component, MethodExpression validator)
-    {
-        if (validator != null)
-        {
-            if (!(component instanceof EditableValueHolder))
-            {
-                throw new IllegalArgumentException("Component "
-                        + component.getClientId(context)
-                        + " is no EditableValueHolder");
-            }
-
-            ((EditableValueHolder) component)
-                    .addValidator(new MethodExpressionValidator(validator));
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setValueBinding(FacesContext context,
-            UIComponent component, String propName, ValueExpression value)
-    {
-        if (value != null)
-        {
-            if (!value.isLiteralText())
-            {
-                component.setValueExpression(propName, value);
-            }
-            else
-            {
-                throw new IllegalArgumentException("Component "
-                        + component.getClientId(context) + " attribute "
-                        + propName + " must be a value reference, was " + value);
-            }
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void setActionProperty(FacesContext context,
-            UIComponent component, MethodExpression action)
-    {
-        if (action != null)
-        {
-            if (!(component instanceof ActionSource2))
-            {
-                throw new IllegalArgumentException("Component "
-                        + component.getClientId(context)
-                        + " is no ActionSource2");
-            }
-
-            ((ActionSource2) component).setActionExpression(action);
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void addActionListenerProperty(FacesContext context,
-            UIComponent component, MethodExpression actionListener)
-    {
-        if (actionListener != null)
-        {
-            if (!(component instanceof ActionSource2))
-            {
-                throw new IllegalArgumentException("Component "
-                        + component.getClientId(context)
-                        + " is no ActionSource");
-            }
-
-            ((ActionSource2) component)
-                    .addActionListener(new MethodExpressionActionListener(
-                            actionListener));
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static void addValueChangedListenerProperty(FacesContext context,
-            UIComponent component, MethodExpression valueChangedListener)
-    {
-        if (valueChangedListener != null)
-        {
-            if (!(component instanceof EditableValueHolder))
-            {
-                throw new IllegalArgumentException("Component "
-                        + component.getClientId(context)
-                        + " is no EditableValueHolder");
-            }
-
-            ((EditableValueHolder) component)
-                    .addValueChangeListener(new MethodExpressionValueChangeListener(
-                            valueChangedListener));
-        }
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static Object evaluateValueExpression(ELContext elContext,
-            ValueExpression valueExpression)
-    {
-        return valueExpression.isLiteralText() ? valueExpression
-                .getExpressionString() : valueExpression.getValue(elContext);
-    }
-
-    /**
-     * @since 1.2
-     */
-    public static Boolean getBooleanValue(ELContext elContext,
-            ValueExpression valueExpression)
-    {
-        if (valueExpression.isLiteralText())
-        {
-            return Boolean.valueOf(valueExpression.getExpressionString());
-        }
-
-        return (Boolean) valueExpression.getValue(elContext);
-    }
-
-    public static Integer getIntegerValue(ELContext elContext,
-            ValueExpression valueExpression)
-    {
-        if (valueExpression.isLiteralText())
-        {
-            return Integer.valueOf(valueExpression.getExpressionString());
-        }
-
-        return (Integer) valueExpression.getValue(elContext);
-    }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.myfaces.shared.taglib;
+
+import java.util.logging.Logger;
+
+import javax.el.ELContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.component.ActionSource2;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UICommand;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIGraphic;
+import javax.faces.component.UIParameter;
+import javax.faces.component.UISelectBoolean;
+import javax.faces.component.ValueHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.event.MethodExpressionActionListener;
+import javax.faces.event.MethodExpressionValueChangeListener;
+import javax.faces.validator.MethodExpressionValidator;
+
+/**
+ * @author Manfred Geiler (latest modification by $Author$)
+ * @author Bruno Aranda (JSR-252)
+ * @version $Revision$ $Date$
+ *
+ * @since 1.2
+ */
+public class UIComponentELTagUtils
+{
+    //private static final Log log = LogFactory.getLog(UIComponentELTagUtils.class);
+    private static final Logger log = Logger
+            .getLogger(UIComponentELTagUtils.class.getName());
+
+    private UIComponentELTagUtils()
+    {
+    } //util class, no instantiation allowed
+
+    /**
+     * @since 1.2
+     */
+    public static void setIntegerProperty(UIComponent component,
+            String propName, ValueExpression value)
+    {
+        setIntegerProperty(component, propName, value, null);
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setIntegerProperty(UIComponent component,
+            String propName, ValueExpression value, Integer defaultValue)
+    {
+        if (value != null)
+        {
+            if (value.isLiteralText())
+            {
+                component.getAttributes().put(propName,
+                        Integer.valueOf(value.getExpressionString()));
+            }
+            else
+            {
+                component.setValueExpression(propName, value);
+            }
+        }
+        else
+        {
+            if (defaultValue != null)
+            {
+                component.getAttributes().put(propName, defaultValue);
+            }
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setLongProperty(UIComponent component, String propName,
+            ValueExpression value)
+    {
+        setLongProperty(component, propName, value, null);
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setLongProperty(UIComponent component, String propName,
+            ValueExpression value, Long defaultValue)
+    {
+        if (value != null)
+        {
+            if (value.isLiteralText())
+            {
+                component.getAttributes().put(propName,
+                        Long.valueOf(value.getExpressionString()));
+            }
+            else
+            {
+                component.setValueExpression(propName, value);
+            }
+        }
+        else
+        {
+            if (defaultValue != null)
+            {
+                component.getAttributes().put(propName, defaultValue);
+            }
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setStringProperty(UIComponent component,
+            String propName, ValueExpression value)
+    {
+        setStringProperty(component, propName, value, null);
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setStringProperty(UIComponent component,
+            String propName, ValueExpression value, String defaultValue)
+    {
+        if (value != null)
+        {
+            if (value.isLiteralText())
+            {
+                component.getAttributes().put(propName,
+                        value.getExpressionString());
+            }
+            else
+            {
+                component.setValueExpression(propName, value);
+            }
+        }
+        else
+        {
+            if (defaultValue != null)
+            {
+                component.getAttributes().put(propName, defaultValue);
+            }
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setBooleanProperty(UIComponent component,
+            String propName, ValueExpression value)
+    {
+        setBooleanProperty(component, propName, value, null);
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setBooleanProperty(UIComponent component,
+            String propName, ValueExpression value, Boolean defaultValue)
+    {
+        if (value != null)
+        {
+            if (value.isLiteralText())
+            {
+                component.getAttributes().put(propName,
+                        Boolean.valueOf(value.getExpressionString()));
+            }
+            else
+            {
+                component.setValueExpression(propName, value);
+            }
+        }
+        else
+        {
+            if (defaultValue != null)
+            {
+                component.getAttributes().put(propName, defaultValue);
+            }
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setValueProperty(FacesContext context,
+            UIComponent component, ValueExpression value)
+    {
+        if (value != null)
+        {
+            if (!value.isLiteralText())
+            {
+                component.setValueExpression(
+                        org.apache.myfaces.shared.renderkit.JSFAttr.VALUE_ATTR,
+                        value);
+            }
+            else if (component instanceof UICommand)
+            {
+                ((UICommand) component).setValue(value.getExpressionString());
+            }
+            else if (component instanceof UIParameter)
+            {
+                ((UIParameter) component).setValue(value.getExpressionString());
+            }
+            else if (component instanceof UISelectBoolean)
+            {
+                ((UISelectBoolean) component).setValue(Boolean.valueOf(value
+                        .getExpressionString()));
+            }
+            else if (component instanceof UIGraphic)
+            {
+                ((UIGraphic) component).setValue(value.getExpressionString());
+            }
+            //Since many input components are ValueHolders the special components
+            //must come first, ValueHolder is the last resort.
+            else if (component instanceof ValueHolder)
+            {
+                ((ValueHolder) component).setValue(value.getExpressionString());
+            }
+            else
+            {
+                log.severe("Component " + component.getClass().getName()
+                        + " is no ValueHolder, cannot set value.");
+            }
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setConverterProperty(FacesContext context,
+            UIComponent component, ValueExpression value)
+    {
+        if (value != null)
+        {
+            if (component instanceof ValueHolder)
+            {
+                if (value.isLiteralText())
+                {
+                    FacesContext facesContext = FacesContext
+                            .getCurrentInstance();
+                    Converter converter = facesContext.getApplication()
+                            .createConverter(value.getExpressionString());
+                    ((ValueHolder) component).setConverter(converter);
+                }
+                else
+                {
+                    component
+                            .setValueExpression(
+                                    org.apache.myfaces.shared.renderkit.JSFAttr.CONVERTER_ATTR,
+                                    value);
+                }
+            }
+            else
+            {
+                log.severe("Component " + component.getClass().getName()
+                        + " is no ValueHolder, cannot set value.");
+            }
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void addValidatorProperty(FacesContext context,
+            UIComponent component, MethodExpression validator)
+    {
+        if (validator != null)
+        {
+            if (!(component instanceof EditableValueHolder))
+            {
+                throw new IllegalArgumentException("Component "
+                        + component.getClientId(context)
+                        + " is no EditableValueHolder");
+            }
+
+            ((EditableValueHolder) component)
+                    .addValidator(new MethodExpressionValidator(validator));
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setValueBinding(FacesContext context,
+            UIComponent component, String propName, ValueExpression value)
+    {
+        if (value != null)
+        {
+            if (!value.isLiteralText())
+            {
+                component.setValueExpression(propName, value);
+            }
+            else
+            {
+                throw new IllegalArgumentException("Component "
+                        + component.getClientId(context) + " attribute "
+                        + propName + " must be a value reference, was " + value);
+            }
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void setActionProperty(FacesContext context,
+            UIComponent component, MethodExpression action)
+    {
+        if (action != null)
+        {
+            if (!(component instanceof ActionSource2))
+            {
+                throw new IllegalArgumentException("Component "
+                        + component.getClientId(context)
+                        + " is no ActionSource2");
+            }
+
+            ((ActionSource2) component).setActionExpression(action);
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void addActionListenerProperty(FacesContext context,
+            UIComponent component, MethodExpression actionListener)
+    {
+        if (actionListener != null)
+        {
+            if (!(component instanceof ActionSource2))
+            {
+                throw new IllegalArgumentException("Component "
+                        + component.getClientId(context)
+                        + " is no ActionSource");
+            }
+
+            ((ActionSource2) component)
+                    .addActionListener(new MethodExpressionActionListener(
+                            actionListener));
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static void addValueChangedListenerProperty(FacesContext context,
+            UIComponent component, MethodExpression valueChangedListener)
+    {
+        if (valueChangedListener != null)
+        {
+            if (!(component instanceof EditableValueHolder))
+            {
+                throw new IllegalArgumentException("Component "
+                        + component.getClientId(context)
+                        + " is no EditableValueHolder");
+            }
+
+            ((EditableValueHolder) component)
+                    .addValueChangeListener(new MethodExpressionValueChangeListener(
+                            valueChangedListener));
+        }
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static Object evaluateValueExpression(ELContext elContext,
+            ValueExpression valueExpression)
+    {
+        return valueExpression.isLiteralText() ? valueExpression
+                .getExpressionString() : valueExpression.getValue(elContext);
+    }
+
+    /**
+     * @since 1.2
+     */
+    public static Boolean getBooleanValue(ELContext elContext,
+            ValueExpression valueExpression)
+    {
+        if (valueExpression.isLiteralText())
+        {
+            return Boolean.valueOf(valueExpression.getExpressionString());
+        }
+
+        return (Boolean) valueExpression.getValue(elContext);
+    }
+
+    public static Integer getIntegerValue(ELContext elContext,
+            ValueExpression valueExpression)
+    {
+        if (valueExpression.isLiteralText())
+        {
+            return Integer.valueOf(valueExpression.getExpressionString());
+        }
+
+        return (Integer) valueExpression.getValue(elContext);
+    }
+
+}