/**
* Upgrade database for Roller 2.1.0
*/
private void upgradeTo210(Connection con, boolean runScripts) throws StartupException {
SQLScriptRunner runner = null;
try {
if (runScripts) {
String handle = getDatabaseHandle(con);
String scriptPath = handle + "/200-to-210-migration.sql";
successMessage("Running database upgrade script: "+scriptPath);
runner = new SQLScriptRunner(scripts.getDatabaseScript(scriptPath));
runner.runScript(con, true);
messages.addAll(runner.getMessages());
}
/*
* For Roller 2.1.0 we are going to standardize some of the
* weblog templates and make them less editable. To do this
* we need to do a little surgery.
*
* The goal for this upgrade is to ensure that ALL weblogs now have
* the required "Weblog" template as their default template.
*/
successMessage("Doing upgrade to 210 ...");
successMessage("Ensuring that all weblogs use the 'Weblog' template as their default page");
// this query will give us all websites that have modified their
// default page to link to something other than "Weblog"
PreparedStatement selectUpdateWeblogs = con.prepareStatement(
"select website.id,template,website.handle from website,webpage "+
"where webpage.id = website.defaultpageid "+
"and webpage.link != 'Weblog'");
PreparedStatement selectWeblogTemplate = con.prepareStatement(
"select id from webpage where websiteid = ? and link = 'Weblog'");
PreparedStatement updateWeblogTemplate = con.prepareStatement(
"update webpage set template = ? where id = ?");
// insert a new template for a website
PreparedStatement insertWeblogTemplate = con.prepareStatement(
"insert into webpage"+
"(id, name, description, link, websiteid, template, updatetime) "+
"values(?,?,?,?,?,?,?)");
// update the default page for a website
PreparedStatement updateDefaultPage = con.prepareStatement(
"update website set defaultpageid = ? "+
"where id = ?");
String description = "This template is used to render the main "+
"page of your weblog.";
ResultSet websiteSet = selectUpdateWeblogs.executeQuery();
Date now = new Date();
while (websiteSet.next()) {
String websiteid = websiteSet.getString(1);
String template = websiteSet.getString(2);
String handle = websiteSet.getString(3);
successMessage("Processing website: " + handle);
String defaultpageid = null;
// it's possible that this weblog has a "Weblog" template, but just
// isn't using it as their default. if so we need to fix that.
selectWeblogTemplate.clearParameters();
selectWeblogTemplate.setString(1, websiteid);
ResultSet weblogPageSet = selectWeblogTemplate.executeQuery();
if(weblogPageSet.next()) {
// this person already has a "Weblog" template, so update it
String id = weblogPageSet.getString(1);
updateWeblogTemplate.clearParameters();
updateWeblogTemplate.setString(1, template);
updateWeblogTemplate.setString(2, id);
updateWeblogTemplate.executeUpdate();
// make sure and adjust what default page id we want to use
defaultpageid = id;
} else {
// no "Weblog" template, so insert a new one
insertWeblogTemplate.clearParameters();
insertWeblogTemplate.setString( 1, websiteid+"q");
insertWeblogTemplate.setString( 2, "Weblog");
insertWeblogTemplate.setString( 3, description);
insertWeblogTemplate.setString( 4, "Weblog");
insertWeblogTemplate.setString( 5, websiteid);
insertWeblogTemplate.setString( 6, template);
insertWeblogTemplate.setDate( 7, new java.sql.Date(now.getTime()));
insertWeblogTemplate.executeUpdate();
// set the new default page id
defaultpageid = websiteid+"q";
}
// update defaultpageid value
updateDefaultPage.clearParameters();
updateDefaultPage.setString( 1, defaultpageid);
updateDefaultPage.setString( 2, websiteid);
updateDefaultPage.executeUpdate();
}
if (!con.getAutoCommit()) con.commit();
successMessage("Upgrade to 210 complete.");
} catch (Exception e) {
log.error("ERROR running 310 database upgrade script", e);
if (runner != null) messages.addAll(runner.getMessages());
log.error("Problem upgrading database to version 210", e);
throw new StartupException("Problem upgrading database to version 210", e);
}