package org.oddjob.jmx;
import javax.swing.ImageIcon;
import junit.framework.TestCase;
import org.oddjob.Iconic;
import org.oddjob.Oddjob;
import org.oddjob.OddjobLookup;
import org.oddjob.Resetable;
import org.oddjob.arooa.convert.ArooaConversionException;
import org.oddjob.arooa.standard.StandardArooaSession;
import org.oddjob.arooa.xml.XMLConfiguration;
import org.oddjob.images.IconEvent;
import org.oddjob.images.IconHelper;
import org.oddjob.images.IconListener;
public class IconicTest extends TestCase {
class Result implements IconListener {
IconEvent event;
public void iconEvent(IconEvent e) {
this.event = e;
synchronized (this) {
notifyAll();
}
}
}
public void testState() throws ArooaConversionException, InterruptedException {
String xml =
"<oddjob xmlns:jmx='http://rgordon.co.uk/oddjob/jmx'>" +
" <job>" +
" <sequential>" +
" <jobs>" +
" <rmireg />" +
" <jmx:server id='server1'" +
" url='service:jmx:rmi://ignored/jndi/rmi://localhost/IconicTest_testState'" +
" root='${fruit}' />" +
" <echo id='fruit'>apples</echo>" +
" </jobs>" +
" </sequential>" +
" </job>" +
"</oddjob>";
Oddjob oddjob = new Oddjob();
oddjob.setConfiguration(new XMLConfiguration("XML", xml));
oddjob.run();
String address = new OddjobLookup(
oddjob).lookup("server1.address", String.class);
JMXClientJob client = new JMXClientJob();
client.setArooaSession(new StandardArooaSession());
client.setConnection(address);
client.run();
RemoteDirectory remote = client.provideBeanDirectory();
Iconic fruit = (Iconic) remote.lookup("fruit", Iconic.class);
assertNotNull(fruit);
Result result = new Result();
fruit.addIconListener(result);
String iconId = result.event.getIconId();
assertEquals(IconHelper.COMPLETE, iconId);
ImageIcon tip = fruit.iconForId(iconId);
assertEquals("Complete", tip.getDescription());
Resetable resetable = (Resetable) fruit;
resetable.hardReset();
synchronized (result) {
result.wait(5000);
}
assertEquals(IconHelper.READY, result.event.getIconId());
client.destroy();
oddjob.destroy();
}
}