You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2008/12/09 06:58:18 UTC
svn commit: r724616 - in
/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string:
FlexibleStringExpander.java UelFunctions.java UelUtil.java
Author: adrianc
Date: Mon Dec 8 21:58:18 2008
New Revision: 724616
URL: http://svn.apache.org/viewvc?rev=724616&view=rev
Log:
Added some functions to the Unified Expression Language. See the UelFunctions.java JavaDoc for details.
Added:
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java (with props)
Modified:
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java
Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java?rev=724616&r1=724615&r2=724616&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java Mon Dec 8 21:58:18 2008
@@ -50,8 +50,8 @@
public static final String closeBracket = "}";
protected static final UtilCache<String, FlexibleStringExpander> exprCache = new UtilCache<String, FlexibleStringExpander>("flexibleStringExpander.ExpressionCache");
protected static final FlexibleStringExpander nullExpr = new FlexibleStringExpander(null);
- protected String orig;
- protected List<StrElem> strElems = null;
+ protected final String orig;
+ protected final List<StrElem> strElems;
protected int hint = 20;
/**
@@ -66,6 +66,8 @@
if (original.length() > this.hint) {
this.hint = original.length();
}
+ } else {
+ this.strElems = null;
}
}
@@ -269,7 +271,7 @@
}
protected static class ConstElem implements StrElem {
- protected String str;
+ protected final String str;
protected ConstElem(String value) {
this.str = value.intern();
}
@@ -279,7 +281,7 @@
}
protected static class BshElem implements StrElem {
- protected String str;
+ protected final String str;
protected BshElem(String scriptlet) {
this.str = scriptlet;
}
@@ -304,8 +306,8 @@
}
protected static class CurrElem implements StrElem {
- protected String valueStr;
- protected FlexibleStringExpander codeExpr = null;
+ protected final String valueStr;
+ protected final FlexibleStringExpander codeExpr;
protected CurrElem(String original) {
int currencyPos = original.indexOf("?currency(");
int closeParen = original.indexOf(")", currencyPos + 10);
@@ -326,7 +328,7 @@
}
protected static class NestedVarElem implements StrElem {
- protected List<StrElem> strElems = null;
+ protected final List<StrElem> strElems;
protected int hint = 20;
protected NestedVarElem(String original) {
this.strElems = getStrElems(original);
@@ -359,8 +361,8 @@
}
protected static class VarElem implements StrElem {
- protected String original = null;
- protected String bracketedOriginal = null;
+ protected final String original;
+ protected final String bracketedOriginal;
protected VarElem(String original) {
this.original = original;
this.bracketedOriginal = openBracket + original + closeBracket;
Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java?rev=724616&view=auto
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java (added)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java Mon Dec 8 21:58:18 2008
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * 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.ofbiz.base.util.string;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Map;
+import javax.el.*;
+
+import javolution.util.FastMap;
+
+/** Implements Unified Expression Language functions.
+ * <p>Built-in functions are divided into two prefixes - <code>math</code>
+ * and <code>util</code>.</p><p>The <code>math</code> prefix maps to
+ * the <code>java.lang.Math</code> class. Overloaded <code>java.lang.Math</code>
+ * methods have their parameter data types appended to the UEL function name
+ * - so <code>java.lang.Math.max(double a, double b)</code>
+ * becomes <code>${math:maxDouble(a, b)}</code>.</p><p>The
+ * <code>util</code> prefix contains miscellaneous utility functions:<br/>
+ * <ul>
+ * <li><code>${util:size(Object)}</code> returns the size of Maps,
+ * Collections, and Strings. Invalid Object types return -1.</li>
+ * </ul>
+ * </p>
+ */
+public class UelFunctions {
+
+ protected static final FunctionMapper functionMapper = new Functions();
+
+ /** Returns a <code>FunctionMapper</code> instance.
+ * @return <code>FunctionMapper</code> instance
+ */
+ public static FunctionMapper getFunctionMapper() {
+ return functionMapper;
+ }
+
+ protected static class Functions extends FunctionMapper {
+ protected final Map<String, Method> functionMap = FastMap.newInstance();
+ public Functions() {
+ try {
+ setFunction("math", "absDouble", Math.class.getMethod("abs", double.class));
+ setFunction("math", "absFloat", Math.class.getMethod("abs", float.class));
+ setFunction("math", "absInt", Math.class.getMethod("abs", int.class));
+ setFunction("math", "absLong", Math.class.getMethod("abs", long.class));
+ setFunction("math", "acos", Math.class.getMethod("abs", double.class));
+ setFunction("math", "asin", Math.class.getMethod("asin", double.class));
+ setFunction("math", "atan", Math.class.getMethod("atan", double.class));
+ setFunction("math", "atan2", Math.class.getMethod("max", double.class, double.class));
+ setFunction("math", "cbrt", Math.class.getMethod("cbrt", double.class));
+ setFunction("math", "ceil", Math.class.getMethod("ceil", double.class));
+ setFunction("math", "cos", Math.class.getMethod("cos", double.class));
+ setFunction("math", "cosh", Math.class.getMethod("cosh", double.class));
+ setFunction("math", "exp", Math.class.getMethod("exp", double.class));
+ setFunction("math", "expm1", Math.class.getMethod("expm1", double.class));
+ setFunction("math", "floor", Math.class.getMethod("floor", double.class));
+ setFunction("math", "hypot", Math.class.getMethod("hypot", double.class, double.class));
+ setFunction("math", "IEEEremainder", Math.class.getMethod("IEEEremainder", double.class, double.class));
+ setFunction("math", "log", Math.class.getMethod("log", double.class));
+ setFunction("math", "log10", Math.class.getMethod("log10", double.class));
+ setFunction("math", "log1p", Math.class.getMethod("log1p", double.class));
+ setFunction("math", "maxDouble", Math.class.getMethod("max", double.class, double.class));
+ setFunction("math", "maxFloat", Math.class.getMethod("max", float.class, float.class));
+ setFunction("math", "maxInt", Math.class.getMethod("max", int.class, int.class));
+ setFunction("math", "maxLong", Math.class.getMethod("max", long.class, long.class));
+ setFunction("math", "minDouble", Math.class.getMethod("min", double.class, double.class));
+ setFunction("math", "minFloat", Math.class.getMethod("min", float.class, float.class));
+ setFunction("math", "minInt", Math.class.getMethod("min", int.class, int.class));
+ setFunction("math", "minLong", Math.class.getMethod("min", long.class, long.class));
+ setFunction("math", "pow", Math.class.getMethod("pow", double.class, double.class));
+ setFunction("math", "random", Math.class.getMethod("random"));
+ setFunction("math", "rint", Math.class.getMethod("rint", double.class));
+ setFunction("math", "roundDouble", Math.class.getMethod("round", double.class));
+ setFunction("math", "roundFloat", Math.class.getMethod("round", float.class));
+ setFunction("math", "signumDouble", Math.class.getMethod("signum", double.class));
+ setFunction("math", "signumFloat", Math.class.getMethod("signum", float.class));
+ setFunction("math", "sin", Math.class.getMethod("sin", double.class));
+ setFunction("math", "sinh", Math.class.getMethod("sinh", double.class));
+ setFunction("math", "sqrt", Math.class.getMethod("sqrt", double.class));
+ setFunction("math", "tan", Math.class.getMethod("tan", double.class));
+ setFunction("math", "tanh", Math.class.getMethod("tanh", double.class));
+ setFunction("math", "toDegrees", Math.class.getMethod("toDegrees", double.class));
+ setFunction("math", "toRadians", Math.class.getMethod("toRadians", double.class));
+ setFunction("math", "ulpDouble", Math.class.getMethod("ulp", double.class));
+ setFunction("math", "ulpFloat", Math.class.getMethod("ulp", float.class));
+ setFunction("util", "size", UelFunctions.class.getMethod("getSize", Object.class));
+ } catch (Exception e) {
+
+ }
+ }
+ public void setFunction(String prefix, String localName, Method method) {
+ synchronized(this) {
+ functionMap.put(prefix + ":" + localName, method);
+ }
+ }
+ public Method resolveFunction(String prefix, String localName) {
+ return functionMap.get(prefix + ":" + localName);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public static int getSize(Object obj) {
+ try {
+ Map map = (Map) obj;
+ return map.size();
+ } catch (Exception e) {}
+ try {
+ Collection coll = (Collection) obj;
+ return coll.size();
+ } catch (Exception e) {}
+ try {
+ String str = (String) obj;
+ return str.length();
+ } catch (Exception e) {}
+ return -1;
+ }
+}
Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelFunctions.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java?rev=724616&r1=724615&r2=724616&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java Mon Dec 8 21:58:18 2008
@@ -18,7 +18,6 @@
*******************************************************************************/
package org.ofbiz.base.util.string;
-import java.lang.reflect.Method;
import java.util.Map;
import javax.el.*;
@@ -27,8 +26,6 @@
/** Implements the Unified Expression Language (JSR-245). */
public class UelUtil {
- protected static final String module = UelUtil.class.getName();
- public static final FunctionMapper functionMapper = new Functions();
protected static final ExpressionFactory exprFactory = new de.odysseus.el.ExpressionFactoryImpl();
protected static final ELResolver defaultResolver = new CompositeELResolver() {
{
@@ -61,14 +58,14 @@
return defaultResolver;
}
public FunctionMapper getFunctionMapper() {
- return functionMapper;
+ return UelFunctions.getFunctionMapper();
}
public VariableMapper getVariableMapper() {
return this.variableMapper;
}
protected class BasicVariableMapper extends VariableMapper {
- protected ELContext elContext;
- protected Map<String, Object> variables = FastMap.newInstance();
+ protected final ELContext elContext;
+ protected final Map<String, Object> variables = FastMap.newInstance();
protected BasicVariableMapper(Map<String, ? extends Object> context, ELContext parentContext) {
this.variables.putAll(context);
this.elContext = parentContext;
@@ -130,17 +127,4 @@
}
}
}
-
- protected static class Functions extends FunctionMapper {
- protected Map<String, Method> functionMap = FastMap.newInstance();
- public void setFunction(String prefix, String localName, Method method) {
- synchronized(this) {
- functionMap.put(prefix + ":" + localName, method);
- }
- }
- public Method resolveFunction(String prefix, String localName) {
- return functionMap.get(prefix + ":" + localName);
- }
- }
-
}