You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2008/10/10 20:31:39 UTC
svn commit: r703554 - in /myfaces/extensions/validator/branches/jsf_1.1:
core/src/main/java/org/apache/myfaces/extensions/validator/core/annotation/extractor/
core/src/main/java/org/apache/myfaces/extensions/validator/core/el/
core/src/main/java/org/ap...
Author: gpetracek
Date: Fri Oct 10 11:31:38 2008
New Revision: 703554
URL: http://svn.apache.org/viewvc?rev=703554&view=rev
Log:
first step of map syntax support for properties
Added:
myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ValueBindingExpression.java
Modified:
myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/annotation/extractor/DefaultComponentAnnotationExtractor.java
myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java
myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ELHelper.java
myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/AbstractMetaDataTransformer.java
myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidatorAdapter.java
myfaces/extensions/validator/branches/jsf_1.1/examples/feature-set_01/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java
myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningAnnotationExtractor.java
myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java
myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java
myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/annotation/extractor/DefaultValueBindingScanningAnnotationExtractor.java
myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/recorder/CrossValidationUserInputRecorder.java
myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java
myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java
myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java
Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/annotation/extractor/DefaultComponentAnnotationExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/annotation/extractor/DefaultComponentAnnotationExtractor.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/annotation/extractor/DefaultComponentAnnotationExtractor.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/annotation/extractor/DefaultComponentAnnotationExtractor.java Fri Oct 10 11:31:38 2008
@@ -19,6 +19,7 @@
package org.apache.myfaces.extensions.validator.core.annotation.extractor;
import org.apache.myfaces.extensions.validator.core.annotation.AnnotationEntry;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import org.apache.myfaces.extensions.validator.internal.ToDo;
import org.apache.myfaces.extensions.validator.internal.Priority;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
@@ -75,9 +76,10 @@
List<AnnotationEntry> annotationEntries = new ArrayList<AnnotationEntry>();
- String valueBindingExpression = ExtValUtils.getELHelper().getValueBindingExpression(uiComponent);
+ ValueBindingExpression vbe =
+ ExtValUtils.getELHelper().getValueBindingExpression(uiComponent);
- if (valueBindingExpression == null)
+ if (vbe == null)
{
return new ArrayList<AnnotationEntry>();
}
@@ -85,23 +87,13 @@
/*
* get bean class and property name
*/
- int beanPropertyBorder = valueBindingExpression.lastIndexOf('.');
-
- if (beanPropertyBorder < 0)
- {
- return new ArrayList<AnnotationEntry>();
- }
-
- String beans = valueBindingExpression.substring(valueBindingExpression.indexOf('{') + 1, beanPropertyBorder);
-
- String property = valueBindingExpression.substring(beanPropertyBorder + 1, valueBindingExpression.indexOf('}'));
-
- Class entityClass = ExtValUtils.getELHelper().getTypeOfValueBindingForExpression(facesContext, "#{"+beans+"}");
+ Class entityClass = ExtValUtils.getELHelper()
+ .getTypeOfValueBindingForExpression(facesContext, vbe.getBaseExpression());
//create template entry
AnnotationEntry templateEntry = new AnnotationEntry();
//TODO test with complex components
- templateEntry.setValueBindingExpression(valueBindingExpression);
+ templateEntry.setValueBindingExpression(vbe.getExpressionString());
templateEntry.setEntityClass(entityClass);
templateEntry.setBoundTo("value");
@@ -112,8 +104,9 @@
while (!Object.class.getName().equals(currentClass.getName()))
{
- addPropertyAccessAnnotations(currentClass, property, annotationEntries, templateEntry);
- addFieldAccessAnnotations(currentClass, property, annotationEntries, templateEntry);
+ //TODO map syntax support
+ addPropertyAccessAnnotations(currentClass, vbe.getProperty(), annotationEntries, templateEntry);
+ addFieldAccessAnnotations(currentClass, vbe.getProperty(), annotationEntries, templateEntry);
currentClass = currentClass.getSuperclass();
}
@@ -124,7 +117,7 @@
while (currentClass != null)
{
- addPropertyAccessAnnotations(currentClass, property, annotationEntries, templateEntry);
+ addPropertyAccessAnnotations(currentClass, vbe.getProperty(), annotationEntries, templateEntry);
currentClass = currentClass.getSuperclass();
}
Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java Fri Oct 10 11:31:38 2008
@@ -57,7 +57,8 @@
}
}
- public Class getTypeOfValueBindingForExpression(FacesContext facesContext, String valueBindingExpression)
+ public Class getTypeOfValueBindingForExpression(FacesContext facesContext,
+ ValueBindingExpression valueBindingExpression)
{
//due to a restriction with the ri
Object bean = getValueOfExpression(facesContext, valueBindingExpression);
@@ -71,26 +72,26 @@
}
@ToDo(value = Priority.MEDIUM, description = "refactor - problem - static values - jsf 1.2 e.g.: ${value}")
- public Object getBaseObject(String valueBindingExpression, UIComponent uiComponent)
+ public Object getBaseObject(ValueBindingExpression valueBindingExpression, UIComponent uiComponent)
{
- if (valueBindingExpression.lastIndexOf(".") == -1)
+ if(valueBindingExpression.getBaseExpression() == null)
{
return uiComponent.getValueBinding("value").getValue(FacesContext.getCurrentInstance());
}
return getBaseObject(valueBindingExpression);
}
- public Object getBaseObject(String valueBindingExpression)
+ public Object getBaseObject(ValueBindingExpression valueBindingExpression)
{
- String newExpression = valueBindingExpression.substring(0, valueBindingExpression.lastIndexOf(".")) + "}";
-
- return getValueOfExpression(FacesContext.getCurrentInstance(), newExpression);
+ return getValueOfExpression(FacesContext.getCurrentInstance(),
+ valueBindingExpression.getBaseExpression());
}
- public Object getValueOfExpression(FacesContext facesContext, String valueBindingExpression)
+ public Object getValueOfExpression(FacesContext facesContext,
+ ValueBindingExpression valueBindingExpression)
{
return (valueBindingExpression != null) ? facesContext.getApplication()
- .createValueBinding(valueBindingExpression).getValue(facesContext) : null;
+ .createValueBinding(valueBindingExpression.getExpressionString()).getValue(facesContext) : null;
}
public boolean isExpressionValid(FacesContext facesContext, String valueBindingExpression)
@@ -98,31 +99,25 @@
return facesContext.getApplication().createValueBinding(valueBindingExpression) != null;
}
- public String getValueBindingExpression(UIComponent uiComponent)
+ public ValueBindingExpression getValueBindingExpression(UIComponent uiComponent)
{
String valueBindingExpression = getOriginalValueBindingExpression(uiComponent);
- String baseExpression = valueBindingExpression;
-
//for input components without value-binding
//(e.g. for special component libs -> issue with ExtValRendererWrapper#encodeBegin)
- if(baseExpression == null)
+ if(valueBindingExpression == null)
{
//TODO logging
return null;
}
- if (baseExpression.contains("."))
- {
- baseExpression = baseExpression.substring(0, valueBindingExpression.lastIndexOf(".")) + "}";
- }
-
- if (getTypeOfValueBindingForExpression(FacesContext.getCurrentInstance(), baseExpression) == null)
+ if (getTypeOfValueBindingForExpression(FacesContext.getCurrentInstance(),
+ new ValueBindingExpression(valueBindingExpression).getBaseExpression()) == null)
{
- valueBindingExpression =
- FaceletsTaglibExpressionHelper.tryToCreateValueBindingForFaceletsBinding(uiComponent);
+ valueBindingExpression = FaceletsTaglibExpressionHelper.
+ tryToCreateValueBindingForFaceletsBinding(uiComponent);
}
- return valueBindingExpression;
+ return new ValueBindingExpression(valueBindingExpression);
}
static String getOriginalValueBindingExpression(UIComponent uiComponent)
Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ELHelper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ELHelper.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ELHelper.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ELHelper.java Fri Oct 10 11:31:38 2008
@@ -33,23 +33,23 @@
@UsageInformation(UsageCategory.API)
public interface ELHelper
{
- Class getTypeOfValueBindingForExpression(FacesContext facesContext, String valueBindingExpression);
+ Class getTypeOfValueBindingForExpression(FacesContext facesContext, ValueBindingExpression valueBindingExpression);
Class getTypeOfValueBindingForComponent(FacesContext facesContext, UIComponent uiComponent);
Object getBean(String beanName);
- Object getBaseObject(String valueBindingExpression);
+ Object getBaseObject(ValueBindingExpression valueBindingExpression);
- Object getBaseObject(String valueBindingExpression, UIComponent uiComponent);
+ Object getBaseObject(ValueBindingExpression valueBindingExpression, UIComponent uiComponent);
- Object getValueOfExpression(FacesContext facesContext, String valueBindingExpression);
+ Object getValueOfExpression(FacesContext facesContext, ValueBindingExpression valueBindingExpression);
- String getValueBindingExpression(UIComponent uiComponent);
+ ValueBindingExpression getValueBindingExpression(UIComponent uiComponent);
boolean isExpressionValid(FacesContext facesContext, String valueBindingExpression);
boolean isELTerm(Object o);
Object getBindingOfComponent(UIComponent uiComponent, String name);
-}
\ No newline at end of file
+}
Added: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ValueBindingExpression.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ValueBindingExpression.java?rev=703554&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ValueBindingExpression.java (added)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ValueBindingExpression.java Fri Oct 10 11:31:38 2008
@@ -0,0 +1,185 @@
+/*
+ * 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.extensions.validator.core.el;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation({UsageCategory.API})
+public class ValueBindingExpression
+{
+ private ValueBindingExpression base;
+ private String value;
+ private String prefix;
+ private String token;
+
+ public static ValueBindingExpression replaceOrAddProperty(ValueBindingExpression valueBindingExpression,
+ String newProperty)
+ {
+ if(valueBindingExpression.getBaseExpression() != null)
+ {
+ return replaceProperty(valueBindingExpression, newProperty);
+ }
+ else
+ {
+ return addProperty(valueBindingExpression, newProperty);
+ }
+ }
+
+ public static ValueBindingExpression replaceProperty(ValueBindingExpression valueBindingExpression,
+ String newProperty)
+ {
+ return addProperty(valueBindingExpression.getBaseExpression(), newProperty);
+ }
+
+ public static ValueBindingExpression addProperty(ValueBindingExpression valueBindingExpression, String newProperty)
+ {
+ String sourceExpression = valueBindingExpression.getExpressionString();
+ String result = sourceExpression.substring(0, sourceExpression.length() - 1);
+
+ if(newProperty.startsWith("["))
+ {
+ return new ValueBindingExpression(result + newProperty + "}");
+ }
+ else
+ {
+ return new ValueBindingExpression(result + "." + newProperty + "}");
+ }
+ }
+
+ public ValueBindingExpression(String expression)
+ {
+ if(!ExtValUtils.getELHelper().isELTerm(expression))
+ {
+ throw new IllegalStateException(expression + " is no valid el-expression");
+ }
+
+ int index1 = expression.lastIndexOf("]");
+ int index2 = expression.lastIndexOf(".");
+
+ if(index1 > index2)
+ {
+ expression = expression.substring(0, index1);
+
+ int index3 = findIndexOfStartingBracket(expression);
+ this.value = expression.substring(index3 + 1, index1);
+ this.base = new ValueBindingExpression(expression.substring(0, index3) + "}");
+ this.token = "[";
+ }
+ else if( index2 > index1)
+ {
+ this.value = expression.substring(index2 + 1, expression.length() - 1 );
+ this.base = new ValueBindingExpression(expression.substring(0, index2) + "}");
+ this.token = ".";
+ }
+ else
+ {
+ this.value = expression.substring(2, expression.length() - 1);
+ this.prefix = expression.substring(0, 1);
+ }
+ }
+
+ public String getProperty()
+ {
+ if("[".equals(this.token))
+ {
+ return this.base.value + this.token + this.value.substring(0, this.value.length()) + "]";
+ }
+ return value;
+ }
+
+ public ValueBindingExpression getBaseExpression()
+ {
+ return base;
+ }
+
+ public String getExpressionString()
+ {
+ if(this.base != null)
+ {
+ String baseExpression = this.base.getExpressionString();
+
+ if("[".equals(this.token))
+ {
+ return baseExpression.substring(0, baseExpression.length() - 1) + this.token + this.value + "]}";
+ }
+ return baseExpression.substring(0, baseExpression.length() - 1) + this.token + this.value + "}";
+ }
+ else
+ {
+ return this.prefix + "{" + this.value + "}";
+ }
+ }
+
+ public String getPrefix()
+ {
+ if(this.base != null)
+ {
+ return this.base.getPrefix();
+ }
+ else
+ {
+ return prefix;
+ }
+ }
+
+ public void setPrefix(String prefix)
+ {
+ if(this.base != null)
+ {
+ this.base.setPrefix(prefix);
+ }
+ else
+ {
+ this.prefix = prefix;
+ }
+ }
+
+ @Override
+ public String toString()
+ {
+ return getExpressionString();
+ }
+
+ private int findIndexOfStartingBracket(String expression)
+ {
+ int closeCount = 0;
+ for(int i = expression.length() - 1; i > 0; i--)
+ {
+ if(expression.charAt(i) == '[')
+ {
+ closeCount--;
+ if(closeCount < 0)
+ {
+ return i;
+ }
+ }
+ else if(expression.charAt(i) == ']')
+ {
+ closeCount++;
+ }
+ }
+ return 0;
+ }
+}
Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/AbstractMetaDataTransformer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/AbstractMetaDataTransformer.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/AbstractMetaDataTransformer.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/AbstractMetaDataTransformer.java Fri Oct 10 11:31:38 2008
@@ -21,6 +21,7 @@
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import org.apache.myfaces.extensions.validator.core.metadata.CommonMetaDataKeys;
import org.apache.myfaces.extensions.validator.core.annotation.AnnotationEntry;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -68,7 +69,7 @@
FacesContext facesContext = FacesContext.getCurrentInstance();
Boolean result = (Boolean) ExtValUtils.getELHelper()
- .getValueOfExpression(facesContext, getSkipExpression(annotationEntry));
+ .getValueOfExpression(facesContext, new ValueBindingExpression(getSkipExpression(annotationEntry)));
if(logger.isTraceEnabled())
{
Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidatorAdapter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidatorAdapter.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidatorAdapter.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidatorAdapter.java Fri Oct 10 11:31:38 2008
@@ -19,6 +19,7 @@
package org.apache.myfaces.extensions.validator.core.validation.strategy;
import org.apache.myfaces.extensions.validator.core.annotation.AnnotationEntry;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
@@ -132,7 +133,8 @@
return false;
}
- Boolean result = (Boolean)ExtValUtils.getELHelper().getValueOfExpression(facesContext, expression);
+ Boolean result = (Boolean)ExtValUtils.getELHelper()
+ .getValueOfExpression(facesContext, new ValueBindingExpression(expression));
if(logger.isTraceEnabled())
{
Modified: myfaces/extensions/validator/branches/jsf_1.1/examples/feature-set_01/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/examples/feature-set_01/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/examples/feature-set_01/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/examples/feature-set_01/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java Fri Oct 10 11:31:38 2008
@@ -33,7 +33,6 @@
//the old password of the person isn't used within the page
//-> validate with value of the model
- @Required(skipValidation = "#{person.role eq 'admin'}")
@Equals("person.password")
@NotEquals("password")
private String oldPassword;
Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningAnnotationExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningAnnotationExtractor.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningAnnotationExtractor.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningAnnotationExtractor.java Fri Oct 10 11:31:38 2008
@@ -20,6 +20,7 @@
import org.apache.myfaces.extensions.validator.core.annotation.AnnotationEntry;
import org.apache.myfaces.extensions.validator.core.annotation.extractor.DefaultComponentAnnotationExtractor;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import org.apache.myfaces.extensions.validator.internal.ToDo;
import org.apache.myfaces.extensions.validator.internal.Priority;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
@@ -44,23 +45,18 @@
return new ArrayList<AnnotationEntry>();
}
- String valueBindingExpression = ((String) object).trim();
- int beanPropertyBorder = valueBindingExpression.lastIndexOf(".");
-
- String property = valueBindingExpression
- .substring(beanPropertyBorder + 1, valueBindingExpression.lastIndexOf("}"));
+ ValueBindingExpression valueBindingExpression = new ValueBindingExpression(((String) object).trim());
List<AnnotationEntry> annotationEntries = new ArrayList<AnnotationEntry>();
Class entityClass = ExtValUtils.getELHelper()
- .getTypeOfValueBindingForExpression(facesContext,
- valueBindingExpression.substring(0, beanPropertyBorder) + "}");
+ .getTypeOfValueBindingForExpression(facesContext, valueBindingExpression.getBaseExpression());
//create template entry
AnnotationEntry templateEntry = new AnnotationEntry();
templateEntry.setEntityClass(entityClass);
//TODO complex components
- templateEntry.setValueBindingExpression(valueBindingExpression);
+ templateEntry.setValueBindingExpression(valueBindingExpression.getExpressionString());
templateEntry.setBoundTo("value");
/*
@@ -68,9 +64,10 @@
*/
if (entityClass != null)
{
- addPropertyAccessAnnotations(entityClass, property,
+ //TODO map syntax support
+ addPropertyAccessAnnotations(entityClass, valueBindingExpression.getProperty(),
annotationEntries, templateEntry);
- addFieldAccessAnnotations(entityClass, property, annotationEntries,
+ addFieldAccessAnnotations(entityClass, valueBindingExpression.getProperty(), annotationEntries,
templateEntry);
}
Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java Fri Oct 10 11:31:38 2008
@@ -25,6 +25,7 @@
import org.apache.myfaces.extensions.validator.core.metadata.transformer.MetaDataTransformer;
import org.apache.myfaces.extensions.validator.core.metadata.transformer.AbstractMetaDataTransformer;
import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import javax.faces.context.FacesContext;
@@ -75,15 +76,7 @@
return targetExpression;
}
- String baseExpression = annotationEntry.getValueBindingExpression();
- if(baseExpression.contains("."))
- {
- baseExpression = baseExpression.substring(0, baseExpression.lastIndexOf("."));
- }
- else
- {
- baseExpression = baseExpression.substring(0, baseExpression.length() - 1);
- }
- return baseExpression + "." + targetExpression + "}";
+ ValueBindingExpression baseExpression = new ValueBindingExpression(annotationEntry.getValueBindingExpression());
+ return ValueBindingExpression.replaceOrAddProperty(baseExpression, targetExpression).getExpressionString();
}
}
Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java Fri Oct 10 11:31:38 2008
@@ -24,6 +24,7 @@
import org.apache.myfaces.extensions.validator.core.annotation.extractor.AnnotationExtractor;
import org.apache.myfaces.extensions.validator.core.validation.strategy.AbstractValidatorAdapter;
import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import javax.faces.component.UIComponent;
@@ -76,15 +77,7 @@
return targetExpression;
}
- String baseExpression = annotationEntry.getValueBindingExpression();
- if(baseExpression.contains("."))
- {
- baseExpression = baseExpression.substring(0, baseExpression.lastIndexOf("."));
- }
- else
- {
- baseExpression = baseExpression.substring(0, baseExpression.length() - 1);
- }
- return baseExpression + "." + targetExpression + "}";
+ ValueBindingExpression baseExpression = new ValueBindingExpression(annotationEntry.getValueBindingExpression());
+ return ValueBindingExpression.replaceOrAddProperty(baseExpression, targetExpression).getExpressionString();
}
}
Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/annotation/extractor/DefaultValueBindingScanningAnnotationExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/annotation/extractor/DefaultValueBindingScanningAnnotationExtractor.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/annotation/extractor/DefaultValueBindingScanningAnnotationExtractor.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/annotation/extractor/DefaultValueBindingScanningAnnotationExtractor.java Fri Oct 10 11:31:38 2008
@@ -20,6 +20,7 @@
import org.apache.myfaces.extensions.validator.core.annotation.AnnotationEntry;
import org.apache.myfaces.extensions.validator.core.annotation.extractor.DefaultComponentAnnotationExtractor;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import javax.faces.context.FacesContext;
@@ -48,7 +49,7 @@
return new ArrayList<AnnotationEntry>();
}
- String valueBindingExpression = ((String) object).trim();
+ ValueBindingExpression valueBindingExpression = new ValueBindingExpression(((String) object).trim());
List<AnnotationEntry> annotationEntries = new ArrayList<AnnotationEntry>();
@@ -58,10 +59,8 @@
if (entity != null)
{
//find and add annotations
- addPropertyAccessAnnotations(entity, annotationEntries,
- valueBindingExpression);
- addFieldAccessAnnotations(entity, annotationEntries,
- valueBindingExpression);
+ addPropertyAccessAnnotations(entity, annotationEntries, valueBindingExpression.getExpressionString());
+ addFieldAccessAnnotations(entity, annotationEntries, valueBindingExpression.getExpressionString());
}
return annotationEntries;
Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/recorder/CrossValidationUserInputRecorder.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/recorder/CrossValidationUserInputRecorder.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/recorder/CrossValidationUserInputRecorder.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/recorder/CrossValidationUserInputRecorder.java Fri Oct 10 11:31:38 2008
@@ -19,6 +19,7 @@
package org.apache.myfaces.extensions.validator.crossval.recorder;
import org.apache.myfaces.extensions.validator.core.recorder.ProcessedInformationRecorder;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import org.apache.myfaces.extensions.validator.crossval.ProcessedInformationEntry;
import org.apache.myfaces.extensions.validator.util.CrossValidationUtils;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
@@ -45,36 +46,37 @@
Map<String, ProcessedInformationEntry> valueBindingConvertedValueMapping = CrossValidationUtils
.getOrInitValueBindingConvertedValueMapping();
- String valueBindingExpression;
ProcessedInformationEntry entry;
- valueBindingExpression = ExtValUtils.getELHelper().getValueBindingExpression(uiComponent);
+ ValueBindingExpression vbe =
+ ExtValUtils.getELHelper().getValueBindingExpression(uiComponent);
- if (valueBindingExpression == null)
+ if (vbe == null)
{
return;
}
entry = new ProcessedInformationEntry();
- entry.setBean(ExtValUtils.getELHelper().getBaseObject(valueBindingExpression, uiComponent));
+ entry.setBean(ExtValUtils.getELHelper().getBaseObject(vbe, uiComponent));
entry.setConvertedValue(value);
entry.setComponent(uiComponent);
+ String key = vbe.getExpressionString();
//for local cross-validation
- if (valueBindingConvertedValueMapping.containsKey(valueBindingExpression) &&
- !valueBindingConvertedValueMapping.get(valueBindingExpression).getBean().equals(entry.getBean()))
+ if (valueBindingConvertedValueMapping.containsKey(key) &&
+ !valueBindingConvertedValueMapping.get(key).getBean().equals(entry.getBean()))
{
//for the validation within a complex component e.g. a table
//don't override existing expression (style: #{entry.property}) - make a special mapping
List<ProcessedInformationEntry> furtherEntries =
- valueBindingConvertedValueMapping.get(valueBindingExpression).getFurtherEntries();
+ valueBindingConvertedValueMapping.get(key).getFurtherEntries();
if (furtherEntries == null)
{
furtherEntries = new ArrayList<ProcessedInformationEntry>();
- valueBindingConvertedValueMapping.get(valueBindingExpression).setFurtherEntries(furtherEntries);
+ valueBindingConvertedValueMapping.get(key).setFurtherEntries(furtherEntries);
}
furtherEntries.add(entry);
@@ -82,7 +84,7 @@
else
{
//for normal validation
- valueBindingConvertedValueMapping.put(valueBindingExpression, entry);
+ valueBindingConvertedValueMapping.put(key, entry);
}
}
-}
\ No newline at end of file
+}
Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java Fri Oct 10 11:31:38 2008
@@ -26,6 +26,7 @@
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import org.apache.myfaces.extensions.validator.internal.ToDo;
import org.apache.myfaces.extensions.validator.internal.Priority;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import javax.faces.context.FacesContext;
import java.util.Map;
@@ -43,11 +44,11 @@
CrossValidationStorage crossValidationStorage,
String validationTarget, AbstractCompareStrategy compareStrategy)
{
- if (validationTarget.startsWith("#{") && validationTarget.endsWith("}")
- && validateValueBindingFormat(validationTarget))
+ if (ExtValUtils.getELHelper().isELTerm(validationTarget) &&
+ ExtValUtils.getELHelper().isExpressionValid(FacesContext.getCurrentInstance(), validationTarget))
{
tryToValidateValueBinding(crossValidationStorageEntry,
- validationTarget, crossValidationStorage, compareStrategy);
+ new ValueBindingExpression(validationTarget), crossValidationStorage, compareStrategy);
return true;
}
return false;
@@ -56,7 +57,7 @@
@ToDo(value = Priority.MEDIUM, description = "test")
protected boolean tryToValidateValueBinding(
CrossValidationStorageEntry crossValidationStorageEntry,
- String validationTarget,
+ ValueBindingExpression validationTarget,
CrossValidationStorage crossValidationStorage,
AbstractCompareStrategy compareStrategy)
{
@@ -64,11 +65,6 @@
FacesContext facesContext = FacesContext.getCurrentInstance();
- if (!ExtValUtils.getELHelper().isExpressionValid(facesContext, validationTarget))
- {
- return false;
- }
-
if (compareStrategy.isViolation(crossValidationStorageEntry
.getConvertedObject(), ExtValUtils.getELHelper().getValueOfExpression(
facesContext, validationTarget), crossValidationStorageEntry
@@ -123,14 +119,4 @@
return true;
}
-
- protected boolean validateValueBindingFormat(String targetProperty)
- {
- int bindingStartIndex = targetProperty.indexOf("#{");
- int bindingEndIndex = targetProperty.indexOf("}");
- int separatorIndex = targetProperty.indexOf(".");
-
- return (bindingStartIndex > -1 && bindingEndIndex > -1
- && separatorIndex > -1 && bindingStartIndex < bindingEndIndex && bindingEndIndex > separatorIndex);
- }
}
\ No newline at end of file
Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java Fri Oct 10 11:31:38 2008
@@ -24,6 +24,7 @@
import org.apache.myfaces.extensions.validator.crossval.strategy.AbstractCompareStrategy;
import org.apache.myfaces.extensions.validator.util.CrossValidationUtils;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -73,20 +74,17 @@
protected String createTargetValueBindingExpression(CrossValidationStorageEntry crossValidationStorageEntry,
String validationTarget)
{
- String baseValueBindingExpression =
- crossValidationStorageEntry.getAnnotationEntry().getValueBindingExpression();
-
- baseValueBindingExpression =
- baseValueBindingExpression.substring(0, baseValueBindingExpression.lastIndexOf("."));
-
- String targetValueBindingExpression;
-
- FacesContext facesContext = FacesContext.getCurrentInstance();
-
- targetValueBindingExpression = baseValueBindingExpression + "."
- + validationTarget + "}";
+ ValueBindingExpression baseExpression =
+ new ValueBindingExpression(crossValidationStorageEntry.getAnnotationEntry().getValueBindingExpression());
+ return ValueBindingExpression.replaceOrAddProperty(baseExpression, validationTarget).getExpressionString();
+ }
- if (!ExtValUtils.getELHelper().isExpressionValid(facesContext, targetValueBindingExpression))
+ protected boolean validateELExpression(CrossValidationStorageEntry crossValidationStorageEntry,
+ CrossValidationStorage crossValidationStorage,
+ String validationTarget,
+ AbstractCompareStrategy compareStrategy)
+ {
+ if (!ExtValUtils.getELHelper().isExpressionValid(FacesContext.getCurrentInstance(), validationTarget))
{
throw new IllegalStateException(
"invalid reference used: "
@@ -94,14 +92,6 @@
+ " please check your extval annotations");
}
- return targetValueBindingExpression;
- }
-
- protected boolean validateELExpression(CrossValidationStorageEntry crossValidationStorageEntry,
- CrossValidationStorage crossValidationStorage,
- String validationTarget,
- AbstractCompareStrategy compareStrategy)
- {
boolean violationFound = false;
Map<String, ProcessedInformationEntry> valueBindingConvertedValueMapping = CrossValidationUtils
.getOrInitValueBindingConvertedValueMapping();
Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java?rev=703554&r1=703553&r2=703554&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java Fri Oct 10 11:31:38 2008
@@ -20,6 +20,7 @@
import org.apache.myfaces.extensions.validator.core.annotation.AnnotationEntry;
import org.apache.myfaces.extensions.validator.core.validation.strategy.AbstractValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import org.apache.myfaces.extensions.validator.crossval.CrossValidationStorageEntry;
import org.apache.myfaces.extensions.validator.util.CrossValidationUtils;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
@@ -53,7 +54,8 @@
CrossValidationStorageEntry entry = new CrossValidationStorageEntry();
entry.setAnnotationEntry(annotationEntry);
- entry.setBean(ExtValUtils.getELHelper().getBaseObject(annotationEntry.getValueBindingExpression()));
+ String vbe = annotationEntry.getValueBindingExpression();
+ entry.setBean(ExtValUtils.getELHelper().getBaseObject(new ValueBindingExpression(vbe)));
entry.setComponent(uiComponent);
entry.setConvertedObject(convertedObject);
entry.setValidationStrategy(this);