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
+ */
+@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>