[hibernate-commits] Hibernate SVN: r18824 - in jpamodelgen/trunk/src: main/docbook/en-US/images and 9 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Feb 17 20:07:47 EST 2010


Author: hardy.ferentschik
Date: 2010-02-17 20:07:46 -0500 (Wed, 17 Feb 2010)
New Revision: 18824

Added:
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/util/FileTimeStampChecker.java
Modified:
   jpamodelgen/trunk/src/main/docbook/en-US/images/eclipse-annotation-processor-config.png
   jpamodelgen/trunk/src/main/docbook/en-US/images/idea-annotation-processor-config.png
   jpamodelgen/trunk/src/main/docbook/en-US/master.xml
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/AccessTypeInformation.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaModelGenerationException.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Version.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/util/Constants.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/util/StringUtil.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEmbeddable.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/TemperatureSamples.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/generics/Child.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/generics/Parent.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Car.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Coordinates.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Insurance.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Location.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/MixedConfigurationTest.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/RentalCar.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/RentalCompany.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Truck.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Vehicle.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/ZeroCoordinates.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawtypes/DeskWithRawType.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawtypes/EmployeeWithRawType.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawtypes/RawTypesTest.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/CompilationTest.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Boy.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/FakeHero.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Superhero.java
Log:
METAGEN-24 - Create a mechanism to check whether xml files have changed


Modified: jpamodelgen/trunk/src/main/docbook/en-US/images/eclipse-annotation-processor-config.png
===================================================================
(Binary files differ)

Modified: jpamodelgen/trunk/src/main/docbook/en-US/images/idea-annotation-processor-config.png
===================================================================
(Binary files differ)

Modified: jpamodelgen/trunk/src/main/docbook/en-US/master.xml
===================================================================
--- jpamodelgen/trunk/src/main/docbook/en-US/master.xml	2010-02-17 21:07:42 UTC (rev 18823)
+++ jpamodelgen/trunk/src/main/docbook/en-US/master.xml	2010-02-18 01:07:46 UTC (rev 18824)
@@ -92,7 +92,7 @@
 
       <example id="criteria-example" label="">
         <title>Example of typesafe query using the metamodel class
-        <classname>Order_</classname> </title>
+        <classname>Order_</classname></title>
 
         <programlisting>CriteriaBuilder cb = entityManager.getCriteriaBuilder();
 CriteriaQuery&lt;Order&gt; cq = cb.createQuery(Order.class);
@@ -109,7 +109,7 @@
       url="http://jcp.org/en/jsr/detail?id=317">JPA 2 specification</ulink>
       and its definition is included for completeness in the following
       paragraphs . Feel free to skip ahead to <xref linkend="chapter-usage" />
-      if you are not interested into the gory details. </para>
+      if you are not interested into the gory details.</para>
 
       <para>The annotation processor produces for every managed class in the
       persistence unit a metamodel class based on these rules:</para>
@@ -188,8 +188,8 @@
   <chapter id="chapter-usage">
     <title>Usage</title>
 
-    <para> The jar file for the annotation processor can be found in the
-    <ulink url="http://repository.jboss.com/">JBoss Maven repository</ulink>
+    <para>The jar file for the annotation processor can be found in the <ulink
+    url="http://repository.jboss.com/">JBoss Maven repository</ulink>
     under:</para>
 
     <example id="maven-dependency" label="">
@@ -233,7 +233,7 @@
       url="http://ant.apache.org/manual/CoreTasks/javac.html">Ant Javac
       Task</ulink> can be configured to just run annotation
       processing.<example id="javac-task-example">
-          <title>Ant Javac Task configuration </title>
+          <title>Ant Javac Task configuration</title>
 
           <programlisting>&lt;javac srcdir="${src.dir}"
     destdir="${target.dir}"
@@ -407,7 +407,12 @@
       <section>
         <title>NetBeans</title>
 
-        <para>TODO</para>
+        <para>Netbeans support for annotation processors is at the time of
+        this wrinting still in the making. Refer to NetBeans issues <ulink
+        url="http://www.netbeans.org/issues/show_bug.cgi?id=111065">111065</ulink>,
+        <ulink
+        url="http://www.netbeans.org/issues/show_bug.cgi?id=111293">111293</ulink>
+        and <ulink url="???">111294</ulink>.</para>
       </section>
     </section>
 
@@ -455,6 +460,22 @@
                 mapping file names. Even when this option is specified
                 <filename>/META-INF/orm.xml</filename> is implicit.</entry>
               </row>
+
+              <row>
+                <entry>lazyXmlParsing</entry>
+
+                <entry>Possible values are <literal>true</literal> or
+                <literal>false</literal>. If set to <literal>true</literal>
+                the annotation processor tries to determine whether any of the
+                xml files has changed between invocations and if unchanged
+                skips the xml parsing. This feature is experimental and
+                contains the risk of wron results in some cases of mixed mode
+                configurations. To determine wether a file has been modified a
+                temporary file
+                <filename>Hibernate-Static-Metamodel-Generator.tmp</filename>
+                is used. This file gets created in the
+                <literal>java.io.tmpdir</literal> directory.</entry>
+              </row>
             </tbody>
           </tgroup>
         </table></para>


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

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java	2010-02-17 21:07:42 UTC (rev 18823)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java	2010-02-18 01:07:46 UTC (rev 18824)
@@ -56,6 +56,7 @@
 
 	private final ProcessingEnvironment pe;
 	private final boolean logDebug;
+	private final boolean lazyXmlParsing;
 	private final String persistenceXmlLocation;
 
 	private final List<String> ormXmlFiles;
@@ -90,6 +91,7 @@
 			ormXmlFiles = Collections.emptyList();
 		}
 
+		lazyXmlParsing = Boolean.parseBoolean( pe.getOptions().get( JPAMetaModelEntityProcessor.LAZY_XML_PARSING ) );
 		logDebug = Boolean.parseBoolean( pe.getOptions().get( JPAMetaModelEntityProcessor.DEBUG_OPTION ) );
 	}
 
@@ -125,8 +127,8 @@
 		return metaEntities.values();
 	}
 
-	public void addMetaEntity(String fcqn, MetaEntity metaEntity) {
-		metaEntities.put( fcqn, metaEntity );
+	public void addMetaEntity(String fqcn, MetaEntity metaEntity) {
+		metaEntities.put( fqcn, metaEntity );
 	}
 
 	public boolean containsMetaEmbeddable(String fqcn) {
@@ -181,12 +183,17 @@
 		this.persistenceUnitDefaultAccessType = persistenceUnitDefaultAccessType;
 	}
 
+	public boolean doLazyXmlParsing() {
+		return lazyXmlParsing;
+	}
+
 	@Override
 	public String toString() {
 		final StringBuilder sb = new StringBuilder();
 		sb.append( "Context" );
 		sb.append( "{accessTypeInformation=" ).append( accessTypeInformation );
 		sb.append( ", logDebug=" ).append( logDebug );
+		sb.append( ", lazyXmlParsing=" ).append( lazyXmlParsing );
 		sb.append( ", isPersistenceUnitCompletelyXmlConfigured=" ).append( isPersistenceUnitCompletelyXmlConfigured );
 		sb.append( ", ormXmlFiles=" ).append( ormXmlFiles );
 		sb.append( ", persistenceXmlLocation='" ).append( persistenceXmlLocation ).append( '\'' );

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java	2010-02-17 21:07:42 UTC (rev 18823)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java	2010-02-18 01:07:46 UTC (rev 18824)
@@ -64,16 +64,22 @@
 @SupportedOptions({
 		JPAMetaModelEntityProcessor.DEBUG_OPTION,
 		JPAMetaModelEntityProcessor.PERSISTENCE_XML_OPTION,
-		JPAMetaModelEntityProcessor.ORM_XML_OPTION
+		JPAMetaModelEntityProcessor.ORM_XML_OPTION,
+		JPAMetaModelEntityProcessor.FULLY_ANNOTATION_CONFIGURED_OPTION,
+		JPAMetaModelEntityProcessor.LAZY_XML_PARSING
 })
 public class JPAMetaModelEntityProcessor extends AbstractProcessor {
 	public static final String DEBUG_OPTION = "debug";
 	public static final String PERSISTENCE_XML_OPTION = "persistenceXml";
 	public static final String ORM_XML_OPTION = "ormXmlList";
+	public static final String FULLY_ANNOTATION_CONFIGURED_OPTION = "fullyAnnotationConfigured";
+	public static final String LAZY_XML_PARSING = "lazyXmlParsing";
+
 	private static final Boolean ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS = Boolean.FALSE;
 
 	private boolean xmlProcessed = false;
 	private Context context;
+	private boolean fullyAnnotationConfigured = false;
 
 	public void init(ProcessingEnvironment env) {
 		super.init( env );
@@ -81,12 +87,13 @@
 		context.logMessage(
 				Diagnostic.Kind.NOTE, "Hibernate JPA 2 Static-Metamodel Generator " + Version.getVersionString()
 		);
+
+		String tmp = env.getOptions().get( JPAMetaModelEntityProcessor.FULLY_ANNOTATION_CONFIGURED_OPTION );
+		fullyAnnotationConfigured = Boolean.parseBoolean( tmp );
 	}
 
 	@Override
-	public boolean process(final Set<? extends TypeElement> annotations,
-						   final RoundEnvironment roundEnvironment) {
-
+	public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnvironment) {
 		if ( roundEnvironment.processingOver() ) {
 			context.logMessage( Diagnostic.Kind.OTHER, "Last processing round." );
 			createMetaModelClasses();
@@ -94,7 +101,7 @@
 			return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS;
 		}
 
-		if ( !xmlProcessed ) {
+		if ( !fullyAnnotationConfigured && !xmlProcessed ) {
 			XmlParser parser = new XmlParser( context );
 			parser.parseXml();
 			xmlProcessed = true;
@@ -156,7 +163,7 @@
 			for ( Element subElement : ElementFilter.fieldsIn( entity.getTypeElement().getEnclosedElements() ) ) {
 				TypeMirror mirror = subElement.asType();
 				if ( !TypeKind.DECLARED.equals( mirror.getKind() ) ) {
-					 continue;
+					continue;
 				}
 				boolean contains = mirror.accept( visitor, subElement );
 				if ( contains ) {


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


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


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

Added: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/util/FileTimeStampChecker.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/util/FileTimeStampChecker.java	                        (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/util/FileTimeStampChecker.java	2010-02-18 01:07:46 UTC (rev 18824)
@@ -0,0 +1,73 @@
+// $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.util;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class FileTimeStampChecker implements Serializable {
+
+
+	Map<String, Long> lastModifiedCache;
+
+	public FileTimeStampChecker() {
+		lastModifiedCache = new HashMap<String, Long>();
+	}
+
+	public void add(String fileName, Long lastModified) {
+		lastModifiedCache.put( fileName, lastModified );
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if ( this == o ) {
+			return true;
+		}
+		if ( o == null || getClass() != o.getClass() ) {
+			return false;
+		}
+
+		FileTimeStampChecker that = ( FileTimeStampChecker ) o;
+
+		if ( !lastModifiedCache.equals( that.lastModifiedCache ) ) {
+			return false;
+		}
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		return lastModifiedCache.hashCode();
+	}
+
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder();
+		sb.append( "FileTimeStampChecker" );
+		sb.append( "{lastModifiedCache=" ).append( lastModifiedCache );
+		sb.append( '}' );
+		return sb.toString();
+	}
+}
+
+


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


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

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEmbeddable.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEmbeddable.java	2010-02-17 21:07:42 UTC (rev 18823)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEmbeddable.java	2010-02-18 01:07:46 UTC (rev 18824)
@@ -1,4 +1,4 @@
-// $Id: XmlMetaEntity.java 18753 2010-02-09 21:29:34Z hardy.ferentschik $
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


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

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-17 21:07:42 UTC (rev 18823)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java	2010-02-18 01:07:46 UTC (rev 18824)
@@ -360,6 +360,9 @@
 	}
 
 	private void parseEmbeddableAttributes(EmbeddableAttributes attributes) {
+		if ( attributes == null ) {
+			return;
+		}
 		for ( Basic basic : attributes.getBasic() ) {
 			parseBasic( basic );
 		}

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-17 21:07:42 UTC (rev 18823)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlParser.java	2010-02-18 01:07:46 UTC (rev 18824)
@@ -17,8 +17,15 @@
 */
 package org.hibernate.jpamodelgen.xml;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -40,6 +47,7 @@
 import org.hibernate.jpamodelgen.AccessTypeInformation;
 import org.hibernate.jpamodelgen.Context;
 import org.hibernate.jpamodelgen.util.Constants;
+import org.hibernate.jpamodelgen.util.FileTimeStampChecker;
 import org.hibernate.jpamodelgen.util.StringUtil;
 import org.hibernate.jpamodelgen.util.TypeUtils;
 import org.hibernate.jpamodelgen.xml.jaxb.Entity;
@@ -56,6 +64,7 @@
 	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 SERIALIZATION_FILE_NAME = "Hibernate-Static-Metamodel-Generator.tmp";
 
 	private Context context;
 	private List<EntityMappings> entityMappings;
@@ -66,7 +75,13 @@
 	}
 
 	public void parseXml() {
-		collectAllEntityMappings();
+		Collection<String> mappingFileNames = determineMappingFileNames();
+
+		if ( context.doLazyXmlParsing() && mappingFilesUnchanged( mappingFileNames ) ) {
+			return;
+		}
+
+		loadEntityMappings( mappingFileNames );
 		determineDefaultAccessTypeAndMetaCompleteness();
 		determineXmlAccessTypes();
 		if ( !context.isPersistenceUnitCompletelyXmlConfigured() ) {
@@ -83,37 +98,109 @@
 		}
 	}
 
-	private void collectAllEntityMappings() {
+	private Collection<String> determineMappingFileNames() {
+		Collection<String> mappingFileNames = new ArrayList<String>();
+
 		Persistence persistence = parseXml(
 				context.getPersistenceXmlLocation(), 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 ) {
-					loadEntityMappings( mappingFile );
-				}
+				mappingFileNames.addAll( unit.getMappingFile() );
 			}
 		}
 
 		// /META-INF/orm.xml is implicit
-		loadEntityMappings( ORM_XML );
+		mappingFileNames.add( 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() ) {
-			loadEntityMappings( optionalOrmFiles );
+		mappingFileNames.addAll( context.getOrmXmlFiles() );
+		return mappingFileNames;
+	}
+
+	private void loadEntityMappings(Collection<String> mappingFileNames) {
+		for ( String mappingFile : mappingFileNames ) {
+			EntityMappings mapping = parseXml( mappingFile, EntityMappings.class, ORM_XSD );
+			if ( mapping != null ) {
+				entityMappings.add( mapping );
+			}
 		}
 	}
 
-	private void loadEntityMappings(String resource) {
-		EntityMappings mapping = parseXml( resource, EntityMappings.class, ORM_XSD );
-		if ( mapping != null ) {
-			entityMappings.add( mapping );
+	private boolean mappingFilesUnchanged(Collection<String> mappingFileNames) {
+		boolean mappingFilesUnchanged = false;
+		FileTimeStampChecker fileStampCheck = new FileTimeStampChecker();
+		for ( String mappingFile : mappingFileNames ) {
+			try {
+				URL url = this.getClass().getResource( mappingFile );
+				if ( url == null ) {
+					continue;
+				}
+				File file = new File( url.toURI() );
+				context.logMessage( Diagnostic.Kind.OTHER, "Check file  " + mappingFile );
+				if ( file.exists() ) {
+					fileStampCheck.add( mappingFile, file.lastModified() );
+				}
+			}
+			catch ( URISyntaxException e ) {
+				// in doubt return false
+				return false;
+			}
 		}
+
+		FileTimeStampChecker serializedTimeStampCheck = loadTimeStampCache();
+		if ( serializedTimeStampCheck.equals( fileStampCheck ) ) {
+			context.logMessage( Diagnostic.Kind.OTHER, "XML parsing will be skipped due to unchanged xml files" );
+			mappingFilesUnchanged = true;
+		}
+		else {
+			saveTimeStampCache( fileStampCheck );
+		}
+
+		return mappingFilesUnchanged;
 	}
 
+	private void saveTimeStampCache(FileTimeStampChecker fileStampCheck) {
+		try {
+			File file = getSerializationTmpFile();
+			ObjectOutput out = new ObjectOutputStream( new FileOutputStream( file ) );
+			out.writeObject( fileStampCheck );
+			out.close();
+			context.logMessage(
+					Diagnostic.Kind.OTHER, "Serialized " + fileStampCheck + " into " + file.getAbsolutePath()
+			);
+		}
+		catch ( IOException e ) {
+			// ignore - if the serialization failed we just have to keep parsing the xml
+			context.logMessage( Diagnostic.Kind.OTHER, "Error serializing  " + fileStampCheck );
+		}
+	}
+
+	private File getSerializationTmpFile() {
+		File tmpDir = new File( System.getProperty( "java.io.tmpdir" ) );
+		return new File( tmpDir, SERIALIZATION_FILE_NAME );
+	}
+
+	private FileTimeStampChecker loadTimeStampCache() {
+		FileTimeStampChecker serializedTimeStampCheck = new FileTimeStampChecker();
+		File file = null;
+		try {
+			file = getSerializationTmpFile();
+			if ( file.exists() ) {
+				ObjectInputStream in = new ObjectInputStream( new FileInputStream( file ) );
+				serializedTimeStampCheck = ( FileTimeStampChecker ) in.readObject();
+				in.close();
+			}
+		}
+		catch ( Exception e ) {
+			// ignore - if the de-serialization failed we just have to keep parsing the xml
+			context.logMessage( Diagnostic.Kind.OTHER, "Error de-serializing  " + file );
+		}
+		return serializedTimeStampCheck;
+	}
+
 	private void parseEntities(Collection<Entity> entities, String defaultPackageName) {
 		for ( Entity entity : entities ) {
 			String fqcn = StringUtil.determineFullyQualifiedClassName( defaultPackageName, entity.getClazz() );
@@ -254,7 +341,6 @@
 	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()


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

Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/TemperatureSamples.java
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/TemperatureSamples.java	2010-02-17 21:07:42 UTC (rev 18823)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/TemperatureSamples.java	2010-02-18 01:07:46 UTC (rev 18824)
@@ -1,4 +1,4 @@
-// $Id: Image.java 17903 2009-11-04 13:22:37Z hardy.ferentschik $
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/TemperatureSamples.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/generics/Child.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/generics/Parent.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Car.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Coordinates.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Insurance.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Location.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/MixedConfigurationTest.java
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/MixedConfigurationTest.java	2010-02-17 21:07:42 UTC (rev 18823)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/MixedConfigurationTest.java	2010-02-18 01:07:46 UTC (rev 18824)
@@ -1,4 +1,4 @@
-// $Id: MixedModeMappingTest.java 18683 2010-02-02 21:51:40Z hardy.ferentschik $
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/MixedConfigurationTest.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/RentalCar.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/RentalCompany.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Truck.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/Vehicle.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/mixedmode/ZeroCoordinates.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawtypes/DeskWithRawType.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawtypes/EmployeeWithRawType.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawtypes/RawTypesTest.java
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawtypes/RawTypesTest.java	2010-02-17 21:07:42 UTC (rev 18823)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawtypes/RawTypesTest.java	2010-02-18 01:07:46 UTC (rev 18824)
@@ -1,4 +1,4 @@
-// $Id: RawTypesTest.java 18664 2010-01-28 16:56:51Z hardy.ferentschik $
+// $Id$
 /*
 * JBoss, Home of Professional Open Source
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/rawtypes/RawTypesTest.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/CompilationTest.java
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/CompilationTest.java	2010-02-17 21:07:42 UTC (rev 18823)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/CompilationTest.java	2010-02-18 01:07:46 UTC (rev 18824)
@@ -132,7 +132,6 @@
 			builder.append( entry.getValue() );
 			options.add( builder.toString() );
 		}
-		options.add( "-Adebug=true" );
 		return options;
 	}
 


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Boy.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/FakeHero.java
___________________________________________________________________
Name: svn:keywords
   + Id


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/xmlmapped/Superhero.java
___________________________________________________________________
Name: svn:keywords
   + Id



More information about the hibernate-commits mailing list