Author: vmassol
Date: 2008-01-28 18:49:11 +0100 (Mon, 28 Jan 2008)
New Revision: 7110
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/XWikiMigratorInterface.java
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/AbstractXWikiHibernateMigrator.java
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4340XWIKI883Migrator.java
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4359XWIKI1459Migrator.java
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6405XWIKI1933Migrator.java
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6430XWIKI1954Migrator.java
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/XWikiHibernateMigrationManager.java
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/test/java/com/xpn/xwiki/store/migration/XWikiMigrationManagerTest.java
Log:
XWIKI-2044: Modify the database migrator that aligns RCS Diffs data so that it
can be executed even after the migrator that removes RCS data from the document
table has executed
* Introduced new migrator method so that migrators can decide if they should
execute or not based on the initial database version
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
2008-01-28 17:19:01 UTC (rev 7109)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
2008-01-28 17:49:11 UTC (rev 7110)
@@ -21,7 +21,6 @@
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
-import com.xpn.xwiki.doc.XWikiDocument;
import org.apache.commons.collections.set.ListOrderedSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -36,11 +35,37 @@
{
/** logger. */
private static final Log LOG =
LogFactory.getLog(AbstractXWikiMigrationManager.class);
+
/**
+ * Internal class used to find out the migrators that are being forced in
the XWiki configuration file.
+ */
+ protected class XWikiMigration
+ {
+ public boolean isForced;
+ public XWikiMigratorInterface migrator;
+
+ public XWikiMigration(XWikiMigratorInterface migrator, boolean
isForced)
+ {
+ this.migrator = migrator;
+ this.isForced = isForced;
+ }
+ }
+
+ /**
+ * The database version when the migration process starts (before any
migrator is applied).
+ * This is useful for mirgator which need to run only when the database is
in a certain version.
+ */
+ private XWikiDBVersion startupVersion;
+
+ /**
* Unified constructor for all subclasses.
* @param context - used everywhere
*/
- public AbstractXWikiMigrationManager(XWikiContext context) { }
+ public AbstractXWikiMigrationManager(XWikiContext context) throws
XWikiException
+ {
+ this.startupVersion = getDBVersion(context);
+ }
+
/**
* read data version from xwiki.cfg.
* @param context used for read config
@@ -51,6 +76,7 @@
String ver =
context.getWiki().getConfig().getProperty("xwiki.store.migration.version");
return ver == null ? null : new XWikiDBVersion(Integer.parseInt(ver));
}
+
/**
* [EMAIL PROTECTED]
*/
@@ -59,6 +85,7 @@
XWikiDBVersion result = getDBVersionFromConfig(context);
return result == null ? new XWikiDBVersion(0) : result;
}
+
/**
* @param version to set
* @param context used everywhere
@@ -157,13 +184,10 @@
{
XWikiDBVersion curversion = getDBVersion(context);
SortedMap neededMigrations = new TreeMap();
- String[] forcedMigrations =
context.getWiki().getConfig().getPropertyAsList("xwiki.store.migration.force");
- if (forcedMigrations.length > 0) {
- for (int i = 0; i < forcedMigrations.length; i++) {
- XWikiMigratorInterface migrator =
- (XWikiMigratorInterface)
Class.forName(forcedMigrations[i]).newInstance();
- neededMigrations.put(migrator.getVersion(), migrator);
- }
+
+ Map forcedMigrations = getForcedMigrations(context);
+ if (!forcedMigrations.isEmpty()) {
+ neededMigrations.putAll(forcedMigrations);
} else {
Set ignoredMigrations = new
HashSet(Arrays.asList(context.getWiki().getConfig()
.getPropertyAsList("xwiki.store.migration.ignored")));
@@ -176,7 +200,8 @@
continue;
}
if (migrator.getVersion().compareTo(curversion) >= 0) {
- neededMigrations.put(migrator.getVersion(), migrator);
+ XWikiMigration migration = new XWikiMigration(migrator,
true);
+ neededMigrations.put(migrator.getVersion(), migration);
}
}
}
@@ -187,8 +212,9 @@
LOG.info("Current storage version = [" + curversion.toString()
+ "]");
LOG.info("List of migrations that will be executed:");
for (Iterator it = neededMigrationsAsCollection.iterator();
it.hasNext();) {
- XWikiMigratorInterface migrator = (XWikiMigratorInterface)
it.next();
- LOG.info(" " + migrator.getName() + " - " +
migrator.getDescription());
+ XWikiMigration migration = (XWikiMigration) it.next();
+ LOG.info(" " + migration.migrator.getName() + " - " +
migration.migrator.getDescription()
+ + (migration.isForced ? " (forced)" : ""));
}
} else {
LOG.info("No storage migration required since current version
is [" + curversion.toString() + "]");
@@ -197,41 +223,51 @@
return neededMigrationsAsCollection;
}
+
+ protected Map getForcedMigrations(XWikiContext context) throws Exception
+ {
+ SortedMap forcedMigrations = new TreeMap();
+ String[] forcedMigrationsArray =
context.getWiki().getConfig().getPropertyAsList("xwiki.store.migration.force");
+ for (int i = 0; i < forcedMigrationsArray.length; i++) {
+ XWikiMigratorInterface migrator =
+ (XWikiMigratorInterface)
Class.forName(forcedMigrationsArray[i]).newInstance();
+ XWikiMigration migration = new XWikiMigration(migrator, true);
+ forcedMigrations.put(migrator.getVersion(), migration);
+ }
+ return forcedMigrations;
+ }
+
/**
* @param migrations - run this migrations in order of collection
* @param context - used everywhere
* @throws XWikiException if any error
*/
protected void startMigrations(Collection migrations, XWikiContext context)
- throws XWikiException
+ throws Exception
{
XWikiDBVersion curversion = getDBVersion(context);
for (Iterator it = migrations.iterator(); it.hasNext();) {
- XWikiMigratorInterface migrator = (XWikiMigratorInterface)
it.next();
+ XWikiMigration migration = (XWikiMigration) it.next();
if (LOG.isInfoEnabled()) {
- LOG.info("Running migration [" + migrator.getName() + "] with
version [" + migrator.getVersion() + "]");
+ LOG.info("Running migration [" + migration.migrator.getName()
+ "] with version ["
+ + migration.migrator.getVersion() + "]");
}
- migrate(migrator, context);
- if (migrator.getVersion().compareTo(curversion) > 0) {
- setDBVersion(migrator.getVersion().increment(), context);
+
+ if (migration.isForced ||
migration.migrator.shouldExecute(this.startupVersion)) {
+ migration.migrator.migrate(this, context);
+ }
+
+ if (migration.migrator.getVersion().compareTo(curversion) > 0) {
+ setDBVersion(migration.migrator.getVersion().increment(),
context);
if (LOG.isInfoEnabled()) {
LOG.info("New storage version is now [" +
getDBVersion(context) + "]");
}
}
}
}
+
/**
- * @param migrator to execute
* @param context used everywhere
- * @throws XWikiException if any error
- */
- protected void migrate(XWikiMigratorInterface migrator, XWikiContext
context)
- throws XWikiException
- {
- migrator.migrate(this, context);
- }
- /**
- * @param context used everywhere
* @return List of all [EMAIL PROTECTED] XWikiMigratorInterface} for this
manager
* @throws XWikiException if any error
*/
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/XWikiMigratorInterface.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/XWikiMigratorInterface.java
2008-01-28 17:19:01 UTC (rev 7109)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/XWikiMigratorInterface.java
2008-01-28 17:49:11 UTC (rev 7110)
@@ -45,12 +45,19 @@
* you need write migrator with version = current svn revision number.
*/
XWikiDBVersion getVersion();
+
/**
* Run migration.
- * @param manager - manager which run migration. used for access to store
system.
- * @param context - used everywhere
+ * @param manager the manager which run migration. used for access to
store system.
+ * @param context used everywhere
* @throws XWikiException if any error
*/
- void migrate(XWikiMigrationManagerInterface manager, XWikiContext context)
- throws XWikiException;
+ void migrate(XWikiMigrationManagerInterface manager, XWikiContext context)
throws XWikiException;
+
+ /**
+ * @param startupVersion the database version when the migration process
starts (before any migrator is applied).
+ * This is useful for migrator which need to run only when the
database is in a certain version.
+ * @return true if the migration should be executed or false otherwise
+ */
+ boolean shouldExecute(XWikiDBVersion startupVersion);
}
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/AbstractXWikiHibernateMigrator.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/AbstractXWikiHibernateMigrator.java
2008-01-28 17:19:01 UTC (rev 7109)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/AbstractXWikiHibernateMigrator.java
2008-01-28 17:49:11 UTC (rev 7110)
@@ -23,6 +23,7 @@
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.store.migration.XWikiMigrationManagerInterface;
import com.xpn.xwiki.store.migration.XWikiMigratorInterface;
+import com.xpn.xwiki.store.migration.XWikiDBVersion;
/**
* Template for migrators of hibernate store
@@ -37,7 +38,17 @@
{
migrate((XWikiHibernateMigrationManager)manager, context);
}
- /** @see AbstractXWikiHibernateMigrator#migrate(AXWikiMigrationManager,
XWikiContext) */
+
+ /**
+ * [EMAIL PROTECTED]
+ * @see
com.xpn.xwiki.store.migration.XWikiMigratorInterface#shouldExecute(XWikiDBVersion)
+ */
+ public boolean shouldExecute(XWikiDBVersion startupVersion)
+ {
+ return true;
+ }
+
+ /** @see
XWikiMigratorInterface#migrate(XWikiMigrationManagerInterface,XWikiContext) */
public abstract void migrate(XWikiHibernateMigrationManager manager,
XWikiContext context)
throws XWikiException;
}
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4340XWIKI883Migrator.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4340XWIKI883Migrator.java
2008-01-28 17:19:01 UTC (rev 7109)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4340XWIKI883Migrator.java
2008-01-28 17:49:11 UTC (rev 7110)
@@ -33,6 +33,7 @@
import com.xpn.xwiki.objects.StringProperty;
import com.xpn.xwiki.store.XWikiHibernateBaseStore.HibernateCallback;
import com.xpn.xwiki.store.migration.XWikiDBVersion;
+
/**
* Migration for XWIKI-883: global access preferences cannot be updated
* @version $Id: $
@@ -62,6 +63,7 @@
{
return new XWikiDBVersion(4340);
}
+
/** [EMAIL PROTECTED] */
public void migrate(XWikiHibernateMigrationManager manager, XWikiContext
context)
throws XWikiException
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4359XWIKI1459Migrator.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4359XWIKI1459Migrator.java
2008-01-28 17:19:01 UTC (rev 7109)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4359XWIKI1459Migrator.java
2008-01-28 17:49:11 UTC (rev 7110)
@@ -69,20 +69,13 @@
{
return new XWikiDBVersion(4359);
}
- /** [EMAIL PROTECTED] */
- public void migrate(XWikiHibernateMigrationManager manager, final
XWikiContext context) throws XWikiException
- {
- migrate(manager, context, LOG);
- }
- /**
- * The reason for the logger is to let the R6079XWIKI1878Migrator reuse
the same code.
- */
- protected void migrate(XWikiHibernateMigrationManager manager, final
XWikiContext context, final Log logger)
+ /** [EMAIL PROTECTED] */
+ public void migrate(XWikiHibernateMigrationManager manager, final
XWikiContext context)
throws XWikiException
{
// migrate data
- if (manager.getStore(context).executeWrite(context, true, new
HibernateCallback() {
+ manager.getStore(context).executeWrite(context, true, new
HibernateCallback() {
public Object doInHibernate(Session session) throws
HibernateException, XWikiException
{
try {
@@ -101,8 +94,8 @@
PreparedStatement deleteStatement =
session.connection().prepareStatement("update xwikidoc set XWD_ARCHIVE=null
where XWD_ID=?");
while (rs.next()) {
- if (logger.isInfoEnabled()) {
- logger.info("Updating document [" +
rs.getString(3) + "]...");
+ if (LOG.isInfoEnabled()) {
+ LOG.info("Updating document [" + rs.getString(3) +
"]...");
}
long docId = Long.parseLong(rs.getString(1));
String sArchive = rs.getString(2);
@@ -129,6 +122,6 @@
}
return Boolean.TRUE;
}
- })==null) return;
+ });
}
}
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
2008-01-28 17:19:01 UTC (rev 7109)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
2008-01-28 17:49:11 UTC (rev 7110)
@@ -21,11 +21,21 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.hibernate.Session;
+import org.hibernate.HibernateException;
+import org.hibernate.Transaction;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.store.migration.XWikiDBVersion;
+import com.xpn.xwiki.store.XWikiHibernateBaseStore;
+import com.xpn.xwiki.store.XWikiHibernateVersioningStore;
+import java.sql.Statement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.PreparedStatement;
+
/**
* Migration for XWIKI1878: Fix xwikircs table isdiff data not matching RCS
state of some revisions (when the state
* says "full" the isdiff column in the database should be false).
@@ -36,18 +46,11 @@
*
* @version $Id: $
*/
-public class R6079XWIKI1878Migrator extends R4359XWIKI1459Migrator
+public class R6079XWIKI1878Migrator extends AbstractXWikiHibernateMigrator
{
/** logger. */
private static final Log LOG =
LogFactory.getLog(R6079XWIKI1878Migrator.class);
- private int previousVersion;
-
- public R6079XWIKI1878Migrator(int currentVersionBeforeMigratorsExecute)
- {
- this.previousVersion = currentVersionBeforeMigratorsExecute;
- }
-
/**
* [EMAIL PROTECTED]
* @see
com.xpn.xwiki.store.migration.hibernate.AbstractXWikiHibernateMigrator#getName()
@@ -72,11 +75,57 @@
return new XWikiDBVersion(6079);
}
+ /**
+ * [EMAIL PROTECTED]
+ * @see
AbstractXWikiHibernateMigrator#shouldExecute(com.xpn.xwiki.store.migration.XWikiDBVersion)
+ */
+ public boolean shouldExecute(XWikiDBVersion startupVersion)
+ {
+ return (startupVersion.getVersion() >= 4360);
+ }
+
/** [EMAIL PROTECTED] */
- public void migrate(XWikiHibernateMigrationManager manager, final
XWikiContext context) throws XWikiException
+ public void migrate(XWikiHibernateMigrationManager manager, final
XWikiContext context)
+ throws XWikiException
{
- if (this.previousVersion >= 4360) {
- super.migrate(manager, context, LOG);
- }
+ // migrate data
+ manager.getStore(context).executeWrite(context, true, new
XWikiHibernateBaseStore.HibernateCallback() {
+ public Object doInHibernate(Session session) throws
HibernateException, XWikiException
+ {
+ try {
+ Statement stmt = session.connection().createStatement();
+ ResultSet rs;
+ try {
+ rs = stmt.executeQuery("select xwikircs.XWR_DOCID,
xwikircs.XWR_VERSION1, xwikircs.XWR_VERSION2, xwikidoc.XWD_FULLNAME from
xwikircs, xwikidoc where xwikidoc.XWD_ID = xwikircs.XWR_DOCID and XWR_ISDIFF =
b'1' and XWR_PATCH like '<?xml%'");
+ } catch (SQLException e) {
+ // Means the xwikircs table doesn't exist which isn't
normal.
+ throw new
XWikiException(XWikiException.MODULE_XWIKI_STORE,
+ XWikiException.ERROR_XWIKI_STORE_MIGRATION,
"Failed to get RCS data", e);
+ }
+ Transaction originalTransaction =
((XWikiHibernateVersioningStore)context.getWiki().getVersioningStore()).getTransaction(context);
+
((XWikiHibernateVersioningStore)context.getWiki().getVersioningStore()).setSession(null,
context);
+
((XWikiHibernateVersioningStore)context.getWiki().getVersioningStore()).setTransaction(null,
context);
+ PreparedStatement updateStatement =
session.connection().prepareStatement("update xwikircs set XWR_ISDIFF = b'0'
where XWR_DOCID=? and XWR_VERSION1=? and XWR_VERSION2=?");
+
+ while (rs.next()) {
+ if (LOG.isInfoEnabled()) {
+ LOG.info("Fixing document [" + rs.getString(4) +
"]...");
+ }
+ updateStatement.setLong(1, rs.getLong(1));
+ updateStatement.setInt(2, rs.getInt(2));
+ updateStatement.setInt(3, rs.getInt(3));
+ updateStatement.executeUpdate();
+ }
+ updateStatement.close();
+ stmt.close();
+
((XWikiHibernateVersioningStore)context.getWiki().getVersioningStore()).setSession(session,
context);
+
((XWikiHibernateVersioningStore)context.getWiki().getVersioningStore()).setTransaction(originalTransaction,
context);
+ } catch (SQLException e) {
+ throw new XWikiException(XWikiException.MODULE_XWIKI_STORE,
+ XWikiException.ERROR_XWIKI_STORE_MIGRATION, getName()
+ " migration failed", e);
+ }
+ return Boolean.TRUE;
+ }
+ });
}
}
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6405XWIKI1933Migrator.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6405XWIKI1933Migrator.java
2008-01-28 17:19:01 UTC (rev 7109)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6405XWIKI1933Migrator.java
2008-01-28 17:49:11 UTC (rev 7110)
@@ -35,13 +35,6 @@
*/
public class R6405XWIKI1933Migrator extends R4340XWIKI883Migrator
{
- private int startupVersion;
-
- public R6405XWIKI1933Migrator(int currentVersionBeforeMigratorsExecute)
- {
- this.startupVersion = currentVersionBeforeMigratorsExecute;
- }
-
/**
* [EMAIL PROTECTED]
*
@@ -68,12 +61,19 @@
return new XWikiDBVersion(6405);
}
+ /**
+ * [EMAIL PROTECTED]
+ * @see
AbstractXWikiHibernateMigrator#shouldExecute(com.xpn.xwiki.store.migration.XWikiDBVersion)
+ */
+ public boolean shouldExecute(XWikiDBVersion startupVersion)
+ {
+ return (startupVersion.getVersion() >= 4340);
+ }
+
/** [EMAIL PROTECTED] */
public void migrate(XWikiHibernateMigrationManager manager, final
XWikiContext context)
throws XWikiException
{
- if (this.startupVersion >= 4340) {
- super.migrate(manager, context);
- }
+ super.migrate(manager, context);
}
}
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6430XWIKI1954Migrator.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6430XWIKI1954Migrator.java
2008-01-28 17:19:01 UTC (rev 7109)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6430XWIKI1954Migrator.java
2008-01-28 17:49:11 UTC (rev 7110)
@@ -41,13 +41,6 @@
*/
public class R6430XWIKI1954Migrator extends AbstractXWikiHibernateMigrator
{
- private int startupVersion;
-
- public R6430XWIKI1954Migrator(int currentVersionBeforeMigratorsExecute)
- {
- this.startupVersion = currentVersionBeforeMigratorsExecute;
- }
-
/**
* [EMAIL PROTECTED]
*
@@ -74,24 +67,31 @@
return new XWikiDBVersion(6430);
}
+ /**
+ * [EMAIL PROTECTED]
+ * @see
AbstractXWikiHibernateMigrator#shouldExecute(com.xpn.xwiki.store.migration.XWikiDBVersion)
+ */
+ public boolean shouldExecute(XWikiDBVersion startupVersion)
+ {
+ return (startupVersion.getVersion() >= 4359);
+ }
+
/** [EMAIL PROTECTED] */
public void migrate(XWikiHibernateMigrationManager manager, final
XWikiContext context)
throws XWikiException
{
- if (this.startupVersion >= 4359) {
- manager.getStore(context).executeWrite(context, true, new
HibernateCallback() {
- public Object doInHibernate(Session session) throws
HibernateException, XWikiException
- {
- try {
- Statement stmt =
session.connection().createStatement();
- stmt.executeUpdate("update xwikidoc set
XWD_ARCHIVE=null");
- stmt.close();
- } catch (SQLException e) {
- // Maybe the column doesn't exist.
- }
- return Boolean.TRUE;
+ manager.getStore(context).executeWrite(context, true, new
HibernateCallback() {
+ public Object doInHibernate(Session session) throws
HibernateException, XWikiException
+ {
+ try {
+ Statement stmt = session.connection().createStatement();
+ stmt.executeUpdate("update xwikidoc set XWD_ARCHIVE=null");
+ stmt.close();
+ } catch (SQLException e) {
+ // Maybe the column doesn't exist.
}
- });
- }
+ return Boolean.TRUE;
+ }
+ });
}
}
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/XWikiHibernateMigrationManager.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/XWikiHibernateMigrationManager.java
2008-01-28 17:19:01 UTC (rev 7109)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/XWikiHibernateMigrationManager.java
2008-01-28 17:49:11 UTC (rev 7110)
@@ -42,8 +42,9 @@
{
/** logger */
protected static final Log LOG =
LogFactory.getLog(XWikiHibernateMigrationManager.class);
+
/** [EMAIL PROTECTED] */
- public XWikiHibernateMigrationManager(XWikiContext context)
+ public XWikiHibernateMigrationManager(XWikiContext context) throws
XWikiException
{
super(context);
}
@@ -86,9 +87,9 @@
// 1st way:
result.add(new R4340XWIKI883Migrator());
result.add(new R4359XWIKI1459Migrator());
- result.add(new
R6079XWIKI1878Migrator(getDBVersion(context).getVersion()));
- result.add(new
R6405XWIKI1933Migrator(getDBVersion(context).getVersion()));
- result.add(new
R6430XWIKI1954Migrator(getDBVersion(context).getVersion()));
+ result.add(new R6079XWIKI1878Migrator());
+ result.add(new R6405XWIKI1933Migrator());
+ result.add(new R6430XWIKI1954Migrator());
// 2nd way - via classloader
return result;
Modified:
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/test/java/com/xpn/xwiki/store/migration/XWikiMigrationManagerTest.java
===================================================================
---
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/test/java/com/xpn/xwiki/store/migration/XWikiMigrationManagerTest.java
2008-01-28 17:19:01 UTC (rev 7109)
+++
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/test/java/com/xpn/xwiki/store/migration/XWikiMigrationManagerTest.java
2008-01-28 17:49:11 UTC (rev 7110)
@@ -52,7 +52,7 @@
}
/** mocked migration manager */
private static class TestMigrationManager extends
AbstractXWikiMigrationManager {
- public TestMigrationManager(XWikiContext context)
+ public TestMigrationManager(XWikiContext context) throws Exception
{
super(context);
}
@@ -73,6 +73,11 @@
return new XWikiDBVersion(ver);
}
+ public boolean shouldExecute(XWikiDBVersion startupVersion)
+ {
+ return true;
+ }
+
public void migrate(XWikiMigrationManagerInterface manager,
XWikiContext context)
throws XWikiException
{
@@ -112,13 +117,15 @@
TestMigrationManager mm = new TestMigrationManager(context);
Collection neededMigration = mm.getNeededMigrations(context);
assertEquals(2, neededMigration.size());
- XWikiMigratorInterface[] actual = new XWikiMigratorInterface[2];
+ AbstractXWikiMigrationManager.XWikiMigration[] actual =
+ new AbstractXWikiMigrationManager.XWikiMigration[2];
neededMigration.toArray(actual);
- assertEquals(234, actual[0].getVersion().getVersion());
- assertEquals(456, actual[1].getVersion().getVersion());
+ assertEquals(234, actual[0].migrator.getVersion().getVersion());
+ assertEquals(456, actual[1].migrator.getVersion().getVersion());
}
- public static class TestForceMigratior implements XWikiMigratorInterface {
+ public static class TestForceMigratior implements XWikiMigratorInterface
+ {
public String getName()
{
return "Test";
@@ -133,10 +140,19 @@
{
return new XWikiDBVersion(567);
}
+
+
+ public boolean shouldExecute(XWikiDBVersion startupVersion)
+ {
+ return true;
+ }
+
public void migrate(XWikiMigrationManagerInterface manager,
XWikiContext context)
throws XWikiException
- { }
+ {
+ }
}
+
/** test "xwiki.store.migration.force" parameter */
public void testMigrationForce() throws Exception {
XWikiConfig config = context.getWiki().getConfig();
@@ -145,6 +161,7 @@
TestMigrationManager mm = new TestMigrationManager(context);
Collection neededMigration = mm.getNeededMigrations(context);
assertEquals(1, neededMigration.size());
- assertEquals(567,
((XWikiMigratorInterface)neededMigration.toArray()[0]).getVersion().getVersion());
+ assertEquals(567,
((AbstractXWikiMigrationManager.XWikiMigration)neededMigration.toArray()[0])
+ .migrator.getVersion().getVersion());
}
}
_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications