/* StagerResultDialog.java created 2008-02-20
*
*/
package org.signalml.plugin.newstager.ui;
import static org.signalml.plugin.i18n.PluginI18n._;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.ArrayList;
import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import org.signalml.app.model.components.validation.ValidationErrors;
import org.signalml.app.util.IconUtils;
import org.signalml.plugin.export.SignalMLException;
import org.signalml.plugin.export.view.AbstractPluginDialog;
import org.signalml.plugin.export.view.FileChooser;
import org.signalml.plugin.newstager.NewStagerPlugin;
/**
* StagerResultDialog
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe
* Sp. z o.o.
*/
public class NewStagerResultDialog extends AbstractPluginDialog {
private static final long serialVersionUID = 1L;
private FileChooser fileChooser;
private JCheckBox primaryOpenInWindowCheckBox;
private JCheckBox primarySaveToFileCheckBox;
private NewStagerResultTagPanel primaryTagPanel;
private JList additionalTagList;
private JScrollPane additionalTagScrollPane;
private JCheckBox additionalOpenInWindowCheckBox;
private JCheckBox additionalSaveToFileCheckBox;
private NewStagerResultReviewDialog resultReviewDialog = null;
private NewStagerResultTargetDescriptor currentDescriptor = null;
public NewStagerResultDialog() {
super();
}
public NewStagerResultDialog(Window w, boolean isModal) {
super(w, isModal);
}
@Override
protected JPanel createControlPane() {
JPanel controlPane = super.createControlPane();
controlPane.add(Box.createHorizontalStrut(10), 1);
controlPane.add(new JButton(new ReviewResultAction()), 1);
return controlPane;
}
@Override
protected void initialize() {
setTitle(_("Stager result"));
setIconImage(IconUtils.loadClassPathImage(NewStagerPlugin.iconPath));
setResizable(false);
super.initialize();
}
@Override
public JComponent createInterface() {
JPanel interfacePanel = new JPanel(new BorderLayout());
JPanel checkBoxPanel = new JPanel();
checkBoxPanel.setLayout(new BoxLayout(checkBoxPanel, BoxLayout.Y_AXIS));
CompoundBorder border = new CompoundBorder(new TitledBorder(
_("Choose primary result targets")),
new EmptyBorder(3, 3, 3, 3));
checkBoxPanel.setBorder(border);
checkBoxPanel.add(getPrimaryOpenInWindowCheckBox());
checkBoxPanel.add(getPrimarySaveToFileCheckBox());
JPanel additionalTagPanel = new JPanel(new BorderLayout(3, 3));
border = new CompoundBorder(new TitledBorder(
_("Additional result tags")), new EmptyBorder(3, 3, 3, 3));
additionalTagPanel.setBorder(border);
JPanel additionalCheckBoxPanel = new JPanel();
additionalCheckBoxPanel.setLayout(new BoxLayout(
additionalCheckBoxPanel, BoxLayout.Y_AXIS));
additionalCheckBoxPanel.add(getAdditionalOpenInWindowCheckBox());
additionalCheckBoxPanel.add(getAdditionalSaveToFileCheckBox());
additionalTagPanel.add(getAdditionalTagScrollPane(),
BorderLayout.CENTER);
additionalTagPanel.add(additionalCheckBoxPanel, BorderLayout.SOUTH);
interfacePanel.add(checkBoxPanel, BorderLayout.NORTH);
interfacePanel.add(getPrimaryTagPanel(), BorderLayout.CENTER);
interfacePanel.add(additionalTagPanel, BorderLayout.SOUTH);
return interfacePanel;
}
public JCheckBox getPrimaryOpenInWindowCheckBox() {
if (primaryOpenInWindowCheckBox == null) {
primaryOpenInWindowCheckBox = new JCheckBox(_("Open in the viewer"));
}
return primaryOpenInWindowCheckBox;
}
public JCheckBox getPrimarySaveToFileCheckBox() {
if (primarySaveToFileCheckBox == null) {
primarySaveToFileCheckBox = new JCheckBox(_("Save to file"), true);
primarySaveToFileCheckBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
boolean selected = (e.getStateChange() == ItemEvent.SELECTED);
getPrimaryTagPanel().setEnabled(selected);
}
});
}
return primarySaveToFileCheckBox;
}
public NewStagerResultTagPanel getPrimaryTagPanel() {
if (primaryTagPanel == null) {
primaryTagPanel = new NewStagerResultTagPanel(fileChooser);
}
return primaryTagPanel;
}
public JCheckBox getAdditionalOpenInWindowCheckBox() {
if (additionalOpenInWindowCheckBox == null) {
additionalOpenInWindowCheckBox = new JCheckBox(
_("Open selected additional tags in the viewer"));
additionalOpenInWindowCheckBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
updateAdditionalTagListEnabled();
}
});
}
return additionalOpenInWindowCheckBox;
}
public JCheckBox getAdditionalSaveToFileCheckBox() {
if (additionalSaveToFileCheckBox == null) {
additionalSaveToFileCheckBox = new JCheckBox(
_("Save selected additional tag to files"));
additionalSaveToFileCheckBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
updateAdditionalTagListEnabled();
}
});
}
return additionalSaveToFileCheckBox;
}
public JList getAdditionalTagList() {
if (additionalTagList == null) {
additionalTagList = new JList();
}
return additionalTagList;
}
public JScrollPane getAdditionalTagScrollPane() {
if (additionalTagScrollPane == null) {
additionalTagScrollPane = new JScrollPane(getAdditionalTagList());
additionalTagScrollPane.setPreferredSize(new Dimension(300, 200));
}
return additionalTagScrollPane;
}
private void updateAdditionalTagListEnabled() {
boolean enabled = (getAdditionalOpenInWindowCheckBox().isSelected() || getAdditionalSaveToFileCheckBox()
.isSelected());
getAdditionalTagList().setEnabled(enabled);
}
@Override
public void fillDialogFromModel(Object model) throws SignalMLException {
NewStagerResultTargetDescriptor descriptor = (NewStagerResultTargetDescriptor) model;
JCheckBox openInWindowCheckBox = getPrimaryOpenInWindowCheckBox();
if (descriptor.isSignalAvailable()) {
openInWindowCheckBox
.setSelected(descriptor.isPrimaryOpenInWindow());
openInWindowCheckBox.setEnabled(true);
} else {
openInWindowCheckBox.setSelected(false);
openInWindowCheckBox.setEnabled(false);
}
getPrimarySaveToFileCheckBox().setSelected(
descriptor.isPrimarySaveToFile());
getPrimaryTagPanel().fillPanelFromModel(descriptor);
JList list = getAdditionalTagList();
DefaultListModel listModel = new DefaultListModel();
ArrayList<File> additionalTags = descriptor.getAdditionalTags();
for (File f : additionalTags) {
listModel.addElement(f.getName());
}
list.setModel(listModel);
list.clearSelection();
int index;
for (File f : descriptor.getChosenAdditionalTags()) {
index = additionalTags.indexOf(f);
list.addSelectionInterval(index, index);
}
JCheckBox additionalOpenInWindowCheckBox = getAdditionalOpenInWindowCheckBox();
if (descriptor.isSignalAvailable()) {
additionalOpenInWindowCheckBox.setSelected(descriptor
.isAdditionalOpenInWindow());
additionalOpenInWindowCheckBox.setEnabled(true);
} else {
additionalOpenInWindowCheckBox.setSelected(false);
additionalOpenInWindowCheckBox.setEnabled(false);
}
getAdditionalSaveToFileCheckBox().setSelected(
descriptor.isAdditionalSaveToFile());
updateAdditionalTagListEnabled();
currentDescriptor = descriptor;
}
@Override
public void fillModelFromDialog(Object model) throws SignalMLException {
NewStagerResultTargetDescriptor descriptor = (NewStagerResultTargetDescriptor) model;
descriptor.setPrimaryOpenInWindow(getPrimaryOpenInWindowCheckBox()
.isSelected());
boolean primarySaveToFile = getPrimarySaveToFileCheckBox().isSelected();
descriptor.setPrimarySaveToFile(primarySaveToFile);
if (primarySaveToFile) {
getPrimaryTagPanel().fillModelFromPanel(descriptor);
} else {
descriptor.setPrimaryTagFile(null);
}
JList list = getAdditionalTagList();
ArrayList<File> additionalTags = descriptor.getAdditionalTags();
ArrayList<File> chosenTags = new ArrayList<File>();
int size = list.getModel().getSize();
int i;
for (i = 0; i < size; i++) {
if (list.isSelectedIndex(i)) {
chosenTags.add(additionalTags.get(i));
}
}
descriptor.setChosenAdditionalTags(chosenTags);
descriptor
.setAdditionalOpenInWindow(getAdditionalOpenInWindowCheckBox()
.isSelected());
descriptor.setAdditionalSaveToFile(getAdditionalSaveToFileCheckBox()
.isSelected());
}
@Override
public void validateDialog(Object model, ValidationErrors errors)
throws SignalMLException {
super.validateDialog(model, errors);
if (getPrimarySaveToFileCheckBox().isSelected()) {
getPrimaryTagPanel().validatePanel(errors);
}
}
@Override
public boolean supportsModelClass(Class<?> clazz) {
return NewStagerResultTargetDescriptor.class.isAssignableFrom(clazz);
}
public FileChooser getFileChooser() {
return fileChooser;
}
public void setFileChooser(FileChooser fileChooser) {
this.fileChooser = fileChooser;
}
protected class ReviewResultAction extends AbstractAction {
private static final long serialVersionUID = 1L;
public ReviewResultAction() {
super(_("Review staging result"));
putValue(
AbstractAction.SMALL_ICON,
IconUtils
.loadClassPathIcon("org/signalml/app/icon/reviewresult.png"));
putValue(AbstractAction.SHORT_DESCRIPTION, _("Inspect the results"));
}
public void actionPerformed(ActionEvent ev) {
if (resultReviewDialog == null) {
resultReviewDialog = new NewStagerResultReviewDialog(
NewStagerResultDialog.this, true);
resultReviewDialog.setFileChooser(fileChooser);
}
resultReviewDialog.showDialog(currentDescriptor, true);
}
}
}