Author: vmassol
Date: 2008-01-28 19:06:29 +0100 (Mon, 28 Jan 2008)
New Revision: 7113
Modified:
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/XWikiMigratorInterface.java
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/AbstractXWikiHibernateMigrator.java
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4340XWIKI883Migrator.java
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4359XWIKI1459Migrator.java
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6405XWIKI1933Migrator.java
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6430XWIKI1954Migrator.java
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/XWikiHibernateMigrationManager.java
xwiki-platform/core/trunk/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
Merged from 1.2 branch (rev 7110)
Modified:
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
2008-01-28 18:05:13 UTC (rev 7112)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/AbstractXWikiMigrationManager.java
2008-01-28 18:06:29 UTC (rev 7113)
@@ -19,26 +19,17 @@
*/
package com.xpn.xwiki.store.migration;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Formatter;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
+import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.XWikiException;
import org.apache.commons.collections.set.ListOrderedSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import com.xpn.xwiki.XWikiContext;
-import com.xpn.xwiki.XWikiException;
+import java.util.*;
/**
* Template for [EMAIL PROTECTED] XWikiMigrationManagerInterface}.
- *
+ *
* @version $Id: $
*/
public abstract class AbstractXWikiMigrationManager implements
XWikiMigrationManagerInterface
@@ -47,17 +38,39 @@
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
* @return data version if set, or null.
*/
@@ -131,7 +144,7 @@
* Returns the names of the databases that should be migrated. This is
controlled through the
* "xwiki.store.migration.databases" configuration property in xwiki.cfg.
A value of "all" will
* add all databases. Note that the main database is automatically added
even if not specified.
- *
+ *
* @param context The [EMAIL PROTECTED] com.xpn.xwiki.XWikiContext}
object, needed for accessing the main
* wiki.
* @return The names of all databases to migrate.
@@ -151,11 +164,9 @@
// then automatically add all the registered databases.
if (context.getWiki().isVirtual()) {
String[] databases =
- context.getWiki().getConfig()
- .getPropertyAsList("xwiki.store.migration.databases");
+
context.getWiki().getConfig().getPropertyAsList("xwiki.store.migration.databases");
if ((databases.length == 1) &&
databases[0].equalsIgnoreCase("all")) {
- databasesToMigrate
-
.addAll(context.getWiki().getVirtualWikisDatabaseNames(context));
+
databasesToMigrate.addAll(context.getWiki().getVirtualWikisDatabaseNames(context));
} else {
for (int i = 0; i < databases.length; i++) {
databasesToMigrate.add(databases[i]);
@@ -169,7 +180,7 @@
/**
* It is assumed that before calling this method the XWiki context has
been set with the
* database to migrate.
- *
+ *
* @param context The [EMAIL PROTECTED] com.xpn.xwiki.XWikiContext}
object, needed for accessing the
* storage module.
* @throws XWikiException if there is an error updating the database.
@@ -197,27 +208,24 @@
{
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")));
+ Set ignoredMigrations = new
HashSet(Arrays.asList(context.getWiki().getConfig()
+ .getPropertyAsList("xwiki.store.migration.ignored")));
List allMigrations = getAllMigrations(context);
for (Iterator it = allMigrations.iterator(); it.hasNext();) {
XWikiMigratorInterface migrator = (XWikiMigratorInterface)
it.next();
if (ignoredMigrations.contains(migrator.getClass().getName())
- ||
ignoredMigrations.contains(migrator.getVersion().toString())) {
+ ||
ignoredMigrations.contains(migrator.getVersion().toString()))
+ {
continue;
}
if (migrator.getVersion().compareTo(curversion) >= 0) {
- neededMigrations.put(migrator.getVersion(), migrator);
+ XWikiMigration migration = new XWikiMigration(migrator,
true);
+ neededMigrations.put(migrator.getVersion(), migration);
}
}
}
@@ -228,8 +236,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 ["
@@ -240,24 +249,41 @@
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) + "]");
}
@@ -266,18 +292,7 @@
}
/**
- * @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/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/XWikiMigratorInterface.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/XWikiMigratorInterface.java
2008-01-28 18:05:13 UTC (rev 7112)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/XWikiMigratorInterface.java
2008-01-28 18:06:29 UTC (rev 7113)
@@ -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/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/AbstractXWikiHibernateMigrator.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/AbstractXWikiHibernateMigrator.java
2008-01-28 18:05:13 UTC (rev 7112)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/AbstractXWikiHibernateMigrator.java
2008-01-28 18:06:29 UTC (rev 7113)
@@ -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/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4340XWIKI883Migrator.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4340XWIKI883Migrator.java
2008-01-28 18:05:13 UTC (rev 7112)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4340XWIKI883Migrator.java
2008-01-28 18:06:29 UTC (rev 7113)
@@ -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/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4359XWIKI1459Migrator.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4359XWIKI1459Migrator.java
2008-01-28 18:05:13 UTC (rev 7112)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R4359XWIKI1459Migrator.java
2008-01-28 18:06:29 UTC (rev 7113)
@@ -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/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
2008-01-28 18:05:13 UTC (rev 7112)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6079XWIKI1878Migrator.java
2008-01-28 18:06:29 UTC (rev 7113)
@@ -21,35 +21,38 @@
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). Note: This
- * migrator should only be executed if the R4359XWIKI1459 one has already been
executed in a
- * previous migration (i.e. if the database is in version >= 4360). This is
because this current
- * migrator is because of a bug in R4359XWIKI1459 which has now been fixed.
- *
+ * 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).
+ *
+ * Note: This migrator should only be executed if the R4359XWIKI1459 one has
already been executed (i.e. if the
+ * database is in version < 4360). This is because this current migrator is
because of a bug in R4359XWIKI1459 which
+ * has now been fixed.
+ *
* @version $Id: $
*/
-public class R6079XWIKI1878Migrator extends R4359XWIKI1459Migrator
+public class R6079XWIKI1878Migrator extends AbstractXWikiHibernateMigrator
{
/** logger. */
private static final Log LOG =
LogFactory.getLog(R6079XWIKI1878Migrator.class);
- private int startupVersion;
-
- public R6079XWIKI1878Migrator(int currentVersionBeforeMigratorsExecute)
- {
- this.startupVersion = currentVersionBeforeMigratorsExecute;
- }
-
/**
* [EMAIL PROTECTED]
- *
* @see
com.xpn.xwiki.store.migration.hibernate.AbstractXWikiHibernateMigrator#getName()
*/
public String getName()
@@ -59,7 +62,6 @@
/**
* [EMAIL PROTECTED]
- *
* @see AbstractXWikiHibernateMigrator#getDescription()
*/
public String getDescription()
@@ -73,12 +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
{
- if (this.startupVersion >= 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/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6405XWIKI1933Migrator.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6405XWIKI1933Migrator.java
2008-01-28 18:05:13 UTC (rev 7112)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6405XWIKI1933Migrator.java
2008-01-28 18:06:29 UTC (rev 7113)
@@ -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/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6430XWIKI1954Migrator.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6430XWIKI1954Migrator.java
2008-01-28 18:05:13 UTC (rev 7112)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/R6430XWIKI1954Migrator.java
2008-01-28 18:06:29 UTC (rev 7113)
@@ -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/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/XWikiHibernateMigrationManager.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/XWikiHibernateMigrationManager.java
2008-01-28 18:05:13 UTC (rev 7112)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/migration/hibernate/XWikiHibernateMigrationManager.java
2008-01-28 18:06:29 UTC (rev 7113)
@@ -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/trunk/xwiki-core/src/test/java/com/xpn/xwiki/store/migration/XWikiMigrationManagerTest.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/store/migration/XWikiMigrationManagerTest.java
2008-01-28 18:05:13 UTC (rev 7112)
+++
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/store/migration/XWikiMigrationManagerTest.java
2008-01-28 18:06:29 UTC (rev 7113)
@@ -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