blob: ba152197016df55da6f1ceefe1f4215b072e7163 [file] [log] [blame]
/**
*
*/
package net.sf.taverna.t2.activities.externaltool.views;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.text.JTextComponent;
import net.sf.taverna.t2.activities.externaltool.ExternalToolActivityConfigurationBean;
import net.sf.taverna.t2.lang.ui.DeselectingButton;
import net.sf.taverna.t2.lang.ui.LineEnabledTextPanel;
import org.jdom.input.SAXBuilder;
import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
import de.uni_luebeck.inb.knowarc.usecases.UseCaseEnumeration;
/**
* @author alanrw
*
*/
public class ScriptPanel extends JPanel {
private static final String SCRIPT_DESCRIPTION = "Specify the commands that you want to run. You can use data arriving at an input port to replace parts of the command or to write to a file. You can also take data written to a file and send it to an output port.";
static SAXBuilder builder = new SAXBuilder();
private final JTextComponent scriptTextArea;
public ScriptPanel(final ExternalToolConfigView view, JTextComponent scriptTextArea, JCheckBox stdInCheckBox, JCheckBox stdOutCheckBox, JCheckBox stdErrCheckBox, JTextField returnCodesField) {
super();
this.setLayout(new BorderLayout());
JTextArea descriptionText = new JTextArea(
SCRIPT_DESCRIPTION);
descriptionText.setEditable(false);
descriptionText.setFocusable(false);
descriptionText.setBorder(new EmptyBorder(5, 5, 10, 5));
descriptionText.setLineWrap(true);
descriptionText.setWrapStyleWord(true);
this.add(descriptionText, BorderLayout.NORTH);
this.scriptTextArea = scriptTextArea;
this.add(new LineEnabledTextPanel(scriptTextArea),
BorderLayout.CENTER);
UseCaseDescription useCaseDescription = view.getConfiguration().getUseCaseDescription();
stdInCheckBox.setSelected(useCaseDescription.isIncludeStdIn());
stdOutCheckBox.setSelected(useCaseDescription.isIncludeStdOut());
stdErrCheckBox.setSelected(useCaseDescription.isIncludeStdErr());
returnCodesField.setText(useCaseDescription.getReturnCodesAsText());
JPanel codesPanel = new JPanel(new FlowLayout());
codesPanel.add(new JLabel("Valid return codes:"));
codesPanel.add(returnCodesField);
JPanel streamPanel = new JPanel(new FlowLayout());
streamPanel.add(stdInCheckBox);
streamPanel.add(stdOutCheckBox);
streamPanel.add(stdErrCheckBox);
JPanel buttonPanel = new JPanel(new FlowLayout());
if (view.isOriginallyFromRepository()) {
JButton revertButton = new DeselectingButton("Revert to original description",
new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e) {
ExternalToolActivityConfigurationBean bean = view.makeConfiguration();
String repositoryUrl = bean.getRepositoryUrl();
String id = bean.getExternaltoolid();
UseCaseDescription usecase = null;
try {
usecase = UseCaseEnumeration.readDescriptionFromUrl(
repositoryUrl, id);
}
catch (IOException ex) {
// Already logged
}
if (usecase != null) {
bean.setUseCaseDescription(usecase);
view.setEditable(false, bean);
} else {
JOptionPane.showMessageDialog(view, "Unable to find tool description " + id, "Missing tool description", JOptionPane.ERROR_MESSAGE);
}
}});
revertButton.setToolTipText("Revert to the tool description from the repository");
buttonPanel.add(revertButton);
}
JButton loadScriptButton = new DeselectingButton("Load description",
new LoadDescriptionAction(this, view));
loadScriptButton.setToolTipText("Load tool description from a file");
JButton saveScriptButton = new DeselectingButton("Export description",
new SaveDescriptionAction(this, view));
saveScriptButton.setToolTipText("Export the tool description to a file");
JButton clearScriptButton = new DeselectingButton("Clear script",
new AbstractAction() {
public void actionPerformed(ActionEvent e) {
clearScript();
}
});
clearScriptButton.setToolTipText("Clear the script from the edit area");
buttonPanel.add(loadScriptButton);
buttonPanel.add(saveScriptButton);
buttonPanel.add(clearScriptButton);
JPanel subPanel = new JPanel(new GridLayout(3,1));
subPanel.add(codesPanel);
subPanel.add(streamPanel);
subPanel.add(buttonPanel);
this.add(subPanel, BorderLayout.SOUTH);
}
/**
* Method for clearing the script
*
*/
private void clearScript() {
if (JOptionPane.showConfirmDialog(this,
"Do you really want to clear the tool description?",
"Clearing the tool description", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
scriptTextArea.setText("");
}
}
}