Ejemplo n.º 1
0
  /**
   * Evaluates the page
   *
   * <p>This checks whether the current settings on the page make any sense. If everything is fine,
   * the settings are being put into the appropriate data container {@link ImportWizardModel} and
   * the current page is marked as complete by invoking {@link #setPageComplete(boolean)}. Otherwise
   * an error message is set, which will make sure the user is informed about the reason for the
   * error.
   */
  private void evaluatePage() {

    setPageComplete(false);
    setErrorMessage(null);
    tablePreview.setVisible(false);

    if (comboLocation.getText().equals("")) { // $NON-NLS-1$
      return;
    }

    try {
      if (!customLinebreak) {
        detectLinebreak();
        comboLinebreak.select(selectedLinebreak);
      }
      if (!customDelimiter) {
        detectDelimiter();
        comboDelimiter.select(selectedDelimiter);
      }
      readPreview();

    } catch (IOException | IllegalArgumentException e) {
      setErrorMessage(e.getMessage());
      return;
    } catch (TextParsingException e) {
      setErrorMessage(Resources.getMessage("ImportWizardPageCSV.16")); // $NON-NLS-1$
      return;
    } catch (RuntimeException e) {
      if (e.getCause() != null) {
        setErrorMessage(e.getCause().getMessage());
      } else {
        setErrorMessage(e.getMessage());
      }
      return;
    }

    /* Put data into container */
    ImportWizardModel data = wizardImport.getData();

    data.setWizardColumns(wizardColumns);
    data.setPreviewData(previewData);
    data.setFirstRowContainsHeader(btnContainsHeader.getSelection());
    data.setFileLocation(comboLocation.getText());
    data.setCsvDelimiter(delimiters[selectedDelimiter]);
    data.setCsvQuote(quotes[selectedQuote]);
    data.setCsvEscape(escapes[selectedEscape]);
    data.setCharset(
        Charsets.getCharsetForName(Charsets.getNamesOfAvailableCharsets()[selectedCharset]));
    data.setCsvLinebreak(
        CSVSyntax.getLinebreakForLabel(CSVSyntax.getAvailableLinebreaks()[selectedLinebreak]));

    /* Mark page as completed */
    setPageComplete(true);
  }
Ejemplo n.º 2
0
  /**
   * Reads in preview data
   *
   * <p>This goes through up to {@link ImportWizardModel#PREVIEW_MAX_LINES} lines within the
   * appropriate file and reads them in. It uses {@link ImportAdapter} in combination with {@link
   * ImportConfigurationCSV} to actually read in the data.
   *
   * @throws IOException Signals that an I/O exception has occurred.
   */
  private void readPreview() throws IOException {

    /* Reset preview data */
    previewData.clear();

    /* Parameters from the user interface */
    final String location = comboLocation.getText();
    final char delimiter = delimiters[selectedDelimiter];
    final char[] linebreak =
        CSVSyntax.getLinebreakForLabel(CSVSyntax.getAvailableLinebreaks()[selectedLinebreak]);
    final char quote = quotes[selectedQuote];
    final char escape = escapes[selectedEscape];
    final boolean containsHeader = btnContainsHeader.getSelection();
    final Charset charset =
        Charsets.getCharsetForName(Charsets.getNamesOfAvailableCharsets()[selectedCharset]);

    /* Variables needed for processing */
    final CSVDataInput in =
        new CSVDataInput(location, charset, delimiter, quote, escape, linebreak);
    final Iterator<String[]> it = in.iterator();
    final String[] firstLine;
    wizardColumns = new ArrayList<ImportWizardModelColumn>();
    ImportConfigurationCSV config =
        new ImportConfigurationCSV(
            location, charset, delimiter, quote, escape, linebreak, containsHeader);

    /* Check whether there is at least one line in file and retrieve it */
    if (it.hasNext()) {
      firstLine = it.next();
    } else {
      in.close();
      throw new IOException(Resources.getMessage("ImportWizardPageCSV.17")); // $NON-NLS-1$
    }

    /* Iterate over columns and add it to {@link #allColumns} */
    for (int i = 0; i < firstLine.length; i++) {

      ImportColumn column = new ImportColumnCSV(i, DataType.STRING);
      ImportWizardModelColumn wizardColumn = new ImportWizardModelColumn(column);

      wizardColumns.add(wizardColumn);
      config.addColumn(column);
    }

    /* Create adapter to import data with given configuration */
    ImportAdapter importAdapter = ImportAdapter.create(config);

    /* Get up to {ImportData#previewDataMaxLines} lines for previewing */
    int count = 0;
    while (importAdapter.hasNext() && (count <= ImportWizardModel.PREVIEW_MAX_LINES)) {
      previewData.add(importAdapter.next());
      count++;
    }

    in.close();

    /* Remove first entry as it always contains name of columns */
    previewData.remove(0);

    /* Check whether there is actual any data */
    if (previewData.size() == 0) {
      throw new IOException(Resources.getMessage("ImportWizardPageCSV.18")); // $NON-NLS-1$
    }

    /*
     * Show preview in appropriate table
     */

    /* Disable redrawing once redesign is finished */
    tablePreview.setRedraw(false);

    /* Remove all of the old columns */
    while (tablePreview.getColumnCount() > 0) {
      tablePreview.getColumns()[0].dispose();
    }

    /* Add new columns */
    for (ImportWizardModelColumn column : wizardColumns) {

      TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewerPreview, SWT.NONE);
      tableViewerColumn.setLabelProvider(
          new CSVColumnLabelProvider(((ImportColumnCSV) column.getColumn()).getIndex()));

      TableColumn tableColumn = tableViewerColumn.getColumn();
      tableColumn.setWidth(100);

      if (btnContainsHeader.getSelection()) {
        tableColumn.setText(column.getColumn().getAliasName());
        tableColumn.setToolTipText(
            Resources.getMessage("ImportWizardPageCSV.19")
                + ((ImportColumnCSV) column.getColumn()).getIndex()); // $NON-NLS-1$
      }
      ColumnViewerToolTipSupport.enableFor(tableViewerPreview, ToolTip.NO_RECREATE);
    }

    /* Setup preview table */
    tableViewerPreview.setInput(previewData);
    tablePreview.setHeaderVisible(btnContainsHeader.getSelection());
    tablePreview.setVisible(true);
    tablePreview.layout();
    tablePreview.setRedraw(true);
  }
Ejemplo n.º 3
0
  /**
   * Creates the design of this page
   *
   * <p>This adds all the controls to the page along with their listeners.
   *
   * @param parent the parent
   * @note {@link #tablePreview} is not visible until a file is loaded.
   */
  public void createControl(Composite parent) {

    Composite container = new Composite(parent, SWT.NULL);
    setControl(container);
    container.setLayout(new GridLayout(3, false));

    /* Location label */
    lblLocation = new Label(container, SWT.NONE);
    lblLocation.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblLocation.setText(Resources.getMessage("ImportWizardPageCSV.7")); // $NON-NLS-1$

    /* Combo box for selection of file */
    comboLocation = new Combo(container, SWT.READ_ONLY);
    comboLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    comboLocation.addSelectionListener(
        new SelectionAdapter() {
          /** Resets {@link customSeparator} and evaluates page */
          @Override
          public void widgetSelected(SelectionEvent arg0) {
            /* Make widgets visible */
            lblDelimiter.setVisible(true);
            comboDelimiter.setVisible(true);
            lblQuote.setVisible(true);
            comboQuote.setVisible(true);
            lblLinebreak.setVisible(true);
            comboLinebreak.setVisible(true);
            lblEscape.setVisible(true);
            lblCharset.setVisible(true);
            comboCharset.setVisible(true);
            comboEscape.setVisible(true);
            btnContainsHeader.setVisible(true);
            customDelimiter = false;
            customLinebreak = false;
            evaluatePage();
          }
        });

    /* Button to open file selection dialog */
    btnChoose = new Button(container, SWT.NONE);
    btnChoose.setText(Resources.getMessage("ImportWizardPageCSV.8")); // $NON-NLS-1$
    btnChoose.addSelectionListener(
        new SelectionAdapter() {

          /**
           * Opens a file selection dialog for CSV files
           *
           * <p>If a valid CSV file was selected, it is added to {@link #comboLocation} when it
           * wasn't already there. It is then preselected within {@link #comboLocation} and the page
           * is evaluated {@see #evaluatePage}.
           */
          @Override
          public void widgetSelected(SelectionEvent arg0) {

            /* Open file dialog */
            final String path =
                wizardImport
                    .getController()
                    .actionShowOpenFileDialog(getShell(), "*.csv"); // $NON-NLS-1$
            if (path == null) {
              return;
            }

            /* Check whether path was already added */
            if (comboLocation.indexOf(path) == -1) {
              comboLocation.add(path, 0);
            }

            /* Select path and notify comboLocation about change */
            comboLocation.select(comboLocation.indexOf(path));
            comboLocation.notifyListeners(SWT.Selection, null);
          }
        });

    /* Delimiter label */
    lblCharset = new Label(container, SWT.NONE);
    lblCharset.setVisible(false);
    lblCharset.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblCharset.setText(Resources.getMessage("ImportWizardPageCSV.20")); // $NON-NLS-1$

    /* Delimiter combobox */
    comboCharset = new Combo(container, SWT.READ_ONLY);
    comboCharset.setVisible(false);

    /* Add labels */
    int index = 0;
    for (final String s : Charsets.getNamesOfAvailableCharsets()) {
      comboCharset.add(s);
      if (s.equals(Charsets.getNameOfDefaultCharset())) {
        selectedCharset = index;
      }
      index++;
    }

    comboCharset.select(selectedCharset);
    comboCharset.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    comboCharset.addSelectionListener(
        new SelectionAdapter() {

          /** Set selection index and customDelimiter and (re-)evaluates page */
          @Override
          public void widgetSelected(final SelectionEvent arg0) {
            selectedCharset = comboCharset.getSelectionIndex();
            evaluatePage();
          }
        });

    /* Place holder */
    new Label(container, SWT.NONE);

    /* Delimiter label */
    lblDelimiter = new Label(container, SWT.NONE);
    lblDelimiter.setVisible(false);
    lblDelimiter.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblDelimiter.setText(Resources.getMessage("ImportWizardPageCSV.10")); // $NON-NLS-1$

    /* Delimiter combobox */
    comboDelimiter = new Combo(container, SWT.READ_ONLY);
    comboDelimiter.setVisible(false);

    /* Add labels */
    for (final String s : labels) {
      comboDelimiter.add(s);
    }

    comboDelimiter.select(selectedDelimiter);
    comboDelimiter.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    comboDelimiter.addSelectionListener(
        new SelectionAdapter() {

          /** Set selection index and customDelimiter and (re-)evaluates page */
          @Override
          public void widgetSelected(final SelectionEvent arg0) {
            selectedDelimiter = comboDelimiter.getSelectionIndex();
            customDelimiter = true;
            evaluatePage();
          }
        });

    /* Place holder */
    new Label(container, SWT.NONE);

    /* Quote label */
    lblQuote = new Label(container, SWT.NONE);
    lblQuote.setVisible(false);
    lblQuote.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblQuote.setText(Resources.getMessage("ImportWizardPageCSV.11")); // $NON-NLS-1$

    /* Quote combobox */
    comboQuote = new Combo(container, SWT.READ_ONLY);
    comboQuote.setVisible(false);

    /* Add labels */
    for (final char c : quotes) {
      comboQuote.add(String.valueOf(c));
    }

    comboQuote.select(selectedQuote);
    comboQuote.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    comboQuote.addSelectionListener(
        new SelectionAdapter() {

          /** Set selection index and custom quote and (re-)evaluates page */
          @Override
          public void widgetSelected(final SelectionEvent arg0) {
            selectedQuote = comboQuote.getSelectionIndex();
            evaluatePage();
          }
        });

    /* Place holder */
    new Label(container, SWT.NONE);

    /* Escape label */
    lblEscape = new Label(container, SWT.NONE);
    lblEscape.setVisible(false);
    lblEscape.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblEscape.setText(Resources.getMessage("ImportWizardPageCSV.12")); // $NON-NLS-1$

    /* Escape combobox */
    comboEscape = new Combo(container, SWT.READ_ONLY);
    comboEscape.setVisible(false);

    /* Add labels */
    for (final char c : escapes) {
      comboEscape.add(String.valueOf(c));
    }

    comboEscape.select(selectedEscape);
    comboEscape.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    comboEscape.addSelectionListener(
        new SelectionAdapter() {

          /** Set selection index and custom escape and (re-)evaluates page */
          @Override
          public void widgetSelected(final SelectionEvent arg0) {
            selectedEscape = comboEscape.getSelectionIndex();
            evaluatePage();
          }
        });

    /* Place holder */
    new Label(container, SWT.NONE);

    /* Line break label */
    lblLinebreak = new Label(container, SWT.NONE);
    lblLinebreak.setVisible(false);
    lblLinebreak.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblLinebreak.setText(Resources.getMessage("ImportWizardPageCSV.13")); // $NON-NLS-1$

    /* Line break combobox */
    comboLinebreak = new Combo(container, SWT.READ_ONLY);
    comboLinebreak.setVisible(false);

    /* Add labels */
    for (final String c : CSVSyntax.getAvailableLinebreaks()) {
      comboLinebreak.add(String.valueOf(c));
    }

    comboLinebreak.select(selectedLinebreak);
    comboLinebreak.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    comboLinebreak.addSelectionListener(
        new SelectionAdapter() {

          /** Set selection index and custom line break and (re-)evaluates page */
          @Override
          public void widgetSelected(final SelectionEvent arg0) {
            selectedLinebreak = comboLinebreak.getSelectionIndex();
            customLinebreak = true;
            evaluatePage();
          }
        });

    /* Place holders */
    new Label(container, SWT.NONE);
    new Label(container, SWT.NONE);

    /* Contains header button */
    btnContainsHeader = new Button(container, SWT.CHECK);
    btnContainsHeader.setVisible(false);
    btnContainsHeader.setText(Resources.getMessage("ImportWizardPageCSV.14")); // $NON-NLS-1$
    btnContainsHeader.setSelection(true);
    btnContainsHeader.addSelectionListener(
        new SelectionAdapter() {

          /** (Re-)Evaluate page */
          @Override
          public void widgetSelected(SelectionEvent arg0) {
            evaluatePage();
          }
        });

    /* Place holder */
    new Label(container, SWT.NONE);

    /* Place holders */
    new Label(container, SWT.NONE);
    new Label(container, SWT.NONE);
    new Label(container, SWT.NONE);

    /* Preview table viewer */
    tableViewerPreview = SWTUtil.createTableViewer(container, SWT.BORDER | SWT.FULL_SELECTION);
    tableViewerPreview.setContentProvider(new ArrayContentProvider());

    /* Actual table for {@link #tableViewerPreview} */
    tablePreview = tableViewerPreview.getTable();
    GridData gd_tablePreview = new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1);
    gd_tablePreview.heightHint = 150;
    tablePreview.setLayoutData(gd_tablePreview);
    tablePreview.setLinesVisible(true);
    tablePreview.setVisible(false);

    /* Set page to incomplete by default */
    setPageComplete(false);
  }