/* BookToTagMethodDialog.java created 2007-10-22
*
*/
package org.signalml.app.method.booktotag;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Window;
import java.util.LinkedHashSet;
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.ListSelectionModel;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import org.signalml.app.action.util.ListSelectAllAction;
import org.signalml.app.action.util.ListSelectInvertAction;
import org.signalml.app.action.util.ListSelectNoneAction;
import org.signalml.app.model.components.validation.ValidationErrors;
import org.signalml.app.util.IconUtils;
import org.signalml.app.view.common.dialogs.AbstractDialog;
import org.signalml.domain.book.StandardBook;
import org.signalml.method.booktotag.BookToTagData;
import org.signalml.plugin.export.SignalMLException;
import org.springframework.validation.Errors;
/** BookToTagMethodDialog
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class BookToTagMethodDialog extends AbstractDialog {
private static final long serialVersionUID = 1L;
private JList channelList;
private JScrollPane channelScrollPane;
private JButton channelSelectAllButton;
private JButton channelSelectInvertButton;
private JButton channelSelectNoneButton;
private String[] channels;
private JCheckBox makePageTagsCheckBox;
private JCheckBox makeBlockTagsCheckBox;
private JCheckBox makeChannelTagsCheckBox;
public BookToTagMethodDialog(Window window) {
super(window,true);
}
@Override
protected void initialize() {
setTitle(_("Configure book to tag"));
setIconImage(IconUtils.loadClassPathImage(BookToTagMethodDescriptor.ICON_PATH));
setResizable(false);
super.initialize();
}
@Override
public JComponent createInterface() {
JPanel interfacePanel = new JPanel(new BorderLayout());
JPanel channelPanel = new JPanel(new BorderLayout());
channelPanel.setBorder(new CompoundBorder(
new TitledBorder(_("Choose channels to include")),
new EmptyBorder(3,3,3,3)
));
JPanel channelButtonPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING, 3, 3));
channelButtonPanel.add(getChannelSelectAllButton());
channelButtonPanel.add(getChannelSelectNoneButton());
channelButtonPanel.add(getChannelSelectInvertButton());
channelPanel.add(getChannelScrollPane(), BorderLayout.CENTER);
channelPanel.add(channelButtonPanel, BorderLayout.SOUTH);
JPanel tagTypesPanel = new JPanel();
tagTypesPanel.setLayout(new BoxLayout(tagTypesPanel, BoxLayout.Y_AXIS));
tagTypesPanel.setBorder(new CompoundBorder(
new TitledBorder(_("Choose tag types")),
new EmptyBorder(3,3,3,3)
));
tagTypesPanel.add(getMakePageTagsCheckBox());
tagTypesPanel.add(getMakeBlockTagsCheckBox());
tagTypesPanel.add(getMakeChannelTagsCheckBox());
interfacePanel.add(channelPanel, BorderLayout.CENTER);
interfacePanel.add(tagTypesPanel, BorderLayout.SOUTH);
return interfacePanel;
}
public JList getChannelList() {
if (channelList == null) {
channelList = new JList();
channelList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
}
return channelList;
}
public JScrollPane getChannelScrollPane() {
if (channelScrollPane == null) {
channelScrollPane = new JScrollPane(getChannelList());
channelScrollPane.setPreferredSize(new Dimension(300,200));
}
return channelScrollPane;
}
public JButton getChannelSelectAllButton() {
if (channelSelectAllButton == null) {
channelSelectAllButton = new JButton(new ListSelectAllAction(getChannelList()));
}
return channelSelectAllButton;
}
public JButton getChannelSelectNoneButton() {
if (channelSelectNoneButton == null) {
channelSelectNoneButton = new JButton(new ListSelectNoneAction(getChannelList()));
}
return channelSelectNoneButton;
}
public JButton getChannelSelectInvertButton() {
if (channelSelectInvertButton == null) {
channelSelectInvertButton = new JButton(new ListSelectInvertAction(getChannelList()));
}
return channelSelectInvertButton;
}
public String[] getChannels() {
return channels;
}
public void setChannels(String[] channels) {
if (this.channels != channels) {
this.channels = channels;
DefaultListModel listModel = new DefaultListModel();
for (int i=0; i<channels.length; i++) {
listModel.addElement(channels[i]);
}
JList list = getChannelList();
list.setModel(listModel);
list.clearSelection();
}
}
public JCheckBox getMakePageTagsCheckBox() {
if (makePageTagsCheckBox == null) {
makePageTagsCheckBox = new JCheckBox(_("Create page tags"));
}
return makePageTagsCheckBox;
}
public JCheckBox getMakeBlockTagsCheckBox() {
if (makeBlockTagsCheckBox == null) {
makeBlockTagsCheckBox = new JCheckBox(_("Create block tags"));
}
return makeBlockTagsCheckBox;
}
public JCheckBox getMakeChannelTagsCheckBox() {
if (makeChannelTagsCheckBox == null) {
makeChannelTagsCheckBox = new JCheckBox(_("Create channel tags"));
}
return makeChannelTagsCheckBox;
}
@Override
public void fillDialogFromModel(Object model) throws SignalMLException {
BookToTagData data = (BookToTagData) model;
StandardBook book = data.getBook();
int channelCount = book.getChannelCount();
String[] labels = new String[channelCount];
int i;
String label;
for (i=0; i<channelCount; i++) {
label = book.getChannelLabel(i);
if (label == null || label.isEmpty()) {
label = "L" + (i+1);
}
labels[i] = label;
}
setChannels(labels);
JList list = getChannelList();
list.clearSelection();
LinkedHashSet<Integer> channelSet = data.getChannels();
if (channelSet != null) {
for (i=0; i<channelCount; i++) {
if (channelSet.contains(i)) {
list.addSelectionInterval(i, i);
}
}
}
getMakePageTagsCheckBox().setSelected(data.isMakePageTags());
getMakeBlockTagsCheckBox().setSelected(data.isMakeBlockTags());
getMakeChannelTagsCheckBox().setSelected(data.isMakeChannelTags());
}
@Override
public void fillModelFromDialog(Object model) throws SignalMLException {
BookToTagData data = (BookToTagData) model;
JList list = getChannelList();
LinkedHashSet<Integer> channelSet = data.getChannels();
if (channelSet != null) {
channelSet.clear();
} else {
channelSet = new LinkedHashSet<Integer>();
}
for (int i=0; i<channels.length; i++) {
if (list.isSelectedIndex(i)) {
channelSet.add(i);
}
}
data.setMakePageTags(getMakePageTagsCheckBox().isSelected());
data.setMakeBlockTags(getMakeBlockTagsCheckBox().isSelected());
data.setMakeChannelTags(getMakeChannelTagsCheckBox().isSelected());
}
@Override
public void validateDialog(Object model, ValidationErrors errors) throws SignalMLException {
super.validateDialog(model, errors);
if (getChannelList().isSelectionEmpty()) {
errors.addError(_("Select at least one channel"));
}
if (!getMakePageTagsCheckBox().isSelected() && !getMakeBlockTagsCheckBox().isSelected() && !getMakeChannelTagsCheckBox().isSelected()) {
errors.addError(_("Select at least one tag type"));
}
}
@Override
public boolean supportsModelClass(Class<?> clazz) {
return BookToTagData.class.isAssignableFrom(clazz);
}
}