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

jvergara
19.02.2007 56f7fa2950663b0e26943b3f4460b33118fcd4f7
Fix for issue 2452: Missing "rejected file" when importing data from LDIF

Add the rejectedFile and skippedFile options to the setup.
6 files modified
330 ■■■■ changed files
opends/src/messages/messages/tools.properties 10 ●●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/UserData.java 4 ●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java 28 ●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/installer/NewSuffixOptions.java 128 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tools/InstallDS.java 116 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tools/InstallDSArgumentParser.java 44 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/tools.properties
@@ -2189,3 +2189,13 @@
SEVERE_ERR_TASKINFO_TASK_NOT_CANCELABLE_TASK_1477=Error:  task %s is not in a \
  cancelable state
NOTICE_BACKUPDB_CANCELLED_1478=The backup process was cancelled
INFO_INSTALLDS_DESCRIPTION_REJECTED_FILE_1479=Write rejected entries to the \
 specified file
MILD_ERR_INSTALLDS_CANNOT_WRITE_REJECTED_1480=Cannot write to rejected entries \
 file %s.  Verify that you have enough write rights on the file
INFO_INSTALLDS_PROMPT_REJECTED_FILE_1481=Write rejected entries to file:
INFO_INSTALLDS_DESCRIPTION_SKIPPED_FILE_1482=Write skipped entries to the \
 specified file
MILD_ERR_INSTALLDS_CANNOT_WRITE_SKIPPED_1483=Cannot write to skipped entries \
 file %s.  Verify that you have enough write rights on the file
INFO_INSTALLDS_PROMPT_SKIPPED_FILE_1484=Write skipped entries to file:
opends/src/quicksetup/org/opends/quicksetup/UserData.java
@@ -103,8 +103,8 @@
    LinkedList<String> baseDn = new LinkedList<String>();
    baseDn.add("dc=example,dc=com");
    NewSuffixOptions defaultNewSuffixOptions = new NewSuffixOptions(
        NewSuffixOptions.Type.CREATE_BASE_ENTRY, baseDn);
    NewSuffixOptions defaultNewSuffixOptions = NewSuffixOptions.createBaseEntry(
        baseDn);
    setNewSuffixOptions(defaultNewSuffixOptions);
    // See what we can propose as port
opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
@@ -1135,6 +1135,18 @@
      argList.add(ldifPath);
    }
    argList.add("-F");
    String rejectedFile = getUserData().getNewSuffixOptions().getRejectedFile();
    if (rejectedFile != null)
    {
      argList.add("-R");
      argList.add(rejectedFile);
    }
    String skippedFile = getUserData().getNewSuffixOptions().getSkippedFile();
    if (skippedFile != null)
    {
      argList.add("--skipFile");
      argList.add(skippedFile);
    }
    final String[] args = new String[argList.size()];
    argList.toArray(args);
@@ -3423,7 +3435,8 @@
        LinkedList<String> ldifPaths = new LinkedList<String>();
        ldifPaths.add(ldifPath);
        dataOptions = new NewSuffixOptions(type, baseDns, ldifPaths);
        dataOptions = NewSuffixOptions.createImportFromLDIF(baseDns, ldifPaths,
            null, null);
        qs.displayFieldInvalid(FieldName.LDIF_PATH, false);
      }
      break;
@@ -3467,8 +3480,8 @@
        // No validation errors
        LinkedList<String> baseDns = new LinkedList<String>();
        baseDns.add(baseDn);
        dataOptions = new NewSuffixOptions(type, baseDns,
            new Integer(nEntries));
        dataOptions = NewSuffixOptions.createAutomaticallyGenerated(baseDns,
            Integer.parseInt(nEntries));
      }
      break;
@@ -3479,7 +3492,14 @@
      {
        LinkedList<String> baseDns = new LinkedList<String>();
        baseDns.add(baseDn);
        dataOptions = new NewSuffixOptions(type, baseDns);
        if (type == NewSuffixOptions.Type.CREATE_BASE_ENTRY)
        {
          dataOptions = NewSuffixOptions.createBaseEntry(baseDns);
        }
        else
        {
          dataOptions = NewSuffixOptions.createEmpty(baseDns);
        }
      }
    }
opends/src/quicksetup/org/opends/quicksetup/installer/NewSuffixOptions.java
@@ -46,10 +46,6 @@
  public enum Type
  {
    /**
     * Do nothing.
     */
    NOTHING,
    /**
     * Create base entry.
     */
    CREATE_BASE_ENTRY,
@@ -67,51 +63,85 @@
    IMPORT_AUTOMATICALLY_GENERATED_DATA
  }
  private Type type = Type.NOTHING;
  private Type type;
  private LinkedList<String> baseDns = new LinkedList<String>();
  private LinkedList<String> ldifPaths = new LinkedList<String>();
  private String rejectedFile;
  private String skippedFile;
  private int numberEntries = 2000;
  /**
   * Constructor for the NewSuffixOptions object.
   * Private constructor.
   * @param baseDns the base DNs of the suffix options.
   *
   * If the Data Options is IMPORT_FROM_LDIF_FILE the args are the baseDn and
   * a String with the ldif location.
   *
   * If the Data Options is IMPORT_AUTOMATICALLY_GENERATED_DATA the args
   * are the baseDn and an Integer with the number of entries.
   *
   * For the rest of the types the args are just the baseDn.
   *
   * @param type the Type of NewSuffixOptions.
   * @param args the different argument objects (depending on the Type
   * specified)
   */
  public NewSuffixOptions(Type type, Object... args)
  private NewSuffixOptions(LinkedList<String> baseDns)
  {
    this.type = type;
    LinkedList<?> v = (LinkedList<?>)args[0];
    for (Object o : v)
    {
      baseDns.add((String)o);
    }
    switch (type)
    {
    case IMPORT_FROM_LDIF_FILE:
      v = (LinkedList<?>)args[1];
      for (Object o : v)
      {
        ldifPaths.add((String)o);
      }
      break;
    this.baseDns.addAll(baseDns);
  }
    case IMPORT_AUTOMATICALLY_GENERATED_DATA:
      numberEntries = ((Integer) args[1]).intValue();
      break;
    }
  /**
   * Creates a base entry suffix options.
   * @param baseDNs the base DNs of the suffix options.
   * @return a base entry suffix options.
   */
  public static NewSuffixOptions createBaseEntry(LinkedList<String> baseDNs)
  {
    NewSuffixOptions ops = new NewSuffixOptions(baseDNs);
    ops.type = Type.CREATE_BASE_ENTRY;
    return ops;
  }
  /**
   * Creates an empty suffix options.
   * @param baseDNs the base DNs of the suffix options.
   * @return an empty suffix options.
   */
  public static NewSuffixOptions createEmpty(LinkedList<String> baseDNs)
  {
    NewSuffixOptions ops = new NewSuffixOptions(baseDNs);
    ops.type = Type.LEAVE_DATABASE_EMPTY;
    return ops;
  }
  /**
   * Creates a base entry suffix options.
   * @param baseDNs the base DNs of the suffix options.
   * @param ldifPaths the LDIF files to be imported.
   * @param rejectedFile the files where the rejected entries are stored.
   * @param skippedFile the files where the skipped entries are stored.
   * @return a base entry suffix options.
   */
  public static NewSuffixOptions createImportFromLDIF(
      LinkedList<String> baseDNs, LinkedList<String> ldifPaths,
      String rejectedFile, String skippedFile)
  {
    NewSuffixOptions ops = new NewSuffixOptions(baseDNs);
    ops.type = Type.IMPORT_FROM_LDIF_FILE;
    ops.ldifPaths.addAll(ldifPaths);
    ops.rejectedFile = rejectedFile;
    ops.skippedFile = skippedFile;
    return ops;
  }
  /**
   * Creates an automatically generated entries suffix options.
   * @param baseDNs the base DNs of the suffix options.
   * @param numberEntries the number of entries to generate.
   * @return a base entry suffix options.
   */
  public static NewSuffixOptions createAutomaticallyGenerated(
      LinkedList<String> baseDNs, int numberEntries)
  {
    NewSuffixOptions ops = new NewSuffixOptions(baseDNs);
    ops.type = Type.IMPORT_AUTOMATICALLY_GENERATED_DATA;
    ops.numberEntries = numberEntries;
    return ops;
  }
  /**
@@ -136,6 +166,30 @@
  }
  /**
   * Returns the path to store the rejected entries of the import.
   * <CODE>null</CODE> if no rejected file is specified.
   *
   * @return the path to store the rejected entries of the import.
   * <CODE>null</CODE> if no rejected file is specified.
   */
  public String getRejectedFile()
  {
    return rejectedFile;
  }
  /**
   * Returns the path to store the skipped entries of the import.
   * <CODE>null</CODE> if no skipped file is specified.
   *
   * @return the path to store the skipped entries of the import.
   * <CODE>null</CODE> if no skipped file is specified.
   */
  public String getSkippedFile()
  {
    return skippedFile;
  }
  /**
   * Returns the number of entries that will be automatically generated.
   *
   * @return the number of entries that will be automatically generated.
opends/src/server/org/opends/server/tools/InstallDS.java
@@ -617,25 +617,40 @@
        errorMessages.add(ERR_INSTALLDS_NO_SUCH_LDIF_FILE.get(
            Utils.getStringFromCollection(nonExistingFiles, ", ")));
      }
      dataOptions = new NewSuffixOptions(
          NewSuffixOptions.Type.IMPORT_FROM_LDIF_FILE, baseDNs,
          argParser.importLDIFArg.getValues());
      String rejectedFile = argParser.rejectedImportFileArg.getValue();
      if (rejectedFile != null)
      {
        if (!Utils.canWrite(rejectedFile))
        {
          errorMessages.add(
              ERR_INSTALLDS_CANNOT_WRITE_REJECTED.get(rejectedFile));
        }
      }
      String skippedFile = argParser.skippedImportFileArg.getValue();
      if (skippedFile != null)
      {
        if (!Utils.canWrite(skippedFile))
        {
          errorMessages.add(ERR_INSTALLDS_CANNOT_WRITE_SKIPPED.get(
              skippedFile));
        }
      }
      dataOptions = NewSuffixOptions.createImportFromLDIF(baseDNs,
          argParser.importLDIFArg.getValues(),
          rejectedFile, skippedFile);
    }
    else if (argParser.addBaseEntryArg.isPresent())
    {
      dataOptions = new NewSuffixOptions(
          NewSuffixOptions.Type.CREATE_BASE_ENTRY, baseDNs);
      dataOptions = NewSuffixOptions.createBaseEntry(baseDNs);
    }
    else if (argParser.sampleDataArg.isPresent())
    {
      dataOptions = new NewSuffixOptions(
          NewSuffixOptions.Type.IMPORT_AUTOMATICALLY_GENERATED_DATA, baseDNs,
      dataOptions = NewSuffixOptions.createAutomaticallyGenerated(baseDNs,
          new Integer(argParser.sampleDataArg.getValue()));
    }
    else
    {
      dataOptions = new NewSuffixOptions(
          NewSuffixOptions.Type.LEAVE_DATABASE_EMPTY, baseDNs);
      dataOptions = NewSuffixOptions.createEmpty(baseDNs);
    }
    uData.setNewSuffixOptions(dataOptions);
@@ -1021,15 +1036,39 @@
          importLDIFFiles.add(path);
        }
      }
      dataOptions = new NewSuffixOptions(
          NewSuffixOptions.Type.IMPORT_FROM_LDIF_FILE,
          baseDNs, importLDIFFiles);
      String rejectedFile = argParser.rejectedImportFileArg.getValue();
      if (rejectedFile != null)
      {
        while (!Utils.canWrite(rejectedFile))
        {
          printLineBreak();
          printErrorMessage(ERR_INSTALLDS_CANNOT_WRITE_REJECTED.get(
              rejectedFile));
          printLineBreak();
          rejectedFile =
            promptForString(INFO_INSTALLDS_PROMPT_REJECTED_FILE.get(), null);
        }
      }
      String skippedFile = argParser.skippedImportFileArg.getValue();
      if (skippedFile != null)
      {
        while (!Utils.canWrite(skippedFile))
        {
          printLineBreak();
          printErrorMessage(
              ERR_INSTALLDS_CANNOT_WRITE_SKIPPED.get(skippedFile));
          printLineBreak();
          skippedFile =
            promptForString(INFO_INSTALLDS_PROMPT_SKIPPED_FILE.get(), null);
        }
      }
      dataOptions = NewSuffixOptions.createImportFromLDIF(baseDNs,
          importLDIFFiles, rejectedFile, skippedFile);
    }
    else if (argParser.addBaseEntryArg.isPresent())
    {
      dataOptions = new NewSuffixOptions(
          NewSuffixOptions.Type.CREATE_BASE_ENTRY,
          baseDNs);
      dataOptions = NewSuffixOptions.createBaseEntry(baseDNs);
    }
    else if (argParser.sampleDataArg.isPresent())
    {
@@ -1045,9 +1084,8 @@
        Message message = INFO_INSTALLDS_PROMPT_NUM_ENTRIES.get();
        numUsers = promptForInteger(message, 2000, 0, Integer.MAX_VALUE);
      }
      dataOptions = new NewSuffixOptions(
          NewSuffixOptions.Type.IMPORT_AUTOMATICALLY_GENERATED_DATA,
          baseDNs, numUsers);
      dataOptions = NewSuffixOptions.createAutomaticallyGenerated(baseDNs,
          numUsers);
    }
    else
    {
@@ -1093,28 +1131,50 @@
            printErrorMessage(message);
          }
        }
        dataOptions = new NewSuffixOptions(
            NewSuffixOptions.Type.IMPORT_FROM_LDIF_FILE,
            baseDNs, importLDIFFiles);
        String rejectedFile = argParser.rejectedImportFileArg.getValue();
        if (rejectedFile != null)
        {
          while (!Utils.canWrite(rejectedFile))
          {
            printLineBreak();
            printErrorMessage(
                ERR_INSTALLDS_CANNOT_WRITE_REJECTED.get(rejectedFile));
            printLineBreak();
            rejectedFile =
              promptForString(INFO_INSTALLDS_PROMPT_REJECTED_FILE.get(), null);
          }
        }
        String skippedFile = argParser.skippedImportFileArg.getValue();
        if (skippedFile != null)
        {
          while (!Utils.canWrite(skippedFile))
          {
            printLineBreak();
            printErrorMessage(
                ERR_INSTALLDS_CANNOT_WRITE_SKIPPED.get(skippedFile));
            printLineBreak();
            skippedFile =
              promptForString(INFO_INSTALLDS_PROMPT_SKIPPED_FILE.get(), null);
          }
        }
        dataOptions = NewSuffixOptions.createImportFromLDIF(baseDNs,
            importLDIFFiles, rejectedFile, skippedFile);
      }
      else if (populateType == POPULATE_TYPE_GENERATE_SAMPLE_DATA)
      {
        Message message = INFO_INSTALLDS_PROMPT_NUM_ENTRIES.get();
        int numUsers = promptForInteger(message, 2000, 0, Integer.MAX_VALUE);
        dataOptions = new NewSuffixOptions(
            NewSuffixOptions.Type.IMPORT_AUTOMATICALLY_GENERATED_DATA,
            baseDNs, numUsers);
        dataOptions = NewSuffixOptions.createAutomaticallyGenerated(baseDNs,
            numUsers);
      }
      else if (populateType == POPULATE_TYPE_LEAVE_EMPTY)
      {
        dataOptions = new NewSuffixOptions(
            NewSuffixOptions.Type.LEAVE_DATABASE_EMPTY, baseDNs);
        dataOptions = NewSuffixOptions.createEmpty(baseDNs);
      }
      else if (populateType == POPULATE_TYPE_BASE_ONLY)
      {
        dataOptions = new NewSuffixOptions(
            NewSuffixOptions.Type.CREATE_BASE_ENTRY, baseDNs);
        dataOptions = NewSuffixOptions.createBaseEntry(baseDNs);
      }
      else
      {
opends/src/server/org/opends/server/tools/InstallDSArgumentParser.java
@@ -81,6 +81,8 @@
  StringArgument    configClassArg;
  StringArgument    configFileArg;
  StringArgument    importLDIFArg;
  StringArgument    rejectedImportFileArg;
  StringArgument    skippedImportFileArg;
  StringArgument    directoryManagerDNArg;
  StringArgument    directoryManagerPwdStringArg;
  StringArgument    useJavaKeyStoreArg;
@@ -188,6 +190,18 @@
        INFO_INSTALLDS_DESCRIPTION_IMPORTLDIF.get());
    addArgument(importLDIFArg);
    rejectedImportFileArg = new StringArgument(
        "rejectfile", 'R', "rejectFile", false, false,
        true, "{rejectFile}", null, null,
        INFO_INSTALLDS_DESCRIPTION_REJECTED_FILE.get());
    addArgument(rejectedImportFileArg);
    skippedImportFileArg = new StringArgument(
        "skipFile", null, "skipFile", false, false,
        true, "{skipFile}", null, null,
        INFO_INSTALLDS_DESCRIPTION_SKIPPED_FILE.get());
    addArgument(skippedImportFileArg);
    sampleDataArg = new IntegerArgument(
        "sampledata", 'd', "sampleData", false,
        false, true, "{numEntries}", 0, null,
@@ -516,6 +530,36 @@
              sampleDataArg.getLongIdentifier());
      errorMessages.add(message);
    }
    if (rejectedImportFileArg.isPresent() && addBaseEntryArg.isPresent())
    {
      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
          addBaseEntryArg.getLongIdentifier(),
          rejectedImportFileArg.getLongIdentifier());
      errorMessages.add(message);
    }
    else if (rejectedImportFileArg.isPresent() && sampleDataArg.isPresent())
    {
      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
          rejectedImportFileArg.getLongIdentifier(),
          sampleDataArg.getLongIdentifier());
      errorMessages.add(message);
    }
    if (skippedImportFileArg.isPresent() && addBaseEntryArg.isPresent())
    {
      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
          addBaseEntryArg.getLongIdentifier(),
          skippedImportFileArg.getLongIdentifier());
      errorMessages.add(message);
    }
    else if (skippedImportFileArg.isPresent() && sampleDataArg.isPresent())
    {
      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
          skippedImportFileArg.getLongIdentifier(),
          sampleDataArg.getLongIdentifier());
      errorMessages.add(message);
    }
  }
  /**