mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

jvergara
07.56.2008 4978cbcfce206fb43659395556b59c33127505bd
Fix for issue 3121 (Bad management of upgrade -r on a already reverted installation)

Check that the directories under 'history' actually contain reversion information.

Fix a number of bugs related to the use of HTML tags in CLI mode.
9 files modified
124 ■■■■ changed files
opends/src/messages/messages/quicksetup.properties 5 ●●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java 10 ●●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/UserInteraction.java 7 ●●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/ui/GuiUserInteraction.java 8 ●●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionIssueNotifier.java 18 ●●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java 21 ●●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java 19 ●●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java 9 ●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/util/Utils.java 27 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/quicksetup.properties
@@ -663,6 +663,9 @@
INFO_ORACLE_EI_ACTION_STEP1=Before starting the operation you should export \
 the entire data set for this server to LDIF format.  <b>If you have not \
 completed this step you should cancel this operation now</b>.
INFO_ORACLE_EI_ACTION_STEP1_CLI=Before starting the operation you should \
 export the entire data set for this server to LDIF format.  If you have not \
 completed this step you should cancel this operation now.
INFO_ORACLE_EI_ACTION_STEP2=Continue with this operation until this tool has \
 finished.
INFO_ORACLE_EI_ACTION_STEP3=When this operation is complete, manually delete \
@@ -829,6 +832,8 @@
 supported.
INFO_REVERT_ERROR_EMPTY_HISTORY_DIR=There are no existing backup locations \
 from prior upgrades.  The 'history' directory is empty.
INFO_REVERT_ERROR_INVALID_HISTORY_DIR=There are no valid existing backup \
 locations from prior upgrades.
INFO_REVERT_ERROR_INVALID_FILES_DIR=The specified reversion archive directory \
 does not appear to contain files backed up from an invocation of the upgrade \
 tool.
opends/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java
@@ -166,7 +166,7 @@
    StringBuilder sb = new StringBuilder();
    if (list != null) {
      for (Object o : list) {
        sb.append(/*bullet=*/"\u2022 ");
        sb.append(/*bullet=*/"* ");
        sb.append(o.toString());
        sb.append(Constants.LINE_SEPARATOR);
      }
@@ -242,4 +242,12 @@
  public boolean isVerbose() {
    return true;
  }
  /**
   * {@inheritDoc}
   */
  public boolean isCLI()
  {
    return true;
  }
}
opends/src/quicksetup/org/opends/quicksetup/UserInteraction.java
@@ -115,4 +115,11 @@
   */
  String promptForString(Message prompt, Message title, String defaultValue);
  /**
   * Tells whether the interaction is command-line based.
   * @return <CODE>true</CODE> if the user interaction is command-line based and
   * <CODE>false</CODE> otherwise.
   */
  boolean isCLI();
}
opends/src/quicksetup/org/opends/quicksetup/ui/GuiUserInteraction.java
@@ -162,6 +162,14 @@
  }
  /**
   * {@inheritDoc}
   */
  public boolean isCLI()
  {
    return false;
  }
  /**
   * JOptionPane that controls the number of characters that are allowed
   * to appear on a single line in the input area of the dialog.
   */
opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionIssueNotifier.java
@@ -98,13 +98,15 @@
            Message details;
            Message defaultAction;
            UserInteraction.MessageType msgType;
            String lineBreak = ui.isCLI() ?
                Constants.LINE_SEPARATOR : Constants.HTML_LINE_BREAK;
            switch (directive.getType()) {
              case ACTION:
                title = INFO_GENERAL_ACTION_REQUIRED.get();
                summary = INFO_REVERSION_ORACLE_ACTION.get();
                details = new MessageBuilder(directive.getMessage())
                        .append(Constants.HTML_LINE_BREAK)
                        .append(Constants.HTML_LINE_BREAK)
                        .append(lineBreak)
                        .append(lineBreak)
                        .append(INFO_ORACLE_ACTION_PROMPT.get())
                        .toMessage();
                msgType = UserInteraction.MessageType.WARNING;
@@ -114,8 +116,8 @@
                title = INFO_GENERAL_INFO.get();
                summary = INFO_REVERSION_ORACLE_INFO.get();
                details = new MessageBuilder(directive.getMessage())
                        .append(Constants.HTML_LINE_BREAK)
                        .append(Constants.HTML_LINE_BREAK)
                        .append(lineBreak)
                        .append(lineBreak)
                        .append(INFO_ORACLE_INFO_PROMPT.get())
                        .toMessage();
                msgType = UserInteraction.MessageType.INFORMATION;
@@ -125,8 +127,8 @@
                title = INFO_GENERAL_WARNING.get();
                summary = INFO_REVERSION_ORACLE_WARNING.get();
                details = new MessageBuilder(directive.getMessage())
                        .append(Constants.HTML_LINE_BREAK)
                        .append(Constants.HTML_LINE_BREAK)
                        .append(lineBreak)
                        .append(lineBreak)
                        .append(INFO_ORACLE_INFO_PROMPT.get())
                        .toMessage();
                msgType = UserInteraction.MessageType.WARNING;
@@ -176,8 +178,10 @@
    // 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(Constants.HTML_LINE_BREAK)
              .append(lineBreak)
              .append(ui.createUnorderedList(getExportImportInstructions()))
              .toMessage();
    }
opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java
@@ -260,6 +260,7 @@
            }
          };
          String[] childNames = historyDir.list(filter);
          boolean found = false;
          if (childNames != null && childNames.length > 0) {
            // The directories beneath 'history' are named according
@@ -272,11 +273,16 @@
              File b = new File(historyDir, childName);
              File d = new File(b, HISTORY_BACKUP_FILES_DIR_NAME);
              if (isReversionFilesDirectory(d)) {
                found = true;
                ud.setReversionArchiveDirectory(d);
                break;
              }
            }
            if (!found)
            {
              throw new UserDataException(null,
                  INFO_REVERT_ERROR_INVALID_HISTORY_DIR.get());
            }
          } else {
            throw new UserDataException(null,
                    INFO_REVERT_ERROR_EMPTY_HISTORY_DIR.get());
@@ -499,6 +505,12 @@
        if (toBi != null) {
          toBuildString = toBi.toString();
        } else {
          if (getReversionFilesDirectory() == null)
          {
            throw new ApplicationException(
                ReturnCode.APPLICATION_ERROR,
                INFO_REVERT_ERROR_INVALID_HISTORY_DIR.get(), null);
          }
          toBuildString = INFO_UPGRADE_BUILD_ID_UNKNOWN.get().toString();
        }
        if (cancel.equals(ui.confirm(
@@ -896,8 +908,14 @@
    FileManager fm = new FileManager();
    try {
      fm.deleteRecursively(getReversionFilesDirectory());
      File parent = getReversionFilesDirectory().getParentFile();
      if (Utils.directoryExistsAndIsEmpty(parent.getAbsolutePath()))
      {
        fm.deleteRecursively(parent);
      }
    } catch (Exception e) {
      // ignore; this is best effort
      LOG.log(Level.WARNING, "Error: "+e, e);
    }
  }
@@ -910,6 +928,7 @@
      fm.deleteRecursively(getTempBackupDirectory());
    } catch (Exception e) {
      // ignore; this is best effort
      LOG.log(Level.WARNING, "Error: "+e, e);
    }
  }
opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java
@@ -70,7 +70,6 @@
   * {@inheritDoc}
   */
  public void notifyUser() throws ApplicationException {
    String[] args = { currentBuildInfo.toString(), newBuildInfo.toString() };
    Message cont = INFO_ORACLE_ACTION_PROMPT_CONTINUE.get();
    Message cancel = INFO_ORACLE_ACTION_PROMPT_CANCEL.get();
    if (hasIssues()) {
@@ -94,6 +93,8 @@
                null);
      } else {
        if (ui != null) {
          String lineBreak = ui.isCLI() ?
              Constants.LINE_SEPARATOR : Constants.HTML_LINE_BREAK;
          for (VersionIssueNotifier.Directive directive : issues) {
            Message title;
            Message summary;
@@ -105,8 +106,8 @@
                title = INFO_GENERAL_ACTION_REQUIRED.get();
                summary = INFO_UPGRADE_ORACLE_ACTION.get();
                details = new MessageBuilder(directive.getMessage())
                        .append(Constants.HTML_LINE_BREAK)
                        .append(Constants.HTML_LINE_BREAK)
                        .append(lineBreak)
                        .append(lineBreak)
                        .append(INFO_ORACLE_ACTION_PROMPT.get())
                        .toMessage();
                msgType = UserInteraction.MessageType.WARNING;
@@ -116,8 +117,8 @@
                title = INFO_GENERAL_INFO.get();
                summary = INFO_UPGRADE_ORACLE_INFO.get();
                details = new MessageBuilder(directive.getMessage())
                        .append(Constants.HTML_LINE_BREAK)
                        .append(Constants.HTML_LINE_BREAK)
                        .append(lineBreak)
                        .append(lineBreak)
                        .append(INFO_ORACLE_INFO_PROMPT.get())
                        .toMessage();
                msgType = UserInteraction.MessageType.INFORMATION;
@@ -127,8 +128,8 @@
                title = INFO_GENERAL_WARNING.get();
                summary = INFO_UPGRADE_ORACLE_WARNING.get();
                details = new MessageBuilder(directive.getMessage())
                        .append(Constants.HTML_LINE_BREAK)
                        .append(Constants.HTML_LINE_BREAK)
                        .append(lineBreak)
                        .append(lineBreak)
                        .append(INFO_ORACLE_INFO_PROMPT.get())
                        .toMessage();
                msgType = UserInteraction.MessageType.WARNING;
@@ -178,8 +179,10 @@
    // 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(Constants.HTML_LINE_BREAK)
              .append(lineBreak)
              .append(ui.createUnorderedList(getExportImportInstructions()))
              .toMessage();
    }
opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java
@@ -300,7 +300,14 @@
   */
  protected List<Message> getExportImportInstructions() {
    List<Message> instructions = new ArrayList<Message>();
    instructions.add(INFO_ORACLE_EI_ACTION_STEP1.get());
    if (ui.isCLI())
    {
      instructions.add(INFO_ORACLE_EI_ACTION_STEP1_CLI.get());
    }
    else
    {
      instructions.add(INFO_ORACLE_EI_ACTION_STEP1.get());
    }
    instructions.add(INFO_ORACLE_EI_ACTION_STEP2.get());
    instructions.add(INFO_ORACLE_EI_ACTION_STEP3.get());
    instructions.add(INFO_ORACLE_EI_ACTION_STEP4.get());
opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
@@ -307,6 +307,33 @@
  }
  /**
   * Returns <CODE>true</CODE> if the the provided path is a directory, exists
   * and is empty <CODE>false</CODE> otherwise.
   * @param path the path that we are analyzing.
   * @return <CODE>true</CODE> if the the provided path is a directory, exists
   * and is empty <CODE>false</CODE> otherwise.
   */
  public static boolean directoryExistsAndIsEmpty(String path)
  {
    boolean directoryExistsAndIsEmpty = false;
    boolean isDirectory = false;
    File f = new File(path);
    if (f != null)
    {
      isDirectory = f.isDirectory();
    }
    if (isDirectory)
    {
      String[] ch = f.list();
      directoryExistsAndIsEmpty = (ch == null) || (ch.length == 0);
    }
    return directoryExistsAndIsEmpty;
  }
  /**
   * Returns <CODE>true</CODE> if the the provided string is a DN and
   * <CODE>false</CODE> otherwise.
   * @param dn the String we are analyzing.