You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/07/03 14:45:46 UTC
svn commit: r1499371 - in /tomcat/trunk/java/javax/el: ArrayELResolver.java
BeanELResolver.java ELContext.java ELResolver.java EvaluationListener.java
ImportHandler.java ListELResolver.java MapELResolver.java
ResourceBundleELResolver.java Util.java
Author: markt
Date: Wed Jul 3 12:45:46 2013
New Revision: 1499371
URL: http://svn.apache.org/r1499371
Log:
EL 3.0
Implement new EvaluationListener class
Create new Util class
Refactor i18n support
Added:
tomcat/trunk/java/javax/el/EvaluationListener.java (with props)
tomcat/trunk/java/javax/el/Util.java (with props)
Modified:
tomcat/trunk/java/javax/el/ArrayELResolver.java
tomcat/trunk/java/javax/el/BeanELResolver.java
tomcat/trunk/java/javax/el/ELContext.java
tomcat/trunk/java/javax/el/ELResolver.java
tomcat/trunk/java/javax/el/ImportHandler.java
tomcat/trunk/java/javax/el/ListELResolver.java
tomcat/trunk/java/javax/el/MapELResolver.java
tomcat/trunk/java/javax/el/ResourceBundleELResolver.java
Modified: tomcat/trunk/java/javax/el/ArrayELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/ArrayELResolver.java?rev=1499371&r1=1499370&r2=1499371&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/ArrayELResolver.java (original)
+++ tomcat/trunk/java/javax/el/ArrayELResolver.java Wed Jul 3 12:45:46 2013
@@ -83,7 +83,7 @@ public class ArrayELResolver extends ELR
context.setPropertyResolved(true);
if (this.readOnly) {
- throw new PropertyNotWritableException(message(context,
+ throw new PropertyNotWritableException(Util.message(context,
"resolverNotWriteable", base.getClass().getName()));
}
@@ -92,7 +92,7 @@ public class ArrayELResolver extends ELR
if (value != null &&
!base.getClass().getComponentType().isAssignableFrom(
value.getClass())) {
- throw new ClassCastException(message(context,
+ throw new ClassCastException(Util.message(context,
"objectNotAssignable", value.getClass().getName(),
base.getClass().getComponentType().getName()));
}
Modified: tomcat/trunk/java/javax/el/BeanELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/BeanELResolver.java?rev=1499371&r1=1499370&r2=1499371&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/BeanELResolver.java (original)
+++ tomcat/trunk/java/javax/el/BeanELResolver.java Wed Jul 3 12:45:46 2013
@@ -109,7 +109,7 @@ public class BeanELResolver extends ELRe
if (cause instanceof VirtualMachineError) {
throw (VirtualMachineError) cause;
}
- throw new ELException(message(context, "propertyReadError",
+ throw new ELException(Util.message(context, "propertyReadError",
base.getClass().getName(), property.toString()), cause);
} catch (Exception e) {
throw new ELException(e);
@@ -131,7 +131,7 @@ public class BeanELResolver extends ELRe
context.setPropertyResolved(true);
if (this.readOnly) {
- throw new PropertyNotWritableException(message(context,
+ throw new PropertyNotWritableException(Util.message(context,
"resolverNotWriteable", base.getClass().getName()));
}
@@ -148,7 +148,7 @@ public class BeanELResolver extends ELRe
if (cause instanceof VirtualMachineError) {
throw (VirtualMachineError) cause;
}
- throw new ELException(message(context, "propertyWriteError",
+ throw new ELException(Util.message(context, "propertyWriteError",
base.getClass().getName(), property.toString()), cause);
} catch (Exception e) {
throw new ELException(e);
@@ -338,7 +338,7 @@ public class BeanELResolver extends ELRe
private BeanProperty get(ELContext ctx, String name) {
BeanProperty property = this.properties.get(name);
if (property == null) {
- throw new PropertyNotFoundException(message(ctx,
+ throw new PropertyNotFoundException(Util.message(ctx,
"propertyNotFound", type.getName(), name));
}
return property;
@@ -393,7 +393,7 @@ public class BeanELResolver extends ELRe
if (this.write == null) {
this.write = getMethod(this.owner, descriptor.getWriteMethod());
if (this.write == null) {
- throw new PropertyNotFoundException(message(ctx,
+ throw new PropertyNotFoundException(Util.message(ctx,
"propertyNotWritable", new Object[] {
owner.getName(), descriptor.getName() }));
}
@@ -405,7 +405,7 @@ public class BeanELResolver extends ELRe
if (this.read == null) {
this.read = getMethod(this.owner, descriptor.getReadMethod());
if (this.read == null) {
- throw new PropertyNotFoundException(message(ctx,
+ throw new PropertyNotFoundException(Util.message(ctx,
"propertyNotReadable", new Object[] {
owner.getName(), descriptor.getName() }));
}
Modified: tomcat/trunk/java/javax/el/ELContext.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/ELContext.java?rev=1499371&r1=1499370&r2=1499371&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/ELContext.java (original)
+++ tomcat/trunk/java/javax/el/ELContext.java Wed Jul 3 12:45:46 2013
@@ -16,7 +16,9 @@
*/
package javax.el;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -28,6 +30,10 @@ public abstract class ELContext {
private boolean resolved;
+ private ImportHandler importHandler = null;
+
+ private List<EvaluationListener> listeners = new ArrayList<>();
+
public ELContext() {
this.resolved = false;
}
@@ -36,6 +42,14 @@ public abstract class ELContext {
this.resolved = resolved;
}
+ /**
+ * @since EL 3.0
+ */
+ public void setPropertyResolved(Object base, Object property) {
+ setPropertyResolved(true);
+ notifyPropertyResolved(base, property);
+ }
+
public boolean isPropertyResolved() {
return this.resolved;
}
@@ -64,6 +78,16 @@ public abstract class ELContext {
public abstract ELResolver getELResolver();
+ /**
+ * @since EL 3.0
+ */
+ public ImportHandler getImportHandler() {
+ if (importHandler == null) {
+ importHandler = new ImportHandler();
+ }
+ return importHandler;
+ }
+
public abstract FunctionMapper getFunctionMapper();
public Locale getLocale() {
@@ -75,4 +99,60 @@ public abstract class ELContext {
}
public abstract VariableMapper getVariableMapper();
+
+ /**
+ * @since EL 3.0
+ */
+ public void addEvaluationListener(EvaluationListener listener) {
+ listeners.add(listener);
+ }
+
+ /**
+ * @since EL 3.0
+ */
+ public List<EvaluationListener> getEvaluationListeners() {
+ return listeners;
+ }
+
+ /**
+ * @since EL 3.0
+ */
+ public void notifyBeforeEvaluation(String expression) {
+ for (EvaluationListener listener : listeners) {
+ try {
+ listener.beforeEvaluation(this, expression);
+ } catch (Throwable t) {
+ Util.handleThrowable(t);
+ // Ignore - no option to log
+ }
+ }
+ }
+
+ /**
+ * @since EL 3.0
+ */
+ public void notifyAfterEvaluation(String expression) {
+ for (EvaluationListener listener : listeners) {
+ try {
+ listener.afterEvaluation(this, expression);
+ } catch (Throwable t) {
+ Util.handleThrowable(t);
+ // Ignore - no option to log
+ }
+ }
+ }
+
+ /**
+ * @since EL 3.0
+ */
+ public void notifyPropertyResolved(Object base, Object property) {
+ for (EvaluationListener listener : listeners) {
+ try {
+ listener.propertyResolved(this, base, property);
+ } catch (Throwable t) {
+ Util.handleThrowable(t);
+ // Ignore - no option to log
+ }
+ }
+ }
}
Modified: tomcat/trunk/java/javax/el/ELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/ELResolver.java?rev=1499371&r1=1499370&r2=1499371&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/ELResolver.java (original)
+++ tomcat/trunk/java/javax/el/ELResolver.java Wed Jul 3 12:45:46 2013
@@ -14,14 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package javax.el;
-import java.text.MessageFormat;
import java.util.Iterator;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
/**
* @author Jacob Hookom [jacob/hookom.net]
@@ -29,31 +24,6 @@ import java.util.ResourceBundle;
*/
public abstract class ELResolver {
- static String message(ELContext context, String name, Object... props) {
- Locale locale = null;
- if (context != null) {
- locale = context.getLocale();
- }
- if (locale == null) {
- locale = Locale.getDefault();
- if (locale == null) {
- return "";
- }
- }
- ResourceBundle bundle = ResourceBundle.getBundle(
- "javax.el.LocalStrings", locale);
- try {
- String template = bundle.getString(name);
- if (props != null) {
- template = MessageFormat.format(template, props);
- }
- return template;
- } catch (MissingResourceException e) {
- return "Missing Resource: '" + name + "' for Locale "
- + locale.getDisplayName();
- }
- }
-
public static final String TYPE = "type";
public static final String RESOLVABLE_AT_DESIGN_TIME = "resolvableAtDesignTime";
Added: tomcat/trunk/java/javax/el/EvaluationListener.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/EvaluationListener.java?rev=1499371&view=auto
==============================================================================
--- tomcat/trunk/java/javax/el/EvaluationListener.java (added)
+++ tomcat/trunk/java/javax/el/EvaluationListener.java Wed Jul 3 12:45:46 2013
@@ -0,0 +1,54 @@
+/*
+ * 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 javax.el;
+
+/**
+ * @since EL 3.0
+ */
+public abstract class EvaluationListener {
+
+ /**
+ * Fired before the evaluation of the expression.
+ *
+ * @param context
+ * @param expression
+ */
+ public void beforeEvaluation(ELContext context, String expression) {
+ // NO-OP
+ }
+
+ /**
+ * Fired after the evaluation of the expression.
+ *
+ * @param context
+ * @param expression
+ */
+ public void afterEvaluation(ELContext context, String expression) {
+ // NO-OP
+ }
+
+ /**
+ * Fired after a property has been resolved.
+ *
+ * @param context
+ * @param base
+ * @param property
+ */
+ public void propertyResolved(ELContext context, Object base, Object property) {
+ // NO-OP
+ }
+}
Propchange: tomcat/trunk/java/javax/el/EvaluationListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tomcat/trunk/java/javax/el/ImportHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/ImportHandler.java?rev=1499371&r1=1499370&r2=1499371&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/ImportHandler.java (original)
+++ tomcat/trunk/java/javax/el/ImportHandler.java Wed Jul 3 12:45:46 2013
@@ -43,7 +43,7 @@ public class ImportHandler {
int lastPeriod = name.lastIndexOf('.');
if (lastPeriod < 0) {
- throw new ELException(ELResolver.message(
+ throw new ELException(Util.message(
null, "importHandler.invalidStaticName", name));
}
@@ -53,7 +53,7 @@ public class ImportHandler {
Class<?> clazz = findClass(className);
if (clazz == null) {
- throw new ELException(ELResolver.message(
+ throw new ELException(Util.message(
null, "importHandler.invalidClassNameForStatic",
className, name));
}
@@ -77,14 +77,14 @@ public class ImportHandler {
}
if (!found) {
- throw new ELException(ELResolver.message(null,
+ throw new ELException(Util.message(null,
"importHandler.staticNotFound", fieldOrMethodName,
className, name));
}
Class<?> conflict = statics.get(fieldOrMethodName);
if (conflict != null) {
- throw new ELException(ELResolver.message(null,
+ throw new ELException(Util.message(null,
"importHandler.ambiguousStaticImport", name,
conflict.getName() + '.' + fieldOrMethodName));
}
@@ -95,14 +95,14 @@ public class ImportHandler {
public void importClass(String name) throws javax.el.ELException {
if (!name.contains(".")) {
- throw new ELException(ELResolver.message(
+ throw new ELException(Util.message(
null, "importHandler.invalidClassName", name));
}
Class<?> clazz = findClass(name);
if (clazz == null) {
- throw new ELException(ELResolver.message(
+ throw new ELException(Util.message(
null, "importHandler.classNotFound", name));
}
}
@@ -112,7 +112,7 @@ public class ImportHandler {
// Import ambiguity is handled at resolution, not at import
Package p = Package.getPackage(name);
if (p == null) {
- throw new IllegalArgumentException(ELResolver.message(
+ throw new IllegalArgumentException(Util.message(
null, "importHandler.invalidPackage", name));
}
packages.add(name);
@@ -154,7 +154,7 @@ public class ImportHandler {
int modifiers = clazz.getModifiers();
if (!Modifier.isPublic(modifiers) || Modifier.isAbstract(modifiers) ||
Modifier.isInterface(modifiers)) {
- throw new ELException(ELResolver.message(
+ throw new ELException(Util.message(
null, "importHandler.invalidClass", name));
}
@@ -162,7 +162,7 @@ public class ImportHandler {
Class<?> conflict = clazzes.get(simpleName);
if (conflict != null) {
- throw new ELException(ELResolver.message(null,
+ throw new ELException(Util.message(null,
"importHandler.ambiguousImport", name, conflict.getName()));
}
Modified: tomcat/trunk/java/javax/el/ListELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/ListELResolver.java?rev=1499371&r1=1499370&r2=1499371&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/ListELResolver.java (original)
+++ tomcat/trunk/java/javax/el/ListELResolver.java Wed Jul 3 12:45:46 2013
@@ -95,7 +95,7 @@ public class ListELResolver extends ELRe
List<Object> list = (List<Object>) base;
if (this.readOnly) {
- throw new PropertyNotWritableException(message(context,
+ throw new PropertyNotWritableException(Util.message(context,
"resolverNotWriteable", base.getClass().getName()));
}
Modified: tomcat/trunk/java/javax/el/MapELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/MapELResolver.java?rev=1499371&r1=1499370&r2=1499371&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/MapELResolver.java (original)
+++ tomcat/trunk/java/javax/el/MapELResolver.java Wed Jul 3 12:45:46 2013
@@ -83,7 +83,7 @@ public class MapELResolver extends ELRes
context.setPropertyResolved(true);
if (this.readOnly) {
- throw new PropertyNotWritableException(message(context,
+ throw new PropertyNotWritableException(Util.message(context,
"resolverNotWriteable", base.getClass().getName()));
}
Modified: tomcat/trunk/java/javax/el/ResourceBundleELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/ResourceBundleELResolver.java?rev=1499371&r1=1499370&r2=1499371&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/ResourceBundleELResolver.java (original)
+++ tomcat/trunk/java/javax/el/ResourceBundleELResolver.java Wed Jul 3 12:45:46 2013
@@ -81,7 +81,7 @@ public class ResourceBundleELResolver ex
if (base instanceof ResourceBundle) {
context.setPropertyResolved(true);
- throw new PropertyNotWritableException(message(context,
+ throw new PropertyNotWritableException(Util.message(context,
"resolverNotWriteable", base.getClass().getName()));
}
}
Added: tomcat/trunk/java/javax/el/Util.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/Util.java?rev=1499371&view=auto
==============================================================================
--- tomcat/trunk/java/javax/el/Util.java (added)
+++ tomcat/trunk/java/javax/el/Util.java Wed Jul 3 12:45:46 2013
@@ -0,0 +1,67 @@
+/*
+ * 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 javax.el;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+class Util {
+
+ /**
+ * Checks whether the supplied Throwable is one that needs to be
+ * rethrown and swallows all others.
+ * @param t the Throwable to check
+ */
+ static void handleThrowable(Throwable t) {
+ if (t instanceof ThreadDeath) {
+ throw (ThreadDeath) t;
+ }
+ if (t instanceof VirtualMachineError) {
+ throw (VirtualMachineError) t;
+ }
+ // All other instances of Throwable will be silently swallowed
+ }
+
+ static String message(ELContext context, String name, Object... props) {
+ Locale locale = null;
+ if (context != null) {
+ locale = context.getLocale();
+ }
+ if (locale == null) {
+ locale = Locale.getDefault();
+ if (locale == null) {
+ return "";
+ }
+ }
+ ResourceBundle bundle = ResourceBundle.getBundle(
+ "javax.el.LocalStrings", locale);
+ try {
+ String template = bundle.getString(name);
+ if (props != null) {
+ template = MessageFormat.format(template, props);
+ }
+ return template;
+ } catch (MissingResourceException e) {
+ return "Missing Resource: '" + name + "' for Locale "
+ + locale.getDisplayName();
+ }
+ }
+
+
+}
Propchange: tomcat/trunk/java/javax/el/Util.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org