Repository: wicket
Updated Branches:
  refs/heads/WICKET-6318-configurable-property-expression-resolver 3a6db1bf7 -> 
fa0f12624


WICKET-6313 simplified IPropertyExpressionResolver, keeping one 
CachingPropertyLocator per OGNLPropertyExpressionResolver instance, javadoc


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/ede069b9
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/ede069b9
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/ede069b9

Branch: refs/heads/WICKET-6318-configurable-property-expression-resolver
Commit: ede069b9b9617eb96b1705ab3515cc5ebe530279
Parents: 3a6db1b
Author: Pedro Henrique Oliveira dos Santos <[email protected]>
Authored: Mon Feb 13 03:13:53 2017 -0200
Committer: Pedro Henrique Oliveira dos Santos <[email protected]>
Committed: Mon Feb 13 03:13:53 2017 -0200

----------------------------------------------------------------------
 .../util/lang/IPropertyExpressionResolver.java  | 31 +++++++++-
 .../core/util/lang/IPropertyResolver.java       |  8 +++
 .../lang/OGNLPropertyExpressionResolver.java    | 63 +++++++-------------
 .../wicket/core/util/lang/PropertyResolver.java | 12 ++--
 .../util/parser/PropertyExpressionResolver.java | 13 +---
 .../OGNLPropertyExpressionResolverTest.java     | 14 ++---
 6 files changed, 76 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ede069b9/wicket-core/src/main/java/org/apache/wicket/core/util/lang/IPropertyExpressionResolver.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/IPropertyExpressionResolver.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/IPropertyExpressionResolver.java
index 18c8141..4574be2 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/IPropertyExpressionResolver.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/IPropertyExpressionResolver.java
@@ -1,12 +1,37 @@
 package org.apache.wicket.core.util.lang;
 
+import org.apache.wicket.core.util.reflection.ObjectWithGetAndSet;
+
+/**
+ * Resolves property expression to workable {@link ObjectWithGetAndSet}
+ * 
+ * @author pedro
+ */
 public interface IPropertyExpressionResolver
 {
 
-       <T> T getValue(String expression, T object);
-
-       <T> Class<T> getPropertyClass(String expression, Object object, 
Class<?> targetClass);
+       /**
+        * @param expression
+        * @param object
+        *            Optional, but will enable the resolver to find subclasses 
in polymorphic types
+        * @param clz
+        * @return {@link ObjectWithGetAndSet}
+        */
+       ObjectWithGetAndSet resolve(String expression, Object object, Class<? 
extends Object> clz);
 
+       /**
+        * Creates a new value to each null property in the way to the 
expressed property. So the
+        * property expression: "attr1.attr2.attr3" would have "attr1" and 
"attr2" tested for null, in
+        * which case they would get new constructed values to guarantee a 
place to set the new value at
+        * "attr3"
+        * 
+        * @param expression
+        * @param object
+        * @param value
+        * @param prc
+        */
+       // TODO find a better name, multiple values are being setting here
+       // TODO if possible, to move to PropertyExpression
        void setValue(String expression, Object object, Object value, 
PropertyResolverConverter prc);
 
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/ede069b9/wicket-core/src/main/java/org/apache/wicket/core/util/lang/IPropertyResolver.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/IPropertyResolver.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/IPropertyResolver.java
index e72a29e..65b7cdb 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/IPropertyResolver.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/IPropertyResolver.java
@@ -2,6 +2,14 @@ package org.apache.wicket.core.util.lang;
 
 import org.apache.wicket.core.util.reflection.IGetAndSet;
 
+/**
+ * Resolves a property string to an {@link IGetAndSet}.
+ * 
+ * @see {@link IPropertyExpressionResolver} Property expression are resolved by
+ *      {@link IPropertyExpressionResolver} implementations instead
+ *
+ * @author pedro
+ */
 public interface IPropertyResolver
 {
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ede069b9/wicket-core/src/main/java/org/apache/wicket/core/util/lang/OGNLPropertyExpressionResolver.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/OGNLPropertyExpressionResolver.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/OGNLPropertyExpressionResolver.java
index 76f5814..085adb3 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/OGNLPropertyExpressionResolver.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/OGNLPropertyExpressionResolver.java
@@ -26,8 +26,6 @@ import 
org.apache.wicket.core.util.reflection.CachingPropertyLocator;
 import org.apache.wicket.core.util.reflection.IGetAndSet;
 import org.apache.wicket.core.util.reflection.ObjectWithGetAndSet;
 import org.apache.wicket.util.string.Strings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * This class parses expressions to lookup or set a value on the object that 
is given. <br/>
@@ -65,15 +63,11 @@ import org.slf4j.LoggerFactory;
 
 public class OGNLPropertyExpressionResolver implements 
IPropertyExpressionResolver
 {
-
-       /** Log. */
-       private static final Logger log = 
LoggerFactory.getLogger(PropertyResolver.class);
-
        private final static int RETURN_NULL = 0;
        private final static int CREATE_NEW_VALUE = 1;
        private final static int RESOLVE_CLASS = 2;
 
-       private static IPropertyResolver locator = new CachingPropertyLocator( 
new DefaultPropertyLocator());
+       private IPropertyResolver locator = new CachingPropertyLocator( new 
DefaultPropertyLocator());
 
 
        /**
@@ -86,14 +80,9 @@ public class OGNLPropertyExpressionResolver implements 
IPropertyExpressionResolv
         *            The object which is evaluated.
         * @return The value that is evaluated. Null something in the 
expression evaluated to null.
         */
-       @Override
-       public  Object getValue(final String expression, final Object object)
+       //TODO remove, only being used in tests
+       public Object getValue(final String expression, final Object object)
        {
-               if (expression == null || expression.equals("") || object == 
null)
-               {
-                       return object;
-               }
-
                ObjectWithGetAndSet objectWithGetAndSet = 
getObjectWithGetAndSet(expression, object,
                        RETURN_NULL);
                if (objectWithGetAndSet == null)
@@ -152,27 +141,6 @@ public class OGNLPropertyExpressionResolver implements 
IPropertyExpressionResolv
        }
 
        /**
-        * @param <T>
-        * @param expression
-        * @param clz
-        * @return class of the target Class property expression
-        * @throws WicketRuntimeException
-        *             if class cannot be resolved
-        */
-       @Override
-       @SuppressWarnings("unchecked")
-       public <T> Class<T> getPropertyClass(final String expression, Object 
object, final Class<?> clz)
-       {
-               ObjectWithGetAndSet objectWithGetAndSet = 
getObjectWithGetAndSet(expression, object,
-                       RESOLVE_CLASS, clz);
-               if (objectWithGetAndSet == null)
-               {
-                       throw new WicketRuntimeException("No Class returned for 
expression: " + expression
-                               + " for getting the target class of: " + clz);
-               }
-               return (Class<T>)objectWithGetAndSet.getTargetClass();
-       }
-
        /**
         * @param expression
         * @param object
@@ -180,7 +148,7 @@ public class OGNLPropertyExpressionResolver implements 
IPropertyExpressionResolv
         * @throws WicketRuntimeException
         *             if there is no such field
         */
-       public static Field getPropertyField(final String expression, final 
Object object)
+       public Field getPropertyField(final String expression, final Object 
object)
        {
                ObjectWithGetAndSet objectWithGetAndSet = 
getObjectWithGetAndSet(expression, object,
                        RESOLVE_CLASS);
@@ -199,7 +167,7 @@ public class OGNLPropertyExpressionResolver implements 
IPropertyExpressionResolv
         * @throws WicketRuntimeException
         *             if there is no getter method
         */
-       public static Method getPropertyGetter(final String expression, final 
Object object)
+       public Method getPropertyGetter(final String expression, final Object 
object)
        {
                ObjectWithGetAndSet objectWithGetAndSet = 
getObjectWithGetAndSet(expression, object,
                        RESOLVE_CLASS);
@@ -218,7 +186,7 @@ public class OGNLPropertyExpressionResolver implements 
IPropertyExpressionResolv
         * @throws WicketRuntimeException
         *             if there is no setter method
         */
-       public static Method getPropertySetter(final String expression, final 
Object object)
+       public Method getPropertySetter(final String expression, final Object 
object)
        {
                ObjectWithGetAndSet objectWithGetAndSet = 
getObjectWithGetAndSet(expression, object,
                        RESOLVE_CLASS);
@@ -230,6 +198,19 @@ public class OGNLPropertyExpressionResolver implements 
IPropertyExpressionResolv
                return objectWithGetAndSet.getSetter();
        }
 
+       @Override
+       public ObjectWithGetAndSet resolve(String expression, Object object, 
Class<? extends Object> clz)
+       {
+               ObjectWithGetAndSet objectWithGetAndSet = 
getObjectWithGetAndSet(expression, object,
+                       RESOLVE_CLASS, clz);
+               if (objectWithGetAndSet == null)
+               {
+                       throw new WicketRuntimeException("Null object returned 
for expression: " + expression
+                               + " for getting the target class of: " + clz);
+               }
+               return objectWithGetAndSet;
+       }
+
        /**
         * Just delegating the call to the original getObjectAndGetSetter 
passing the object type as
         * parameter.
@@ -239,7 +220,7 @@ public class OGNLPropertyExpressionResolver implements 
IPropertyExpressionResolv
         * @param tryToCreateNull
         * @return {@link ObjectWithGetAndSet}
         */
-       private static ObjectWithGetAndSet getObjectWithGetAndSet(final String 
expression,
+       private ObjectWithGetAndSet getObjectWithGetAndSet(final String 
expression,
                final Object object, int tryToCreateNull)
        {
                return getObjectWithGetAndSet(expression, object, 
tryToCreateNull, object.getClass());
@@ -260,7 +241,7 @@ public class OGNLPropertyExpressionResolver implements 
IPropertyExpressionResolv
         * @return final getAndSet and the target to apply it on, or {@code 
null} if expression results
         *         in an intermediate null
         */
-       private static ObjectWithGetAndSet getObjectWithGetAndSet(final String 
expression,
+       private ObjectWithGetAndSet getObjectWithGetAndSet(final String 
expression,
                final Object object, final int tryToCreateNull, Class<?> clz)
        {
                String expressionBracketsSeperated = 
Strings.replaceAll(expression, "[", ".[").toString();
@@ -376,7 +357,7 @@ public class OGNLPropertyExpressionResolver implements 
IPropertyExpressionResolv
                return -1;
        }
 
-       private static IGetAndSet getGetAndSet(String exp, final Class<?> clz)
+       private IGetAndSet getGetAndSet(String exp, final Class<?> clz)
        {
 
                IGetAndSet getAndSet = locator.get(clz, exp);

http://git-wip-us.apache.org/repos/asf/wicket/blob/ede069b9/wicket-core/src/main/java/org/apache/wicket/core/util/lang/PropertyResolver.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/PropertyResolver.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/PropertyResolver.java
index ad4063f..b7f87dc 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/PropertyResolver.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/PropertyResolver.java
@@ -27,15 +27,19 @@ public final class PropertyResolver
 
        public static <T> T getValue(String expression, T object)
        {
-               return 
Application.get().getApplicationSettings().getPropertyExpressionResolver()
-                       .getValue(expression, object);
+               if (expression == null || expression.equals("") || object == 
null)
+               {
+                       return object;
+               }
+               IPropertyExpressionResolver propertyExpressionResolver = 
Application.get().getApplicationSettings().getPropertyExpressionResolver();
+               return (T)propertyExpressionResolver.resolve(expression, 
object, object.getClass()).getValue();
        }
 
        public static <T> Class<T> getPropertyClass(String expression, Object 
object,
                Class<?> targetClass)
        {
-               return 
Application.get().getApplicationSettings().getPropertyExpressionResolver()
-                       .getPropertyClass(expression, object, targetClass);
+               IPropertyExpressionResolver propertyExpressionResolver = 
Application.get().getApplicationSettings().getPropertyExpressionResolver();
+               return (Class<T>)propertyExpressionResolver.resolve(expression, 
object, targetClass).getTargetClass();
        }
 
        public static void setValue(String expression, Object object, Object 
value,

http://git-wip-us.apache.org/repos/asf/wicket/blob/ede069b9/wicket-core/src/main/java/org/apache/wicket/core/util/parser/PropertyExpressionResolver.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/util/parser/PropertyExpressionResolver.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/util/parser/PropertyExpressionResolver.java
index 22049d2..fd976aa 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/util/parser/PropertyExpressionResolver.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/util/parser/PropertyExpressionResolver.java
@@ -2,27 +2,20 @@ package org.apache.wicket.core.util.parser;
 
 import org.apache.wicket.core.util.lang.IPropertyExpressionResolver;
 import org.apache.wicket.core.util.lang.PropertyResolverConverter;
+import org.apache.wicket.core.util.reflection.ObjectWithGetAndSet;
 
 public class PropertyExpressionResolver implements IPropertyExpressionResolver
 {
-
        @Override
-       public <T> T getValue(String expression, T object)
+       public ObjectWithGetAndSet resolve(String expression, Object object, 
Class<? extends Object> clz)
        {
                return null;
        }
 
        @Override
-       public <T> Class<T> getPropertyClass(String expression, Object object, 
Class<?> targetClass)
+       public void setValue(String expression, Object object, Object value, 
PropertyResolverConverter prc)
        {
-               return null;
-       }
 
-       @Override
-       public void setValue(String expression, Object object, Object value,
-               PropertyResolverConverter prc)
-       {
-               
        }
 
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/ede069b9/wicket-core/src/test/java/org/apache/wicket/util/lang/OGNLPropertyExpressionResolverTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/util/lang/OGNLPropertyExpressionResolverTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/util/lang/OGNLPropertyExpressionResolverTest.java
index f371496..6168142 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/util/lang/OGNLPropertyExpressionResolverTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/util/lang/OGNLPropertyExpressionResolverTest.java
@@ -457,20 +457,20 @@ public class OGNLPropertyExpressionResolverTest extends 
WicketTestCase
        {
                Address address = new Address();
 
-               Class<?> clazz = ognlResolver.getPropertyClass("number", 
address, address.getClass());
+               Class<?> clazz = ognlResolver.resolve("number", address, 
address.getClass()).getTargetClass();
                assertEquals(int.class, clazz);
 
                Person person = new Person();
                person.setAddress(new Address());
 
-               clazz = ognlResolver.getPropertyClass("address.number", person, 
person.getClass());
+               clazz = ognlResolver.resolve("address.number", person, 
person.getClass()).getTargetClass();
                assertEquals(int.class, clazz);
 
                person.setAddressArray(new Address[] { new Address(), new 
Address() });
-               clazz = ognlResolver.getPropertyClass("addressArray[0]", 
person, person.getClass());
+               clazz = ognlResolver.resolve("addressArray[0]", person, 
person.getClass()).getTargetClass();
                assertEquals(Address.class, clazz);
 
-               clazz = ognlResolver.getPropertyClass("addressArray[0].number", 
person, person.getClass());
+               clazz = ognlResolver.resolve("addressArray[0].number", person, 
person.getClass()).getTargetClass();
                assertEquals(int.class, clazz);
        }
 
@@ -605,10 +605,10 @@ public class OGNLPropertyExpressionResolverTest extends 
WicketTestCase
        {
                Person person = new Person();
                assertEquals(String.class,
-                       ognlResolver.getPropertyClass("country.name", person, 
person.getClass()));
+                       ognlResolver.resolve("country.name", person, 
person.getClass()).getTargetClass());
                try
                {
-                       
ognlResolver.getPropertyClass("country.subCountry.name", person, 
person.getClass());
+                       ognlResolver.resolve("country.subCountry.name", person, 
person.getClass()).getTargetClass();
                        fail("country.subCountry shouldnt be found");
                }
                catch (Exception e)
@@ -616,7 +616,7 @@ public class OGNLPropertyExpressionResolverTest extends 
WicketTestCase
 
                }
                person.setCountry(new Country2("test", new Country("test")));
-               ognlResolver.getPropertyClass("country.subCountry.name", 
person, person.getClass());
+               ognlResolver.resolve("country.subCountry.name", person, 
person.getClass()).getTargetClass();
        }
 
        /**

Reply via email to