/*
* Copyright 2010-2015 Institut Pasteur.
*
* This file is part of Icy.
*
* Icy 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.
*
* Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>.
*/
package icy.gui.preferences;
import icy.plugin.PluginDescriptor;
import icy.plugin.PluginLoader;
import icy.plugin.PluginLoader.PluginLoaderEvent;
import icy.plugin.PluginLoader.PluginLoaderListener;
import icy.preferences.PluginPreferences;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.HashSet;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* @author Stephane
*/
public class PluginStartupPreferencePanel extends PluginListPreferencePanel implements PluginLoaderListener
{
/**
*
*/
private static final long serialVersionUID = -3485972129754541852L;
public static final String NODE_NAME = "Startup Plugin";
final HashSet<String> inactives;
public PluginStartupPreferencePanel(PreferenceFrame parent)
{
super(parent, NODE_NAME, PluginPreferencePanel.NODE_NAME);
inactives = new HashSet<String>();
PluginLoader.addListener(this);
// remove columns 3 (not used here)
table.removeColumn(table.getColumn(columnIds[3]));
// filter.setVisible(false);
action1Button.setVisible(false);
action2Button.setVisible(false);
refreshButton.setVisible(false);
final JPanel topPanel = new JPanel();
topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.PAGE_AXIS));
topPanel.add(Box.createVerticalStrut(4));
topPanel.add(new JLabel("Setup plugin which should be loaded at startup (daemon plugin only)."));
topPanel.add(Box.createVerticalStrut(4));
mainPanel.add(topPanel, BorderLayout.NORTH);
load();
pluginsChanged();
}
@Override
protected void closed()
{
super.closed();
PluginLoader.removeListener(this);
}
@Override
protected boolean isActive(PluginDescriptor plugin)
{
return !inactives.contains(plugin.getClassName());
}
@Override
protected void setActive(PluginDescriptor plugin, boolean value)
{
final String className = plugin.getClassName();
if (value)
inactives.remove(className);
else
{
if (!inactives.contains(className))
inactives.add(className);
}
}
@Override
protected void load()
{
inactives.clear();
inactives.addAll(PluginPreferences.getInactiveDaemons());
}
@Override
protected void save()
{
// save preferences
PluginPreferences.setInactiveDaemons(new ArrayList<String>(inactives));
// restart daemon plugins
PluginLoader.resetDaemons();
}
@Override
protected void doAction1()
{
}
@Override
protected void doAction2()
{
}
@Override
protected void repositoryChanged()
{
// do nothing here
}
@Override
protected void reloadPlugins()
{
// do nothing here
}
@Override
protected String getStateValue(PluginDescriptor plugin)
{
return "";
}
@Override
protected ArrayList<PluginDescriptor> getPlugins()
{
return PluginLoader.getDaemonPlugins();
}
@Override
protected void updateButtonsStateInternal()
{
super.updateButtonsStateInternal();
if (PluginLoader.isLoading())
{
refreshButton.setText("Reloading...");
refreshButton.setEnabled(false);
}
else
{
refreshButton.setText("Reload list");
refreshButton.setEnabled(true);
}
action1Button.setEnabled(false);
action2Button.setEnabled(false);
}
@Override
public void pluginLoaderChanged(PluginLoaderEvent e)
{
pluginsChanged();
}
}