diff --git a/src/main/java/com/avaje/ebean/config/DbMigrationConfig.java b/src/main/java/com/avaje/ebean/config/DbMigrationConfig.java index e71a449c9..94bc86b01 100644 --- a/src/main/java/com/avaje/ebean/config/DbMigrationConfig.java +++ b/src/main/java/com/avaje/ebean/config/DbMigrationConfig.java @@ -88,6 +88,8 @@ public class DbMigrationConfig { protected String modelSuffix = ".model.xml"; + protected boolean includeGeneratedFileComment; + /** * Return the DB platform to generate migration DDL for. * @@ -236,6 +238,20 @@ public class DbMigrationConfig { this.rollbackSuffix = rollbackSuffix; } + /** + * Return true if the generated file comment should be included. + */ + public boolean isIncludeGeneratedFileComment() { + return includeGeneratedFileComment; + } + + /** + * Set to true if the generated file comment should be included. + */ + public void setIncludeGeneratedFileComment(boolean includeGeneratedFileComment) { + this.includeGeneratedFileComment = includeGeneratedFileComment; + } + /** * Set the migration version. *
@@ -281,6 +297,7 @@ public class DbMigrationConfig { dropSuffix = properties.get("migration.dropSuffix", dropSuffix); rollbackSuffix = properties.get("migration.rollbackSuffix", rollbackSuffix); modelSuffix = properties.get("migration.modelSuffix", modelSuffix); + includeGeneratedFileComment = properties.getBoolean("migration.includeGeneratedFileComment", includeGeneratedFileComment); platform = properties.getEnum(DbPlatformName.class, "migration.platform", platform); suppressRollback = properties.getBoolean("migration.suppressRollback", suppressRollback); diff --git a/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java b/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java index 52d89514a..fe5025ce5 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java +++ b/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java @@ -59,6 +59,8 @@ public class DbMigration { private static final String initialVersion = "1.0"; + private static final String GENERATED_COMMENT = "THIS IS A GENERATED FILE - DO NOT MODIFY"; + /** * Set to true if DbMigration run with online EbeanServer instance. */ @@ -304,7 +306,8 @@ public class DbMigration { if (file.exists()) { return false; } - MigrationXmlWriter xmlWriter = new MigrationXmlWriter(); + String comment = migrationConfig.isIncludeGeneratedFileComment() ? GENERATED_COMMENT : null; + MigrationXmlWriter xmlWriter = new MigrationXmlWriter(comment); xmlWriter.write(dbMigration, file); return true; } diff --git a/src/main/java/com/avaje/ebean/dbmigration/migrationreader/MigrationXmlWriter.java b/src/main/java/com/avaje/ebean/dbmigration/migrationreader/MigrationXmlWriter.java index a6c6b3bfc..9c19f0382 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/migrationreader/MigrationXmlWriter.java +++ b/src/main/java/com/avaje/ebean/dbmigration/migrationreader/MigrationXmlWriter.java @@ -7,22 +7,46 @@ import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import java.io.File; +import java.io.FileWriter; +import java.io.IOException; /** * Simple writer for output of the Migration/ChangeSet as an XML document. */ public class MigrationXmlWriter { + private final String comment; + + public MigrationXmlWriter(String comment) { + this.comment = comment; + } + /** * Write a Migration to a file as an xml document to the file. */ public void write(Migration migration, File file) { try { + + FileWriter writer = new FileWriter(file); + writer.write("\n"); + if (comment != null) { + writer.write("\n"); + } + JAXBContext jaxbContext = JAXBContext.newInstance(Migration.class); Marshaller marshaller = jaxbContext.createMarshaller(); - marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); - marshaller.marshal(migration, file); + marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); + + marshaller.marshal(migration, writer); + + writer.close(); + + } catch (IOException e) { + throw new RuntimeException(e); } catch (JAXBException e) { throw new RuntimeException(e); diff --git a/src/test/java/com/avaje/ebean/dbmigration/migrationreader/MigrationXmlWriterTest.java b/src/test/java/com/avaje/ebean/dbmigration/migrationreader/MigrationXmlWriterTest.java index b4be314de..4a555e4dc 100644 --- a/src/test/java/com/avaje/ebean/dbmigration/migrationreader/MigrationXmlWriterTest.java +++ b/src/test/java/com/avaje/ebean/dbmigration/migrationreader/MigrationXmlWriterTest.java @@ -5,16 +5,30 @@ import org.junit.Test; import java.io.File; +import static org.assertj.core.api.Assertions.assertThat; + public class MigrationXmlWriterTest { @Test public void testReadWrite() throws Exception { Migration migration = MigrationXmlReader.read("/container/test-create-table.xml"); + assertThat(migration.getChangeSet()).hasSize(1); + assertThat(migration.getChangeSet().get(0).getChangeSetChildren()).hasSize(3); File temp = File.createTempFile("migrationWrite",".xml"); - MigrationXmlWriter writer = new MigrationXmlWriter(); - writer.write(migration, temp); + new MigrationXmlWriter("THIS IS A GENERATED FILE - DO NOT MODIFY").write(migration, temp); + Migration migrationRead = MigrationXmlReader.read(temp); + assertThat(migrationRead.getChangeSet()).hasSize(1); + assertThat(migrationRead.getChangeSet().get(0).getChangeSetChildren()).hasSize(3); + + temp = File.createTempFile("migrationWrite",".xml"); + new MigrationXmlWriter(null).write(migration, temp); + + Migration migrationRead2 = MigrationXmlReader.read(temp); + + assertThat(migrationRead2.getChangeSet()).hasSize(1); + assertThat(migrationRead.getChangeSet().get(0).getChangeSetChildren()).hasSize(3); } } \ No newline at end of file