/* ArtifactToolWorkingDirectoryConfigPanel.java created 2008-02-08 * */ package org.signalml.plugin.newartifact.ui; import static org.signalml.plugin.i18n.PluginI18n._; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.io.File; import javax.swing.AbstractAction; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.JButton; import javax.swing.JLabel; 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.plugin.export.view.FileChooser; import org.signalml.plugin.newartifact.data.NewArtifactConfiguration; /** ArtifactToolWorkingDirectoryConfigPanel * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class NewArtifactToolWorkingDirectoryConfigPanel extends JPanel { private static final long serialVersionUID = 1L; private JTextField directoryTextField; private JButton chooseDirectoryButton; private FileChooser fileChooser; private File directory; public NewArtifactToolWorkingDirectoryConfigPanel(FileChooser fileChooser) { super(); this.fileChooser = fileChooser; initialize(); } private void initialize() { CompoundBorder border = new CompoundBorder( new TitledBorder(_("Artifact working directory")), new EmptyBorder(3,3,3,3) ); setBorder(border); GroupLayout layout = new GroupLayout(this); this.setLayout(layout); layout.setAutoCreateContainerGaps(false); layout.setAutoCreateGaps(true); JLabel directoryLabel = new JLabel(_("Working directory")); GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup(); hGroup.addGroup( layout.createParallelGroup() .addComponent(directoryLabel) ); hGroup.addGroup( layout.createParallelGroup() .addComponent(getDirectoryTextField()) ); hGroup.addGroup( layout.createParallelGroup() .addComponent(getChooseDirectoryButton()) ); layout.setHorizontalGroup(hGroup); GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); vGroup.addGroup( layout.createParallelGroup(Alignment.BASELINE) .addComponent(directoryLabel) .addComponent(getDirectoryTextField()) .addComponent(getChooseDirectoryButton()) ); layout.setVerticalGroup(vGroup); } public JTextField getDirectoryTextField() { if (directoryTextField == null) { directoryTextField = new JTextField(); directoryTextField.setPreferredSize(new Dimension(150,25)); directoryTextField.setEditable(false); } return directoryTextField; } public JButton getChooseDirectoryButton() { if (chooseDirectoryButton == null) { chooseDirectoryButton = new JButton(new ChooseDirectoryAction()); } return chooseDirectoryButton; } public File getDirectory() { return directory; } public void fillPanelFromModel(NewArtifactConfiguration config) { String directoryPath = config.getWorkingDirectoryPath(); if (directoryPath != null) { directory = new File(directoryPath); getDirectoryTextField().setText(directory.getAbsolutePath()); } else { directory = null; getDirectoryTextField().setText(""); } } public void fillModelFromPanel(NewArtifactConfiguration config) { if (directory != null) { config.setWorkingDirectoryPath(directory.getAbsolutePath()); } else { config.setWorkingDirectoryPath(null); } } public void validatePanel(ValidationErrors errors) { // no validation } protected class ChooseDirectoryAction extends AbstractAction { private static final long serialVersionUID = 1L; public ChooseDirectoryAction() { super(_("Choose...")); putValue(AbstractAction.SMALL_ICON, IconUtils.loadClassPathIcon("org/signalml/app/icon/find.png")); putValue(AbstractAction.SHORT_DESCRIPTION,_("Choose a directory for artifact projects")); } @Override public void actionPerformed(ActionEvent ev) { File file = fileChooser.chooseWorkingDirectory(NewArtifactToolWorkingDirectoryConfigPanel.this.getTopLevelAncestor(), directory); if (file == null) { return; } directory = file; getDirectoryTextField().setText(directory.getAbsolutePath()); } } }