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: {