[hibernate-commits] Hibernate SVN: r18677 - in jpamodelgen/trunk: src/main/java/org/hibernate/jpamodelgen and 14 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Feb 1 15:49:11 EST 2010


Author: hardy.ferentschik
Date: 2010-02-01 15:49:09 -0500 (Mon, 01 Feb 2010)
New Revision: 18677

Added:
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Person.java
   jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/mixedmode/
   jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/mixedmode/orm.xml
   jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/mixedmode/persistence.xml
Removed:
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/
   jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/
Modified:
   jpamodelgen/trunk/pom.xml
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.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/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/XmlMappingTest.java
   jpamodelgen/trunk/src/test/suite/unit-tests.xml
Log:
METAGEN-9 - Extended infrastructure to allow the specification of persistence.xml

Modified: jpamodelgen/trunk/pom.xml
===================================================================
--- jpamodelgen/trunk/pom.xml	2010-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/pom.xml	2010-02-01 20:49:09 UTC (rev 18677)
@@ -24,6 +24,17 @@
             <classifier>jdk15</classifier>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.5.6</version>
+        </dependency>        
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <scope>test</scope>
+            <version>1.5.6</version>
+        </dependency>        
     </dependencies>
 
     <licenses>
@@ -150,6 +161,7 @@
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.4.3</version>
                 <configuration>
+                    <redirectTestOutputToFile>true</redirectTestOutputToFile>                    
                     <systemProperties>
                         <property>
                             <name>sourceBaseDir</name>

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java	2010-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -112,8 +112,8 @@
 			//F..king Ch...t Have those people used their horrible APIs even once?
 			final Element superClassElement = ( ( DeclaredType ) superClass ).asElement();
 			String superClassName = ( ( TypeElement ) superClassElement ).getQualifiedName().toString();
-			if ( context.getMetaEntitiesToProcess().containsKey( superClassName )
-					|| context.getMetaSuperclassAndEmbeddableToProcess().containsKey( superClassName ) ) {
+			if ( context.getMetaEntities().containsKey( superClassName )
+					|| context.getMetaSuperclassAndEmbeddable().containsKey( superClassName ) ) {
 				pw.print( " extends " + superClassName + "_" );
 			}
 		}

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java	2010-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -35,17 +35,22 @@
  * @author Emmanuel Bernard
  */
 public class Context {
+	private static final String PATH_SEPARATOR = System.getProperty( "file.separator" );
+	private static final String DEFAULT_PERSISTENCE_XML_LOCATION = "/META-INF/persistence.xml";
+	private final Map<String, MetaEntity> metaEntities = new HashMap<String, MetaEntity>();
+	private final Map<String, MetaEntity> metaSuperclassAndEmbeddable = new HashMap<String, MetaEntity>();
 
-	private final Map<String, MetaEntity> metaEntitiesToProcess = new HashMap<String, MetaEntity>();
-	private final Map<String, MetaEntity> metaSuperclassAndEmbeddableToProcess = new HashMap<String, MetaEntity>();
+	private final ProcessingEnvironment pe;
+	private final boolean logDebug;
+	private final String persistenceXmlLocation;
 
-	private ProcessingEnvironment pe;
-	private boolean logDebug = false;
 
 	//used to cache access types
 	private Map<TypeElement, AccessTypeHolder> accessTypes = new HashMap<TypeElement, AccessTypeHolder>();
 	private Set<String> elementsAlreadyProcessed = new HashSet<String>();
 
+	private boolean isPersistenceUnitCompletelyXmlConfigured;
+
 	private static class AccessTypeHolder {
 		public AccessType elementAccessType;
 		public AccessType hierarchyAccessType;
@@ -53,24 +58,38 @@
 
 	public Context(ProcessingEnvironment pe) {
 		this.pe = pe;
-		String debugParam = pe.getOptions().get( JPAMetaModelEntityProcessor.DEBUG_OPTION );
-		if ( debugParam != null && "true".equals( debugParam ) ) {
-			logDebug = true;
+
+		if ( pe.getOptions().get( JPAMetaModelEntityProcessor.PERSISTENCE_XML_OPTION ) != null ) {
+			String tmp = pe.getOptions().get( JPAMetaModelEntityProcessor.PERSISTENCE_XML_OPTION );
+			if ( !tmp.startsWith( PATH_SEPARATOR ) ) {
+				tmp = PATH_SEPARATOR + tmp;
+			}
+			persistenceXmlLocation = tmp;
 		}
+		else {
+			persistenceXmlLocation = DEFAULT_PERSISTENCE_XML_LOCATION;
+		}
+
+		logDebug = Boolean.parseBoolean( pe.getOptions().get( JPAMetaModelEntityProcessor.DEBUG_OPTION ) );
+
 	}
 
 	public ProcessingEnvironment getProcessingEnvironment() {
 		return pe;
 	}
 
-	public Map<String, MetaEntity> getMetaEntitiesToProcess() {
-		return metaEntitiesToProcess;
+	public String getPersistenceXmlLocation() {
+		return persistenceXmlLocation;
 	}
 
-	public Map<String, MetaEntity> getMetaSuperclassAndEmbeddableToProcess() {
-		return metaSuperclassAndEmbeddableToProcess;
+	public Map<String, MetaEntity> getMetaEntities() {
+		return metaEntities;
 	}
 
+	public Map<String, MetaEntity> getMetaSuperclassAndEmbeddable() {
+		return metaSuperclassAndEmbeddable;
+	}
+
 	public void addAccessType(TypeElement element, AccessType accessType) {
 		AccessTypeHolder typeHolder = accessTypes.get( element );
 		if ( typeHolder == null ) {
@@ -94,7 +113,7 @@
 		return typeHolder != null ? typeHolder.elementAccessType : null;
 	}
 
-	public AccessType getDefaultAccessTypeForHerarchy(TypeElement element) {
+	public AccessType getDefaultAccessTypeForHierarchy(TypeElement element) {
 		final AccessTypeHolder typeHolder = accessTypes.get( element );
 		return typeHolder != null ? typeHolder.hierarchyAccessType : null;
 	}
@@ -105,6 +124,7 @@
 
 	//only process Embeddable or Superclass
 	//does not work for Entity (risk of circularity)
+
 	public void processElement(TypeElement element, AccessType defaultAccessTypeForHierarchy) {
 		if ( elementsAlreadyProcessed.contains( element.getQualifiedName().toString() ) ) {
 			logMessage( Diagnostic.Kind.OTHER, "Element already processed (ignoring): " + element );
@@ -121,4 +141,12 @@
 		}
 		pe.getMessager().printMessage( type, message );
 	}
+
+	public boolean isPersistenceUnitCompletelyXmlConfigured() {
+		return isPersistenceUnitCompletelyXmlConfigured;
+	}
+
+	public void setPersistenceUnitCompletelyXmlConfigured(boolean persistenceUnitCompletelyXmlConfigured) {
+		isPersistenceUnitCompletelyXmlConfigured = persistenceUnitCompletelyXmlConfigured;
+	}
 }

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java	2010-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -52,6 +52,7 @@
 @SupportedOptions({ JPAMetaModelEntityProcessor.DEBUG_OPTION })
 public class JPAMetaModelEntityProcessor extends AbstractProcessor {
 	public static final String DEBUG_OPTION = "debug";
+	public static final String PERSISTENCE_XML_OPTION = "persistenceXml";
 	private static final Boolean ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS = Boolean.FALSE;
 
 	private boolean xmlProcessed = false;
@@ -87,6 +88,10 @@
 			return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS;
 		}
 
+		if ( context.isPersistenceUnitCompletelyXmlConfigured() ) {
+			return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS;
+		}
+
 		Set<? extends Element> elements = roundEnvironment.getRootElements();
 		for ( Element element : elements ) {
 			context.logMessage( Diagnostic.Kind.OTHER, "Processing " + element.toString() );
@@ -97,17 +102,17 @@
 	}
 
 	private void createMetaModelClasses() {
-		for ( MetaEntity entity : context.getMetaEntitiesToProcess().values() ) {
+		for ( MetaEntity entity : context.getMetaEntities().values() ) {
 			context.logMessage( Diagnostic.Kind.OTHER, "Writing meta model for " + entity );
 			ClassWriter.writeFile( entity, context );
 		}
 
 		//process left over, in most cases is empty
 		for ( String className : context.getElementsAlreadyProcessed() ) {
-			context.getMetaSuperclassAndEmbeddableToProcess().remove( className );
+			context.getMetaSuperclassAndEmbeddable().remove( className );
 		}
 
-		for ( MetaEntity entity : context.getMetaSuperclassAndEmbeddableToProcess().values() ) {
+		for ( MetaEntity entity : context.getMetaSuperclassAndEmbeddable().values() ) {
 			context.logMessage( Diagnostic.Kind.OTHER, "Writing meta model for " + entity );
 			ClassWriter.writeFile( entity, context );
 		}
@@ -129,22 +134,23 @@
 	}
 
 	private void handleRootElementAnnotationMirrors(final Element element) {
-
 		List<? extends AnnotationMirror> annotationMirrors = element.getAnnotationMirrors();
-
 		for ( AnnotationMirror mirror : annotationMirrors ) {
 			if ( element.getKind() == ElementKind.CLASS ) {
 				if ( TypeUtils.isAnnotationMirrorOfType( mirror, Entity.class ) ) {
 					AnnotationMetaEntity metaEntity = new AnnotationMetaEntity( ( TypeElement ) element, context );
-					// TODO instead of just adding the entity we have to do some merging.
-					context.getMetaEntitiesToProcess().put( metaEntity.getQualifiedName(), metaEntity );
+					MetaEntity alreadyExistingMetaEntity = context.getMetaEntities()
+							.get( metaEntity.getQualifiedName() );
+					if ( alreadyExistingMetaEntity != null && alreadyExistingMetaEntity.isMetaComplete() ) {
+						continue;
+					}
+					context.getMetaEntities().put( metaEntity.getQualifiedName(), metaEntity );
 				}
 				else if ( TypeUtils.isAnnotationMirrorOfType( mirror, MappedSuperclass.class )
 						|| TypeUtils.isAnnotationMirrorOfType( mirror, Embeddable.class ) ) {
 					AnnotationMetaEntity metaEntity = new AnnotationMetaEntity( ( TypeElement ) element, context );
-
 					// TODO instead of just adding the entity we have to do some merging.
-					context.getMetaSuperclassAndEmbeddableToProcess().put( metaEntity.getQualifiedName(), metaEntity );
+					context.getMetaSuperclassAndEmbeddable().put( metaEntity.getQualifiedName(), metaEntity );
 				}
 			}
 		}

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java	2010-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -42,4 +42,6 @@
     String importType(Name qualifiedName);
 
 	TypeElement getTypeElement();
+
+	boolean isMetaComplete();
 }

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java	2010-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -139,6 +139,11 @@
 		return membersFound;
 	}
 
+	@Override
+	public boolean isMetaComplete() {
+		return false;
+	}
+
 	private void addPersistentMembers(
 			List<MetaAttribute> membersFound,
 			AccessType elementAccessType,
@@ -212,7 +217,7 @@
 		AccessType accessType = context.getAccessType( searchedElement );
 
 		if ( defaultAccessTypeForHierarchy == null ) {
-			this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHerarchy( searchedElement );
+			this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHierarchy( searchedElement );
 		}
 		if ( accessType != null ) {
 			context.logMessage( Diagnostic.Kind.OTHER, "Found in cache" + searchedElement + ":" + accessType );
@@ -249,7 +254,7 @@
 							accessType = kind == ElementKind.FIELD ? AccessType.FIELD : AccessType.PROPERTY;
 							//FIXME enlever in niveau
 							if ( defaultAccessTypeForHierarchy == null ) {
-								this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHerarchy(
+								this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHierarchy(
 										searchedElement
 								);
 								//we've discovered the class hierarchy, let's cache it

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java	2010-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -62,17 +62,15 @@
 		COLLECTIONS.put( "java.util.Map", "javax.persistence.metamodel.MapAttribute" );
 	}
 
-	final private String clazzName;
+	private final String clazzName;
+	private final String packageName;
+	private final ImportContext importContext;
+	private final List<MetaAttribute> members = new ArrayList<MetaAttribute>();
+	private final TypeElement element;
+	private final Context context;
 
-	final private String packageName;
+	private boolean isMetaComplete;
 
-	final private ImportContext importContext;
-
-	final private List<MetaAttribute> members = new ArrayList<MetaAttribute>();
-
-	private TypeElement element;
-	private Context context;
-
 	public XmlMetaEntity(Entity ormEntity, String packageName, TypeElement element, Context context) {
 		this.clazzName = ormEntity.getClazz();
 		this.packageName = packageName;
@@ -140,6 +138,11 @@
 		return element;
 	}
 
+	@Override
+	public boolean isMetaComplete() {
+		return isMetaComplete;
+	}
+
 	private String[] getCollectionType(String propertyName, String explicitTargetEntity) {
 		String types[] = new String[2];
 		for ( Element elem : element.getEnclosedElements() ) {

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java	2010-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -48,8 +48,6 @@
  * @author Hardy Ferentschik
  */
 public class XmlParser {
-
-	private static final String PERSISTENCE_XML = "/META-INF/persistence.xml";
 	private static final String ORM_XML = "/META-INF/orm.xml";
 	private static final String PERSISTENCE_XML_XSD = "persistence_2_0.xsd";
 	private static final String ORM_XSD = "orm_2_0.xsd";
@@ -63,17 +61,24 @@
 	}
 
 	public void parsePersistenceXml() {
-		Persistence persistence = parseXml( PERSISTENCE_XML, Persistence.class, PERSISTENCE_XML_XSD );
-		if ( persistence != null ) {
-			List<Persistence.PersistenceUnit> persistenceUnits = persistence.getPersistenceUnit();
-			for ( Persistence.PersistenceUnit unit : persistenceUnits ) {
-				List<String> mappingFiles = unit.getMappingFile();
-				for ( String mappingFile : mappingFiles ) {
-					parsingOrmXml( mappingFile );
-				}
+		// /META-INF/orm.xml is implicit
+		parsingOrmXml( ORM_XML );
+
+		Persistence persistence = parseXml(
+				context.getPersistenceXmlLocation(), Persistence.class, PERSISTENCE_XML_XSD
+		);
+		if ( persistence == null ) {
+			return;
+		}
+
+		List<Persistence.PersistenceUnit> persistenceUnits = persistence.getPersistenceUnit();
+		for ( Persistence.PersistenceUnit unit : persistenceUnits ) {
+			List<String> mappingFiles = unit.getMappingFile();
+			for ( String mappingFile : mappingFiles ) {
+				parsingOrmXml( mappingFile );
 			}
 		}
-		parsingOrmXml( ORM_XML ); // /META-INF/orm.xml is implicit
+
 	}
 
 	private void parsingOrmXml(String resource) {
@@ -83,6 +88,7 @@
 		}
 
 		AccessType accessType = determineGlobalAccessType( mappings );
+		context.setPersistenceUnitCompletelyXmlConfigured( determineGlobalXmlMetadataCompleteness( mappings ) );
 
 		parseEntities( mappings, accessType );
 		parseEmbeddable( mappings, accessType );
@@ -108,13 +114,13 @@
 					context
 			);
 
-			if ( context.getMetaEntitiesToProcess().containsKey( fullyQualifiedClassName ) ) {
+			if ( context.getMetaEntities().containsKey( fullyQualifiedClassName ) ) {
 				context.logMessage(
 						Diagnostic.Kind.WARNING,
 						fullyQualifiedClassName + " was already processed once. Skipping second occurance."
 				);
 			}
-			context.getMetaEntitiesToProcess().put( fullyQualifiedClassName, metaEntity );
+			context.getMetaEntities().put( fullyQualifiedClassName, metaEntity );
 		}
 	}
 
@@ -137,13 +143,13 @@
 					context
 			);
 
-			if ( context.getMetaSuperclassAndEmbeddableToProcess().containsKey( fullyQualifiedClassName ) ) {
+			if ( context.getMetaSuperclassAndEmbeddable().containsKey( fullyQualifiedClassName ) ) {
 				context.logMessage(
 						Diagnostic.Kind.WARNING,
 						fullyQualifiedClassName + " was already processed once. Skipping second occurance."
 				);
 			}
-			context.getMetaSuperclassAndEmbeddableToProcess().put( fullyQualifiedClassName, metaEntity );
+			context.getMetaSuperclassAndEmbeddable().put( fullyQualifiedClassName, metaEntity );
 		}
 	}
 
@@ -167,13 +173,13 @@
 					context
 			);
 
-			if ( context.getMetaSuperclassAndEmbeddableToProcess().containsKey( fullyQualifiedClassName ) ) {
+			if ( context.getMetaSuperclassAndEmbeddable().containsKey( fullyQualifiedClassName ) ) {
 				context.logMessage(
 						Diagnostic.Kind.WARNING,
 						fullyQualifiedClassName + " was already processed once. Skipping second occurance."
 				);
 			}
-			context.getMetaSuperclassAndEmbeddableToProcess().put( fullyQualifiedClassName, metaEntity );
+			context.getMetaSuperclassAndEmbeddable().put( fullyQualifiedClassName, metaEntity );
 		}
 	}
 
@@ -283,7 +289,6 @@
 		return utils.getTypeElement( fullyQualifiedClassName );
 	}
 
-
 	private AccessType determineGlobalAccessType(EntityMappings mappings) {
 		AccessType accessType = DEFAULT_XML_ACCESS_TYPE;
 
@@ -305,6 +310,15 @@
 		return accessType;
 	}
 
+	private boolean determineGlobalXmlMetadataCompleteness(EntityMappings mappings) {
+		boolean metadataComplete = false;
+		PersistenceUnitMetadata puMetadata = mappings.getPersistenceUnitMetadata();
+		if ( puMetadata != null && puMetadata.getXmlMappingMetadataComplete() != null ) {
+			metadataComplete = true;
+		}
+		return metadataComplete;
+	}
+
 	private AccessType mapXmlAccessTypeToJpaAccessType(org.hibernate.jpamodelgen.xml.jaxb.AccessType xmlAccessType) {
 		switch ( xmlAccessType ) {
 			case FIELD: {

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-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/AccessTypeTest.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -17,6 +17,9 @@
 */
 package org.hibernate.jpamodelgen.test.accesstype;
 
+import java.util.Collections;
+import java.util.Map;
+
 import org.testng.annotations.Test;
 
 import org.hibernate.jpamodelgen.test.util.CompilationTest;
@@ -91,4 +94,9 @@
 	protected String getTestPackage() {
 		return Product.class.getPackage().getName();
 	}
+
+	@Override
+	protected Map<String, String> getProcessorOptions() {
+		return Collections.emptyMap();
+	}
 }

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-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/ArrayTest.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -17,6 +17,9 @@
 */
 package org.hibernate.jpamodelgen.test.arraytype;
 
+import java.util.Collections;
+import java.util.Map;
+
 import org.testng.annotations.Test;
 
 import org.hibernate.jpamodelgen.test.util.CompilationTest;
@@ -50,4 +53,9 @@
 	protected String getTestPackage() {
 		return Image.class.getPackage().getName();
 	}
+
+	@Override
+	protected Map<String, String> getProcessorOptions() {
+		return Collections.emptyMap();
+	}
 }
\ No newline at end of file

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-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/elementcollection/ElementCollectionTest.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -17,6 +17,9 @@
 */
 package org.hibernate.jpamodelgen.test.elementcollection;
 
+import java.util.Collections;
+import java.util.Map;
+
 import org.testng.annotations.Test;
 
 import org.hibernate.jpamodelgen.test.util.CompilationTest;
@@ -57,6 +60,11 @@
 
 	@Override
 	protected String getTestPackage() {
-		return House.class.getPackage().getName();
+		return ElementCollectionTest.class.getPackage().getName();
 	}
+
+	@Override
+	protected Map<String, String> getProcessorOptions() {
+		return Collections.emptyMap();
+	}	
 }
\ No newline at end of file

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-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/generics/GenericsTest.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -17,6 +17,9 @@
 */
 package org.hibernate.jpamodelgen.test.generics;
 
+import java.util.Collections;
+import java.util.Map;
+
 import org.testng.annotations.Test;
 
 import org.hibernate.jpamodelgen.test.util.CompilationTest;
@@ -36,6 +39,11 @@
 
 	@Override
 	protected String getTestPackage() {
-		return Parent.class.getPackage().getName();
+		return GenericsTest.class.getPackage().getName();
 	}
+
+	@Override
+	protected Map<String, String> getProcessorOptions() {
+		return Collections.emptyMap();
+	}
 }
\ No newline at end of file

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-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/inheritance/InheritanceTest.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -17,6 +17,9 @@
 */
 package org.hibernate.jpamodelgen.test.inheritance;
 
+import java.util.Collections;
+import java.util.Map;
+
 import org.testng.annotations.Test;
 
 import org.hibernate.jpamodelgen.test.util.CompilationTest;
@@ -41,6 +44,11 @@
 
 	@Override
 	protected String getTestPackage() {
-		return Customer.class.getPackage().getName();
+		return InheritanceTest.class.getPackage().getName();
 	}
+
+	@Override
+	protected Map<String, String> getProcessorOptions() {
+		return Collections.emptyMap();
+	}	
 }

Copied: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Person.java (from rev 18664, jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/Human.java)
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Person.java	                        (rev 0)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Person.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -0,0 +1,49 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, 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.mixedmode;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Hardy Ferentschik
+ */
+ at Entity
+public class Person {
+	@Id
+	@GeneratedValue
+	private long id;
+	private String name;
+
+	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;
+	}
+}
\ No newline at end of file


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Person.java
___________________________________________________________________
Name: svn:keywords
   + Id

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-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/CompilationTest.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -21,32 +21,41 @@
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
+import javax.tools.Diagnostic;
 import javax.tools.DiagnosticCollector;
 import javax.tools.JavaCompiler;
 import javax.tools.JavaFileObject;
 import javax.tools.StandardJavaFileManager;
 import javax.tools.ToolProvider;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import static org.testng.FileAssert.fail;
 
 /**
  * @author Hardy Ferentschik
  */
 public abstract class CompilationTest {
-
+	private static final Logger log = LoggerFactory.getLogger( CompilationTest.class );
 	private static final String PATH_SEPARATOR = System.getProperty( "file.separator" );
+	private static final String ANNOTATION_PROCESSOR_OPTION_PREFIX = "-A";
+	private static final String SOURCE_BASE_DIR_PROPERTY = "sourceBaseDir";
+	private static final String OUT_BASE_DIR_PROPERTY = "outBaseDir";
 	private static final String sourceBaseDir;
 	private static final String outBaseDir;
 
 	static {
-		String tmp = System.getProperty( "sourceBaseDir" );
+		String tmp = System.getProperty( SOURCE_BASE_DIR_PROPERTY );
 		if ( tmp == null ) {
 			fail( "The system property sourceBaseDir has to be set and point to the base directory of the test java sources." );
 		}
 		sourceBaseDir = tmp;
 
-		tmp = System.getProperty( "outBaseDir" );
+		tmp = System.getProperty( OUT_BASE_DIR_PROPERTY );
 		if ( tmp == null ) {
 			fail( "The system property outBaseDir has to be set and point to the base directory of the test output directory." );
 		}
@@ -59,7 +68,7 @@
 			compile();
 		}
 		catch ( Exception e ) {
-			e.printStackTrace(  );
+			e.printStackTrace();
 			fail( "Unable to compile test sources. " + e.getMessage() );
 		}
 	}
@@ -91,18 +100,25 @@
 				null, fileManager, diagnostics, options, null, compilationUnits
 		);
 		task.call();
-//		for ( Diagnostic diagnostic : diagnostics.getDiagnostics() ) {
-//			System.out.println( diagnostic.getMessage( null ) );
-//		}
+		for ( Diagnostic diagnostic : diagnostics.getDiagnostics() ) {
+			log.debug( diagnostic.getMessage( null ) );
+		}
 	}
 
 	private List<String> createJavaOptions() {
-		// TODO
-		// passing any other options as -d seems to throw IllegalArgumentExceptions. I would like to set -s for example
-		// in order to see whether recursive recompilation would work then. Also '-proc only' could be interesting
 		List<String> options = new ArrayList<String>();
 		options.add( "-d" );
 		options.add( outBaseDir );
+
+		// add any additional options specified by the test
+		for ( Map.Entry<String, String> entry : getProcessorOptions().entrySet() ) {
+			StringBuilder builder = new StringBuilder();
+			builder.append( ANNOTATION_PROCESSOR_OPTION_PREFIX );
+			builder.append( entry.getKey() );
+			builder.append( "=" );
+			builder.append( entry.getValue() );
+			options.add( builder.toString() );
+		}
 		return options;
 	}
 
@@ -117,16 +133,16 @@
 			}
 		};
 		final File[] files = packageDir.listFiles( javaFileFilter );
-		if (files == null) {
+		if ( files == null ) {
 			throw new RuntimeException( "Cannot find package directory (is your base dir correct?): " + packageDirName );
 		}
-		for ( File file : files ) {
-			javaFiles.add( file );
-		}
+		javaFiles.addAll( Arrays.asList( files ) );
 		return javaFiles;
 	}
 
 	abstract protected String getTestPackage();
+
+	abstract protected Map<String, String> getProcessorOptions();
 }
 
 

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-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/TestUtil.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -36,6 +36,7 @@
 public class TestUtil {
 
 	private static final String PATH_SEPARATOR = System.getProperty( "file.separator" );
+	private static final String PACKAGE_SEPARATOR = ".";
 	private static final String META_MODEL_CLASS_POSTFIX = "_";
 	private static final String outBaseDir;
 
@@ -78,7 +79,7 @@
 		assertNotNull( clazz, "Class parameter cannot be null" );
 		String metaModelClassName = clazz.getName() + META_MODEL_CLASS_POSTFIX;
 		// generate the file name
-		String fileName = metaModelClassName.replace( ".", PATH_SEPARATOR );
+		String fileName = metaModelClassName.replace( PACKAGE_SEPARATOR, PATH_SEPARATOR );
 		fileName = fileName.concat( ".java" );
 		File sourceFile = new File( outBaseDir + PATH_SEPARATOR + fileName );
 		assertFalse( sourceFile.exists(), "There should be no source file: " + fileName );
@@ -157,6 +158,10 @@
 		}
 		return field;
 	}
+
+	public static String fcnToPath(String fcn) {
+		return fcn.replace( PACKAGE_SEPARATOR, PATH_SEPARATOR );
+	}
 }
 
 

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-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/XmlMappingTest.java	2010-02-01 20:49:09 UTC (rev 18677)
@@ -17,6 +17,9 @@
 */
 package org.hibernate.jpamodelgen.test.xmlmapped;
 
+import java.util.Collections;
+import java.util.Map;
+
 import org.testng.annotations.Test;
 
 import org.hibernate.jpamodelgen.test.util.CompilationTest;
@@ -99,6 +102,11 @@
 
 	@Override
 	protected String getTestPackage() {
-		return Address.class.getPackage().getName();
+		return XmlMappingTest.class.getPackage().getName();
 	}
+
+	@Override
+	protected Map<String, String> getProcessorOptions() {
+		return Collections.emptyMap();
+	}
 }
\ No newline at end of file

Copied: jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/mixedmode/orm.xml (from rev 18664, jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/xmlmapped/address.xml)
===================================================================
--- jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/mixedmode/orm.xml	                        (rev 0)
+++ jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/mixedmode/orm.xml	2010-02-01 20:49:09 UTC (rev 18677)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
+                 version="2.0"
+        >
+    <persistence-unit-metadata>
+        <xml-mapping-metadata-complete/>
+    </persistence-unit-metadata>
+    <package>org.hibernate.jpamodelgen.test.mixedmode</package>
+</entity-mappings>
+

Copied: jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/mixedmode/persistence.xml (from rev 18664, jpamodelgen/trunk/src/test/resources/META-INF/persistence.xml)
===================================================================
--- jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/mixedmode/persistence.xml	                        (rev 0)
+++ jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/mixedmode/persistence.xml	2010-02-01 20:49:09 UTC (rev 18677)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence.xsd" version="2.0">
+    <persistence-unit name="annotation-processor">
+        <mapping-file>/org/hibernate/jpamodelgen/test/mixedmode/orm.xml</mapping-file>
+    </persistence-unit>
+</persistence>

Modified: jpamodelgen/trunk/src/test/suite/unit-tests.xml
===================================================================
--- jpamodelgen/trunk/src/test/suite/unit-tests.xml	2010-02-01 19:49:40 UTC (rev 18676)
+++ jpamodelgen/trunk/src/test/suite/unit-tests.xml	2010-02-01 20:49:09 UTC (rev 18677)
@@ -8,7 +8,8 @@
             <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.mixedmode"/>
+            <package name="org.hibernate.jpamodelgen.test.rawtypes"/>
             <package name="org.hibernate.jpamodelgen.test.xmlmapped"/>
         </packages>
     </test>



More information about the hibernate-commits mailing list