/* ArtifactToolWorkingDirectoryConfigPanel.java created 2008-02-08
*
*/
package org.signalml.app.method.mp5;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.signalml.app.util.IconUtils;
import org.signalml.app.util.SwingUtils;
import org.signalml.exception.SanityCheckException;
import org.signalml.method.mp5.MP5Executor;
import org.signalml.method.mp5.MP5LocalProcessExecutor;
/** ArtifactToolWorkingDirectoryConfigPanel
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class MP5ToolExecutorConfigPanel extends JPanel {
private static final long serialVersionUID = 1L;
private MP5ExecutorManager executorManager;
private MP5LocalExecutorDialog localExecutorDialog;
private AddLocalExecutorAction addLocalExecutorAction;
private ConfigureExecutorAction configureExecutorAction;
private RemoveExecutorAction removeExecutorAction;
private MakeDefaultAction makeDefaultAction;
private JButton addLocalExecutorButton;
private JButton configureExecutorButton;
private JButton removeExecutorButton;
private JButton makeDefaultButton;
private MP5ExecutorListCellRenderer executorListCellRenderer;
private JList executorList;
private JScrollPane executorScrollPane;
public MP5ToolExecutorConfigPanel(MP5ExecutorManager executorManager) {
super();
this.executorManager = executorManager;
getExecutorListCellRenderer().setDefaultExecutor(executorManager.getDefaultExecutor());
executorManager.addMP5ExecutorManagerListener(new MP5ExecutorManagerAdapter() {
@Override
public void defaultExecutorChanged(MP5ExecutorManagerEvent ev) {
getExecutorListCellRenderer().setDefaultExecutor(MP5ToolExecutorConfigPanel.this.executorManager.getDefaultExecutor());
getExecutorList().repaint();
}
});
initialize();
}
private void initialize() {
addLocalExecutorAction = new AddLocalExecutorAction();
configureExecutorAction = new ConfigureExecutorAction();
removeExecutorAction = new RemoveExecutorAction();
makeDefaultAction = new MakeDefaultAction();
setLayout(new BorderLayout(3,3));
CompoundBorder border = new CompoundBorder(
new TitledBorder(_("MP5 executors")),
new EmptyBorder(3,3,3,3)
);
setBorder(border);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
SwingUtils.makeButtonsSameSize(new JButton[] { getMakeDefaultButton(), getConfigureExecutorButton(), getRemoveExecutorButton(), getAddLocalExecutorButton() });
buttonPanel.add(getMakeDefaultButton());
buttonPanel.add(Box.createVerticalStrut(3));
buttonPanel.add(getConfigureExecutorButton());
buttonPanel.add(Box.createVerticalStrut(3));
buttonPanel.add(getRemoveExecutorButton());
buttonPanel.add(Box.createVerticalStrut(10));
buttonPanel.add(Box.createVerticalGlue());
buttonPanel.add(getAddLocalExecutorButton());
buttonPanel.add(Box.createVerticalStrut(3));
add(getExecutorScrollPane(), BorderLayout.CENTER);
add(buttonPanel, BorderLayout.EAST);
}
public MP5ExecutorListCellRenderer getExecutorListCellRenderer() {
if (executorListCellRenderer == null) {
executorListCellRenderer = new MP5ExecutorListCellRenderer();
}
return executorListCellRenderer;
}
public JList getExecutorList() {
if (executorList == null) {
executorList = new JList(new MP5ExecutorListModel(executorManager));
executorList.setCellRenderer(getExecutorListCellRenderer());
executorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
executorList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
boolean selected = !executorList.isSelectionEmpty();
makeDefaultAction.setEnabled(selected);
configureExecutorAction.setEnabled(selected);
removeExecutorAction.setEnabled(selected);
}
});
executorList.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e) && (e.getClickCount() % 2) == 0) {
int index = executorList.getSelectedIndex();
if (index < 0) {
return;
}
configureExecutorAction.actionPerformed(new ActionEvent(this, 0, "configure"));
}
}
});
}
return executorList;
}
public JScrollPane getExecutorScrollPane() {
if (executorScrollPane == null) {
executorScrollPane = new JScrollPane(getExecutorList());
executorScrollPane.setPreferredSize(new Dimension(300,200));
}
return executorScrollPane;
}
public JButton getAddLocalExecutorButton() {
if (addLocalExecutorButton == null) {
addLocalExecutorButton = new JButton(addLocalExecutorAction);
}
return addLocalExecutorButton;
}
public JButton getConfigureExecutorButton() {
if (configureExecutorButton == null) {
configureExecutorButton = new JButton(configureExecutorAction);
}
return configureExecutorButton;
}
public JButton getRemoveExecutorButton() {
if (removeExecutorButton == null) {
removeExecutorButton = new JButton(removeExecutorAction);
}
return removeExecutorButton;
}
public JButton getMakeDefaultButton() {
if (makeDefaultButton == null) {
makeDefaultButton = new JButton(makeDefaultAction);
}
return makeDefaultButton;
}
public MP5LocalExecutorDialog getLocalExecutorDialog() {
return localExecutorDialog;
}
public void setLocalExecutorDialog(MP5LocalExecutorDialog localExecutorDialog) {
this.localExecutorDialog = localExecutorDialog;
}
protected class AddLocalExecutorAction extends AbstractAction {
private static final long serialVersionUID = 1L;
public AddLocalExecutorAction() {
super(_("Add local"));
putValue(AbstractAction.SMALL_ICON, IconUtils.loadClassPathIcon("org/signalml/app/icon/addlocal.png"));
putValue(AbstractAction.SHORT_DESCRIPTION,_("Add local process MP5 executor"));
}
public void actionPerformed(ActionEvent ev) {
MP5LocalProcessExecutor executor = new MP5LocalProcessExecutor();
boolean ok = localExecutorDialog.showDialog(executor, true);
if (!ok) {
return;
}
executorManager.addExecutor(executor);
}
}
protected class RemoveExecutorAction extends AbstractAction {
private static final long serialVersionUID = 1L;
public RemoveExecutorAction() {
super(_("Remove"));
putValue(AbstractAction.SMALL_ICON, IconUtils.loadClassPathIcon("org/signalml/app/icon/remove.png"));
putValue(AbstractAction.SHORT_DESCRIPTION,_("Remove selected MP5 executor"));
setEnabled(false);
}
public void actionPerformed(ActionEvent ev) {
int index = getExecutorList().getSelectedIndex();
if (index < 0) {
return;
}
executorManager.removeExecutor(index);
}
}
protected class ConfigureExecutorAction extends AbstractAction {
private static final long serialVersionUID = 1L;
public ConfigureExecutorAction() {
super(_("Configure"));
putValue(AbstractAction.SMALL_ICON, IconUtils.loadClassPathIcon("org/signalml/app/icon/configure.png"));
putValue(AbstractAction.SHORT_DESCRIPTION,_("Configure selected MP5 executor"));
setEnabled(false);
}
public void actionPerformed(ActionEvent ev) {
int index = getExecutorList().getSelectedIndex();
if (index < 0) {
return;
}
MP5Executor executor = executorManager.getExecutorAt(index);
if (executor == null) {
return;
}
boolean ok;
if (executor instanceof MP5LocalProcessExecutor) {
ok = localExecutorDialog.showDialog(executor, true);
} else {
throw new SanityCheckException("Unsupported executor type [" + executor.getClass() + "]");
}
if (!ok) {
return;
}
executorManager.setExecutorAt(index, executor);
}
}
protected class MakeDefaultAction extends AbstractAction {
private static final long serialVersionUID = 1L;
public MakeDefaultAction() {
super(_("Make default"));
putValue(AbstractAction.SMALL_ICON, IconUtils.loadClassPathIcon("org/signalml/app/icon/makedefault.png"));
putValue(AbstractAction.SHORT_DESCRIPTION,_("Make selecte executor default"));
setEnabled(false);
}
public void actionPerformed(ActionEvent ev) {
int index = getExecutorList().getSelectedIndex();
if (index < 0) {
return;
}
MP5Executor executor = executorManager.getExecutorAt(index);
if (executor == null) {
return;
}
executorManager.setDefaultExecutor(executor);
}
}
}