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

Violette Roche-Montane
27.07.2013 cddb76e70b7127f5e0d0088bd59de99ebd1359e1
OPENDJ-928 Update tool: add option to automatically accept the license
7 files modified
238 ■■■■■ changed files
opends/src/messages/messages/tools.properties 2 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tools/ToolConstants.java 5 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tools/upgrade/Upgrade.java 42 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tools/upgrade/UpgradeCli.java 56 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tools/upgrade/UpgradeContext.java 30 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tools/upgrade/VerificationCallback.java 6 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/util/cli/ConsoleApplication.java 97 ●●●● patch | view | raw | blame | history
opends/src/messages/messages/tools.properties
@@ -2684,6 +2684,8 @@
INFO_UPGRADE_TASK_ADD_CONFIG_FILE_1853=Adding '%s' configuration file
SEVERE_ERR_UPGRADE_ADD_CONFIG_FILE_FAILS_1854=An error occurred while adding \
configuration file '%s': %s
INFO_OPTION_ACCEPT_LICENSE_1855=Automatically accepts the product license \
(if present)
# Upgrade tasks
INFO_UPGRADE_TASK_6869_SUMMARY_10000=Fixing de-DE collation matching rule OID
opends/src/server/org/opends/server/tools/ToolConstants.java
@@ -798,8 +798,9 @@
  public static final String OPTION_LONG_RESTORE_UPGRADE = "restore";
  /**
   * The value for the long option for backup all.
   * The value for the long option to automatically
   * accept the license if present.
   */
  public static final String OPTION_LONG_BACKUP_ALL = "backupAll";
  public static final String OPTION_LONG_ACCEPT_LICENSE = "acceptLicense";
}
opends/src/server/org/opends/server/tools/upgrade/Upgrade.java
@@ -396,7 +396,7 @@
      if (context.checkCLIUserOption(handler, IGNORE_ERRORS_MODE)
          == ConfirmationCallback.YES)
      {
        context = new UpgradeContext(fromVersion, toVersion, true);
        context.setIgnoreErrorsMode(true);
      }
      /*
@@ -580,7 +580,7 @@
      throw new ClientException(EXIT_CODE_SUCCESS, message);
    }
    // TODO The upgrade only supports version >= 2.4.5.
    // The upgrade only supports version >= 2.4.5.
    if (context.getFromVersion().compareTo(UPGRADESUPPORTSVERSIONFROM) < 0)
    {
      throw new ClientException(EXIT_CODE_ERROR,
@@ -647,29 +647,39 @@
        // and force to accept it.
        context.notify(handler, INFO_LICENSE_DETAILS_CLI_LABEL.get());
        final int answer = context.confirmYN(handler,
            INFO_LICENSE_ACCEPT.get(), ConfirmationCallback.NO);
        if (context.checkCLIUserOption(handler, ACCEPT_LICENSE_MODE)
            == ConfirmationCallback.NO)
        {
        if (answer == ConfirmationCallback.NO)
        {
          System.exit(EXIT_CODE_SUCCESS);
        }
        else if (answer == ConfirmationCallback.YES)
        {
          // Creates the file
          LicenseFile.setApproval(true);
          LicenseFile.createFileLicenseApproved();
          final int answer =
              context.confirmYN(handler, INFO_LICENSE_ACCEPT.get(),
                  ConfirmationCallback.NO);
          if (answer == ConfirmationCallback.NO)
          {
            System.exit(EXIT_CODE_SUCCESS);
          }
          else if (answer == ConfirmationCallback.YES)
          {
            createLicenseApproval();
          }
        }
        else
        {
          context.notify(handler,
              INFO_LICENSE_CLI_ACCEPT_INVALID_RESPONSE.get());
          context.notify(handler, INFO_LICENSE_ACCEPT.get());
          context.notify(handler, INFO_PROMPT_YES_COMPLETE_ANSWER.get());
          createLicenseApproval();
        }
      }
    }
  }
  private static void createLicenseApproval()
  {
    // Creates the file
    LicenseFile.setApproval(true);
    LicenseFile.createFileLicenseApproved();
  }
  // Prevent instantiation.
  private Upgrade()
opends/src/server/org/opends/server/tools/upgrade/UpgradeCli.java
@@ -95,6 +95,7 @@
  private BooleanArgument force;
  private BooleanArgument quietMode;
  private BooleanArgument verbose;
  private BooleanArgument acceptLicense;
  // The argument which should be used to request usage information.
@@ -197,7 +198,7 @@
  }
  /**
   * Force the upgrade. All answers will be forced to 'yes'.
   * Force the upgrade. All critical questions will be forced to 'yes'.
   *
   * @return {@code true} if the upgrade process is forced.
   */
@@ -208,6 +209,7 @@
  /**
   * Force to ignore the errors during the upgrade process.
   * Continues rather than fails.
   *
   * @return {@code true} if the errors are forced to be ignored.
   */
@@ -216,6 +218,16 @@
    return ignoreErrors.isPresent();
  }
  /**
   * Automatically accepts the license if it's present.
   *
   * @return {@code true} if license is accepted by default.
   */
  public boolean isAcceptLicense()
  {
    return acceptLicense.isPresent();
  }
  // Displays the provided message followed by a help usage reference.
  private void displayMessageAndUsageReference(final Message message)
  {
@@ -263,10 +275,14 @@
          OPTION_LONG_FORCE_UPGRADE,
          INFO_UPGRADE_OPTION_FORCE.get(OPTION_LONG_NO_PROMPT));
      acceptLicense = new BooleanArgument(OPTION_LONG_ACCEPT_LICENSE, null,
          OPTION_LONG_ACCEPT_LICENSE, INFO_OPTION_ACCEPT_LICENSE.get());
      showUsageArgument =
          new BooleanArgument("help", OPTION_SHORT_HELP, OPTION_LONG_HELP,
              INFO_DESCRIPTION_USAGE.get());
      // Register the global arguments.
      parser.addGlobalArgument(showUsageArgument);
      parser.setUsageArgument(showUsageArgument, this.getOutputStream());
@@ -277,6 +293,7 @@
      parser.addGlobalArgument(quietMode);
      parser.addGlobalArgument(force);
      parser.addGlobalArgument(ignoreErrors);
      parser.addGlobalArgument(acceptLicense);
      globalArgumentsInitialized = true;
    }
@@ -352,14 +369,15 @@
    catch (ClientException ex)
    {
      LOG.log(SEVERE, ex.getMessage());
      println(ERROR, ex.getMessageObject(), 0);
      println(Style.ERROR, ex.getMessageObject(), 0);
      return ex.getExitCode();
    }
    catch (Exception ex)
    {
      LOG.log(SEVERE, ex.getMessage());
      println(ERROR, ERR_UPGRADE_MAIN_UPGRADE_PROCESS.get(ex.getMessage()), 0);
      println(Style.ERROR, ERR_UPGRADE_MAIN_UPGRADE_PROCESS.get(ex
          .getMessage()), 0);
      return EXIT_CODE_ERROR;
    }
@@ -391,13 +409,14 @@
        switch (fnc.getMessageSubType())
        {
        case TITLE_CALLBACK:
          println(TITLE, Message.raw(fnc.getMessage()), 0);
          println(Style.TITLE, Message.raw(fnc.getMessage()), 0);
          break;
        case SUBTITLE_CALLBACK:
          println(SUBTITLE, Message.raw(fnc.getMessage()), 4);
          println(Style.SUBTITLE, Message.raw(fnc.getMessage()),
              4);
          break;
        case NOTICE_CALLBACK:
          println(NOTICE, Message.raw(fnc.getMessage()), 0);
          println(Style.NOTICE, Message.raw(fnc.getMessage()), 0);
          break;
        default:
          LOG.log(SEVERE, "Unsupported message type: "
@@ -439,8 +458,8 @@
            {
              if (!isInteractive() && !isForceUpgrade())
              {
                println(ERROR, ERR_UPGRADE_USER_INTERACTION_REQUIRED.get(
                    OPTION_LONG_NO_PROMPT, OPTION_LONG_FORCE_UPGRADE), 0);
                println(Style.ERROR, ERR_UPGRADE_USER_INTERACTION_REQUIRED
                    .get(OPTION_LONG_NO_PROMPT, OPTION_LONG_FORCE_UPGRADE), 0);
                cc.setSelectedIndex(ConfirmationCallback.NO);
                return;
              }
@@ -455,15 +474,15 @@
            {
              if (!isInteractive() && !isForceUpgrade())
              {
                println(ERROR, ERR_UPGRADE_USER_INTERACTION_REQUIRED.get(
                    OPTION_LONG_NO_PROMPT, OPTION_LONG_FORCE_UPGRADE), 0);
                println(Style.ERROR, ERR_UPGRADE_USER_INTERACTION_REQUIRED
                    .get(OPTION_LONG_NO_PROMPT, OPTION_LONG_FORCE_UPGRADE), 0);
                cc.setSelectedIndex(ConfirmationCallback.NO);
                return;
              }
            }
            // Does the user specify the ignore errors mode ?
            if(opt == IGNORE_ERRORS_MODE) {
            if (opt == IGNORE_ERRORS_MODE) {
              if (!isIgnoreErrors())
              {
                cc.setSelectedIndex(ConfirmationCallback.NO);
@@ -471,6 +490,15 @@
              }
              cc.setSelectedIndex(ConfirmationCallback.YES);
            }
            if (opt == ACCEPT_LICENSE_MODE) {
              if (!isAcceptLicense())
              {
                cc.setSelectedIndex(ConfirmationCallback.NO);
                return;
              }
              cc.setSelectedIndex(ConfirmationCallback.YES);
            }
          }
          return;
        }
@@ -531,7 +559,9 @@
            String value = null;
            try
            {
              value = readInput(Message.raw(prompt), defaultOption, SUBTITLE);
              value =
                  readInput(Message.raw(prompt), defaultOption,
                      Style.SUBTITLE);
            }
            catch (CLIException e)
            {
@@ -581,7 +611,7 @@
          // Displays the prompt
          prompt.append(" ").append(
              UpgradeContext.getDefaultOption(cc.getSelectedIndex()));
          println(SUBTITLE, Message.raw(prompt), 0);
          println(Style.SUBTITLE, Message.raw(prompt), 0);
          LOG.log(INFO, UpgradeContext.getDefaultOption(cc.getSelectedIndex()));
        }
      }
opends/src/server/org/opends/server/tools/upgrade/UpgradeContext.java
@@ -66,7 +66,7 @@
  /**
   * If ignore errors is enabled.
   */
  private final boolean isIgnoreErrorsMode;
  private boolean isIgnoreErrorsMode;
  /**
   * Constructor for the upgrade context.
@@ -84,24 +84,6 @@
  }
  /**
   * Constructor for the upgrade context.
   *
   * @param fromVersion
   *          The version number from we upgrade from.
   * @param toVersion
   *          The version number we want to upgrade to.
   * @param isIgnoreErrorsMode
   *          If ignore error mode is enabled.
   */
  UpgradeContext(final BuildVersion fromVersion, final BuildVersion toVersion,
      final boolean isIgnoreErrorsMode)
  {
    this.fromVersion = fromVersion;
    this.toVersion = toVersion;
    this.isIgnoreErrorsMode = isIgnoreErrorsMode;
  }
  /**
   * Returns the old version.
   *
   * @return The old version.
@@ -132,6 +114,16 @@
  }
  /**
   * Sets the ignore errors mode.
   *
   * @param isIgnoreErrorsMode {@true} if ignore error mode is activated.
   */
  public void setIgnoreErrorsMode(boolean isIgnoreErrorsMode)
  {
    this.isIgnoreErrorsMode = isIgnoreErrorsMode;
  }
  /**
   * Sends notification message to the application via the call-back handler.
   *
   * @param handler
opends/src/server/org/opends/server/tools/upgrade/VerificationCallback.java
@@ -57,6 +57,11 @@
  public static final int CANNOT_BE_REVERTED = 2;
  /**
   * An identifier of the accept license mode.
   */
  public static final int ACCEPT_LICENSE_MODE = 3;
  /**
   * The identifier of ignore errors mode.
   */
  public static final int IGNORE_ERRORS_MODE = 5;
@@ -66,6 +71,7 @@
   */
  public static final int MANDATORY_USER_INTERACTION = 6;
  // The required options for the verification callback.
  private int[] requiredOptions;
opends/src/server/org/opends/server/util/cli/ConsoleApplication.java
@@ -68,6 +68,7 @@
import org.opends.server.util.PasswordReader;
import org.opends.server.util.SetupUtils;
/**
 * This class provides an abstract base class which can be used as the basis of
 * a console-based application.
@@ -101,31 +102,34 @@
  }
  /**
   * Defines a title in the console application.
   * Defines the different line styles for output.
   */
  public final static int TITLE = 0;
  /**
   * Defines a subtitle in the console application.
   */
  public final static int SUBTITLE = 1;
  /**
   * Defines a notice in the console application.
   */
  public final static int NOTICE = 2;
  /**
   * Defines a normal line in the console application.
   */
  public final static int NORMAL = 3;
  /**
   * Defines an error line in the console application.
   */
  public final static int ERROR = 4;
  /**
   * Defines a break line in the console application.
   */
  public final static int BREAKLINE = 5;
  public enum Style {
    /**
     * Defines a title.
     */
    TITLE,
    /**
     * Defines a subtitle.
     */
    SUBTITLE,
    /**
     * Defines a notice.
     */
    NOTICE,
    /**
     * Defines a normal line.
     */
    NORMAL,
    /**
     * Defines an error.
     */
    ERROR,
    /**
     * Defines a breakline.
     */
    BREAKLINE,
  }
  // The error stream which this application should use.
  private final PrintStream err;
@@ -435,51 +439,48 @@
   */
  public final void println(final Message msg, final int indent)
  {
    println(0, msg, indent);
    println(Style.NORMAL, msg, indent);
  }
  /**
   * Print a line with EOL in the output stream.
   *
   * @param typeMessage
   * @param msgStyle
   *          The type of formatted output desired.
   * @param msg
   *          The message to display in normal mode.
   * @param indent
   *          The indentation.
   */
  public final void println(final int typeMessage, final Message msg,
  public final void println(final Style msgStyle, final Message msg,
      final int indent)
  {
    if (!isQuiet())
    {
      if (typeMessage == TITLE)
      switch (msgStyle)
      {
      case TITLE:
        out.println();
        out.println(">>>> " + wrapText(msg, MAX_LINE_WIDTH, indent));
        out.println();
      }
      else if (typeMessage == SUBTITLE)
      {
        break;
      case SUBTITLE:
        out.println(wrapText(msg, MAX_LINE_WIDTH, indent));
        out.println();
      }
      else if (typeMessage == NOTICE)
      {
        break;
      case NOTICE:
        out.println(wrapText(" * " + msg, MAX_LINE_WIDTH, indent));
      }
      else if (typeMessage == ERROR)
      {
        break;
      case ERROR:
        out.println();
        out.println(wrapText("** " + msg, MAX_LINE_WIDTH, indent));
      }
      else if (typeMessage == BREAKLINE)
      {
        break;
      case BREAKLINE:
        out.println();
      }
      else
      {
        break;
      default:
        out.println(wrapText(msg, MAX_LINE_WIDTH, indent));
        break;
      }
    }
  }
@@ -663,19 +664,20 @@
   *          The message to display.
   * @param defaultValue
   *          The default answer by default.
   * @param formattedOutput
   * @param msgStyle
   *          The formatted style chosen.
   * @return The user's input as a string.
   * @throws CLIException
   *           If an Exception occurs during the process.
   */
  public final String readInput(final Message prompt,
      final String defaultValue, final int formattedOutput) throws CLIException
      final String defaultValue, final Style msgStyle)
      throws CLIException
  {
    String answer = null;
    final Message messageToDisplay =
        INFO_PROMPT_SINGLE_DEFAULT.get(prompt.toString(), defaultValue);
    if (formattedOutput == TITLE)
    if (msgStyle == Style.TITLE)
    {
      println();
    }
@@ -692,7 +694,8 @@
      throw CLIException.adaptInputException(e);
    }
    if (formattedOutput == TITLE || formattedOutput == SUBTITLE)
    if (msgStyle == Style.TITLE
        || msgStyle == Style.SUBTITLE)
    {
      println();
    }