/* MP5LocalExecutorDialog.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.Window;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTextField;
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.app.view.common.dialogs.AbstractDialog;
import org.signalml.app.view.workspace.ViewerFileChooser;
import org.signalml.method.mp5.MP5LocalProcessExecutor;
import org.signalml.plugin.export.SignalMLException;
import org.signalml.plugin.export.view.FileChooser;
import org.signalml.util.Util;
import org.springframework.validation.Errors;
/** MP5LocalExecutorDialog
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class MP5LocalExecutorDialog extends AbstractDialog {
private static final long serialVersionUID = 1L;
private FileChooser fileChooser;
private JTextField nameTextField;
private MP5ExecutablePanel executablePanel;
public MP5LocalExecutorDialog() {
super();
}
public MP5LocalExecutorDialog(Window w, boolean isModal) {
super(w, isModal);
}
@Override
protected void initialize() {
setTitle(_("Configure local executor"));
setIconImage(IconUtils.loadClassPathImage("org/signalml/app/icon/configure.png"));
setResizable(false);
super.initialize();
}
@Override
public JComponent createInterface() {
JPanel interfacePanel = new JPanel(new BorderLayout());
JPanel namePanel = new JPanel(new BorderLayout());
CompoundBorder border = new CompoundBorder(
new TitledBorder(_("Executor name")),
new EmptyBorder(3,3,3,3)
);
namePanel.setBorder(border);
namePanel.add(getNameTextField(), BorderLayout.CENTER);
interfacePanel.add(namePanel, BorderLayout.NORTH);
interfacePanel.add(getExecutablePanel(), BorderLayout.CENTER);
return interfacePanel;
}
public JTextField getNameTextField() {
if (nameTextField == null) {
nameTextField = new JTextField();
nameTextField.setPreferredSize(new Dimension(300,25));
}
return nameTextField;
}
public MP5ExecutablePanel getExecutablePanel() {
if (executablePanel == null) {
executablePanel = new MP5ExecutablePanel(fileChooser);
}
return executablePanel;
}
@Override
public void fillDialogFromModel(Object model) throws SignalMLException {
MP5LocalProcessExecutor executor = (MP5LocalProcessExecutor) model;
String name = executor.getName();
if (name == null) {
name = _("New local executor");
}
JTextField nameField = getNameTextField();
nameField.setText(name);
nameField.selectAll();
getExecutablePanel().fillPanelFromModel(executor);
nameField.requestFocusInWindow();
}
@Override
public void fillModelFromDialog(Object model) throws SignalMLException {
MP5LocalProcessExecutor executor = (MP5LocalProcessExecutor) model;
executor.setName(getNameTextField().getText());
getExecutablePanel().fillModelFromPanel(executor);
}
@Override
public void validateDialog(Object model, ValidationErrors errors) throws SignalMLException {
super.validateDialog(model, errors);
if (Util.hasSpecialChars(getNameTextField().getText())) {
errors.addError(_("Name must not contain control characters"));
}
getExecutablePanel().validatePanel(errors);
}
@Override
public boolean supportsModelClass(Class<?> clazz) {
return MP5LocalProcessExecutor.class.isAssignableFrom(clazz);
}
public FileChooser getFileChooser() {
return fileChooser;
}
public void setFileChooser(FileChooser fileChooser) {
this.fileChooser = fileChooser;
}
}