/** * */ package org.signalml.plugin.loader; import java.awt.BorderLayout; import java.io.File; import java.util.ArrayList; import javax.swing.JPanel; /** * This panel allows to manage plug-in options. * Contains two sub-panels: * <ul> * <li>{@link PluginDirsPanel first} to select folders in which plug-ins are * stored</li> * <li>{@link PluginListPanel second} to select which plug-ins should be * active and if necessary to inform about missing dependencies or failure * while loading</li> * </ul> * @author Marcin Szumski */ public class PluginPanel extends JPanel { private static final long serialVersionUID = 1L; /** * the panel containing the table with information * which plug-ins are active * @see PluginListPanel */ private PluginListPanel pluginListPanel; /** * the panel containing the list of directories in * which plug-ins are stored * @see PluginDirsPanel */ private PluginDirsPanel pluginDirsPanel; /** * an array of plug-in {@link PluginState states} */ private ArrayList<PluginState> descriptions; /** * an array of directories in which plug-ins are * stored */ private ArrayList<File> pluginDirs; /** * Constructor. Creates and adds two sub-panels. * @param pluginDescriptions an array of plug-in {@link PluginState states} * @param pluginDirectories an array of directories in which plug-ins are * stored */ public PluginPanel(ArrayList<PluginState> pluginDescriptions, ArrayList<File> pluginDirectories) { setLayout(new BorderLayout()); this.pluginDirs = pluginDirectories; descriptions = pluginDescriptions; pluginListPanel = new PluginListPanel(descriptions); pluginDirsPanel = new PluginDirsPanel(pluginDirs); add(pluginDirsPanel, BorderLayout.CENTER); add(pluginListPanel, BorderLayout.SOUTH); } /** * Fills the sub-panels with the current data. * @param pluginDescriptions an array of plug-in {@link PluginState states} */ public void fillPanelFromModel(ArrayList<PluginState> pluginDescriptions) { pluginListPanel.fillPanelFromModel(pluginDescriptions); pluginDirsPanel.fillPanelFromModel(); } /** * Updates the data with information from sub-panels. * @param descriptions an array of plug-in {@link PluginState states} */ public void fillModelFromPanel(ArrayList<PluginState> descriptions) { pluginListPanel.fillModelFromPanel(descriptions); pluginDirsPanel.fillModelFromPanel(); } }