From 57d3d83517080dfde5cd7cda297f3dca3459041f Mon Sep 17 00:00:00 2001
From: lutoff <lutoff@localhost>
Date: Mon, 04 May 2009 12:46:36 +0000
Subject: [PATCH]  Fix for issue #3965 (revert should not be supported from 2.0 to a previous version)

---
 opendj-sdk/opends/src/messages/messages/version.properties                                  |    2 +
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java   |   43 +++++++++++++++++++--
 opendj-sdk/opends/src/server/org/opends/server/util/VersionCompatibilityIssue.java          |   12 ++++++
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java   |   23 ++++++++---
 opendj-sdk/opends/src/messages/messages/quicksetup.properties                               |    2 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionIssueNotifier.java |   21 +++++++---
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java               |    9 +++-
 7 files changed, 91 insertions(+), 21 deletions(-)

diff --git a/opendj-sdk/opends/src/messages/messages/quicksetup.properties b/opendj-sdk/opends/src/messages/messages/quicksetup.properties
index c58b69c..338afb4 100644
--- a/opendj-sdk/opends/src/messages/messages/quicksetup.properties
+++ b/opendj-sdk/opends/src/messages/messages/quicksetup.properties
@@ -1223,7 +1223,7 @@
 INFO_REVERSION_ORACLE_ACTION=Upgrade requires manual action
 INFO_REVERSION_ORACLE_INFO=Upgrade information
 INFO_REVERSION_ORACLE_UNSUPPORTED=Reversion not supported from version %s to \
- version %s is not supported.  To upgrade you must uninstall the current \
+ version %s. To revert you must uninstall the current \
  server, install the new server, and manually migrate your data: %s
 INFO_UPGRADE_ORACLE_SAME_VERSION=The current version and the version of the \
  binaries to upgrade to are the same (%s)
diff --git a/opendj-sdk/opends/src/messages/messages/version.properties b/opendj-sdk/opends/src/messages/messages/version.properties
index b59130a..a91684b 100644
--- a/opendj-sdk/opends/src/messages/messages/version.properties
+++ b/opendj-sdk/opends/src/messages/messages/version.properties
@@ -108,3 +108,5 @@
  or assertion value will be reverted to a prior version.  In order to revert this server \
  you will have to export the data from this server and reimport it after the \
  reversion has finished
+INFO_5278_REVERSION_17=Reversion for revision 5278 to a previous version is \
+not supported
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionIssueNotifier.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionIssueNotifier.java
index 1f90df5..38a98ee 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionIssueNotifier.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionIssueNotifier.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.quicksetup.upgrader;
@@ -178,12 +178,19 @@
     // If the import/export effect is present, append the detailed
     // instructions.
     if (effects.contains(Effect.REVERSION_DATA_EXPORT_AND_REIMPORT_REQUIRED)) {
-      String lineBreak = ui.isCLI() ?
-          Constants.LINE_SEPARATOR : Constants.HTML_LINE_BREAK;
-      msg = new MessageBuilder(msg)
-              .append(lineBreak)
-              .append(ui.createUnorderedList(getExportImportInstructions()))
-              .toMessage();
+      if (ui != null)
+      {
+        String lineBreak = ui.isCLI() ? Constants.LINE_SEPARATOR
+            : Constants.HTML_LINE_BREAK;
+        msg = new MessageBuilder(msg).append(lineBreak).append(
+            ui.createUnorderedList(getExportImportInstructions())).toMessage();
+      }
+      else
+      {
+        String lineBreak = Constants.LINE_SEPARATOR;
+        msg = new MessageBuilder(msg).append(lineBreak).append(
+            createUnorderedList(getExportImportInstructions())).toMessage();
+      }
     }
     return msg;
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java
index 09ddd26..27f835f 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Copyright 2007-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.quicksetup.upgrader;
@@ -1108,8 +1108,13 @@
     }
 
     if (currentVersion != null && newVersion != null) {
+      UserInteraction ui = userInteraction() ;
+      if (ui == null)
+      {
+        ui = new CliUserInteraction();
+      }
       ReversionIssueNotifier uo = new ReversionIssueNotifier(
-              userInteraction(), currentVersion, newVersion);
+              ui,currentVersion,newVersion);
       uo.notifyUser();
       if (uo.noServerStartFollowingOperation()) {
         // Some issue dictates that we don't try and restart the server
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java
index 526cb64..c3bf5e9 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.quicksetup.upgrader;
@@ -179,16 +179,25 @@
     // If the import/export effect is present, append the detailed
     // instructions.
     if (effects.contains(Effect.UPGRADE_DATA_EXPORT_AND_REIMPORT_REQUIRED)) {
-      String lineBreak = ui.isCLI() ?
-          Constants.LINE_SEPARATOR : Constants.HTML_LINE_BREAK;
-      msg = new MessageBuilder(msg)
-              .append(lineBreak)
-              .append(ui.createUnorderedList(getExportImportInstructions()))
-              .toMessage();
+      if (ui != null)
+      {
+        String lineBreak = ui.isCLI() ? Constants.LINE_SEPARATOR
+            : Constants.HTML_LINE_BREAK;
+        msg = new MessageBuilder(msg).append(lineBreak).append(
+            ui.createUnorderedList(getExportImportInstructions())).toMessage();
+      }
+      else
+      {
+        String lineBreak = Constants.LINE_SEPARATOR ;
+        msg = new MessageBuilder(msg).append(lineBreak).append(
+            createUnorderedList(getExportImportInstructions())).toMessage();
+      }
+
     }
     return msg;
   }
 
+
   /**
    * {@inheritDoc}
    */
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java
index f884663..04d8be6 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Copyright 2007-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.quicksetup.upgrader;
@@ -30,6 +30,7 @@
 
 import org.opends.quicksetup.BuildInformation;
 import org.opends.quicksetup.ApplicationException;
+import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.UserInteraction;
 
 import org.opends.server.util.VersionCompatibilityIssue;
@@ -148,9 +149,25 @@
 
     // Get the list of possible version incompatibility events (aka flag days)
     List<VersionCompatibilityIssue> compatibilityIssues;
-    Set<Integer> excludeIds = current.getIncompatibilityEventIds();
+    Set<Integer> excludeIds ;
+    boolean isUpgrade = neu.compareTo(current) >= 0;
+    if (isUpgrade)
+    {
+      excludeIds = current.getIncompatibilityEventIds();
+    }
+    else
+    {
+      excludeIds = neu.getIncompatibilityEventIds();
+    }
     if (excludeIds != null) {
-      compatibilityIssues = getEvents(excludeIds, current, neu);
+      if (isUpgrade)
+      {
+        compatibilityIssues = getEvents(excludeIds, current, neu);
+      }
+      else
+      {
+        compatibilityIssues = getEvents(excludeIds, neu, current);
+      }
     } else {
       // This method is only used as a fallback for pre 1.0.0 servers which
       // do not advertise incompatible version events.
@@ -300,7 +317,7 @@
    */
   protected List<Message> getExportImportInstructions() {
     List<Message> instructions = new ArrayList<Message>();
-    if (ui.isCLI())
+    if ((ui == null) || (ui.isCLI()))
     {
       instructions.add(INFO_ORACLE_EI_ACTION_STEP1_CLI.get());
     }
@@ -355,4 +372,22 @@
     return Collections.unmodifiableList(directives);
   }
 
+  /**
+   * Creates a list appropriate for the presentation implementation.
+   *
+   * @param list to format
+   * @return String representing the list
+   */
+  protected String createUnorderedList(List list) {
+    StringBuilder sb = new StringBuilder();
+    if (list != null) {
+      for (Object o : list) {
+        sb.append(/*bullet=*/"* ");
+        sb.append(o.toString());
+        sb.append(Constants.LINE_SEPARATOR);
+      }
+    }
+    return sb.toString();
+  }
+
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/VersionCompatibilityIssue.java b/opendj-sdk/opends/src/server/org/opends/server/util/VersionCompatibilityIssue.java
index 7e97d15..89d36d0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/VersionCompatibilityIssue.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/VersionCompatibilityIssue.java
@@ -218,6 +218,17 @@
    */
   public enum Cause {
     /**
+     * We not support the revert to the previous version.
+     */
+    REVERT_NOT_SUPPORTED_1(
+        9, // Unique ID.  See javadoc for more information.
+        INFO_5278_REVERSION.get(),
+        INFO_5278_REVERSION.get(),
+        Effect.REVERSION_NOT_POSSIBLE,
+        Effect.UPGRADE_SHOW_INFO_MESSAGE),
+
+
+    /**
      * Incompatible changes in attribute value normalization. This causes
      * indexes to be invalidated.
      */
@@ -470,6 +481,7 @@
   //***************************************************
 
   static {
+    register (Cause.REVERT_NOT_SUPPORTED_1, new BuildVersion(2,0,0,5278));
     register(Cause.STRINGPREP_NORMALIZATION_CHANGE_1,
             new BuildVersion(1,2,0,5134));
     register(Cause.DN_NORMALIZATION_CHANGE_1, new BuildVersion(1, 0, 0, 3873));

--
Gitblit v1.10.0