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);
+ }
+
+}