SiLeBAT/FSK-Lab

View on GitHub
de.bund.bfr.knime.pmm.nodes/src/de/bund/bfr/knime/pmm/openfsmr/OpenFSMRConverterNodeDialog.java

Summary

Maintainability
A
40 mins
Test Coverage
/*******************************************************************************
 * Copyright (c) 2015 Federal Institute for Risk Assessment (BfR), Germany
 *
 * This program is free software: you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program. If
 * not, see <http://www.gnu.org/licenses/>.
 *
 * Contributors: Department Biological Safety - BfR
 *******************************************************************************/
package de.bund.bfr.knime.pmm.openfsmr;

import java.io.File;
import java.io.FileFilter;
import java.net.MalformedURLException;
import java.nio.file.InvalidPathException;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import javax.swing.JFileChooser;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.filechooser.FileNameExtensionFilter;

import org.knime.core.node.defaultnodesettings.DefaultNodeSettingsPane;
import org.knime.core.node.defaultnodesettings.DialogComponentFileChooser;
import org.knime.core.node.defaultnodesettings.DialogComponentStringListSelection;
import org.knime.core.node.defaultnodesettings.SettingsModelString;
import org.knime.core.node.defaultnodesettings.SettingsModelStringArray;

import de.bund.bfr.knime.pmm.common.KnimeUtils;

/**
 * <code>NodeDialog</code> for the OpenFSMR Converter node.
 * 
 * @author Miguel Alba
 */
public class OpenFSMRConverterNodeDialog extends DefaultNodeSettingsPane  {

  // models
  private SettingsModelString dir;
  private SettingsModelStringArray files;

  // GUI Widgets
  private final DialogComponentFileChooser dirChooser;
  private final DialogComponentStringListSelection filesChooser;

  // Constructor here
  public OpenFSMRConverterNodeDialog() {
    dir =
        new SettingsModelString(OpenFSMRConverterNodeModel.CFGKEY_DIR,
            OpenFSMRConverterNodeModel.DEFAULT_DIR);
    dir.setEnabled(true);

    files =
        new SettingsModelStringArray(OpenFSMRConverterNodeModel.CFGKEY_FILES,
            OpenFSMRConverterNodeModel.DEFAULT_FILES);
    files.setEnabled(false);

    // inits and adds GUI widgets
    dirChooser =
        new DialogComponentFileChooser(dir, "file-directory", JFileChooser.OPEN_DIALOG, true);
    dirChooser.addChangeListener(new DirChangeListener());
    addDialogComponent(dirChooser);

    filesChooser = new DialogComponentStringListSelection(files, "Selected files", Arrays.asList(""), true, 10);
    addDialogComponent(filesChooser);
  }
  
  private class DirChangeListener implements ChangeListener {

    private FileFilter filter = new FileFilter() {
      @Override
      public boolean accept(File pathname) {
        return new FileNameExtensionFilter("PMF files", "pmf", "pmfx").accept(pathname);
      }
    };

    public void stateChanged(ChangeEvent e) {
      try {

        File dirFile = KnimeUtils.getFile(dir.getStringValue());
        File[] filesInDir = dirFile.listFiles(filter);
        if (filesInDir.length > 0) {
          List<String> fnames =
              Arrays.stream(filesInDir).map(File::getName).collect(Collectors.toList());
          filesChooser.replaceListItems(fnames, (String[]) null);
        }
      } catch (InvalidPathException | MalformedURLException error) {
        error.printStackTrace();
      }
    }
  }
}