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

Reply via email to