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

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Feb 4 11:12:08 EST 2010


Author: hardy.ferentschik
Date: 2010-02-04 11:12:07 -0500 (Thu, 04 Feb 2010)
New Revision: 18690

Added:
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/ImportContext.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaAttribute.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaCollection.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaEntity.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaSingleAttribute.java
Removed:
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ImportContext.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaAttribute.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaCollection.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaSingleAttribute.java
Modified:
   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/ImportContextImpl.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaAttribute.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaCollection.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaAttribute.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaCollection.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaSingleAttribute.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java
Log:
METAGEN-9

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -31,6 +31,9 @@
 import javax.tools.Diagnostic;
 import javax.tools.FileObject;
 
+import org.hibernate.jpamodelgen.model.MetaAttribute;
+import org.hibernate.jpamodelgen.model.MetaEntity;
+
 /**
  * @author Emmanuel Bernard
  */
@@ -112,8 +115,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.getMetaEntities().containsKey( superClassName )
-					|| context.getMetaSuperclassAndEmbeddable().containsKey( superClassName ) ) {
+			if ( context.containsMetaEntity( superClassName )
+					|| context.containsMetaSuperclassOrEmbeddable( 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-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -18,6 +18,7 @@
 package org.hibernate.jpamodelgen;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -30,6 +31,7 @@
 import javax.tools.Diagnostic;
 
 import org.hibernate.jpamodelgen.annotation.AnnotationMetaEntity;
+import org.hibernate.jpamodelgen.model.MetaEntity;
 import org.hibernate.jpamodelgen.util.TypeUtils;
 
 /**
@@ -104,14 +106,42 @@
 		return ormXmlFiles;
 	}
 
-	public Map<String, MetaEntity> getMetaEntities() {
-		return metaEntities;
+	public boolean containsMetaEntity(String fqcn) {
+		return metaEntities.containsKey( fqcn );
 	}
 
-	public Map<String, MetaEntity> getMetaSuperclassAndEmbeddable() {
-		return metaSuperclassAndEmbeddable;
+	public MetaEntity getMetaEntity(String fqcn) {
+		return metaEntities.get( fqcn );
 	}
 
+	public Collection<MetaEntity> getMetaEntities() {
+		return metaEntities.values();
+	}
+
+	public void addMetaEntity(String fcqn, MetaEntity metaEntity) {
+		metaEntities.put( fcqn, metaEntity );
+	}
+
+	public boolean containsMetaSuperclassOrEmbeddable(String fqcn) {
+		return metaSuperclassAndEmbeddable.containsKey( fqcn );
+	}
+
+	public MetaEntity getMetaSuperclassOrEmbeddable(String fqcn) {
+		return metaSuperclassAndEmbeddable.get( fqcn );
+	}
+
+	public void addMetaSuperclassOrEmbeddable(String fcqn, MetaEntity metaEntity) {
+		metaSuperclassAndEmbeddable.put( fcqn, metaEntity );
+	}
+
+	public void removeMetaSuperclassOrEmbeddable(String fcqn) {
+		metaSuperclassAndEmbeddable.remove( fcqn );
+	}
+
+	public Collection<MetaEntity> getMetaSuperclassOrEmbeddable() {
+		return metaSuperclassAndEmbeddable.values();
+	}
+
 	public void addAccessType(TypeElement element, AccessType accessType) {
 		AccessTypeHolder typeHolder = accessTypes.get( element );
 		if ( typeHolder == null ) {

Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ImportContext.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ImportContext.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ImportContext.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -1,46 +0,0 @@
-// $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;
-
-/**
- * 
- * @author Max Andersen
- * @author Hardy Ferentschik
- * @author Emmanuel Bernard
- */
-public interface ImportContext {
-
-	/**
-	 * Add fqcn to the import list. Returns fqcn as needed in source code.
-	 * Attempts to handle fqcn with array and generics references.
-	 * <p/>
-	 * e.g.
-	 * java.util.Collection<org.marvel.Hulk> imports java.util.Collection and returns Collection
-	 * org.marvel.Hulk[] imports org.marvel.Hulk and returns Hulk
-	 *
-	 * @param fqcn Fully qualified class name of the type to import.
-	 *
-	 * @return import string
-	 */
-	public abstract String importType(String fqcn);
-
-	public abstract String staticImport(String fqcn, String member);
-
-	public abstract String generateImports();
-
-}
\ No newline at end of file

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ImportContextImpl.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ImportContextImpl.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ImportContextImpl.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -18,14 +18,14 @@
 package org.hibernate.jpamodelgen;
 
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 
+import org.hibernate.jpamodelgen.model.ImportContext;
 
+
 /**
- *
  * @author Max Andersen
  * @author Hardy Ferentschik
  * @author Emmanuel Bernard
@@ -35,10 +35,11 @@
 	Set<String> imports = new TreeSet<String>();
 	Set<String> staticImports = new TreeSet<String>();
 	Map<String, String> simpleNames = new HashMap<String, String>();
-	
+
 	String basePackage = "";
 
 	private static final Map<String, String> PRIMITIVES = new HashMap<String, String>();
+
 	static {
 		PRIMITIVES.put( "char", "Character" );
 
@@ -61,77 +62,81 @@
 	/**
 	 * Add fqcn to the import list. Returns fqcn as needed in source code.
 	 * Attempts to handle fqcn with array and generics references.
-	 * 
+	 * <p/>
 	 * e.g.
 	 * java.util.Collection<org.marvel.Hulk> imports java.util.Collection and returns Collection
 	 * org.marvel.Hulk[] imports org.marvel.Hulk and returns Hulk
-	 * 
-	 * 
-	 * @param fqcn
+	 *
+	 * @param fqcn Fully qualified class name
+	 *
 	 * @return import string
 	 */
 	public String importType(String fqcn) {
-		String result = fqcn;		
-		
+		String result = fqcn;
+
 		//if(fqcn==null) return "/** (null) **/"; 
-		
+
 		String additionalTypePart = null;
-		if(fqcn.indexOf('<')>=0) {
-			additionalTypePart = result.substring(fqcn.indexOf('<'));
-			result = result.substring(0,fqcn.indexOf('<'));
+		if ( fqcn.indexOf( '<' ) >= 0 ) {
+			additionalTypePart = result.substring( fqcn.indexOf( '<' ) );
+			result = result.substring( 0, fqcn.indexOf( '<' ) );
 			fqcn = result;
-		} else if(fqcn.indexOf('[')>=0) {
-			additionalTypePart = result.substring(fqcn.indexOf('['));
-			result = result.substring(0,fqcn.indexOf('['));
+		}
+		else if ( fqcn.indexOf( '[' ) >= 0 ) {
+			additionalTypePart = result.substring( fqcn.indexOf( '[' ) );
+			result = result.substring( 0, fqcn.indexOf( '[' ) );
 			fqcn = result;
 		}
-		
+
 		String pureFqcn = fqcn.replace( '$', '.' );
-		
-		boolean canBeSimple = true;
-		
-		
-		String simpleName = unqualify(fqcn);
-		if(simpleNames.containsKey(simpleName)) {
-			String existingFqcn = simpleNames.get(simpleName);
-			if(existingFqcn.equals(pureFqcn)) {
+
+		boolean canBeSimple;
+
+		String simpleName = unqualify( fqcn );
+		if ( simpleNames.containsKey( simpleName ) ) {
+			String existingFqcn = simpleNames.get( simpleName );
+			if ( existingFqcn.equals( pureFqcn ) ) {
 				canBeSimple = true;
-			} else {
+			}
+			else {
 				canBeSimple = false;
 			}
-		} else {
+		}
+		else {
 			canBeSimple = true;
-			simpleNames.put(simpleName, pureFqcn);
+			simpleNames.put( simpleName, pureFqcn );
 			imports.add( pureFqcn );
 		}
-		
-		
-		if ( inSamePackage(fqcn) || (imports.contains( pureFqcn ) && canBeSimple) ) {
+
+
+		if ( inSamePackage( fqcn ) || ( imports.contains( pureFqcn ) && canBeSimple ) ) {
 			result = unqualify( result ); // dequalify
-		} else if ( inJavaLang( fqcn ) ) {
+		}
+		else if ( inJavaLang( fqcn ) ) {
 			result = result.substring( "java.lang.".length() );
 		}
 
-		if(additionalTypePart!=null) {
+		if ( additionalTypePart != null ) {
 			result = result + additionalTypePart;
-		} 
-		
+		}
+
 		result = result.replace( '$', '.' );
-		return result;		
+		return result;
 	}
-	
+
 	public String staticImport(String fqcn, String member) {
 		String local = fqcn + "." + member;
-		imports.add(local);
-		staticImports.add(local);
-		
-		if(member.equals("*")) {
+		imports.add( local );
+		staticImports.add( local );
+
+		if ( member.equals( "*" ) ) {
 			return "";
-		} else {
+		}
+		else {
 			return member;
 		}
 	}
-	
+
 	private boolean inDefaultPackage(String className) {
 		return className.indexOf( "." ) < 0;
 	}
@@ -143,7 +148,7 @@
 	private boolean inSamePackage(String className) {
 		String other = qualifier( className );
 		return other == basePackage
-				|| (other != null && other.equals( basePackage ) );
+				|| ( other != null && other.equals( basePackage ) );
 	}
 
 	private boolean inJavaLang(String className) {
@@ -152,33 +157,34 @@
 
 	public String generateImports() {
 		StringBuffer buf = new StringBuffer();
-		
-		for ( Iterator<String> imps = imports.iterator(); imps.hasNext(); ) {
-				String next = imps.next();
-				if(isPrimitive(next) || inDefaultPackage(next) || inJavaLang(next) || inSamePackage(next)) {
-					// dont add automatically "imported" stuff
-				} else {
-					if(staticImports.contains(next)) {
-						buf.append("import static " + next + ";\r\n");
-					} else {
-						buf.append("import " + next + ";\r\n");
-					}
+
+		for ( String next : imports ) {
+			if ( isPrimitive( next ) || inDefaultPackage( next ) || inJavaLang( next ) || inSamePackage( next ) ) {
+				// dont add automatically "imported" stuff
+			}
+			else {
+				if ( staticImports.contains( next ) ) {
+					buf.append( "import static " + next + ";\r\n" );
 				}
+				else {
+					buf.append( "import " + next + ";\r\n" );
+				}
+			}
 		}
-		
-		if(buf.indexOf( "$" )>=0) {
+
+		if ( buf.indexOf( "$" ) >= 0 ) {
 			return buf.toString();
 		}
-		return buf.toString();            
+		return buf.toString();
 	}
-	
+
 	public static String unqualify(String qualifiedName) {
-		int loc = qualifiedName.lastIndexOf(".");
-		return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( qualifiedName.lastIndexOf(".") + 1 );
+		int loc = qualifiedName.lastIndexOf( "." );
+		return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( qualifiedName.lastIndexOf( "." ) + 1 );
 	}
 
 	public static String qualifier(String qualifiedName) {
-		int loc = qualifiedName.lastIndexOf(".");
+		int loc = qualifiedName.lastIndexOf( "." );
 		return ( loc < 0 ) ? "" : qualifiedName.substring( 0, loc );
 	}
 }

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -35,6 +35,7 @@
 import javax.tools.Diagnostic;
 
 import org.hibernate.jpamodelgen.annotation.AnnotationMetaEntity;
+import org.hibernate.jpamodelgen.model.MetaEntity;
 import org.hibernate.jpamodelgen.util.TypeUtils;
 import org.hibernate.jpamodelgen.xml.XmlParser;
 
@@ -103,17 +104,17 @@
 	}
 
 	private void createMetaModelClasses() {
-		for ( MetaEntity entity : context.getMetaEntities().values() ) {
+		for ( MetaEntity entity : context.getMetaEntities()) {
 			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.getMetaSuperclassAndEmbeddable().remove( className );
+			context.removeMetaSuperclassOrEmbeddable( className );
 		}
 
-		for ( MetaEntity entity : context.getMetaSuperclassAndEmbeddable().values() ) {
+		for ( MetaEntity entity : context.getMetaSuperclassOrEmbeddable() ) {
 			context.logMessage( Diagnostic.Kind.OTHER, "Writing meta model for " + entity );
 			ClassWriter.writeFile( entity, context );
 		}
@@ -139,7 +140,7 @@
 		for ( AnnotationMirror mirror : annotationMirrors ) {
 			if ( element.getKind() == ElementKind.CLASS ) {
 				String fqn = ( ( TypeElement ) element ).getQualifiedName().toString();
-				MetaEntity alreadyExistingMetaEntity = context.getMetaEntities().get( fqn );
+				MetaEntity alreadyExistingMetaEntity = context.getMetaEntity( fqn );
 				if ( alreadyExistingMetaEntity != null && alreadyExistingMetaEntity.isMetaComplete() ) {
 					String msg = "Skipping processing of annotations for " + fqn + " since xml configuration is metadata complete.";
 					context.logMessage( Diagnostic.Kind.OTHER, msg );
@@ -154,12 +155,12 @@
 
 	private void addMetaEntityToContext(AnnotationMirror mirror, AnnotationMetaEntity metaEntity) {
 		if ( TypeUtils.isAnnotationMirrorOfType( mirror, Entity.class ) ) {
-			context.getMetaEntities().put( metaEntity.getQualifiedName(), metaEntity );
+			context.addMetaEntity( metaEntity.getQualifiedName(), metaEntity );
 		}
 		else if ( TypeUtils.isAnnotationMirrorOfType( mirror, MappedSuperclass.class )
 				|| TypeUtils.isAnnotationMirrorOfType( mirror, Embeddable.class ) ) {
 
-			context.getMetaSuperclassAndEmbeddable().put( metaEntity.getQualifiedName(), metaEntity );
+			context.addMetaSuperclassOrEmbeddable( metaEntity.getQualifiedName(), metaEntity );
 		}
 	}
 }

Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaAttribute.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaAttribute.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -1,31 +0,0 @@
-// $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;
-
-/**
- * @author Hardy Ferentschik
- */
-public interface MetaAttribute {
-	String getDeclarationString();
-
-	String getMetaType();
-
-	String getPropertyName();
-
-	String getTypeDeclaration();
-}

Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaCollection.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaCollection.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaCollection.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -1,24 +0,0 @@
-// $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;
-
-/**
- * @author Hardy Ferentschik
- */
-public interface MetaCollection extends MetaAttribute {
-}

Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -1,47 +0,0 @@
-// $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;
-
-import javax.lang.model.element.Name;
-import javax.lang.model.element.TypeElement;
-import java.util.List;
-
-/**
- * @author Hardy Ferentschik
- */
-public interface MetaEntity extends ImportContext {
-    String getSimpleName();
-
-    String getQualifiedName();
-
-    String getPackageName();
-
-    List<MetaAttribute> getMembers();
-
-    String generateImports();
-
-    String importType(String fqcn);
-
-    String staticImport(String fqcn, String member);
-
-    String importType(Name qualifiedName);
-
-	TypeElement getTypeElement();
-
-	boolean isMetaComplete();
-}

Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaSingleAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaSingleAttribute.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaSingleAttribute.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -1,24 +0,0 @@
-// $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;
-
-/**
- * @author Hardy Ferentschik
- */
-public interface MetaSingleAttribute extends MetaAttribute {
-}

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaAttribute.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaAttribute.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -22,7 +22,7 @@
 import javax.lang.model.element.ElementKind;
 import javax.lang.model.util.Elements;
 
-import org.hibernate.jpamodelgen.MetaAttribute;
+import org.hibernate.jpamodelgen.model.MetaAttribute;
 
 /**
  * @author Max Andersen

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaCollection.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaCollection.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaCollection.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -19,7 +19,7 @@
 
 import javax.lang.model.element.Element;
 
-import org.hibernate.jpamodelgen.MetaCollection;
+import org.hibernate.jpamodelgen.model.MetaCollection;
 
 /**
  * @author Max Andersen

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-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -55,10 +55,10 @@
 import javax.tools.Diagnostic;
 
 import org.hibernate.jpamodelgen.Context;
-import org.hibernate.jpamodelgen.ImportContext;
+import org.hibernate.jpamodelgen.model.ImportContext;
 import org.hibernate.jpamodelgen.ImportContextImpl;
-import org.hibernate.jpamodelgen.MetaAttribute;
-import org.hibernate.jpamodelgen.MetaEntity;
+import org.hibernate.jpamodelgen.model.MetaAttribute;
+import org.hibernate.jpamodelgen.model.MetaEntity;
 import org.hibernate.jpamodelgen.MetaModelGenerationException;
 import org.hibernate.jpamodelgen.util.TypeUtils;
 

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -19,7 +19,7 @@
 
 import javax.lang.model.element.Element;
 
-import org.hibernate.jpamodelgen.MetaSingleAttribute;
+import org.hibernate.jpamodelgen.model.MetaSingleAttribute;
 
 /**
  * @author Max Andersen

Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/ImportContext.java (from rev 18677, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ImportContext.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/ImportContext.java	                        (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/ImportContext.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -0,0 +1,45 @@
+// $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.model;
+
+/**
+ * @author Max Andersen
+ * @author Hardy Ferentschik
+ * @author Emmanuel Bernard
+ */
+public interface ImportContext {
+
+	/**
+	 * Add fqcn to the import list. Returns fqcn as needed in source code.
+	 * Attempts to handle fqcn with array and generics references.
+	 * <p/>
+	 * e.g.
+	 * java.util.Collection<org.marvel.Hulk> imports java.util.Collection and returns Collection
+	 * org.marvel.Hulk[] imports org.marvel.Hulk and returns Hulk
+	 *
+	 * @param fqcn Fully qualified class name of the type to import.
+	 *
+	 * @return import string
+	 */
+	public abstract String importType(String fqcn);
+
+	public abstract String staticImport(String fqcn, String member);
+
+	public abstract String generateImports();
+
+}
\ No newline at end of file


Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/ImportContext.java
___________________________________________________________________
Name: svn:keywords
   + Id

Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaAttribute.java (from rev 18677, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaAttribute.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaAttribute.java	                        (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaAttribute.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -0,0 +1,31 @@
+// $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.model;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public interface MetaAttribute {
+	String getDeclarationString();
+
+	String getMetaType();
+
+	String getPropertyName();
+
+	String getTypeDeclaration();
+}


Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaAttribute.java
___________________________________________________________________
Name: svn:keywords
   + Id

Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaCollection.java (from rev 18677, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaCollection.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaCollection.java	                        (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaCollection.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -0,0 +1,24 @@
+// $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.model;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public interface MetaCollection extends MetaAttribute {
+}


Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaCollection.java
___________________________________________________________________
Name: svn:keywords
   + Id

Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaEntity.java (from rev 18677, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaEntity.java	                        (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaEntity.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -0,0 +1,47 @@
+// $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.model;
+
+import java.util.List;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.TypeElement;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public interface MetaEntity extends ImportContext {
+	String getSimpleName();
+
+	String getQualifiedName();
+
+	String getPackageName();
+
+	List<MetaAttribute> getMembers();
+
+	String generateImports();
+
+	String importType(String fqcn);
+
+	String staticImport(String fqcn, String member);
+
+	String importType(Name qualifiedName);
+
+	TypeElement getTypeElement();
+
+	boolean isMetaComplete();
+}


Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaEntity.java
___________________________________________________________________
Name: svn:keywords
   + Id

Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaSingleAttribute.java (from rev 18677, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaSingleAttribute.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaSingleAttribute.java	                        (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaSingleAttribute.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -0,0 +1,24 @@
+// $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.model;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public interface MetaSingleAttribute extends MetaAttribute {
+}


Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/model/MetaSingleAttribute.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaAttribute.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaAttribute.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -18,7 +18,7 @@
 
 package org.hibernate.jpamodelgen.xml;
 
-import org.hibernate.jpamodelgen.MetaAttribute;
+import org.hibernate.jpamodelgen.model.MetaAttribute;
 
 /**
  * @author Hardy Ferentschik

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaCollection.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaCollection.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaCollection.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -17,7 +17,7 @@
 */
 package org.hibernate.jpamodelgen.xml;
 
-import org.hibernate.jpamodelgen.MetaCollection;
+import org.hibernate.jpamodelgen.model.MetaCollection;
 
 /**
  * @author Hardy Ferentschik

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-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -29,10 +29,10 @@
 import javax.tools.Diagnostic;
 
 import org.hibernate.jpamodelgen.Context;
-import org.hibernate.jpamodelgen.ImportContext;
+import org.hibernate.jpamodelgen.model.ImportContext;
 import org.hibernate.jpamodelgen.ImportContextImpl;
-import org.hibernate.jpamodelgen.MetaAttribute;
-import org.hibernate.jpamodelgen.MetaEntity;
+import org.hibernate.jpamodelgen.model.MetaAttribute;
+import org.hibernate.jpamodelgen.model.MetaEntity;
 import org.hibernate.jpamodelgen.MetaModelGenerationException;
 import org.hibernate.jpamodelgen.util.TypeUtils;
 import org.hibernate.jpamodelgen.xml.jaxb.Attributes;

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaSingleAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaSingleAttribute.java	2010-02-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaSingleAttribute.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -17,7 +17,7 @@
 */
 package org.hibernate.jpamodelgen.xml;
 
-import org.hibernate.jpamodelgen.MetaSingleAttribute;
+import org.hibernate.jpamodelgen.model.MetaSingleAttribute;
 
 /**
  * @author Hardy Ferentschik

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-04 10:57:52 UTC (rev 18689)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java	2010-02-04 16:12:07 UTC (rev 18690)
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import javax.lang.model.element.TypeElement;
@@ -55,12 +56,28 @@
 	private static final AccessType DEFAULT_XML_ACCESS_TYPE = AccessType.PROPERTY;
 
 	private Context context;
+	private List<EntityMappings> entityMappings;
+	private AccessType defaultAccessType = DEFAULT_XML_ACCESS_TYPE;
 
 	public XmlParser(Context context) {
 		this.context = context;
+		this.entityMappings = new ArrayList<EntityMappings>();
 	}
 
 	public void parsePersistenceXml() {
+		collectAllEntityMappings();
+		determineDefaultAccessTypeAndMetaCompleteness();
+
+		for ( EntityMappings mappings : entityMappings ) {
+			String packageName = mappings.getPackage();
+			AccessType entityAccessType = determineEntityAccessType( mappings );
+			parseEntities( mappings.getEntity(), packageName, entityAccessType );
+			parseEmbeddable( mappings.getEmbeddable(), packageName, entityAccessType );
+			parseMappedSuperClass( mappings.getMappedSuperclass(), packageName, entityAccessType );
+		}
+	}
+
+	private void collectAllEntityMappings() {
 		Persistence persistence = parseXml(
 				context.getPersistenceXmlLocation(), Persistence.class, PERSISTENCE_XML_XSD
 		);
@@ -69,38 +86,29 @@
 			for ( Persistence.PersistenceUnit unit : persistenceUnits ) {
 				List<String> mappingFiles = unit.getMappingFile();
 				for ( String mappingFile : mappingFiles ) {
-					parsingOrmXml( mappingFile );
+					loadEntityMappings( mappingFile );
 				}
 			}
 		}
 
 		// /META-INF/orm.xml is implicit
-		parsingOrmXml( ORM_XML );
+		loadEntityMappings( ORM_XML );
 
 		// not really part of the official spec, but the processor allows to specify mapping files directly as
 		// command line options
 		for ( String optionalOrmFiles : context.getOrmXmlFiles() ) {
-			parsingOrmXml( optionalOrmFiles );
+			loadEntityMappings( optionalOrmFiles );
 		}
 	}
 
-	private void parsingOrmXml(String resource) {
-		EntityMappings mappings = parseXml( resource, EntityMappings.class, ORM_XSD );
-		if ( mappings == null ) {
-			return;
+	private void loadEntityMappings(String resource) {
+		EntityMappings mapping = parseXml( resource, EntityMappings.class, ORM_XSD );
+		if ( mapping != null ) {
+			entityMappings.add( mapping );
 		}
-
-		AccessType accessType = determineGlobalAccessType( mappings );
-		context.setPersistenceUnitCompletelyXmlConfigured( determineGlobalXmlMetadataCompleteness( mappings ) );
-
-		parseEntities( mappings, accessType );
-		parseEmbeddable( mappings, accessType );
-		parseMappedSuperClass( mappings, accessType );
 	}
 
-	private void parseEntities(EntityMappings mappings, AccessType accessType) {
-		String packageName = mappings.getPackage();
-		Collection<Entity> entities = mappings.getEntity();
+	private void parseEntities(Collection<Entity> entities, String packageName, AccessType accessType) {
 		for ( Entity entity : entities ) {
 			String fullyQualifiedClassName = packageName + "." + entity.getClazz();
 
@@ -117,19 +125,17 @@
 					context
 			);
 
-			if ( context.getMetaEntities().containsKey( fullyQualifiedClassName ) ) {
+			if ( context.containsMetaEntity( fullyQualifiedClassName ) ) {
 				context.logMessage(
 						Diagnostic.Kind.WARNING,
 						fullyQualifiedClassName + " was already processed once. Skipping second occurance."
 				);
 			}
-			context.getMetaEntities().put( fullyQualifiedClassName, metaEntity );
+			context.addMetaEntity( fullyQualifiedClassName, metaEntity );
 		}
 	}
 
-	private void parseEmbeddable(EntityMappings mappings, AccessType accessType) {
-		String packageName = mappings.getPackage();
-		Collection<org.hibernate.jpamodelgen.xml.jaxb.Embeddable> embeddables = mappings.getEmbeddable();
+	private void parseEmbeddable(Collection<org.hibernate.jpamodelgen.xml.jaxb.Embeddable> embeddables, String packageName, AccessType accessType) {
 		for ( org.hibernate.jpamodelgen.xml.jaxb.Embeddable embeddable : embeddables ) {
 			String fullyQualifiedClassName = packageName + "." + embeddable.getClazz();
 
@@ -146,20 +152,18 @@
 					context
 			);
 
-			if ( context.getMetaSuperclassAndEmbeddable().containsKey( fullyQualifiedClassName ) ) {
+			if ( context.containsMetaSuperclassOrEmbeddable( fullyQualifiedClassName ) ) {
 				context.logMessage(
 						Diagnostic.Kind.WARNING,
 						fullyQualifiedClassName + " was already processed once. Skipping second occurance."
 				);
 			}
-			context.getMetaSuperclassAndEmbeddable().put( fullyQualifiedClassName, metaEntity );
+			context.addMetaSuperclassOrEmbeddable( fullyQualifiedClassName, metaEntity );
 		}
 	}
 
 
-	private void parseMappedSuperClass(EntityMappings mappings, AccessType accessType) {
-		String packageName = mappings.getPackage();
-		Collection<org.hibernate.jpamodelgen.xml.jaxb.MappedSuperclass> mappedSuperClasses = mappings.getMappedSuperclass();
+	private void parseMappedSuperClass(Collection<org.hibernate.jpamodelgen.xml.jaxb.MappedSuperclass> mappedSuperClasses, String packageName, AccessType accessType) {
 		for ( org.hibernate.jpamodelgen.xml.jaxb.MappedSuperclass mappedSuperClass : mappedSuperClasses ) {
 			String fullyQualifiedClassName = packageName + "." + mappedSuperClass.getClazz();
 
@@ -176,13 +180,13 @@
 					context
 			);
 
-			if ( context.getMetaSuperclassAndEmbeddable().containsKey( fullyQualifiedClassName ) ) {
+			if ( context.containsMetaSuperclassOrEmbeddable( fullyQualifiedClassName ) ) {
 				context.logMessage(
 						Diagnostic.Kind.WARNING,
 						fullyQualifiedClassName + " was already processed once. Skipping second occurance."
 				);
 			}
-			context.getMetaSuperclassAndEmbeddable().put( fullyQualifiedClassName, metaEntity );
+			context.addMetaSuperclassOrEmbeddable( fullyQualifiedClassName, metaEntity );
 		}
 	}
 
@@ -193,7 +197,8 @@
 	 * @param clazz The type of jaxb node to return
 	 * @param schemaName The schema to validate against (can be {@code null});
 	 *
-	 * @return The top level jaxb instance contained in the xml file or {@code null} in case the file could not be found.
+	 * @return The top level jaxb instance contained in the xml file or {@code null} in case the file could not be found
+	 *         or could not be unmarshalled.
 	 */
 	private <T> T parseXml(String resource, Class<T> clazz, String schemaName) {
 
@@ -292,36 +297,52 @@
 		return utils.getTypeElement( fullyQualifiedClassName );
 	}
 
-	private AccessType determineGlobalAccessType(EntityMappings mappings) {
-		AccessType accessType = DEFAULT_XML_ACCESS_TYPE;
-
+	private AccessType determineEntityAccessType(EntityMappings mappings) {
+		AccessType accessType = defaultAccessType;
 		if ( mappings.getAccess() != null ) {
 			accessType = mapXmlAccessTypeToJpaAccessType( mappings.getAccess() );
-			return accessType; // no need to check persistence unit default
 		}
+		return accessType;
+	}
 
-		PersistenceUnitMetadata meta = mappings.getPersistenceUnitMetadata();
-		if ( meta != null ) {
-			PersistenceUnitDefaults persistenceUnitDefaults = meta.getPersistenceUnitDefaults();
-			if ( persistenceUnitDefaults != null ) {
-				org.hibernate.jpamodelgen.xml.jaxb.AccessType xmlAccessType = persistenceUnitDefaults.getAccess();
-				if ( xmlAccessType != null ) {
-					accessType = mapXmlAccessTypeToJpaAccessType( xmlAccessType );
+	/**
+	 * Determines the default access type as specified in the <i>persistence-unit-defaults</i> as well as whether the
+	 * xml configuration is complete and annotations should be ignored.
+	 * <p/>
+	 * Note, the spec says:
+	 * <ul>
+	 * <li>The persistence-unit-metadata element contains metadata for the entire persistence unit. It is
+	 * undefined if this element occurs in multiple mapping files within the same persistence unit.</li>
+	 * <li>If the xml-mapping-metadata-complete subelement is specified, the complete set of mapping
+	 * metadata for the persistence unit is contained in the XML mapping files for the persistence unit, and any
+	 * persistence annotations on the classes are ignored.</li>
+	 * <li>When the xml-mapping-metadata-complete element is specified, any metadata-complete attributes specified
+	 * within the entity, mapped-superclass, and embeddable elements are ignored.<li>
+	 * </ul>
+	 */
+	private void determineDefaultAccessTypeAndMetaCompleteness() {
+		for ( EntityMappings mappings : entityMappings ) {
+			PersistenceUnitMetadata meta = mappings.getPersistenceUnitMetadata();
+			if ( meta != null ) {
+				if ( meta.getXmlMappingMetadataComplete() != null ) {
+					context.setPersistenceUnitCompletelyXmlConfigured( true );
 				}
+
+				PersistenceUnitDefaults persistenceUnitDefaults = meta.getPersistenceUnitDefaults();
+				if ( persistenceUnitDefaults != null ) {
+					org.hibernate.jpamodelgen.xml.jaxb.AccessType xmlAccessType = persistenceUnitDefaults.getAccess();
+					if ( xmlAccessType != null ) {
+						defaultAccessType = mapXmlAccessTypeToJpaAccessType( xmlAccessType );
+					}
+				}
+				// for simplicity we stop looking for PersistenceUnitMetadata instances. We assume that all files
+				// are consistent in the data specified in PersistenceUnitMetadata. If not the behaviour is not specified
+				// anyways. It is up to the JPA provider to handle this when bootstrapping
+				break;
 			}
 		}
-		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: {



More information about the hibernate-commits mailing list