[hibernate-commits] Hibernate SVN: r17013 - in jpamodelgen/trunk: generator/src/main/java/org/hibernate/jpa/metamodel/ap and 3 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Tue Jul 7 09:27:52 EDT 2009
Author: hardy.ferentschik
Date: 2009-07-07 09:27:52 -0400 (Tue, 07 Jul 2009)
New Revision: 17013
Added:
jpamodelgen/trunk/test/src/main/java/model/metamodel/
Modified:
jpamodelgen/trunk/generator/
jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/JPAMetaModelEntityProcessor.java
jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/annotation/MetaEntity.java
jpamodelgen/trunk/test/
jpamodelgen/trunk/test/pom.xml
jpamodelgen/trunk/test/src/main/java/model/Order.java
Log:
Cleanup and made current example work.
Property changes on: jpamodelgen/trunk/generator
___________________________________________________________________
Name: svn:ignore
+ target
Modified: jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/JPAMetaModelEntityProcessor.java
===================================================================
--- jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/JPAMetaModelEntityProcessor.java 2009-07-07 13:05:37 UTC (rev 17012)
+++ jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/JPAMetaModelEntityProcessor.java 2009-07-07 13:27:52 UTC (rev 17013)
@@ -1,14 +1,24 @@
package org.hibernate.jpa.metamodel.ap;
-
-
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Generated;
+import javax.annotation.processing.AbstractProcessor;
+import javax.annotation.processing.FilerException;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.annotation.processing.SupportedSourceVersion;
import static javax.lang.model.SourceVersion.RELEASE_6;
-
-import java.io.*;
-import java.util.*;
-
-import javax.annotation.Generated;
-import javax.annotation.processing.*;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
@@ -28,209 +38,236 @@
import org.hibernate.jpa.metamodel.xml.jaxb.ObjectFactory;
//@SupportedAnnotationTypes("javax.persistence.Entity")
- at SupportedAnnotationTypes("*") // TODO: this is not very effective
+ at SupportedAnnotationTypes("*")
@SupportedSourceVersion(RELEASE_6)
public class JPAMetaModelEntityProcessor extends AbstractProcessor {
- //private static final String ORM_XML_LOCATION = "/META-INF/orm.xml";
+ private static final Map<String, IMetaEntity> metaEntities = new HashMap<String, IMetaEntity>();
- private static final Map<String, IMetaEntity> metaEntities = new HashMap<String, IMetaEntity>();
+ private boolean ormProcessed = false;
- private boolean ormProcessed = false;
+ public JPAMetaModelEntityProcessor() {
+ }
- public JPAMetaModelEntityProcessor() {
- System.out.println("Created Processor " + this);
- }
+ public void init(ProcessingEnvironment env) {
+ super.init( env );
+ processingEnv.getMessager().printMessage( Diagnostic.Kind.NOTE, "Init Processor " + this );
+ }
- public void init(ProcessingEnvironment env) {
- super.init(env);
- System.out.println("Init Processor " + this);
- }
-
- private void parsingOrmXmls() {
- //make sure that we process ORM files only once per round
- if (ormProcessed) return;
- parsingOrmXml("/META-INF", "orm.xml");
- //simulate 20 different ORM files to parse
- //Removed since these causes issues in Eclipse APT
- //for (int i = 1 ; i <= 20 ; i++) parsingOrmXml("/model" + i , "orm.xml");
-
- ormProcessed = true;
- }
+ private void parsingOrmXmls() {
+ //make sure that we process ORM files only once per round
+ if ( ormProcessed ) {
+ return;
+ }
+ parsingOrmXml( "/META-INF", "orm.xml" );
+ //simulate 20 different ORM files to parse
+ //Removed since these causes issues in Eclipse APT
+ //for (int i = 1 ; i <= 20 ; i++) parsingOrmXml("/model" + i , "orm.xml");
- /**
- * Tries to check whether a orm.xml file exists and parses it using JAXB
- */
- private void parsingOrmXml(String pkg, String name) {
- String resource = pkg +"/"+name;
- processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "XYZ Checking for " + resource);
-
- InputStream ormStream = null;
- try {
- FileObject resource2 = processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, pkg, name);
- ormStream = resource2.openInputStream();
- } catch (IOException e1) {
- processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING, "Could not locate " + resource + " via APT api");
- //TODO: possible remove this fallback since it should not be needed.
- ormStream = this.getClass().getResourceAsStream(resource);
+ ormProcessed = true;
+ }
+
+ /**
+ * Tries to check whether a orm.xml file exists and parses it using JAXB
+ */
+ private void parsingOrmXml(String pkg, String name) {
+
+ InputStream ormStream = getInputStreamForResource( pkg, name );
+
+ String resource = getFullResourcePath( pkg, name );
+ if ( ormStream == null ) {
+ processingEnv.getMessager().printMessage( Diagnostic.Kind.NOTE, resource + " not found." );
+ return;
}
-
- if (ormStream == null) {
- processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, resource + " not found.");
- return;
- }
- try {
- JAXBContext jc = JAXBContext.newInstance(ObjectFactory.class);
- Unmarshaller unmarshaller = jc.createUnmarshaller();
- EntityMappings mappings = (EntityMappings) unmarshaller.unmarshal(ormStream);
- Collection<Entity> entities = mappings.getEntity();
- String packageName = mappings.getPackage();
- for (Entity entity : entities) {
- String fullyQualifiedClassName = packageName + "." + entity.getClazz();
- Elements utils = processingEnv.getElementUtils();
- XmlMetaEntity metaEntity = new XmlMetaEntity(entity, packageName, utils.getTypeElement(fullyQualifiedClassName));
- writeFile(metaEntity);
+ try {
+ JAXBContext jc = JAXBContext.newInstance( ObjectFactory.class );
+ Unmarshaller unmarshaller = jc.createUnmarshaller();
+ EntityMappings mappings = ( EntityMappings ) unmarshaller.unmarshal( ormStream );
+ Collection<Entity> entities = mappings.getEntity();
+ String packageName = mappings.getPackage();
+ for ( Entity entity : entities ) {
+ String fullyQualifiedClassName = packageName + "." + entity.getClazz();
+ Elements utils = processingEnv.getElementUtils();
+ XmlMetaEntity metaEntity = new XmlMetaEntity(
+ entity, packageName, utils.getTypeElement( fullyQualifiedClassName )
+ );
+ writeFile( metaEntity );
- // keep track of alreay processed entities
- metaEntities.put(fullyQualifiedClassName, metaEntity);
- }
- } catch (JAXBException e) {
- processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Error unmarshalling orm.xml");
- e.printStackTrace();
- } catch (Exception e) {
- processingEnv.getMessager().printMessage(
- Diagnostic.Kind.ERROR,
- "Problem while reading " + resource + " " + e.getMessage());
- e.printStackTrace();
- //TODO: too bad you can't mark resources as having issues
- }
- }
+ // keep track of alreay processed entities
+ metaEntities.put( fullyQualifiedClassName, metaEntity );
+ }
+ }
+ catch ( JAXBException e ) {
+ processingEnv.getMessager().printMessage( Diagnostic.Kind.NOTE, "Error unmarshalling orm.xml" );
+ e.printStackTrace();
+ }
+ catch ( Exception e ) {
+ processingEnv.getMessager().printMessage(
+ Diagnostic.Kind.ERROR,
+ "Problem while reading " + resource + " " + e.getMessage()
+ );
+ e.printStackTrace();
+ //TODO: too bad you can't mark resources as having issues
+ }
+ }
- /**
- * Process JPA-specific annotations in Java entity classes.
- *
- * @param aAnnotations Matching annotations to be processed.
- * @param aRoundEnvironment Annotation processing round environment.
- * @return
- */
- @Override
- public boolean process(final Set<? extends TypeElement> aAnnotations,
- final RoundEnvironment aRoundEnvironment) {
+ private InputStream getInputStreamForResource(String pkg, String name) {
+ String resource = getFullResourcePath( pkg, name );
+ processingEnv.getMessager()
+ .printMessage( Diagnostic.Kind.NOTE, "Checking for " + resource );
+ InputStream ormStream;
+ try {
+ FileObject fileObject = processingEnv.getFiler().getResource( StandardLocation.CLASS_OUTPUT, pkg, name );
+ ormStream = fileObject.openInputStream();
+ }
+ catch ( IOException e1 ) {
+ processingEnv.getMessager()
+ .printMessage(
+ Diagnostic.Kind.WARNING,
+ "Could not load " + resource + " using Filer.getResource(). Trying classpath..."
+ );
+ ormStream = this.getClass().getResourceAsStream( resource );
+ }
+ return ormStream;
+ }
- processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Processing annotations:" + aAnnotations);
+ private String getFullResourcePath(String pkg, String name) {
+ return pkg + "/" + name;
+ }
- StringBuilder sb = new StringBuilder("xxx" + new Date().toLocaleString());
- Set<? extends Element> elements = aRoundEnvironment.getRootElements();
- sb.append("\n\n");
- for (Element element : elements) {
- sb.append(element.toString());
- sb.append("\n");
- handleRootElementAnnotationMirrors(element);
- }
+ @Override
+ public boolean process(final Set<? extends TypeElement> aAnnotations,
+ final RoundEnvironment aRoundEnvironment) {
- sb.append("xxx");
- processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, sb.toString());
+ writeInitialProcessingDiagnostics( aAnnotations, aRoundEnvironment );
+ if ( aRoundEnvironment.processingOver() ) {
+ //assuming that when processing is over, we are done and clear resources like ORM parsing
+ //we could keep some ORM parsing in memory but how to detect that a file has changed / not changed?
+ ormProcessed = false;
+ metaEntities.clear();
+ processingEnv.getMessager().printMessage( Diagnostic.Kind.NOTE, "Clear ORM processing resources" );
+ return false;
+ }
- if (aRoundEnvironment.processingOver()) {
- //assuming that when processing is over, we are done and clear resources like ORM parsing
- //we could keep some ORM parsing in memory but how to detect that a file has changed / not changed?
- ormProcessed = false;
- metaEntities.clear();
- processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Clear ORM processing resources");
- return false;
- }
- parsingOrmXmls();
- for (Element element : elements) {
- handleRootElementAnnotationMirrors(element);
- }
+ parsingOrmXmls();
- return true;
- }
+ Set<? extends Element> elements = aRoundEnvironment.getRootElements();
+ for ( Element element : elements ) {
+ handleRootElementAnnotationMirrors( element );
+ }
- private void handleRootElementAnnotationMirrors(final Element element) {
+ return true;
+ }
- List<? extends AnnotationMirror> annotationMirrors = element
- .getAnnotationMirrors();
+ private void writeInitialProcessingDiagnostics(Set<? extends TypeElement> aAnnotations, RoundEnvironment aRoundEnvironment) {
+ StringBuilder sb = new StringBuilder();
+ sb.append( "\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n" );
+ sb.append( new Date().toLocaleString() );
+ sb.append( "\n" );
+ sb.append( "Processing annotations " ).append( aAnnotations ).append( " on:" );
- for (AnnotationMirror mirror : annotationMirrors) {
- final String annotationType = mirror.getAnnotationType().toString();
+ Set<? extends Element> elements = aRoundEnvironment.getRootElements();
+ sb.append( "\n" );
+ for ( Element element : elements ) {
+ sb.append( element.toString() );
+ sb.append( "\n" );
+ }
+ sb.append( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n" );
+ processingEnv.getMessager().printMessage( Diagnostic.Kind.NOTE, sb.toString() );
+ }
- if (element.getKind() == ElementKind.CLASS &&
- annotationType.equals(javax.persistence.Entity.class.getName())) {
- MetaEntity metaEntity = new MetaEntity(processingEnv, (TypeElement) element);
- writeFile(metaEntity);
- }
- }
- }
+ private void handleRootElementAnnotationMirrors(final Element element) {
- private void writeFile(IMetaEntity entity) {
+ List<? extends AnnotationMirror> annotationMirrors = element
+ .getAnnotationMirrors();
- try {
- String metaModelPackage = entity.getPackageName();
+ for ( AnnotationMirror mirror : annotationMirrors ) {
+ final String annotationType = mirror.getAnnotationType().toString();
- StringBuffer body = generateBody(entity);
+ if ( element.getKind() == ElementKind.CLASS &&
+ annotationType.equals( javax.persistence.Entity.class.getName() ) ) {
+ MetaEntity metaEntity = new MetaEntity( processingEnv, ( TypeElement ) element );
+ writeFile( metaEntity );
+ }
+ }
+ }
- FileObject fo = processingEnv.getFiler().createSourceFile(
- metaModelPackage + "." + entity.getSimpleName() + "_");
- OutputStream os = fo.openOutputStream();
- PrintWriter pw = new PrintWriter(os);
+ private void writeFile(IMetaEntity entity) {
- pw.println("package " + metaModelPackage + ";");
+ try {
+ String metaModelPackage = entity.getPackageName();
- pw.println();
+ StringBuffer body = generateBody( entity );
- pw.println(entity.generateImports());
+ FileObject fo = processingEnv.getFiler().createSourceFile(
+ metaModelPackage + "." + entity.getSimpleName() + "_"
+ );
+ OutputStream os = fo.openOutputStream();
+ PrintWriter pw = new PrintWriter( os );
- pw.println(body);
+ pw.println( "package " + metaModelPackage + ";" );
- pw.flush();
- pw.close();
+ pw.println();
- } catch (FilerException filerEx) {
- processingEnv.getMessager().printMessage(
- Diagnostic.Kind.ERROR,
- "Problem with Processing Environment Filer: "
- + filerEx.getMessage());
- } catch (IOException ioEx) {
- processingEnv.getMessager().printMessage(
- Diagnostic.Kind.ERROR,
- "Problem opening file to write MetaModel for " + entity.getSimpleName()
- + ioEx.getMessage());
- }
- }
+ pw.println( entity.generateImports() );
- /**
- * Generate everything after import statements
- *
- * @return body content
- */
- private StringBuffer generateBody(IMetaEntity entity) {
+ pw.println( body );
- StringWriter sw = new StringWriter();
- PrintWriter pw = null;
- try {
+ pw.flush();
+ pw.close();
- pw = new PrintWriter(sw);
+ }
+ catch ( FilerException filerEx ) {
+ processingEnv.getMessager().printMessage(
+ Diagnostic.Kind.ERROR,
+ "Problem with Processing Environment Filer: "
+ + filerEx.getMessage()
+ );
+ }
+ catch ( IOException ioEx ) {
+ processingEnv.getMessager().printMessage(
+ Diagnostic.Kind.ERROR,
+ "Problem opening file to write MetaModel for " + entity.getSimpleName()
+ + ioEx.getMessage()
+ );
+ }
+ }
- pw.println("@" + entity.importType(Generated.class.getName()) + "(\"JPA MetaModel for " + entity.getQualifiedName() + "\")");
+ /**
+ * Generate everything after import statements
+ *
+ * @return body content
+ */
+ private StringBuffer generateBody(IMetaEntity entity) {
- pw.println("@" + entity.importType("javax.persistence.metamodel.TypesafeMetamodel") + "(" + entity.getSimpleName() + ".class)");
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = null;
+ try {
- pw.println("public abstract class " + entity.getSimpleName() + "_" + " {");
+ pw = new PrintWriter( sw );
- pw.println();
+ pw.println( "@" + entity.importType( Generated.class.getName() ) + "(\"JPA MetaModel for " + entity.getQualifiedName() + "\")" );
- List<IMetaMember> members = entity.getMembers();
+ pw.println( "@" + entity.importType( "javax.persistence.metamodel.TypesafeMetamodel" ) + "(" + entity.getSimpleName() + ".class)" );
- for (IMetaMember metaMember : members) {
- pw.println(" " + metaMember.getDeclarationString());
- }
- pw.println();
- pw.println("}");
- return sw.getBuffer();
- } finally {
- if (pw != null) pw.close();
- }
- }
+ pw.println( "public abstract class " + entity.getSimpleName() + "_" + " {" );
+
+ pw.println();
+
+ List<IMetaMember> members = entity.getMembers();
+
+ for ( IMetaMember metaMember : members ) {
+ pw.println( " " + metaMember.getDeclarationString() );
+ }
+ pw.println();
+ pw.println( "}" );
+ return sw.getBuffer();
+ }
+ finally {
+ if ( pw != null ) {
+ pw.close();
+ }
+ }
+ }
}
Modified: jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/annotation/MetaEntity.java
===================================================================
--- jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/annotation/MetaEntity.java 2009-07-07 13:05:37 UTC (rev 17012)
+++ jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/annotation/MetaEntity.java 2009-07-07 13:27:52 UTC (rev 17013)
@@ -1,13 +1,9 @@
package org.hibernate.jpa.metamodel.ap.annotation;
-import org.hibernate.jpa.metamodel.ap.*;
-
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
-
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
@@ -21,197 +17,212 @@
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.ElementFilter;
import javax.lang.model.util.SimpleTypeVisitor6;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Id;
import javax.tools.Diagnostic.Kind;
+import org.hibernate.jpa.metamodel.ap.IMetaEntity;
+import org.hibernate.jpa.metamodel.ap.IMetaMember;
+import org.hibernate.jpa.metamodel.ap.ImportContext;
+import org.hibernate.jpa.metamodel.ap.ImportContextImpl;
+import org.hibernate.jpa.metamodel.ap.TypeUtils;
+
public class MetaEntity implements IMetaEntity {
- final TypeElement element;
- final protected ProcessingEnvironment pe;
+ final TypeElement element;
+ final protected ProcessingEnvironment pe;
- final ImportContext importContext;
+ final ImportContext importContext;
- public MetaEntity(ProcessingEnvironment pe, TypeElement element) {
- this.element = element;
- this.pe = pe;
- importContext = new ImportContextImpl(getPackageName().toString());
- }
+ public MetaEntity(ProcessingEnvironment pe, TypeElement element) {
+ this.element = element;
+ this.pe = pe;
+ importContext = new ImportContextImpl( getPackageName() );
+ }
- public String getSimpleName() {
- return element.getSimpleName().toString();
- }
+ public String getSimpleName() {
+ return element.getSimpleName().toString();
+ }
- public Element getOriginalElement() {
- return element;
- }
+ public Element getOriginalElement() {
+ return element;
+ }
- public String getQualifiedName() {
- return element.getQualifiedName().toString();
- }
+ public String getQualifiedName() {
+ return element.getQualifiedName().toString();
+ }
- public String getPackageName() {
- PackageElement packageOf = pe.getElementUtils().getPackageOf(element);
- return pe.getElementUtils().getName(packageOf.getQualifiedName() + ".metamodel").toString();
- }
+ public String getPackageName() {
+ PackageElement packageOf = pe.getElementUtils().getPackageOf( element );
+ return pe.getElementUtils().getName( packageOf.getQualifiedName() + ".metamodel" ).toString();
+ }
- public List<IMetaMember> getMembers() {
+ public List<IMetaMember> getMembers() {
- List<IMetaMember> members = new ArrayList<IMetaMember>();
+ List<IMetaMember> members = new ArrayList<IMetaMember>();
- if (useFields()) {
+ if ( useFields() ) {
- List<? extends Element> myMembers = ElementFilter.fieldsIn(element.getEnclosedElements());
+ List<? extends Element> myMembers = ElementFilter.fieldsIn( element.getEnclosedElements() );
- System.out.println("Scanning " + myMembers.size() + " field s for " + element.toString());
+ pe.getMessager()
+ .printMessage( Kind.NOTE, "Scanning " + myMembers.size() + " field s for " + element.toString() );
- for (Element mymember : myMembers) {
+ for ( Element mymember : myMembers ) {
- MetaMember result = mymember.asType().accept(new TypeVisitor(this), mymember);
- if (result != null) {
- members.add(result);
- } else {
- pe.getMessager().printMessage(Kind.WARNING, "Could not find valid info for JPA property", mymember);
- }
- }
+ MetaMember result = mymember.asType().accept( new TypeVisitor( this ), mymember );
+ if ( result != null ) {
+ members.add( result );
+ }
+ else {
+ pe.getMessager()
+ .printMessage( Kind.WARNING, "Could not find valid info for JPA property", mymember );
+ }
+ }
- } else {
+ }
+ else {
- List<? extends Element> myMembers = ElementFilter.methodsIn(element.getEnclosedElements());
+ List<? extends Element> myMembers = ElementFilter.methodsIn( element.getEnclosedElements() );
- System.out.println("Scanning " + myMembers.size() + " methods for " + element.toString());
- for (Element mymember : myMembers) {
+ pe.getMessager()
+ .printMessage( Kind.NOTE, "Scanning " + myMembers.size() + " methods for " + element.toString() );
+ for ( Element mymember : myMembers ) {
- MetaMember result = mymember.asType().accept(new TypeVisitor(this), mymember);
- if (result != null) {
- members.add(result);
- } else {
- //pe.getMessager().printMessage(Kind.WARNING, "Not a valid JPA property", mymember);
- }
- }
+ MetaMember result = mymember.asType().accept( new TypeVisitor( this ), mymember );
+ if ( result != null ) {
+ members.add( result );
+ }
+ else {
+ //pe.getMessager().printMessage(Kind.WARNING, "Not a valid JPA property", mymember);
+ }
+ }
- }
+ }
- if (members.size() == 0) {
- pe.getMessager().printMessage(Kind.WARNING, "No properties found on " + element, element);
- }
- return members;
- }
+ if ( members.size() == 0 ) {
+ pe.getMessager().printMessage( Kind.WARNING, "No properties found on " + element, element );
+ }
+ return members;
+ }
- //TODO: Find more efficient way to identify wether we should use fields or properties
- private boolean useFields() {
- List<? extends Element> myMembers = element.getEnclosedElements();
- for (Element element : myMembers) {
- List<? extends AnnotationMirror> entityAnnotations =
- pe.getElementUtils().getAllAnnotationMirrors(element);
+ //TODO: Find more efficient way to identify wether we should use fields or properties
+ private boolean useFields() {
+ List<? extends Element> myMembers = element.getEnclosedElements();
+ for ( Element element : myMembers ) {
+ List<? extends AnnotationMirror> entityAnnotations =
+ pe.getElementUtils().getAllAnnotationMirrors( element );
- for (Iterator<?> iterator = entityAnnotations.iterator(); iterator
- .hasNext();) {
- AnnotationMirror annotationMirror = (AnnotationMirror) iterator
- .next();
+ for ( Object entityAnnotation : entityAnnotations ) {
+ AnnotationMirror annotationMirror = ( AnnotationMirror ) entityAnnotation;
- final String annotationType = annotationMirror.getAnnotationType().toString();
+ final String annotationType = annotationMirror.getAnnotationType().toString();
- if (annotationType.equals(javax.persistence.Id.class.getName()) ||
- annotationType.equals(javax.persistence.EmbeddedId.class.getName())) {
- if (element.getKind() == ElementKind.FIELD) {
- return true;
- }
- }
- }
- }
+ if ( annotationType.equals( Id.class.getName() ) ||
+ annotationType.equals( EmbeddedId.class.getName() ) ) {
+ if ( element.getKind() == ElementKind.FIELD ) {
+ return true;
+ }
+ }
+ }
+ }
- return false;
- }
+ return false;
+ }
- static Map<String, String> COLLECTIONS = new HashMap<String, String>();
+ static Map<String, String> COLLECTIONS = new HashMap<String, String>();
- static {
- COLLECTIONS.put("java.util.Collection", "javax.persistence.metamodel.Collection");
- COLLECTIONS.put("java.util.Set", "javax.persistence.metamodel.Set");
- COLLECTIONS.put("java.util.List", "javax.persistence.metamodel.List");
- COLLECTIONS.put("java.util.Map", "javax.persistence.metamodel.Map");
- }
+ static {
+ COLLECTIONS.put( "java.util.Collection", "javax.persistence.metamodel.Collection" );
+ COLLECTIONS.put( "java.util.Set", "javax.persistence.metamodel.Set" );
+ COLLECTIONS.put( "java.util.List", "javax.persistence.metamodel.List" );
+ COLLECTIONS.put( "java.util.Map", "javax.persistence.metamodel.Map" );
+ }
- class TypeVisitor extends SimpleTypeVisitor6<MetaMember, Element> {
+ class TypeVisitor extends SimpleTypeVisitor6<MetaMember, Element> {
- MetaEntity parent;
+ MetaEntity parent;
- TypeVisitor(MetaEntity parent) {
- this.parent = parent;
- }
+ TypeVisitor(MetaEntity parent) {
+ this.parent = parent;
+ }
- @Override
- protected MetaMember defaultAction(TypeMirror e, Element p) {
- return super.defaultAction(e, p);
- }
+ @Override
+ protected MetaMember defaultAction(TypeMirror e, Element p) {
+ return super.defaultAction( e, p );
+ }
- @Override
- public MetaMember visitPrimitive(PrimitiveType t, Element p) {
- return new MetaAttribute(parent, p, TypeUtils.toTypeString(t));
- }
+ @Override
+ public MetaMember visitPrimitive(PrimitiveType t, Element p) {
+ return new MetaAttribute( parent, p, TypeUtils.toTypeString( t ) );
+ }
- @Override
- public MetaMember visitDeclared(DeclaredType t, Element p) {
- TypeElement e = (TypeElement) pe.getTypeUtils().asElement(t);
+ @Override
+ public MetaMember visitDeclared(DeclaredType t, Element p) {
+ TypeElement e = ( TypeElement ) pe.getTypeUtils().asElement( t );
- String collection = COLLECTIONS.get(e.getQualifiedName().toString()); // WARNING: .toString() is necessary here since Name equals does not compare to String
- if (collection != null) {
- if (collection.equals("javax.persistence.metamodel.Map")) {
- return new MetaMap(parent, p, collection, getKeyType(t), getElementType(t));
- } else {
- return new MetaCollection(parent, p, collection, getElementType(t));
- }
- } else {
- return new MetaAttribute(parent, p, e.getQualifiedName().toString());
- }
- }
+ String collection = COLLECTIONS.get( e.getQualifiedName().toString() ); // WARNING: .toString() is necessary here since Name equals does not compare to String
+ if ( collection != null ) {
+ if ( collection.equals( "javax.persistence.metamodel.Map" ) ) {
+ return new MetaMap( parent, p, collection, getKeyType( t ), getElementType( t ) );
+ }
+ else {
+ return new MetaCollection( parent, p, collection, getElementType( t ) );
+ }
+ }
+ else {
+ return new MetaAttribute( parent, p, e.getQualifiedName().toString() );
+ }
+ }
- @Override
- public MetaMember visitExecutable(ExecutableType t, Element p) {
- String string = p.getSimpleName().toString();
+ @Override
+ public MetaMember visitExecutable(ExecutableType t, Element p) {
+ String string = p.getSimpleName().toString();
- // TODO: implement proper property get/is/boolean detection
- if (string.startsWith("get") || string.startsWith("is")) {
- TypeMirror returnType = t.getReturnType();
+ // TODO: implement proper property get/is/boolean detection
+ if ( string.startsWith( "get" ) || string.startsWith( "is" ) ) {
+ TypeMirror returnType = t.getReturnType();
- return returnType.accept(this, p);
- } else {
- return null;
- }
- }
- }
+ return returnType.accept( this, p );
+ }
+ else {
+ return null;
+ }
+ }
+ }
- public String generateImports() {
- return importContext.generateImports();
- }
+ public String generateImports() {
+ return importContext.generateImports();
+ }
- public String importType(String fqcn) {
- return importContext.importType(fqcn);
- }
+ public String importType(String fqcn) {
+ return importContext.importType( fqcn );
+ }
- public String staticImport(String fqcn, String member) {
- return importContext.staticImport(fqcn, member);
- }
+ public String staticImport(String fqcn, String member) {
+ return importContext.staticImport( fqcn, member );
+ }
- public String importType(Name qualifiedName) {
- return importType(qualifiedName.toString());
- }
+ public String importType(Name qualifiedName) {
+ return importType( qualifiedName.toString() );
+ }
- private String getKeyType(DeclaredType t) {
- System.out.println("key type" + t);
- return t.getTypeArguments().get(0).toString();
- }
+ private String getKeyType(DeclaredType t) {
+ return t.getTypeArguments().get( 0 ).toString();
+ }
- private String getElementType(DeclaredType declaredType) {
- if (declaredType.getTypeArguments().size() == 1) {
- return declaredType.getTypeArguments().get(0).toString();
- } else {
- return declaredType.getTypeArguments().get(1).toString();
- }
- }
+ private String getElementType(DeclaredType declaredType) {
+ if ( declaredType.getTypeArguments().size() == 1 ) {
+ return declaredType.getTypeArguments().get( 0 ).toString();
+ }
+ else {
+ return declaredType.getTypeArguments().get( 1 ).toString();
+ }
+ }
}
Property changes on: jpamodelgen/trunk/test
___________________________________________________________________
Name: svn:ignore
+ target
Modified: jpamodelgen/trunk/test/pom.xml
===================================================================
--- jpamodelgen/trunk/test/pom.xml 2009-07-07 13:05:37 UTC (rev 17012)
+++ jpamodelgen/trunk/test/pom.xml 2009-07-07 13:27:52 UTC (rev 17013)
@@ -38,18 +38,18 @@
</resources>
<plugins>
<plugin>
- <groupId>org.apache.maven.plugins</groupId>
+ <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
- <id>process__annotations</id>
- <phase>generate-sources</phase>
+ <id>process_annotations</id>
+ <phase>process-resources</phase>
<configuration>
<tasks>
<property name="target.dir" value="target/generated-sources"/>
<mkdir dir="${target.dir}"/>
<javac srcdir="src/main/java" destdir="${target.dir}" failonerror="false">
- <compilerarg value="-proc:only"/>
+ <compilerarg value="-proc:only"/>
<classpath>
<path refid="maven.compile.classpath"/>
</classpath>
@@ -89,7 +89,27 @@
</execution>
</executions>
</plugin>
-
+ <!--plugin>
+ <groupId>org.bsc.maven</groupId>
+ <artifactId>maven-processor-plugin</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>process</id>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ <phase>generate-sources</phase>
+ <configuration>
+ <outputDirectory>target/generated-sources</outputDirectory>
+ <processors>
+ <processor>org.hibernate.jpa.metamodel.ap.JPAMetaModelEntityProcessor</processor>
+ </processors>
+ </configuration>
+ </execution>
+ </executions>
+ <dependencies/>
+ </plugin-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
Modified: jpamodelgen/trunk/test/src/main/java/model/Order.java
===================================================================
--- jpamodelgen/trunk/test/src/main/java/model/Order.java 2009-07-07 13:05:37 UTC (rev 17012)
+++ jpamodelgen/trunk/test/src/main/java/model/Order.java 2009-07-07 13:27:52 UTC (rev 17013)
@@ -8,21 +8,21 @@
import java.util.List;
import java.util.Set;
- at Entity
+//@Entity
public class Order {
- @Id
+ //@Id
long id;
- @OneToMany
+ //@OneToMany
Set<Item> items;
boolean filled;
Date date;
- @OneToMany
+ //@OneToMany
List<String> notes;
- @ManyToOne
+ //@ManyToOne
Shop shop;
}
More information about the hibernate-commits
mailing list