You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by rm...@apache.org on 2013/08/14 18:52:28 UTC
svn commit: r1513957 - in
/bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval:
el/ELFacade.java jsr303/ConstraintDescriptorImpl.java
jsr303/ConstraintViolationImpl.java jsr303/util/NodeImpl.java
Author: rmannibucau
Date: Wed Aug 14 16:52:27 2013
New Revision: 1513957
URL: http://svn.apache.org/r1513957
Log:
caching some hashCode + reworking EL interpolator impl
Modified:
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/el/ELFacade.java
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintDescriptorImpl.java
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintViolationImpl.java
bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/NodeImpl.java
Modified: bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/el/ELFacade.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/el/ELFacade.java?rev=1513957&r1=1513956&r2=1513957&view=diff
==============================================================================
--- bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/el/ELFacade.java (original)
+++ bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/el/ELFacade.java Wed Aug 14 16:52:27 2013
@@ -25,7 +25,6 @@ import javax.el.ExpressionFactory;
import javax.el.FunctionMapper;
import javax.el.ListELResolver;
import javax.el.MapELResolver;
-import javax.el.PropertyNotWritableException;
import javax.el.ResourceBundleELResolver;
import javax.el.ValueExpression;
import javax.el.VariableMapper;
@@ -46,18 +45,18 @@ public final class ELFacade implements M
}
EXPRESSION_FACTORY = ef;
}
+ private static final ELResolver RESOLVER = initResolver();
public String interpolate(final String message, final Map<String, Object> annotationParameters, final Object validatedValue) {
- final ELResolver resolver = initResolver();
- final BValELContext context = new BValELContext(resolver);
- final VariableMapper variables = context.getVariableMapper();
- for (final Map.Entry<String, Object> var : annotationParameters.entrySet()) {
- variables.setVariable(var.getKey(), new ValueExpressionLiteral(var.getValue()));
- }
- variables.setVariable("validatedValue", new ValueExpressionLiteral(validatedValue));
-
try {
if (EXPRESSION_FACTORY != null) {
+ final BValELContext context = new BValELContext();
+ final VariableMapper variables = context.getVariableMapper();
+ for (final Map.Entry<String, Object> var : annotationParameters.entrySet()) {
+ variables.setVariable(var.getKey(), EXPRESSION_FACTORY.createValueExpression(var.getValue(), Object.class));
+ }
+ variables.setVariable("validatedValue", EXPRESSION_FACTORY.createValueExpression(validatedValue, Object.class));
+
// #{xxx} shouldn't be evaluated
return EXPRESSION_FACTORY.createValueExpression(context, message.replace("#{", "\\#{"), String.class).getValue(context).toString();
}
@@ -79,19 +78,17 @@ public final class ELFacade implements M
}
private static class BValELContext extends ELContext {
- private final ELResolver resolver;
private final FunctionMapper functions;
private final VariableMapper variables;
- public BValELContext(final ELResolver resolver) {
- this.resolver = resolver;
+ public BValELContext() {
this.variables = new BValVariableMapper();
this.functions = new BValFunctionMapper();
}
@Override
public ELResolver getELResolver() {
- return resolver;
+ return RESOLVER;
}
@Override
@@ -118,7 +115,7 @@ public final class ELFacade implements M
@Override
public ValueExpression resolveVariable(final String variable) {
if ("formatter".equals(variable)) {
- return new ValueExpressionLiteral(new BValFormatter());
+ return EXPRESSION_FACTORY.createValueExpression(new BValFormatter(), Object.class);
}
return variables.get(variable);
}
@@ -138,63 +135,4 @@ public final class ELFacade implements M
return formatter.format(format, args);
}
}
-
- private static final class ValueExpressionLiteral extends ValueExpression {
- private final Object value;
-
- public ValueExpressionLiteral(final Object value) {
- this.value = value;
- }
-
- @Override
- public Object getValue(final ELContext context) {
- return value;
- }
-
- @Override
- public void setValue(final ELContext context, final Object value) {
- throw new PropertyNotWritableException(value.toString());
- }
-
- @Override
- public boolean isReadOnly(final ELContext context) {
- return true;
- }
-
- @Override
- public Class<?> getType(final ELContext context) {
- return (this.value != null) ? this.value.getClass() : null;
- }
-
- @Override
- public Class<?> getExpectedType() {
- return String.class;
- }
-
- @Override
- public String getExpressionString() {
- return (this.value != null) ? this.value.toString() : null;
- }
-
- @Override
- public boolean equals(Object obj) {
- return (obj instanceof ValueExpressionLiteral && this
- .equals((ValueExpressionLiteral) obj));
- }
-
- public boolean equals(final ValueExpressionLiteral ve) {
- return (ve != null && (this.value != null && ve.value != null && (this.value == ve.value || this.value
- .equals(ve.value))));
- }
-
- @Override
- public int hashCode() {
- return (this.value != null) ? this.value.hashCode() : 0;
- }
-
- @Override
- public boolean isLiteralText() {
- return true;
- }
- }
}
Modified: bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintDescriptorImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintDescriptorImpl.java?rev=1513957&r1=1513956&r2=1513957&view=diff
==============================================================================
--- bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintDescriptorImpl.java (original)
+++ bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintDescriptorImpl.java Wed Aug 14 16:52:27 2013
@@ -47,6 +47,7 @@ public class ConstraintDescriptorImpl<T
private final boolean reportAsSingleViolation;
private final ConstraintTarget validationAppliesTo;
private final String template;
+ private final int hashCode;
/**
* Create a new ConstraintDescriptorImpl instance.
@@ -84,6 +85,7 @@ public class ConstraintDescriptorImpl<T
this.reportAsSingleViolation = reportAsSingleViolation;
this.validationAppliesTo = validationAppliesTo;
this.template = messageTemplate;
+ this.hashCode = computeHashCode();
}
/**
@@ -167,6 +169,10 @@ public class ConstraintDescriptorImpl<T
@Override
public int hashCode() {
+ return hashCode;
+ }
+
+ public int computeHashCode() {
int result = annotation.annotationType().hashCode();
result = 31 * result + (groups != null ? groups.hashCode() : 0);
result = 31 * result + (payload != null ? payload.hashCode() : 0);
Modified: bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintViolationImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintViolationImpl.java?rev=1513957&r1=1513956&r2=1513957&view=diff
==============================================================================
--- bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintViolationImpl.java (original)
+++ bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintViolationImpl.java Wed Aug 14 16:52:27 2013
@@ -45,6 +45,7 @@ class ConstraintViolationImpl<T> impleme
private final ConstraintDescriptor<?> constraintDescriptor;
private final Object returnValue;
private final Object[] parameters;
+ private final int hashCode;
/**
* Create a new ConstraintViolationImpl instance.
@@ -75,6 +76,7 @@ class ConstraintViolationImpl<T> impleme
this.elementType = elementType;
this.returnValue = returnValue;
this.parameters = parameters;
+ this.hashCode = computeHashCode();
}
/**
@@ -192,6 +194,10 @@ class ConstraintViolationImpl<T> impleme
@Override
public int hashCode() {
+ return hashCode;
+ }
+
+ public int computeHashCode() {
int result = messageTemplate != null ? messageTemplate.hashCode() : 0;
result = 31 * result + (message != null ? message.hashCode() : 0);
result = 31 * result + (rootBean != null ? rootBean.hashCode() : 0);
Modified: bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/NodeImpl.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/NodeImpl.java?rev=1513957&r1=1513956&r2=1513957&view=diff
==============================================================================
--- bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/NodeImpl.java (original)
+++ bval/branches/bval-11/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/NodeImpl.java Wed Aug 14 16:52:27 2013
@@ -25,12 +25,6 @@ import java.io.Serializable;
import java.util.List;
import java.util.Map;
-/**
- * Description: a node (property) as part of a Path.
- * (Implementation based on reference implementation) <br/>
- *
- * TODO: split it in several impl
- */
public class NodeImpl implements Path.Node, Serializable {
private static final long serialVersionUID = 1L;