[hibernate-commits] Hibernate SVN: r18611 - in jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen: xml and 1 other directory.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Fri Jan 22 15:48:42 EST 2010
Author: hardy.ferentschik
Date: 2010-01-22 15:48:42 -0500 (Fri, 22 Jan 2010)
New Revision: 18611
Added:
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java
Modified:
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java
Log:
METAGEN-6 Split XML parsing code out into its own class.
Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java 2010-01-22 20:18:31 UTC (rev 18610)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java 2010-01-22 20:48:42 UTC (rev 18611)
@@ -17,10 +17,6 @@
*/
package org.hibernate.jpamodelgen;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Collection;
import java.util.List;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
@@ -28,35 +24,19 @@
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
-import static javax.lang.model.SourceVersion.RELEASE_6;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.TypeElement;
-import javax.lang.model.util.Elements;
-import javax.persistence.AccessType;
import javax.persistence.Embeddable;
import javax.persistence.MappedSuperclass;
import javax.tools.Diagnostic;
-import javax.tools.FileObject;
-import javax.tools.StandardLocation;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import org.xml.sax.SAXException;
-
import org.hibernate.jpamodelgen.annotation.AnnotationMetaEntity;
-import org.hibernate.jpamodelgen.xml.XmlMetaEntity;
-import org.hibernate.jpamodelgen.xml.jaxb.Entity;
-import org.hibernate.jpamodelgen.xml.jaxb.EntityMappings;
-import org.hibernate.jpamodelgen.xml.jaxb.ObjectFactory;
-import org.hibernate.jpamodelgen.xml.jaxb.Persistence;
-import org.hibernate.jpamodelgen.xml.jaxb.PersistenceUnitDefaults;
-import org.hibernate.jpamodelgen.xml.jaxb.PersistenceUnitMetadata;
+import org.hibernate.jpamodelgen.xml.XmlParser;
+import static javax.lang.model.SourceVersion.RELEASE_6;
+
/**
* Main annotation processor.
*
@@ -68,16 +48,11 @@
@SupportedSourceVersion(RELEASE_6)
public class JPAMetaModelEntityProcessor extends AbstractProcessor {
- private static final String PATH_SEPARATOR = "/";
- private static final String PERSISTENCE_XML = "/META-INF/persistence.xml";
- private static final String ORM_XML = "/META-INF/orm.xml";
+
private static final Boolean ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS = Boolean.FALSE;
private static final String ENTITY_ANN = javax.persistence.Entity.class.getName();
private static final String MAPPED_SUPERCLASS_ANN = MappedSuperclass.class.getName();
private static final String EMBEDDABLE_ANN = Embeddable.class.getName();
- private static final AccessType DEFAULT_XML_ACCESS_TYPE = AccessType.PROPERTY;
- private static final String PERSISTENCE_XML_XSD = "persistence_2_0.xsd";
- private static final String ORM_XSD = "orm_2_0.xsd";
private boolean xmlProcessed = false;
private Context context;
@@ -85,7 +60,9 @@
public void init(ProcessingEnvironment env) {
super.init( env );
context = new Context( env );
- context.logMessage( Diagnostic.Kind.NOTE, "Hibernate JPA 2 Static-Metamodel Generator " + Version.getVersionString() );
+ context.logMessage(
+ Diagnostic.Kind.NOTE, "Hibernate JPA 2 Static-Metamodel Generator " + Version.getVersionString()
+ );
}
@Override
@@ -100,7 +77,9 @@
}
if ( !xmlProcessed ) {
- parsePersistenceXml();
+ XmlParser parser = new XmlParser( context );
+ parser.parsePersistenceXml();
+ xmlProcessed = true;
}
if ( !hostJPAAnnotations( annotations ) ) {
@@ -150,164 +129,6 @@
return false;
}
- private void parsePersistenceXml() {
- Persistence persistence = parseXml( PERSISTENCE_XML, Persistence.class, PERSISTENCE_XML_XSD );
- if ( persistence != null ) {
- List<Persistence.PersistenceUnit> persistenceUnits = persistence.getPersistenceUnit();
- for ( Persistence.PersistenceUnit unit : persistenceUnits ) {
- List<String> mappingFiles = unit.getMappingFile();
- for ( String mappingFile : mappingFiles ) {
- parsingOrmXml( mappingFile );
- }
- }
- }
- parsingOrmXml( ORM_XML ); // /META-INF/orm.xml is implicit
- xmlProcessed = true;
- }
-
- private void parsingOrmXml(String resource) {
- EntityMappings mappings = parseXml( resource, EntityMappings.class, ORM_XSD );
- if ( mappings == null ) {
- return;
- }
-
- AccessType accessType = determineGlobalAccessType( mappings );
-
- parseEntities( mappings, accessType );
- parseEmbeddable( mappings, accessType );
- parseMappedSuperClass( mappings, accessType );
- }
-
- private AccessType determineGlobalAccessType(EntityMappings mappings) {
- AccessType accessType = DEFAULT_XML_ACCESS_TYPE;
-
- if ( mappings.getAccess() != null ) {
- accessType = mapXmlAccessTypeToJpaAccessType( mappings.getAccess() );
- return accessType; // no need to check persistence unit default
- }
-
- 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 );
- }
- }
- }
- return accessType;
- }
-
- private AccessType mapXmlAccessTypeToJpaAccessType(org.hibernate.jpamodelgen.xml.jaxb.AccessType xmlAccessType) {
- switch ( xmlAccessType ) {
- case FIELD: {
- return AccessType.FIELD;
- }
- case PROPERTY: {
- return AccessType.PROPERTY;
- }
- }
- return null;
- }
-
- private void parseEntities(EntityMappings mappings, AccessType accessType) {
- String packageName = mappings.getPackage();
- Collection<Entity> entities = mappings.getEntity();
- for ( Entity entity : entities ) {
- String fullyQualifiedClassName = packageName + "." + entity.getClazz();
-
- if ( !xmlMappedTypeExists( fullyQualifiedClassName ) ) {
- context.logMessage(
- Diagnostic.Kind.WARNING,
- fullyQualifiedClassName + " is mapped in xml, but class does not exists. Skipping meta model generation."
- );
- continue;
- }
-
- XmlMetaEntity metaEntity = new XmlMetaEntity(
- entity, packageName, getXmlMappedType( fullyQualifiedClassName ),
- context
- );
-
- if ( context.getMetaEntitiesToProcess().containsKey( fullyQualifiedClassName ) ) {
- context.logMessage(
- Diagnostic.Kind.WARNING,
- fullyQualifiedClassName + " was already processed once. Skipping second occurance."
- );
- }
- context.getMetaEntitiesToProcess().put( fullyQualifiedClassName, metaEntity );
- }
- }
-
- private boolean xmlMappedTypeExists(String fullyQualifiedClassName) {
- Elements utils = processingEnv.getElementUtils();
- return utils.getTypeElement( fullyQualifiedClassName ) != null;
- }
-
- private TypeElement getXmlMappedType(String fullyQualifiedClassName) {
- Elements utils = processingEnv.getElementUtils();
- return utils.getTypeElement( fullyQualifiedClassName );
- }
-
- private void parseEmbeddable(EntityMappings mappings, AccessType accessType) {
- String packageName = mappings.getPackage();
- Collection<org.hibernate.jpamodelgen.xml.jaxb.Embeddable> embeddables = mappings.getEmbeddable();
- for ( org.hibernate.jpamodelgen.xml.jaxb.Embeddable embeddable : embeddables ) {
- String fullyQualifiedClassName = packageName + "." + embeddable.getClazz();
-
- if ( !xmlMappedTypeExists( fullyQualifiedClassName ) ) {
- context.logMessage(
- Diagnostic.Kind.WARNING,
- fullyQualifiedClassName + " is mapped in xml, but class does not exists. Skipping meta model generation."
- );
- continue;
- }
-
- XmlMetaEntity metaEntity = new XmlMetaEntity(
- embeddable, packageName, getXmlMappedType( fullyQualifiedClassName ),
- context
- );
-
- if ( context.getMetaSuperclassAndEmbeddableToProcess().containsKey( fullyQualifiedClassName ) ) {
- context.logMessage(
- Diagnostic.Kind.WARNING,
- fullyQualifiedClassName + " was already processed once. Skipping second occurance."
- );
- }
- context.getMetaSuperclassAndEmbeddableToProcess().put( fullyQualifiedClassName, metaEntity );
- }
- }
-
- private void parseMappedSuperClass(EntityMappings mappings, AccessType accessType) {
- String packageName = mappings.getPackage();
- Collection<org.hibernate.jpamodelgen.xml.jaxb.MappedSuperclass> mappedSuperClasses = mappings.getMappedSuperclass();
- for ( org.hibernate.jpamodelgen.xml.jaxb.MappedSuperclass mappedSuperClass : mappedSuperClasses ) {
- String fullyQualifiedClassName = packageName + "." + mappedSuperClass.getClazz();
-
- if ( !xmlMappedTypeExists( fullyQualifiedClassName ) ) {
- context.logMessage(
- Diagnostic.Kind.WARNING,
- fullyQualifiedClassName + " is mapped in xml, but class does not exists. Skipping meta model generation."
- );
- continue;
- }
-
- XmlMetaEntity metaEntity = new XmlMetaEntity(
- mappedSuperClass, packageName, getXmlMappedType( fullyQualifiedClassName ),
- context
- );
-
- if ( context.getMetaSuperclassAndEmbeddableToProcess().containsKey( fullyQualifiedClassName ) ) {
- context.logMessage(
- Diagnostic.Kind.WARNING,
- fullyQualifiedClassName + " was already processed once. Skipping second occurance."
- );
- }
- context.getMetaSuperclassAndEmbeddableToProcess().put( fullyQualifiedClassName, metaEntity );
- }
- }
-
private void handleRootElementAnnotationMirrors(final Element element) {
List<? extends AnnotationMirror> annotationMirrors = element
@@ -332,104 +153,4 @@
}
}
}
-
- private InputStream getInputStreamForResource(String resource) {
- String pkg = getPackage( resource );
- String name = getRelativeName( resource );
- context.logMessage( Diagnostic.Kind.OTHER, "Reading resource " + resource );
- InputStream ormStream;
- try {
- FileObject fileObject = processingEnv.getFiler().getResource( StandardLocation.CLASS_OUTPUT, pkg, name );
- ormStream = fileObject.openInputStream();
- }
- catch ( IOException e1 ) {
-// processingEnv.getMessager()
-// .printMessage(
-// Diagnostic.Kind.WARNING,
-// "Could not load " + resource + " using processingEnv.getFiler().getResource(). Using classpath..."
-// );
-
- // TODO
- // unfortunately, the Filer.getResource API seems not to be able to load from /META-INF. One gets a
- // FilerException with the message with "Illegal name /META-INF". This means that we have to revert to
- // using the classpath. This might mean that we find a persistence.xml which is 'part of another jar.
- // Not sure what else we can do here
- ormStream = this.getClass().getResourceAsStream( resource );
- }
- return ormStream;
- }
-
- /**
- * Tries to open the specified xml file and return an instance of the specified class using JAXB.
- *
- * @param resource the xml file name
- * @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.
- */
- private <T> T parseXml(String resource, Class<T> clazz, String schemaName) {
-
- InputStream stream = getInputStreamForResource( resource );
-
- if ( stream == null ) {
- context.logMessage( Diagnostic.Kind.OTHER, resource + " not found." );
- return null;
- }
- try {
- JAXBContext jc = JAXBContext.newInstance( ObjectFactory.class );
- Unmarshaller unmarshaller = jc.createUnmarshaller();
- if ( schemaName != null ) {
- unmarshaller.setSchema( getSchema( schemaName ) );
- }
- return clazz.cast( unmarshaller.unmarshal( stream ) );
- }
- catch ( JAXBException e ) {
- String message = "Error unmarshalling " + resource + " with exception :\n " + e;
- context.logMessage( Diagnostic.Kind.WARNING, message );
- return null;
- }
- catch ( Exception e ) {
- String message = "Error reading " + resource + " with exception :\n " + e;
- context.logMessage( Diagnostic.Kind.WARNING, message );
- return null;
- }
- }
-
- private String getPackage(String resourceName) {
- if ( !resourceName.contains( PATH_SEPARATOR ) ) {
- return "";
- }
- else {
- return resourceName.substring( 0, resourceName.lastIndexOf( PATH_SEPARATOR ) );
- }
- }
-
- private String getRelativeName(String resourceName) {
- if ( !resourceName.contains( PATH_SEPARATOR ) ) {
- return resourceName;
- }
- else {
- return resourceName.substring( resourceName.lastIndexOf( PATH_SEPARATOR ) + 1 );
- }
- }
-
- private Schema getSchema(String schemaName) {
- Schema schema = null;
- URL schemaUrl = this.getClass().getClassLoader().getResource( schemaName );
- if ( schemaUrl == null ) {
- return schema;
- }
-
- SchemaFactory sf = SchemaFactory.newInstance( javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI );
- try {
- schema = sf.newSchema( schemaUrl );
- }
- catch ( SAXException e ) {
- context.logMessage(
- Diagnostic.Kind.WARNING, "Unable to create schema for " + schemaName + ": " + e.getMessage()
- );
- }
- return schema;
- }
}
Added: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java 2010-01-22 20:48:42 UTC (rev 18611)
@@ -0,0 +1,321 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, Red Hat, Inc. and/or its affiliates, 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.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Collection;
+import java.util.List;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.util.Elements;
+import javax.persistence.AccessType;
+import javax.tools.Diagnostic;
+import javax.tools.FileObject;
+import javax.tools.StandardLocation;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+
+import org.xml.sax.SAXException;
+
+import org.hibernate.jpamodelgen.Context;
+import org.hibernate.jpamodelgen.xml.jaxb.Entity;
+import org.hibernate.jpamodelgen.xml.jaxb.EntityMappings;
+import org.hibernate.jpamodelgen.xml.jaxb.ObjectFactory;
+import org.hibernate.jpamodelgen.xml.jaxb.Persistence;
+import org.hibernate.jpamodelgen.xml.jaxb.PersistenceUnitDefaults;
+import org.hibernate.jpamodelgen.xml.jaxb.PersistenceUnitMetadata;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class XmlParser {
+
+ private static final String PERSISTENCE_XML = "/META-INF/persistence.xml";
+ private static final String ORM_XML = "/META-INF/orm.xml";
+ private static final String PERSISTENCE_XML_XSD = "persistence_2_0.xsd";
+ private static final String ORM_XSD = "orm_2_0.xsd";
+ private static final String PATH_SEPARATOR = "/";
+ private static final AccessType DEFAULT_XML_ACCESS_TYPE = AccessType.PROPERTY;
+
+ private Context context;
+
+ public XmlParser(Context context) {
+ this.context = context;
+ }
+
+ public void parsePersistenceXml() {
+ Persistence persistence = parseXml( PERSISTENCE_XML, Persistence.class, PERSISTENCE_XML_XSD );
+ if ( persistence != null ) {
+ List<Persistence.PersistenceUnit> persistenceUnits = persistence.getPersistenceUnit();
+ for ( Persistence.PersistenceUnit unit : persistenceUnits ) {
+ List<String> mappingFiles = unit.getMappingFile();
+ for ( String mappingFile : mappingFiles ) {
+ parsingOrmXml( mappingFile );
+ }
+ }
+ }
+ parsingOrmXml( ORM_XML ); // /META-INF/orm.xml is implicit
+ }
+
+ private void parsingOrmXml(String resource) {
+ EntityMappings mappings = parseXml( resource, EntityMappings.class, ORM_XSD );
+ if ( mappings == null ) {
+ return;
+ }
+
+ AccessType accessType = determineGlobalAccessType( 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();
+ for ( Entity entity : entities ) {
+ String fullyQualifiedClassName = packageName + "." + entity.getClazz();
+
+ if ( !xmlMappedTypeExists( fullyQualifiedClassName ) ) {
+ context.logMessage(
+ Diagnostic.Kind.WARNING,
+ fullyQualifiedClassName + " is mapped in xml, but class does not exists. Skipping meta model generation."
+ );
+ continue;
+ }
+
+ XmlMetaEntity metaEntity = new XmlMetaEntity(
+ entity, packageName, getXmlMappedType( fullyQualifiedClassName ),
+ context
+ );
+
+ if ( context.getMetaEntitiesToProcess().containsKey( fullyQualifiedClassName ) ) {
+ context.logMessage(
+ Diagnostic.Kind.WARNING,
+ fullyQualifiedClassName + " was already processed once. Skipping second occurance."
+ );
+ }
+ context.getMetaEntitiesToProcess().put( fullyQualifiedClassName, metaEntity );
+ }
+ }
+
+ private void parseEmbeddable(EntityMappings mappings, AccessType accessType) {
+ String packageName = mappings.getPackage();
+ Collection<org.hibernate.jpamodelgen.xml.jaxb.Embeddable> embeddables = mappings.getEmbeddable();
+ for ( org.hibernate.jpamodelgen.xml.jaxb.Embeddable embeddable : embeddables ) {
+ String fullyQualifiedClassName = packageName + "." + embeddable.getClazz();
+
+ if ( !xmlMappedTypeExists( fullyQualifiedClassName ) ) {
+ context.logMessage(
+ Diagnostic.Kind.WARNING,
+ fullyQualifiedClassName + " is mapped in xml, but class does not exists. Skipping meta model generation."
+ );
+ continue;
+ }
+
+ XmlMetaEntity metaEntity = new XmlMetaEntity(
+ embeddable, packageName, getXmlMappedType( fullyQualifiedClassName ),
+ context
+ );
+
+ if ( context.getMetaSuperclassAndEmbeddableToProcess().containsKey( fullyQualifiedClassName ) ) {
+ context.logMessage(
+ Diagnostic.Kind.WARNING,
+ fullyQualifiedClassName + " was already processed once. Skipping second occurance."
+ );
+ }
+ context.getMetaSuperclassAndEmbeddableToProcess().put( fullyQualifiedClassName, metaEntity );
+ }
+ }
+
+
+ private void parseMappedSuperClass(EntityMappings mappings, AccessType accessType) {
+ String packageName = mappings.getPackage();
+ Collection<org.hibernate.jpamodelgen.xml.jaxb.MappedSuperclass> mappedSuperClasses = mappings.getMappedSuperclass();
+ for ( org.hibernate.jpamodelgen.xml.jaxb.MappedSuperclass mappedSuperClass : mappedSuperClasses ) {
+ String fullyQualifiedClassName = packageName + "." + mappedSuperClass.getClazz();
+
+ if ( !xmlMappedTypeExists( fullyQualifiedClassName ) ) {
+ context.logMessage(
+ Diagnostic.Kind.WARNING,
+ fullyQualifiedClassName + " is mapped in xml, but class does not exists. Skipping meta model generation."
+ );
+ continue;
+ }
+
+ XmlMetaEntity metaEntity = new XmlMetaEntity(
+ mappedSuperClass, packageName, getXmlMappedType( fullyQualifiedClassName ),
+ context
+ );
+
+ if ( context.getMetaSuperclassAndEmbeddableToProcess().containsKey( fullyQualifiedClassName ) ) {
+ context.logMessage(
+ Diagnostic.Kind.WARNING,
+ fullyQualifiedClassName + " was already processed once. Skipping second occurance."
+ );
+ }
+ context.getMetaSuperclassAndEmbeddableToProcess().put( fullyQualifiedClassName, metaEntity );
+ }
+ }
+
+ /**
+ * Tries to open the specified xml file and return an instance of the specified class using JAXB.
+ *
+ * @param resource the xml file name
+ * @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.
+ */
+ private <T> T parseXml(String resource, Class<T> clazz, String schemaName) {
+
+ InputStream stream = getInputStreamForResource( resource );
+
+ if ( stream == null ) {
+ context.logMessage( Diagnostic.Kind.OTHER, resource + " not found." );
+ return null;
+ }
+ try {
+ JAXBContext jc = JAXBContext.newInstance( ObjectFactory.class );
+ Unmarshaller unmarshaller = jc.createUnmarshaller();
+ if ( schemaName != null ) {
+ unmarshaller.setSchema( getSchema( schemaName ) );
+ }
+ return clazz.cast( unmarshaller.unmarshal( stream ) );
+ }
+ catch ( JAXBException e ) {
+ String message = "Error unmarshalling " + resource + " with exception :\n " + e;
+ context.logMessage( Diagnostic.Kind.WARNING, message );
+ return null;
+ }
+ catch ( Exception e ) {
+ String message = "Error reading " + resource + " with exception :\n " + e;
+ context.logMessage( Diagnostic.Kind.WARNING, message );
+ return null;
+ }
+ }
+
+ private Schema getSchema(String schemaName) {
+ Schema schema = null;
+ URL schemaUrl = this.getClass().getClassLoader().getResource( schemaName );
+ if ( schemaUrl == null ) {
+ return schema;
+ }
+
+ SchemaFactory sf = SchemaFactory.newInstance( javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI );
+ try {
+ schema = sf.newSchema( schemaUrl );
+ }
+ catch ( SAXException e ) {
+ context.logMessage(
+ Diagnostic.Kind.WARNING, "Unable to create schema for " + schemaName + ": " + e.getMessage()
+ );
+ }
+ return schema;
+ }
+
+ private InputStream getInputStreamForResource(String resource) {
+ String pkg = getPackage( resource );
+ String name = getRelativeName( resource );
+ context.logMessage( Diagnostic.Kind.OTHER, "Reading resource " + resource );
+ InputStream ormStream;
+ try {
+ FileObject fileObject = context.getProcessingEnvironment()
+ .getFiler()
+ .getResource( StandardLocation.CLASS_OUTPUT, pkg, name );
+ ormStream = fileObject.openInputStream();
+ }
+ catch ( IOException e1 ) {
+ // TODO
+ // unfortunately, the Filer.getResource API seems not to be able to load from /META-INF. One gets a
+ // FilerException with the message with "Illegal name /META-INF". This means that we have to revert to
+ // using the classpath. This might mean that we find a persistence.xml which is 'part of another jar.
+ // Not sure what else we can do here
+ ormStream = this.getClass().getResourceAsStream( resource );
+ }
+ return ormStream;
+ }
+
+ private String getPackage(String resourceName) {
+ if ( !resourceName.contains( PATH_SEPARATOR ) ) {
+ return "";
+ }
+ else {
+ return resourceName.substring( 0, resourceName.lastIndexOf( PATH_SEPARATOR ) );
+ }
+ }
+
+ private String getRelativeName(String resourceName) {
+ if ( !resourceName.contains( PATH_SEPARATOR ) ) {
+ return resourceName;
+ }
+ else {
+ return resourceName.substring( resourceName.lastIndexOf( PATH_SEPARATOR ) + 1 );
+ }
+ }
+
+ private boolean xmlMappedTypeExists(String fullyQualifiedClassName) {
+ Elements utils = context.getProcessingEnvironment().getElementUtils();
+ return utils.getTypeElement( fullyQualifiedClassName ) != null;
+ }
+
+ private TypeElement getXmlMappedType(String fullyQualifiedClassName) {
+ Elements utils = context.getProcessingEnvironment().getElementUtils();
+ return utils.getTypeElement( fullyQualifiedClassName );
+ }
+
+
+ private AccessType determineGlobalAccessType(EntityMappings mappings) {
+ AccessType accessType = DEFAULT_XML_ACCESS_TYPE;
+
+ if ( mappings.getAccess() != null ) {
+ accessType = mapXmlAccessTypeToJpaAccessType( mappings.getAccess() );
+ return accessType; // no need to check persistence unit default
+ }
+
+ 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 );
+ }
+ }
+ }
+ return accessType;
+ }
+
+ private AccessType mapXmlAccessTypeToJpaAccessType(org.hibernate.jpamodelgen.xml.jaxb.AccessType xmlAccessType) {
+ switch ( xmlAccessType ) {
+ case FIELD: {
+ return AccessType.FIELD;
+ }
+ case PROPERTY: {
+ return AccessType.PROPERTY;
+ }
+ }
+ return null;
+ }
+}
+
+
More information about the hibernate-commits
mailing list