Author: hardy.ferentschik
Date: 2010-01-28 11:56:51 -0500 (Thu, 28 Jan 2010)
New Revision: 18664
Added:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/FakeHero.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Superhero.java
Modified:
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/AccessTypeTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/ArrayTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/elementcollection/ElementCollectionTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/generics/GenericsTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/inheritance/InheritanceTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawTypes/RawTypesTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/CompilationTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/TestUtil.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Boy.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/XmlMappingTest.java
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/xmlmapped/boy.xml
jpamodelgen/trunk/src/test/suite/unit-tests.xml
Log:
METAGEN-17 - Consider XML for targetEntity
Modified:
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java
===================================================================
---
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -39,6 +39,7 @@
import org.hibernate.jpamodelgen.xml.jaxb.EmbeddableAttributes;
import org.hibernate.jpamodelgen.xml.jaxb.Entity;
import org.hibernate.jpamodelgen.xml.jaxb.Id;
+import org.hibernate.jpamodelgen.xml.jaxb.ManyToMany;
import org.hibernate.jpamodelgen.xml.jaxb.ManyToOne;
import org.hibernate.jpamodelgen.xml.jaxb.MappedSuperclass;
import org.hibernate.jpamodelgen.xml.jaxb.OneToMany;
@@ -87,7 +88,6 @@
this.importContext = new ImportContextImpl( getPackageName() );
this.element = element;
Attributes attributes = mappedSuperclass.getAttributes();
-
parseAttributes( attributes );
}
@@ -98,39 +98,7 @@
this.importContext = new ImportContextImpl( getPackageName() );
this.element = element;
EmbeddableAttributes attributes = embeddable.getAttributes();
-
- XmlMetaSingleAttribute attribute;
- for ( Basic basic : attributes.getBasic() ) {
- attribute = new XmlMetaSingleAttribute( this, basic.getName(), getType(
basic.getName(), null ) );
- members.add( attribute );
- }
-
- for ( ManyToOne manyToOne : attributes.getManyToOne() ) {
- attribute = new XmlMetaSingleAttribute(
- this, manyToOne.getName(), getType( manyToOne.getName(), manyToOne.getTargetEntity()
)
- );
- members.add( attribute );
- }
-
- for ( OneToOne oneToOne : attributes.getOneToOne() ) {
- attribute = new XmlMetaSingleAttribute(
- this, oneToOne.getName(), getType( oneToOne.getName(), oneToOne.getTargetEntity() )
- );
- members.add( attribute );
- }
-
- XmlMetaCollection metaCollection;
- for ( OneToMany oneToMany : attributes.getOneToMany() ) {
- String[] types = getCollectionType( oneToMany.getName(), oneToMany.getTargetEntity()
);
- metaCollection = new XmlMetaCollection( this, oneToMany.getName(), types[0], types[1]
);
- members.add( metaCollection );
- }
-
- for ( ElementCollection collection : attributes.getElementCollection() ) {
- String[] types = getCollectionType( collection.getName(), collection.getTargetClass()
);
- metaCollection = new XmlMetaCollection( this, collection.getName(), types[0], types[1]
);
- members.add( metaCollection );
- }
+ parseEmbeddableAttributes( attributes );
}
public String getSimpleName() {
@@ -272,6 +240,12 @@
}
XmlMetaCollection metaCollection;
+ for ( ManyToMany manyToMany : attributes.getManyToMany() ) {
+ String[] types = getCollectionType( manyToMany.getName(), manyToMany.getTargetEntity()
);
+ metaCollection = new XmlMetaCollection( this, manyToMany.getName(), types[0], types[1]
);
+ members.add( metaCollection );
+ }
+
for ( OneToMany oneToMany : attributes.getOneToMany() ) {
String[] types = getCollectionType( oneToMany.getName(), oneToMany.getTargetEntity()
);
metaCollection = new XmlMetaCollection( this, oneToMany.getName(), types[0], types[1]
);
@@ -284,4 +258,45 @@
members.add( metaCollection );
}
}
+
+ private void parseEmbeddableAttributes(EmbeddableAttributes attributes) {
+ XmlMetaSingleAttribute attribute;
+ for ( Basic basic : attributes.getBasic() ) {
+ attribute = new XmlMetaSingleAttribute( this, basic.getName(), getType(
basic.getName(), null ) );
+ members.add( attribute );
+ }
+
+ for ( ManyToOne manyToOne : attributes.getManyToOne() ) {
+ attribute = new XmlMetaSingleAttribute(
+ this, manyToOne.getName(), getType( manyToOne.getName(), manyToOne.getTargetEntity()
)
+ );
+ members.add( attribute );
+ }
+
+ for ( OneToOne oneToOne : attributes.getOneToOne() ) {
+ attribute = new XmlMetaSingleAttribute(
+ this, oneToOne.getName(), getType( oneToOne.getName(), oneToOne.getTargetEntity() )
+ );
+ members.add( attribute );
+ }
+
+ XmlMetaCollection metaCollection;
+ for ( ManyToMany manyToMany : attributes.getManyToMany() ) {
+ String[] types = getCollectionType( manyToMany.getName(), manyToMany.getTargetEntity()
);
+ metaCollection = new XmlMetaCollection( this, manyToMany.getName(), types[0], types[1]
);
+ members.add( metaCollection );
+ }
+
+ for ( OneToMany oneToMany : attributes.getOneToMany() ) {
+ String[] types = getCollectionType( oneToMany.getName(), oneToMany.getTargetEntity()
);
+ metaCollection = new XmlMetaCollection( this, oneToMany.getName(), types[0], types[1]
);
+ members.add( metaCollection );
+ }
+
+ for ( ElementCollection collection : attributes.getElementCollection() ) {
+ String[] types = getCollectionType( collection.getName(), collection.getTargetClass()
);
+ metaCollection = new XmlMetaCollection( this, collection.getName(), types[0], types[1]
);
+ members.add( metaCollection );
+ }
+ }
}
Modified:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/AccessTypeTest.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/AccessTypeTest.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/AccessTypeTest.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -20,10 +20,12 @@
import org.testng.annotations.Test;
import org.hibernate.jpamodelgen.test.util.CompilationTest;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAbsenceOfField;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertFieldType;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfField;
+import org.hibernate.jpamodelgen.test.util.TestUtil;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertAbsenceOfFieldInMetamodelFor;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertFieldTypeInMetaModelFor;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfFieldInMetamodelFor;
+
/**
* @author Emmanuel Bernard
* @author Hardy Ferentschik
@@ -31,58 +33,58 @@
public class AccessTypeTest extends CompilationTest {
@Test
- public void testExcludeTransientFieldAndStatic() throws Exception {
- assertAbsenceOfField( Product.class.getName() + "_",
"nonPersistent" );
- assertAbsenceOfField( Product.class.getName() + "_",
"nonPersistent2" );
+ public void testExcludeTransientFieldAndStatic() {
+ TestUtil.assertAbsenceOfFieldInMetamodelFor( Product.class, "nonPersistent"
);
+ TestUtil.assertAbsenceOfFieldInMetamodelFor( Product.class, "nonPersistent2"
);
}
@Test
- public void testDefaultAccessTypeOnEntity() throws Exception {
- assertAbsenceOfField( User.class.getName() + "_", "nonPersistent"
);
+ public void testDefaultAccessTypeOnEntity() {
+ TestUtil.assertAbsenceOfFieldInMetamodelFor( User.class, "nonPersistent" );
}
@Test
- public void testDefaultAccessTypeForSubclassOfEntity() throws Exception {
- assertAbsenceOfField( Customer.class.getName() + "_",
"nonPersistent" );
+ public void testDefaultAccessTypeForSubclassOfEntity() {
+ TestUtil.assertAbsenceOfFieldInMetamodelFor( Customer.class, "nonPersistent"
);
}
@Test
- public void testDefaultAccessTypeForEmbeddable() throws Exception {
- assertAbsenceOfField( Detail.class.getName() + "_", "nonPersistent"
);
+ public void testDefaultAccessTypeForEmbeddable() {
+ TestUtil.assertAbsenceOfFieldInMetamodelFor( Detail.class, "nonPersistent"
);
}
@Test
- public void testInheritedAccessTypeForEmbeddable() throws Exception {
- assertAbsenceOfField( Country.class.getName() + "_",
"nonPersistent" );
- assertAbsenceOfField(
- Pet.class.getName() + "_", "nonPersistent", "Collection of
embeddable not taken care of"
+ public void testInheritedAccessTypeForEmbeddable() {
+ TestUtil.assertAbsenceOfFieldInMetamodelFor( Country.class, "nonPersistent"
);
+ assertAbsenceOfFieldInMetamodelFor(
+ Pet.class, "nonPersistent", "Collection of embeddable not taken care
of"
);
}
@Test
- public void testDefaultAccessTypeForMappedSuperclass() throws Exception {
- assertAbsenceOfField( Detail.class.getName() + "_", "volume" );
+ public void testDefaultAccessTypeForMappedSuperclass() {
+ TestUtil.assertAbsenceOfFieldInMetamodelFor( Detail.class, "volume" );
}
@Test
- public void testExplicitAccessTypeAndDefaultFromRootEntity() throws Exception {
- assertAbsenceOfField(
- LivingBeing.class.getName() + "_",
+ public void testExplicitAccessTypeAndDefaultFromRootEntity() {
+ assertAbsenceOfFieldInMetamodelFor(
+ LivingBeing.class,
"nonPersistent",
"explicit access type on mapped superclass"
);
- assertAbsenceOfField( Hominidae.class.getName() + "_",
"nonPersistent", "explicit access type on entity" );
- assertAbsenceOfField(
- Human.class.getName() + "_",
+ assertAbsenceOfFieldInMetamodelFor( Hominidae.class, "nonPersistent",
"explicit access type on entity" );
+ assertAbsenceOfFieldInMetamodelFor(
+ Human.class,
"nonPersistent",
"proper inheritance from root entity access type"
);
}
@Test
- public void testMemberAccessType() throws Exception {
- assertPresenceOfField( Customer.class.getName() + "_", "goodPayer",
"access type overriding" );
- assertFieldType( Customer.class.getName() + "_", "goodPayer",
Boolean.class, "access type overriding" );
+ public void testMemberAccessType() {
+ assertPresenceOfFieldInMetamodelFor( Customer.class, "goodPayer",
"access type overriding" );
+ assertFieldTypeInMetaModelFor( Customer.class, "goodPayer", Boolean.class,
"access type overriding" );
}
@Override
Modified:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/ArrayTest.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/ArrayTest.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/ArrayTest.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -20,27 +20,29 @@
import org.testng.annotations.Test;
import org.hibernate.jpamodelgen.test.util.CompilationTest;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertFieldType;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertFieldTypeInMetaModelFor;
+
/**
* @author Hardy Ferentschik
*/
public class ArrayTest extends CompilationTest {
+
/**
* METAGEN-2
*/
@Test
- public void testPrimitiveArray() throws Exception {
- assertFieldType( Image.class.getName() + "_", "data", byte[].class,
"Wrong type for field." );
+ public void testPrimitiveArray() {
+ assertFieldTypeInMetaModelFor( Image.class, "data", byte[].class, "Wrong
type for field." );
}
/**
* METAGEN-2
*/
@Test
- public void testIntegerArray() throws Exception {
- assertFieldType(
- TemperatureSamples.class.getName() + "_", "samples",
Integer[].class, "Wrong type for field."
+ public void testIntegerArray() {
+ assertFieldTypeInMetaModelFor(
+ TemperatureSamples.class, "samples", Integer[].class, "Wrong type for
field."
);
}
Modified:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/elementcollection/ElementCollectionTest.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/elementcollection/ElementCollectionTest.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/elementcollection/ElementCollectionTest.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -20,10 +20,10 @@
import org.testng.annotations.Test;
import org.hibernate.jpamodelgen.test.util.CompilationTest;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertClassGenerated;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertClassNotFound;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertNoGeneratedSourceFile;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertNoSourceFileGeneratedFor;
+
/**
* @author Hardy Ferentschik
*/
@@ -33,10 +33,10 @@
*/
@Test
public void testElementCollectionOnMap() {
- assertClassGenerated( House.class.getName() + "_" );
- assertClassGenerated( House.class.getName() + "_" );
+ assertMetamodelClassGeneratedFor( House.class );
+ assertMetamodelClassGeneratedFor( House.class );
// side effect of METAGEN-8 was that a meta class for String was created!
- assertNoGeneratedSourceFile( String.class.getName() + "_" );
+ assertNoSourceFileGeneratedFor( String.class );
}
@Override
Modified:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/generics/GenericsTest.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/generics/GenericsTest.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/generics/GenericsTest.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -19,11 +19,9 @@
import org.testng.annotations.Test;
-import org.hibernate.jpamodelgen.test.elementcollection.House;
import org.hibernate.jpamodelgen.test.util.CompilationTest;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertClassGenerated;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertNoGeneratedSourceFile;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
/**
* @author Emmanuel Bernard
@@ -32,8 +30,8 @@
@Test
public void testGenerics() {
- assertClassGenerated( Parent.class.getName() + "_" );
- assertClassGenerated( Child.class.getName() + "_" );
+ assertMetamodelClassGeneratedFor( Parent.class );
+ assertMetamodelClassGeneratedFor( Child.class );
}
@Override
Modified:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/inheritance/InheritanceTest.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/inheritance/InheritanceTest.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/inheritance/InheritanceTest.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -20,8 +20,9 @@
import org.testng.annotations.Test;
import org.hibernate.jpamodelgen.test.util.CompilationTest;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertSuperClass;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertSuperClassRelationShipInMetamodel;
+
/**
* @author Emmanuel Bernard
* @author Hardy Ferentschik
@@ -29,15 +30,13 @@
public class InheritanceTest extends CompilationTest {
@Test
public void testSuperEntity() throws Exception {
- assertSuperClass(
- Customer.class.getName() + "_", User.class.getName() + "_"
- );
+ assertSuperClassRelationShipInMetamodel( Customer.class, User.class );
}
@Test
public void testMappedSuperclass() throws Exception {
- assertSuperClass( House.class.getName() + "_", Building.class.getName() +
"_" );
- assertSuperClass( Building.class.getName() + "_", Area.class.getName() +
"_" );
+ assertSuperClassRelationShipInMetamodel( House.class, Building.class );
+ assertSuperClassRelationShipInMetamodel( Building.class, Area.class );
}
@Override
Modified:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawTypes/RawTypesTest.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawTypes/RawTypesTest.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawTypes/RawTypesTest.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -21,7 +21,7 @@
import org.hibernate.jpamodelgen.test.util.CompilationTest;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertClassGenerated;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
/**
* @author Emmanuel Bernard
@@ -30,8 +30,8 @@
@Test
public void testGenerics() {
- assertClassGenerated( DeskWithRawType.class.getName() + "_" );
- assertClassGenerated( EmployeeWithRawType.class.getName() + "_" );
+ assertMetamodelClassGeneratedFor( DeskWithRawType.class );
+ assertMetamodelClassGeneratedFor( EmployeeWithRawType.class );
}
@Override
Modified:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/CompilationTest.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/CompilationTest.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/CompilationTest.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -55,6 +55,7 @@
public CompilationTest() {
try {
+ TestUtil.clearOutputFolder();
compile();
}
catch ( Exception e ) {
Modified:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/TestUtil.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/TestUtil.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/TestUtil.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -18,15 +18,13 @@
package org.hibernate.jpamodelgen.test.util;
import java.io.File;
-import java.io.FilenameFilter;
import java.lang.reflect.Field;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import java.util.Collection;
-import java.util.Vector;
import org.testng.Assert;
+
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
@@ -38,6 +36,7 @@
public class TestUtil {
private static final String PATH_SEPARATOR = System.getProperty(
"file.separator" );
+ private static final String META_MODEL_CLASS_POSTFIX = "_";
private static final String outBaseDir;
static {
@@ -51,51 +50,54 @@
private TestUtil() {
}
- public static void assertClassGenerated(String className) {
- try {
- assertNotNull( Class.forName( className ) );
+ public static void clearOutputFolder() {
+ File outDir = new File( outBaseDir );
+ File[] files = outDir.listFiles();
+ for ( File file : files ) {
+ file.delete();
}
- catch ( ClassNotFoundException e ) {
- fail( className + " was not generated." );
- }
}
- public static void assertClassNotFound(String className) {
+ /**
+ * Asserts that a metamodel class for the specified class got generated.
+ *
+ * @param clazz the class for which a metamodel class should have been generated.
+ */
+ public static void assertMetamodelClassGeneratedFor(Class<?> clazz) {
+ assertNotNull( clazz, "Class parameter cannot be null" );
+ String metaModelClassName = clazz.getName() + META_MODEL_CLASS_POSTFIX;
try {
- Class.forName( className );
- fail( "Class " + className + " should not have been found." );
+ assertNotNull( Class.forName( metaModelClassName ) );
}
catch ( ClassNotFoundException e ) {
- // success
+ fail( metaModelClassName + " was not generated." );
}
}
- public static void assertNoGeneratedSourceFile(String className) {
+ public static void assertNoSourceFileGeneratedFor(Class<?> clazz) {
+ assertNotNull( clazz, "Class parameter cannot be null" );
+ String metaModelClassName = clazz.getName() + META_MODEL_CLASS_POSTFIX;
// generate the file name
- String fileName = className.replace( ".", PATH_SEPARATOR );
+ String fileName = metaModelClassName.replace( ".", PATH_SEPARATOR );
fileName = fileName.concat( ".java" );
- File sourceFile = new File(outBaseDir + PATH_SEPARATOR + fileName);
- assertFalse(sourceFile.exists(), "There should be no source file: " +
fileName);
-
+ File sourceFile = new File( outBaseDir + PATH_SEPARATOR + fileName );
+ assertFalse( sourceFile.exists(), "There should be no source file: " +
fileName );
}
- public static void assertAbsenceOfField(String className, String fieldName) throws
ClassNotFoundException {
- assertAbsenceOfField( className, fieldName, "field should not be persistent"
);
+ public static void assertAbsenceOfFieldInMetamodelFor(Class<?> clazz, String
fieldName) {
+ assertAbsenceOfFieldInMetamodelFor( clazz, fieldName, "field should not be
persistent" );
}
- public static void assertAbsenceOfField(String className, String fieldName, String
errorString)
- throws ClassNotFoundException {
- Assert.assertFalse( isFieldHere( className, fieldName ), errorString );
+ public static void assertAbsenceOfFieldInMetamodelFor(Class<?> clazz, String
fieldName, String errorString) {
+ Assert.assertFalse( hasFieldInMetamodelFor( clazz, fieldName ), errorString );
}
- public static void assertPresenceOfField(String className, String fieldName, String
errorString)
- throws ClassNotFoundException {
- Assert.assertTrue( isFieldHere( className, fieldName ), errorString );
+ public static void assertPresenceOfFieldInMetamodelFor(Class<?> clazz, String
fieldName, String errorString) {
+ Assert.assertTrue( hasFieldInMetamodelFor( clazz, fieldName ), errorString );
}
- public static void assertFieldType(String className, String fieldName, Class
expectedType, String errorString)
- throws ClassNotFoundException {
- Field field = getField( className, fieldName );
+ public static void assertFieldTypeInMetaModelFor(Class<?> clazz, String fieldName,
Class expectedType, String errorString) {
+ Field field = getFieldFromMetamodelFor( clazz, fieldName );
assertNotNull( field );
ParameterizedType type = ( ParameterizedType ) field.getGenericType();
Type actualType = type.getActualTypeArguments()[1];
@@ -106,15 +108,17 @@
assertEquals( actualType, expectedType, errorString );
}
- public static void assertSuperClass(String className, String superClassName) {
+ public static void assertSuperClassRelationShipInMetamodel(Class<?> entityClass,
Class<?> superEntityClass) {
+ String entityModelClassName = entityClass.getName() + META_MODEL_CLASS_POSTFIX;
+ String superEntityModelClassName = superEntityClass.getName() +
META_MODEL_CLASS_POSTFIX;
Class<?> clazz;
Class<?> superClazz;
try {
- clazz = Class.forName( className );
- superClazz = Class.forName( superClassName );
+ clazz = Class.forName( entityModelClassName );
+ superClazz = Class.forName( superEntityModelClassName );
Assert.assertEquals(
clazz.getSuperclass(), superClazz,
- "Entity " + superClassName + " should be the superclass of " +
className
+ "Entity " + superEntityModelClassName + " should be the superclass of
" + entityModelClassName
);
}
catch ( ClassNotFoundException e ) {
@@ -122,18 +126,24 @@
}
}
- private static boolean isFieldHere(String className, String fieldName) throws
ClassNotFoundException {
- return getField( className, fieldName ) != null;
+ private static boolean hasFieldInMetamodelFor(Class<?> clazz, String fieldName) {
+ return getFieldFromMetamodelFor( clazz, fieldName ) != null;
}
- public static Field getField(String className, String fieldName) throws
ClassNotFoundException {
- Class<?> clazz = Class.forName( className );
+ public static Field getFieldFromMetamodelFor(Class<?> entityClass, String
fieldName) {
+ String entityModelClassName = entityClass.getName() + META_MODEL_CLASS_POSTFIX;
+ Field field = null;
try {
- return clazz.getField( fieldName );
+ Class<?> clazz = Class.forName( entityModelClassName );
+ field = clazz.getField( fieldName );
}
+ catch ( ClassNotFoundException e ) {
+ fail( "Unable to load class " + entityModelClassName );
+ }
catch ( NoSuchFieldException e ) {
- return null;
+ field = null;
}
+ return field;
}
}
Modified:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Boy.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Boy.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Boy.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -33,6 +33,36 @@
*/
private List<String> nickNames;
+ private Superhero favoriteSuperhero;
+
+ private List<Superhero> knowsHeros;
+
+ private List<Superhero> savedBy;
+
+ public List<Superhero> getSavedBy() {
+ return savedBy;
+ }
+
+ public void setSavedBy(List<Superhero> savedBy) {
+ this.savedBy = savedBy;
+ }
+
+ public Superhero getFavoriteSuperhero() {
+ return favoriteSuperhero;
+ }
+
+ public void setFavoriteSuperhero(Superhero favoriteSuperhero) {
+ this.favoriteSuperhero = favoriteSuperhero;
+ }
+
+ public List<Superhero> getKnowsHeros() {
+ return knowsHeros;
+ }
+
+ public void setKnowsHeros(List<Superhero> knowsHeros) {
+ this.knowsHeros = knowsHeros;
+ }
+
public long getId() {
return id;
}
Added:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/FakeHero.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/FakeHero.java
(rev 0)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/FakeHero.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -0,0 +1,24 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, Red Hat, Inc. and/or its affiliates, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed 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.hibernate.jpamodelgen.test.xmlmapped;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class FakeHero {
+}
\ No newline at end of file
Added:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Superhero.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Superhero.java
(rev 0)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Superhero.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -0,0 +1,62 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, Red Hat, Inc. and/or its affiliates, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed 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.hibernate.jpamodelgen.test.xmlmapped;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Hardy Ferentschik
+ */
+@Entity
+public class Superhero {
+ @Id
+ @GeneratedValue
+ private long id;
+
+ private String name;
+
+ private String superPower;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getSuperPower() {
+ return superPower;
+ }
+
+ public void setSuperPower(String superPower) {
+ this.superPower = superPower;
+ }
+}
+
+
Modified:
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/XmlMappingTest.java
===================================================================
---
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/XmlMappingTest.java 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/XmlMappingTest.java 2010-01-28
16:56:51 UTC (rev 18664)
@@ -17,54 +17,81 @@
*/
package org.hibernate.jpamodelgen.test.xmlmapped;
-import java.lang.reflect.Field;
-import java.lang.reflect.ParameterizedType;
-
import org.testng.annotations.Test;
import org.hibernate.jpamodelgen.test.util.CompilationTest;
-import static junit.framework.Assert.assertTrue;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertClassGenerated;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfField;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.assertSuperClass;
-import static org.hibernate.jpamodelgen.test.util.TestUtil.getField;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertFieldTypeInMetaModelFor;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfFieldInMetamodelFor;
+import static
org.hibernate.jpamodelgen.test.util.TestUtil.assertSuperClassRelationShipInMetamodel;
/**
* @author Hardy Ferentschik
*/
public class XmlMappingTest extends CompilationTest {
@Test
- public void testXmlConfiguredEmbeddedClassGenerated() throws Exception {
- assertClassGenerated( Address.class.getName() + "_" );
+ public void testXmlConfiguredEmbeddedClassGenerated() {
+ assertMetamodelClassGeneratedFor( Address.class );
}
@Test
- public void testXmlConfiguredMappedSuperclassGenerated() throws Exception {
- assertClassGenerated( Building.class.getName() + "_" );
- assertPresenceOfField(
- Building.class.getName() + "_", "address", "address field
should exist"
+ public void testXmlConfiguredMappedSuperclassGenerated() {
+ assertMetamodelClassGeneratedFor( Building.class );
+ assertPresenceOfFieldInMetamodelFor( Building.class, "address", "address
field should exist" );
+ }
+
+ /**
+ * METAGEN-17
+ */
+ @Test
+ public void testTargetEntityOnOneToOne() {
+ assertMetamodelClassGeneratedFor( Boy.class );
+ assertPresenceOfFieldInMetamodelFor( Boy.class, "favoriteSuperhero",
"favoriteSuperhero field should exist" );
+ assertFieldTypeInMetaModelFor(
+ Boy.class, "favoriteSuperhero", FakeHero.class, "target entity
overridden in xml"
);
}
+ /**
+ * METAGEN-17
+ */
@Test
- public void testXmlConfiguredElementCollection() throws Exception {
- assertClassGenerated( Boy.class.getName() + "_" );
- assertPresenceOfField(
- Boy.class.getName() + "_", "nickNames", "nickNames field
should exist"
+ public void testTargetEntityOnOneToMany() {
+ assertMetamodelClassGeneratedFor( Boy.class );
+ assertPresenceOfFieldInMetamodelFor( Boy.class, "knowsHeros",
"knowsHeros field should exist" );
+ assertFieldTypeInMetaModelFor(
+ Boy.class, "knowsHeros", FakeHero.class, "target entity overridden in
xml"
);
- Field field = getField( Boy.class.getName() + "_", "nickNames" );
- ParameterizedType type = ( ParameterizedType ) field.getGenericType();
- assertTrue( "Wrong target type", type.getActualTypeArguments()[1].equals(
Integer.class ) );
}
+ /**
+ * METAGEN-17
+ */
@Test
- public void testClassHierarchy() throws Exception {
- assertClassGenerated( Mammal.class.getName() + "_" );
- assertClassGenerated( LivingBeing.class.getName() + "_" );
- assertSuperClass( Mammal.class.getName() + "_", LivingBeing.class.getName() +
"_" );
+ public void testTargetEntityOnManyToMany() {
+ assertMetamodelClassGeneratedFor( Boy.class );
+ assertPresenceOfFieldInMetamodelFor( Boy.class, "savedBy", "savedBy
field should exist" );
+ assertFieldTypeInMetaModelFor(
+ Boy.class, "savedBy", FakeHero.class, "target entity overridden in
xml"
+ );
}
+ @Test
+ public void testXmlConfiguredElementCollection() {
+ assertMetamodelClassGeneratedFor( Boy.class );
+ assertPresenceOfFieldInMetamodelFor( Boy.class, "nickNames", "nickNames
field should exist" );
+ assertFieldTypeInMetaModelFor( Boy.class, "nickNames", Integer.class,
"target class overridden in xml" );
+ }
+
+
+ @Test
+ public void testClassHierarchy() {
+ assertMetamodelClassGeneratedFor( Mammal.class );
+ assertMetamodelClassGeneratedFor( LivingBeing.class );
+ assertSuperClassRelationShipInMetamodel( Mammal.class, LivingBeing.class );
+ }
+
@Test(expectedExceptions = ClassNotFoundException.class)
public void testNonExistentMappedClassesGetIgnored() throws Exception {
Class.forName( "org.hibernate.jpamodelgen.test.model.Dummy_" );
Modified:
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/xmlmapped/boy.xml
===================================================================
---
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/xmlmapped/boy.xml 2010-01-28
09:35:59 UTC (rev 18663)
+++
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/xmlmapped/boy.xml 2010-01-28
16:56:51 UTC (rev 18664)
@@ -10,6 +10,9 @@
<attributes>
<id name="id"/>
<basic name="name"/>
+ <one-to-many name="knowsHeros"
target-entity="org.hibernate.jpamodelgen.test.xmlmapped.FakeHero"/>
+ <one-to-one name="favoriteSuperhero"
target-entity="org.hibernate.jpamodelgen.test.xmlmapped.FakeHero"/>
+ <many-to-many name="savedBy"
target-entity="org.hibernate.jpamodelgen.test.xmlmapped.FakeHero"/>
<element-collection name="nickNames"
target-class="java.lang.Integer"/>
</attributes>
</entity>
Modified: jpamodelgen/trunk/src/test/suite/unit-tests.xml
===================================================================
--- jpamodelgen/trunk/src/test/suite/unit-tests.xml 2010-01-28 09:35:59 UTC (rev 18663)
+++ jpamodelgen/trunk/src/test/suite/unit-tests.xml 2010-01-28 16:56:51 UTC (rev 18664)
@@ -6,7 +6,9 @@
<package name="org.hibernate.jpamodelgen.test.accesstype"/>
<package name="org.hibernate.jpamodelgen.test.arraytype"/>
<package
name="org.hibernate.jpamodelgen.test.elementcollection"/>
+ <package name="org.hibernate.jpamodelgen.test.generics"/>
<package name="org.hibernate.jpamodelgen.test.inheritance"/>
+ <package name="org.hibernate.jpamodelgen.test.rawTypes"/>
<package name="org.hibernate.jpamodelgen.test.xmlmapped"/>
</packages>
</test>