package abbot.editor.editors;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.lang.reflect.Method;
import java.util.*;
import javax.swing.*;
import abbot.Log;
import abbot.i18n.Strings;
import abbot.script.*;
import abbot.tester.ComponentTester;
/** Provide convenient editing of an Assert step. */
public class AssertEditor extends PropertyCallEditor {
private Assert step;
private JTextField value;
private JCheckBox invert;
private JCheckBox wait;
private JTextField timeout = null;
private JTextField interval = null;
private int optionsIndex;
public AssertEditor(Assert step) {
super(step);
this.step = step;
value = addTextField(Strings.get("ExpectedResult"),
step.getExpectedResult());
value.setName(TAG_VALUE);
invert = addCheckBox(Strings.get("Invert"),
step.isInverted());
invert.setName(TAG_INVERT);
wait = addCheckBox(Strings.get("WaitToggle"),
step.isWait());
wait.setName(TAG_WAIT);
// Put wait/invert side by side
Component c;
while ((c = getComponent(getComponentCount()-1)) != value) {
remove(c);
}
JPanel p = new JPanel();
p.setLayout(new GridLayout(0, 2));
p.add(invert);
p.add(wait);
add(p);
optionsIndex = getComponentCount();
configureWaitOptionFields();
}
/** Add in assertXXX methods to the list already generated. */
protected Collection getComponentTesterMethods(ComponentTester tester) {
ArrayList list =
new ArrayList(Arrays.asList(tester.getPropertyMethods()));
list.addAll(Arrays.asList(tester.getAssertMethods()));
list.addAll(Arrays.asList(tester.getComponentAssertMethods()));
return list;
}
private void configureWaitOptionFields() {
if (step.isWait()) {
if (timeout == null) {
timeout = addTextField(Strings.get("Timeout"),
String.valueOf(step.getTimeout()),
String.valueOf(Assert.DEFAULT_TIMEOUT));
timeout.setName(TAG_TIMEOUT);
interval = addTextField(Strings.get("PollInterval"),
String.valueOf(step.getPollInterval()),
String.valueOf(Assert.DEFAULT_INTERVAL));
interval.setName(TAG_POLL_INTERVAL);
}
}
else if (timeout != null) {
// remove them
while (getComponentCount() > optionsIndex) {
remove(getComponentCount()-1);
}
timeout = interval = null;
}
revalidate();
repaint();
}
protected boolean validateTimeout(String value) {
try {
step.setTimeout(Long.parseLong(value));
timeout.setForeground(DEFAULT_FOREGROUND);
return true;
}
catch(NumberFormatException nfe) {
timeout.setForeground(ERROR_FOREGROUND);
}
return false;
}
protected boolean validateInterval(String value) {
try {
step.setPollInterval(Long.parseLong(value));
interval.setForeground(DEFAULT_FOREGROUND);
return true;
}
catch(NumberFormatException nfe) {
interval.setForeground(ERROR_FOREGROUND);
}
return false;
}
public void actionPerformed(ActionEvent ev) {
Object src = ev.getSource();
if (src == value) {
step.setExpectedResult(value.getText());
fireStepChanged();
}
else if (src == invert) {
step.setInverted(!step.isInverted());
fireStepChanged();
}
else if (src == wait) {
step.setWait(!step.isWait());
configureWaitOptionFields();
fireStepChanged();
}
else if (src == timeout) {
String value = timeout.getText();
if (validateTimeout(value))
fireStepChanged();
}
else if (src == interval) {
String value = interval.getText();
if (validateInterval(value))
fireStepChanged();
}
else {
super.actionPerformed(ev);
}
}
}