bval-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Roman Stumm <roman.st...@gmx.de>
Subject Re: svn commit: r992148 - in /incubator/bval/sandbox/lang3-work: ./ bval-core/ bval-core/src/main/java/org/apache/bval/ bval-core/src/main/java/org/apache/bval/model/ bval-json/src/main/resources/org/apache/bval/json/ bval-jsr303/ bval-jsr303/src/main/java...
Date Fri, 03 Sep 2010 06:34:46 GMT
  Hi Matt,

as I remember, I tried to implement this quite a long time ago in 
agimatec-validation (the former name of the project), but because it 
caused more complications, than initially expected, i did a rollback 
afterwards. Your changes look good and I think, we could also solve the 
freemarker problem. +1 from my side to commit this. I think, the base 
metadata framework (=> MetaBean, MetaProperty) should support generic 
type, if the performance and memory overhead does not increase 
significally as a reasult of it.

Thanks for the work!

regards,
Roman

Am 03.09.10 01:13, schrieb Matt Benson:
> Guys,
>    I wanted to draw everyone's attention to this change:  A MetaBean only knows its raw
type, but I can't see any reason a MetaProperty shouldn't know its generic type, and the class
is defined such that it has a Type, rather than just a Class.  All things considered, I think
this change is fine:  The json freemarker template was the only thing that broke as a result
of this.  Since I'm the new guy to the project, I wanted to make sure there is every opportunity
to do the R part of CTR.  My next change, which includes a bugfix, depends on this one.
>
> Thanks,
> Matt
>
> On Sep 2, 2010, at 6:03 PM, mbenson@apache.org wrote:
>
>> Author: mbenson
>> Date: Thu Sep  2 23:03:55 2010
>> New Revision: 992148
>>
>> URL: http://svn.apache.org/viewvc?rev=992148&view=rev
>> Log:
>> MetaProperty.type is a type; typeClass still returns a class
>>
>> Modified:
>>     incubator/bval/sandbox/lang3-work/   (props changed)
>>     incubator/bval/sandbox/lang3-work/bval-core/pom.xml
>>     incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java
>>     incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
>>     incubator/bval/sandbox/lang3-work/bval-json/src/main/resources/org/apache/bval/json/bean-infos-json.ftl
>>     incubator/bval/sandbox/lang3-work/bval-jsr303/pom.xml
>>     incubator/bval/sandbox/lang3-work/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
>>     incubator/bval/sandbox/lang3-work/pom.xml
>>
>> Propchange: incubator/bval/sandbox/lang3-work/
>> ------------------------------------------------------------------------------
>>     svn:mergeinfo = /incubator/bval/trunk:992143
>>
>> Modified: incubator/bval/sandbox/lang3-work/bval-core/pom.xml
>> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-core/pom.xml?rev=992148&r1=992147&r2=992148&view=diff
>> ==============================================================================
>> --- incubator/bval/sandbox/lang3-work/bval-core/pom.xml (original)
>> +++ incubator/bval/sandbox/lang3-work/bval-core/pom.xml Thu Sep  2 23:03:55 2010
>> @@ -42,6 +42,10 @@
>>              <artifactId>commons-lang</artifactId>
>>          </dependency>
>>          <dependency>
>> +<groupId>org.apache.commons</groupId>
>> +<artifactId>commons-lang3</artifactId>
>> +</dependency>
>> +<dependency>
>>              <groupId>commons-logging</groupId>
>>              <artifactId>commons-logging</artifactId>
>>          </dependency>
>>
>> Modified: incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java
>> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java?rev=992148&r1=992147&r2=992148&view=diff
>> ==============================================================================
>> --- incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java
(original)
>> +++ incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java
Thu Sep  2 23:03:55 2010
>> @@ -22,6 +22,8 @@ import org.apache.bval.model.MetaPropert
>> import java.beans.BeanInfo;
>> import java.beans.Introspector;
>> import java.beans.PropertyDescriptor;
>> +import java.lang.reflect.Method;
>> +import java.lang.reflect.Type;
>> import java.util.Enumeration;
>>
>> import static org.apache.bval.model.Features.Property.*;
>> @@ -61,7 +63,7 @@ public final class IntrospectorMetaBeanF
>>      protected MetaProperty buildMetaProperty(PropertyDescriptor pd) {
>>          MetaProperty meta = new MetaProperty();
>>          meta.setName(pd.getName());
>> -        meta.setType(pd.getPropertyType());
>> +        meta.setType(determineGenericPropertyType(pd));
>>          if (pd.isHidden()) meta.putFeature(HIDDEN, Boolean.TRUE);
>>          if (pd.isPreferred()) meta.putFeature(PREFERRED, Boolean.TRUE);
>>          if (pd.isConstrained()) meta.putFeature(READONLY, Boolean.TRUE);
>> @@ -74,4 +76,16 @@ public final class IntrospectorMetaBeanF
>>          }
>>          return meta;
>>      }
>> +
>> +    private Type determineGenericPropertyType(PropertyDescriptor pd) {
>> +        Method m = pd.getReadMethod();
>> +        if (m != null) {
>> +            return m.getGenericReturnType();
>> +        }
>> +        m = pd.getWriteMethod();
>> +        if (m != null&&  m.getParameterTypes().length == 1) {
>> +            return m.getGenericParameterTypes()[0];
>> +        }
>> +        return pd.getPropertyType();
>> +    }
>> }
>>
>> Modified: incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
>> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java?rev=992148&r1=992147&r2=992148&view=diff
>> ==============================================================================
>> --- incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
(original)
>> +++ incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
Thu Sep  2 23:03:55 2010
>> @@ -16,9 +16,10 @@
>>   */
>> package org.apache.bval.model;
>>
>> -import java.lang.reflect.ParameterizedType;
>> import java.lang.reflect.Type;
>>
>> +import org.apache.commons.lang3.reflect.TypeUtils;
>> +
>> /**
>>   * Description: the meta description of a property of a bean. It supports a map
>>   * of features and multiple validations.<br/>
>> @@ -104,20 +105,14 @@ public class MetaProperty extends Featur
>>       * @return Class,<code>null</code>  if cannot be determined
>>       */
>>      public Class<?>  getTypeClass() {
>> -        return getTypeClass(type);
>> -    }
>> -
>> -    //TODO can this handle variables?  Perhaps move TypeUtils up from bval-jsr303
>> -    private static Class<?>  getTypeClass(Type rawType) {
>> -        if (rawType instanceof Class<?>) {
>> -            return (Class<?>) rawType;
>> -        } else if (rawType instanceof ParameterizedType) {
>> -            return getTypeClass(((ParameterizedType) rawType).getRawType()); //
recursion!
>> -        } else if(rawType instanceof DynaType) {
>> -            return getTypeClass(((DynaType)rawType).getRawType()); // recursion
>> -        } else {
>> -            return null; // class cannot be determined!
>> +        Type targetType = type instanceof DynaType ? ((DynaType) type)
>> +                .getRawType() : type;
>> +        if (targetType == null) {
>> +            return null;
>>          }
>> +        Type assigningType = getParentMetaBean() == null ? null
>> +                : getParentMetaBean().getBeanClass();
>> +        return TypeUtils.getRawType(targetType, assigningType);
>>      }
>>
>>      /**
>> @@ -177,4 +172,5 @@ public class MetaProperty extends Featur
>>      public String toString() {
>>          return "MetaProperty{" + "name='" + name + '\'' + ", type=" + type + '}';
>>      }
>> +
>> }
>>
>> Modified: incubator/bval/sandbox/lang3-work/bval-json/src/main/resources/org/apache/bval/json/bean-infos-json.ftl
>> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-json/src/main/resources/org/apache/bval/json/bean-infos-json.ftl?rev=992148&r1=992147&r2=992148&view=diff
>> ==============================================================================
>> --- incubator/bval/sandbox/lang3-work/bval-json/src/main/resources/org/apache/bval/json/bean-infos-json.ftl
(original)
>> +++ incubator/bval/sandbox/lang3-work/bval-json/src/main/resources/org/apache/bval/json/bean-infos-json.ftl
Thu Sep  2 23:03:55 2010
>> @@ -48,9 +48,10 @@ var metaBean${var} = {
>>     <#list metaBean.properties as property>
>>       "${property.name}":{
>>         "name" : "${property.name}",
>> -<#if property.type??>"type" : "${property.type.name}",</#if>
>> +<#if property.type??>"type" : "${property.type}",</#if>
>> +<#if property.typeClass??>"typeClass" : "${property.typeClass.name}",</#if>
>>         "features" : {<#if property.type??&&
>> -       property.type.enum>"enum" : {<#list property.type.enumConstants as
enum>"${enum.name()}": "${enum.name()}"<#if enum_has_next>,</#if></#list>}<#if
property.features?size&gt; 0>,</#if></#if><#list
>> +       property.type.enum!false>"enum" : {<#list property.type.enumConstants
as enum>"${enum.name()}": "${enum.name()}"<#if enum_has_next>,</#if></#list>}<#if
property.features?size&gt; 0>,</#if></#if><#list
>>         property.features?keys as featureKey>
>>         <#assign value = property.features[featureKey]>
>>         "${featureKey}" :<#rt/><#if
>>
>> Modified: incubator/bval/sandbox/lang3-work/bval-jsr303/pom.xml
>> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303/pom.xml?rev=992148&r1=992147&r2=992148&view=diff
>> ==============================================================================
>> --- incubator/bval/sandbox/lang3-work/bval-jsr303/pom.xml (original)
>> +++ incubator/bval/sandbox/lang3-work/bval-jsr303/pom.xml Thu Sep  2 23:03:55 2010
>> @@ -108,6 +108,10 @@
>>              <artifactId>commons-logging</artifactId>
>>          </dependency>
>>          <dependency>
>> +<groupId>org.apache.commons</groupId>
>> +<artifactId>commons-lang3</artifactId>
>> +</dependency>
>> +<dependency>
>>              <groupId>junit</groupId>
>>              <artifactId>junit</artifactId>
>>              <scope>test</scope>
>>
>> Modified: incubator/bval/sandbox/lang3-work/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
>> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java?rev=992148&r1=992147&r2=992148&view=diff
>> ==============================================================================
>> --- incubator/bval/sandbox/lang3-work/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
(original)
>> +++ incubator/bval/sandbox/lang3-work/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
Thu Sep  2 23:03:55 2010
>> @@ -129,7 +129,7 @@ public class Jsr303MetaBeanFactory imple
>>              if (!factoryContext.getFactory().getAnnotationIgnores()
>>                    .isIgnoreAnnotations(field)) {
>>                  if (metaProperty == null) {
>> -                    metaProperty = addMetaProperty(metabean, field.getName(), field.getType());
>> +                    metaProperty = addMetaProperty(metabean, field.getName(), field.getGenericType());
>>                      processAnnotations(metaProperty, beanClass, field,
>>                            new FieldAccess(field),
>>                            new AppendValidationToMeta(metaProperty));//) {
>> @@ -154,7 +154,7 @@ public class Jsr303MetaBeanFactory imple
>>                      // create a property for those methods for which there is not
yet a MetaProperty
>>                      if (metaProperty == null) {
>>                          metaProperty =
>> -                              addMetaProperty(metabean, propName, method.getReturnType());
>> +                              addMetaProperty(metabean, propName, method.getGenericReturnType());
>>                          processAnnotations(metaProperty, beanClass, method,
>>                                new MethodAccess(propName, method),
>>                                new AppendValidationToMeta(metaProperty));//) {
>>
>> Modified: incubator/bval/sandbox/lang3-work/pom.xml
>> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/pom.xml?rev=992148&r1=992147&r2=992148&view=diff
>> ==============================================================================
>> --- incubator/bval/sandbox/lang3-work/pom.xml (original)
>> +++ incubator/bval/sandbox/lang3-work/pom.xml Thu Sep  2 23:03:55 2010
>> @@ -308,6 +308,11 @@
>>                  <version>2.4</version>
>>              </dependency>
>>              <dependency>
>> +<groupId>org.apache.commons</groupId>
>> +<artifactId>commons-lang3</artifactId>
>> +<version>3.0-SNAPSHOT</version>
>> +</dependency>
>> +<dependency>
>>                  <groupId>commons-logging</groupId>
>>                  <artifactId>commons-logging</artifactId>
>>                  <version>1.1.1</version>
>>
>>


Mime
View raw message