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