Update-Skript zum Verändern der Typhierarchie von ccm-sci-publications/Journal (wird nicht mehr von Publication abgeleitet)

git-svn-id: https://svn.libreccm.org/ccm/trunk@1637 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2012-05-03 12:15:47 +00:00
parent 5543ac84e2
commit 2a103a3564
2 changed files with 170 additions and 1 deletions

View File

@ -0,0 +1,169 @@
package com.arsdigita.cms.contenttypes.upgrades;
import com.arsdigita.runtime.RuntimeConfig;
import com.arsdigita.util.cmd.Program;
import com.arsdigita.util.jdbc.Connections;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.commons.cli.CommandLine;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class JournalTypeUpgrade extends Program {
public JournalTypeUpgrade() {
super("JournalTypeUpgrade", "1.0.0", "");
}
public static void main(final String[] args) {
new JournalTypeUpgrade().run(args);
}
@Override
protected void doRun(final CommandLine cmdLine) {
System.out.println("Starting upgrade...");
System.out.println("Trying to get JDBC connection...");
final Connection conn = Connections.acquire(RuntimeConfig.getConfig().
getJDBCURL());
try {
conn.setAutoCommit(false);
} catch (SQLException ex) {
System.err.println("Failed to configure JDBC connection.");
printStackTrace(ex);
close(conn);
return;
}
try {
System.out.printf("Altering table ct_journal...");
final Statement stmt = conn.createStatement();
stmt.addBatch("ALTER TABLE ct_journal "
+ "ADD COLUMN firstyear integer");
} catch (SQLException ex) {
System.err.println("Failed to alter table ct_journal.");
printStackTrace(ex);
rollback(conn);
close(conn);
return;
}
try {
System.out.printf("Moving data from ct_publications to ct_journal...");
final Statement stmt = conn.createStatement();
final Statement queryStmt = conn.createStatement();
final ResultSet dataRs = queryStmt.executeQuery("SELECT publication_id, year FROM ct_publications");
while (dataRs.next()) {
stmt.addBatch(String.format("UPDATE ct_journal "
+ "SET firstyear = %s "
+ "WHERE journal_id = %s",
dataRs.getString("year"),
dataRs.getString("publication_id")));
}
} catch (SQLException ex) {
System.err.println("Failed to alter table ct_journal.");
printStackTrace(ex);
rollback(conn);
close(conn);
return;
}
try {
System.out.println("Altering foreign key constraint...");
final Statement stmt = conn.createStatement();
stmt.addBatch("ALTER TABLE ct_journal REMOVE CONSTRAINT ct_journal_journal_id_f_akey7");
stmt.addBatch("ALTER TABLE ct_journal ADD FOREIGN KEY (publication_id) REFERENCES cms_pages");
} catch (SQLException ex) {
System.err.println("Failed to alter table foreign key constraint.");
printStackTrace(ex);
rollback(conn);
close(conn);
return;
}
try {
System.out.println("Altering content_types table...");
final Statement stmt = conn.createStatement();
final Statement queryStmt = conn.createStatement();
final ResultSet dataRs = queryStmt.executeQuery(
"SELECT type_id "
+ "FROM content_types "
+ "WHERE object_type = 'com.arsdigita.cms.contenttypes.Journal'");
final String journalTypeId;
dataRs.next();
journalTypeId = dataRs.getString("type_id");
dataRs.close();
stmt.addBatch("UPDATE content_types "
+ "SET ancestors = null "
+ "WHERE object_type = 'com.arsdigita.cms.contenttypes.Journal'");
stmt.addBatch(String.format("UPDATE content_types "
+ "REPLACE(descendants, '%s', '' "
+ "WHERE object_type = 'com.arsdigita.cms.contenttypes.Publication'",
journalTypeId));
stmt.addBatch("UPDATE content_types "
+ "REPLACE(descendants, '//', '/' "
+ "WHERE object_type = 'com.arsdigita.cms.contenttypes.Publication'");
} catch (SQLException ex) {
System.err.println("Failed to content_types table.");
printStackTrace(ex);
rollback(conn);
close(conn);
return;
}
try {
conn.commit();
} catch (SQLException ex) {
System.err.println("Failed to commiting modifications.");
printStackTrace(ex);
rollback(conn);
return;
}
close(conn);
}
private void rollback(final Connection conn) {
try {
conn.rollback();
} catch (SQLException ex1) {
System.err.println("Rollback failed.");
ex1.printStackTrace(System.err);
}
}
private void close(final Connection conn) {
try {
conn.close();
} catch (SQLException ex) {
System.err.println("Failed to close JDBC connection.");
printStackTrace(ex);
}
}
private void printStackTrace(final SQLException ex) {
ex.printStackTrace(System.err);
if (ex.getNextException() != null) {
printStackTrace(ex.getNextException());
}
}
}

View File

@ -1,5 +1,5 @@
<upgrade> <upgrade>
<version from="6.6.5" to="6.6.6"> <version from="6.6.5" to="6.6.6">
<script class="com.arsdigita.cms.contenttypes.upgrades.SciProjectBundleUpgrade"/> <script class="com.arsdigita.cms.contenttypes.upgrades.SciProjectBundleUpgrade"/>
</version> </version>
</upgrade> </upgrade>