package org.signalml.plugin.loader;
import java.awt.BorderLayout;
import java.io.File;
import java.util.ArrayList;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.CompoundBorder;
import javax.swing.border.TitledBorder;
/**
* This panel contains only a text field with the string containing
* paths to directories in which plug-ins are stored.
* Paths to these directories are separated by semicolons.
* @author Marcin Szumski
*/
public class PluginDirsPanel extends JPanel {
private static final long serialVersionUID = 1L;
/**
* the text field in with paths to directories
* in which plug-ins are stored
*/
private JTextField pluginDirsField = new JTextField();
/**
* an array of directories in which plug-ins are stored
*/
private ArrayList<File> pluginDirs;
/**
* Constructor.
* Creates and adds the field to this panel
* @param pluginDirs an array of directories in which
* plug-ins are stored
*/
public PluginDirsPanel(ArrayList<File> pluginDirs) {
this.pluginDirs = pluginDirs;
setLayout(new BorderLayout());
CompoundBorder cb = new CompoundBorder(
new TitledBorder("Plugin directories"),
null
);
setBorder(cb);
add(pluginDirsField);
}
/**
* Converts an array of directories in which plug-ins are stored
* to the string containing paths to those directories.
* @param pluginDirs an array of directories in which
* plug-ins are stored
* @return the string containing paths to directories in which
* plug-ins are stored
*/
private String getPluginDirsString(ArrayList<File> pluginDirs) {
String result = new String();
int i = 0;
for (File pluginDir : pluginDirs) {
String path = pluginDir.getPath();
result += path;
if (++i < pluginDirs.size()) result += ";";
}
return result;
}
/**
* Converts the string containing paths to directories
* in which plug-ins are stored to an array of those directories.
* @param pluginDirsString the string containing paths to directories
* in which plug-ins are stored
* @return an array of directories in which plug-ins are stored
*/
private ArrayList<File> getPluginDirs(String pluginDirsString) {
String[] paths;
paths = pluginDirsString.split(";");
ArrayList<File> pluginDirs = new ArrayList<File>();
for (String path : paths) {
File dir;
if (path!=null) {
dir = new File(path.trim());
pluginDirs.add(dir);
}
}
return pluginDirs;
}
/**
* Fills the text field with the string containing paths to directories
* in which plug-ins are stored
*/
public void fillPanelFromModel() {
pluginDirsField.setText(getPluginDirsString(pluginDirs));
}
/**
* Updates an array of directories in which plug-ins are stored with
* the user input.
*/
public void fillModelFromPanel() {
ArrayList<File> dirs = getPluginDirs(pluginDirsField.getText());
pluginDirs.clear();
pluginDirs.addAll(dirs);
}
}