diff --git a/src/main/java/com/springsource/greenhouse/config/DataConfig.java b/src/main/java/com/springsource/greenhouse/config/DataConfig.java index 277cdf1a..37a53b48 100644 --- a/src/main/java/com/springsource/greenhouse/config/DataConfig.java +++ b/src/main/java/com/springsource/greenhouse/config/DataConfig.java @@ -30,7 +30,8 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import org.springframework.jdbc.versioned.DatabaseChangeSetBuilder; +import org.springframework.jdbc.versioned.DatabaseChangeSet; +import org.springframework.jdbc.versioned.SqlDatabaseChange; import org.springframework.security.crypto.encrypt.TextEncryptor; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -96,8 +97,8 @@ public DataSource dataSource() { private EmbeddedDatabase populateDatabase(EmbeddedDatabase database) { new DatabaseUpgrader(database, environment, textEncryptor) { - protected void addInstallChanges(DatabaseChangeSetBuilder builder) { - builder.addChange(new ClassPathResource("test-data.sql", getClass())); + protected void addInstallChanges(DatabaseChangeSet changeSet) { + changeSet.add(SqlDatabaseChange.inResource(new ClassPathResource("test-data.sql", getClass()))); } }.run(); return database; diff --git a/src/main/java/com/springsource/greenhouse/database/DatabaseUpgrader.java b/src/main/java/com/springsource/greenhouse/database/DatabaseUpgrader.java index 7aab5bec..83e179c8 100644 --- a/src/main/java/com/springsource/greenhouse/database/DatabaseUpgrader.java +++ b/src/main/java/com/springsource/greenhouse/database/DatabaseUpgrader.java @@ -19,9 +19,8 @@ import org.springframework.core.env.Environment; import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; +import org.springframework.jdbc.versioned.DatabaseChange; import org.springframework.jdbc.versioned.DatabaseChangeSet; -import org.springframework.jdbc.versioned.DatabaseChangeSetBuilder; import org.springframework.jdbc.versioned.DatabaseVersion; import org.springframework.jdbc.versioned.GenericDatabaseUpgrader; import org.springframework.jdbc.versioned.SqlDatabaseChange; @@ -59,12 +58,8 @@ public void run() { // subclassing hooks - protected void addInstallChanges(DatabaseChangeSetBuilder builder) {} + protected void addInstallChanges(DatabaseChangeSet changeSet) {} - protected DatabaseChangeSet singletonChangeSet(String version, Resource resource) { - return new DatabaseChangeSetBuilder(DatabaseVersion.valueOf(version)).addChange(resource).getChangeSet(); - } - // internal helpers private org.springframework.jdbc.versioned.DatabaseUpgrader createUpgrader(DataSource dataSource) { @@ -78,40 +73,47 @@ private org.springframework.jdbc.versioned.DatabaseUpgrader createUpgrader(DataS } private void addInstallChangeSet(GenericDatabaseUpgrader upgrader) { - DatabaseChangeSetBuilder builder = new DatabaseChangeSetBuilder(DatabaseVersion.valueOf("3")); - builder.addChange(installScript("Member.sql")); - builder.addChange(installScript("Group.sql")); - builder.addChange(installScript("Activity.sql")); - builder.addChange(installScript("ConnectedApp.sql")); - builder.addChange(installScript("Reset.sql")); - builder.addChange(installScript("Invite.sql")); - builder.addChange(installScript("Venue.sql")); - builder.addChange(installScript("Event.sql")); - builder.addChange(new ClassPathResource("JdbcUsersConnectionRepository.sql", JdbcUsersConnectionRepository.class)); - addInstallChanges(builder); - upgrader.addChangeSet(builder.getChangeSet()); + DatabaseChangeSet changeSet = new DatabaseChangeSet(DatabaseVersion.valueOf("3")); + changeSet.add(installScript("Member.sql")); + changeSet.add(installScript("Group.sql")); + changeSet.add(installScript("Activity.sql")); + changeSet.add(installScript("ConnectedApp.sql")); + changeSet.add(installScript("Reset.sql")); + changeSet.add(installScript("Invite.sql")); + changeSet.add(installScript("Venue.sql")); + changeSet.add(installScript("Event.sql")); + changeSet.add(SqlDatabaseChange.inResource(new ClassPathResource("JdbcUsersConnectionRepository.sql", JdbcUsersConnectionRepository.class))); + addInstallChanges(changeSet); + upgrader.addChangeSet(changeSet); } - private Resource installScript(String resource) { - return new ClassPathResource("install/" + resource, DatabaseUpgrader.class); + private DatabaseChange installScript(String resource) { + return SqlDatabaseChange.inResource(new ClassPathResource("install/" + resource, DatabaseUpgrader.class)); } private void addUpgradeChangeSets(GenericDatabaseUpgrader upgrader) { - upgrader.addChangeSet(singletonChangeSet("2", upgradeScript("v2/AlterServiceProviderTable.sql"))); + upgrader.addChangeSet(version2ChangeSet()); // upgrader.addChangeSet(version3ChangeSet()); } - private Resource upgradeScript(String resource) { - return new ClassPathResource("upgrade/" + resource, DatabaseUpgrader.class); + private DatabaseChangeSet version2ChangeSet() { + DatabaseChangeSet changeSet = new DatabaseChangeSet(DatabaseVersion.valueOf("2")); + changeSet.add(upgradeScript("v2/AlterServiceProviderTable.sql")); + return changeSet; } + @SuppressWarnings("unused") private DatabaseChangeSet version3ChangeSet() { DatabaseChangeSet changeSet = new DatabaseChangeSet(DatabaseVersion.valueOf("3")); changeSet.add(new UpdateEncryptionMethod(environment, textEncryptor)); - changeSet.add(SqlDatabaseChange.inResource(upgradeScript("v3/CreateUserConnectionTable.sql"))); - changeSet.add(SqlDatabaseChange.inResource(upgradeScript("v3/PopulateUserConnectionTable.sql"))); - changeSet.add(SqlDatabaseChange.inResource(upgradeScript("v3/DropAccountConnectionTables.sql"))); + changeSet.add(upgradeScript("v3/CreateUserConnectionTable.sql")); + changeSet.add(upgradeScript("v3/PopulateUserConnectionTable.sql")); + changeSet.add(upgradeScript("v3/DropAccountConnectionTables.sql")); return changeSet; } + private DatabaseChange upgradeScript(String resource) { + return SqlDatabaseChange.inResource(new ClassPathResource("upgrade/" + resource, DatabaseUpgrader.class)); + } + } \ No newline at end of file diff --git a/src/main/java/org/springframework/jdbc/versioned/DatabaseChangeSetBuilder.java b/src/main/java/org/springframework/jdbc/versioned/DatabaseChangeSetBuilder.java deleted file mode 100644 index 0d42b922..00000000 --- a/src/main/java/org/springframework/jdbc/versioned/DatabaseChangeSetBuilder.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2010 the original author or authors. - * - * 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.springframework.jdbc.versioned; - -import java.io.IOException; -import java.io.LineNumberReader; - -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.EncodedResource; -import org.springframework.util.StringUtils; - -/** - * A fluent builder for constructing a DatabaseChangeSet programatically. - * Changes are applied in the order they are {@link #addChange(Resource) added} to the change set. - * @author Keith Donald - */ -public class DatabaseChangeSetBuilder { - - private final DatabaseChangeSet changeSet; - - /** - * Constructs a builder that builds a change set that upgrades the database to the version specified. - * @param version the target database version - */ - public DatabaseChangeSetBuilder(DatabaseVersion version) { - changeSet = new DatabaseChangeSet(version); - } - - /** - * Adds a change to the change set under construction that applies the SQL contained in the resource. - * @param resource the SQL resource - * @return this, for fluent call chaining - */ - public DatabaseChangeSetBuilder addChange(Resource resource) { - changeSet.add(new SqlDatabaseChange(readSql(resource))); - return this; - } - - /** - * Called at the end of construction to get the fully-built ChangeSet. - */ - public DatabaseChangeSet getChangeSet() { - return changeSet; - } - - // internal helpers - - private String readSql(Resource resource) { - try { - return readScript(resource); - } catch (IOException e) { - throw new IllegalArgumentException("Could not read sql resource: " + resource, e); - } - } - - // TODO this code is duplicated from ResourceDatabasePopulator as well - private String readScript(Resource resource) throws IOException { - EncodedResource encoded = resource instanceof EncodedResource ? (EncodedResource) resource : new EncodedResource(resource); - LineNumberReader lnr = new LineNumberReader(encoded.getReader()); - String currentStatement = lnr.readLine(); - StringBuilder scriptBuilder = new StringBuilder(); - while (currentStatement != null) { - if (StringUtils.hasText(currentStatement) && - (SQL_COMMENT_PREFIX != null && !currentStatement.startsWith(SQL_COMMENT_PREFIX))) { - if (scriptBuilder.length() > 0) { - scriptBuilder.append('\n'); - } - scriptBuilder.append(currentStatement); - } - currentStatement = lnr.readLine(); - } - return scriptBuilder.toString(); - } - - private static String SQL_COMMENT_PREFIX = "--"; - -} \ No newline at end of file