HHH-6171 Parsing o.h.a.Type and o.h.a.Parameter

This commit is contained in:
Hardy Ferentschik 2011-05-18 14:52:36 +02:00
parent 2b694d7a86
commit d6b36fca5a
2 changed files with 26 additions and 6 deletions

View File

@ -29,6 +29,7 @@ import java.util.Map;
import javax.persistence.DiscriminatorType; import javax.persistence.DiscriminatorType;
import org.jboss.jandex.AnnotationInstance; import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationValue;
import org.jboss.jandex.DotName; import org.jboss.jandex.DotName;
import org.hibernate.AnnotationException; import org.hibernate.AnnotationException;
@ -207,8 +208,25 @@ public class MappedAttribute implements Comparable<MappedAttribute> {
* @return the final type for this mapped attribute * @return the final type for this mapped attribute
*/ */
private String determineType(String type, Map<String, String> typeParameters) { private String determineType(String type, Map<String, String> typeParameters) {
AnnotationInstance typeAnnotation = getIfExists( HibernateDotNames.TYPE );
if ( typeAnnotation == null ) {
// return discovered type
return type; return type;
} }
AnnotationValue parameterAnnotationValue = typeAnnotation.value( "parameters" );
if ( parameterAnnotationValue != null ) {
AnnotationInstance[] parameterAnnotations = parameterAnnotationValue.asNestedArray();
for ( AnnotationInstance parameterAnnotationInstance : parameterAnnotations ) {
typeParameters.put(
parameterAnnotationInstance.value( "name" ).asString(),
parameterAnnotationInstance.value( "value" ).asString()
);
}
}
return typeAnnotation.value( "type" ).asString();
}
} }

View File

@ -24,16 +24,17 @@
package org.hibernate.metamodel.source.annotations.util; package org.hibernate.metamodel.source.annotations.util;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.persistence.Id; import javax.persistence.Id;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
import org.jboss.jandex.Index; import org.jboss.jandex.Index;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;
import org.hibernate.metamodel.source.annotations.entity.ConfiguredClass; import org.hibernate.metamodel.source.annotations.entity.ConfiguredClass;
import org.hibernate.metamodel.source.annotations.entity.ConfiguredClassHierarchy; import org.hibernate.metamodel.source.annotations.entity.ConfiguredClassHierarchy;
import org.hibernate.metamodel.source.annotations.entity.MappedAttribute; import org.hibernate.metamodel.source.annotations.entity.MappedAttribute;
@ -72,8 +73,6 @@ public class TypeDiscoveryTest extends BaseUnitTestCase {
Iterator<ConfiguredClass> iter = hierarchies.iterator().next().iterator(); Iterator<ConfiguredClass> iter = hierarchies.iterator().next().iterator();
ConfiguredClass configuredClass = iter.next(); ConfiguredClass configuredClass = iter.next();
ClassInfo info = configuredClass.getClassInfo();
assertEquals( "wrong class", DotName.createSimple( Entity.class.getName() ), info.name() );
MappedAttribute property = configuredClass.getMappedProperty( "id" ); MappedAttribute property = configuredClass.getMappedProperty( "id" );
assertEquals( "Unexpected property type", "int", property.getType() ); assertEquals( "Unexpected property type", "int", property.getType() );
@ -82,8 +81,10 @@ public class TypeDiscoveryTest extends BaseUnitTestCase {
assertEquals( "Unexpected property type", String.class.getName(), property.getType() ); assertEquals( "Unexpected property type", String.class.getName(), property.getType() );
property = configuredClass.getMappedProperty( "customString" ); property = configuredClass.getMappedProperty( "customString" );
assertEquals( "Unexpected property type", String.class.getName(), property.getType() ); assertEquals( "Unexpected property type", "my.custom.Type", property.getType() );
Map<String, String> typeParameters = property.getTypeParameters();
assertEquals( "There should be a type parameter", "bar", typeParameters.get( "foo" ) );
} }
@javax.persistence.Entity @javax.persistence.Entity
@ -91,6 +92,7 @@ public class TypeDiscoveryTest extends BaseUnitTestCase {
@Id @Id
private int id; private int id;
private String string; private String string;
@Type(type = "my.custom.Type", parameters = { @Parameter(name = "foo", value = "bar") })
private String customString; private String customString;
} }
} }