package org.oddjob; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.oddjob.arooa.ArooaConfigurationException; import org.oddjob.arooa.convert.ArooaConversionException; import org.oddjob.arooa.deploy.NullArooaDescriptor; import org.oddjob.arooa.deploy.annotations.ArooaElement; import org.oddjob.arooa.life.ArooaContextAware; import org.oddjob.arooa.parsing.ArooaContext; import org.oddjob.arooa.reflect.ArooaPropertyException; import org.oddjob.arooa.runtime.RuntimeEvent; import org.oddjob.arooa.runtime.RuntimeListener; import org.oddjob.arooa.standard.StandardArooaSession; import org.oddjob.arooa.types.ValueFactory; import org.oddjob.arooa.xml.XMLConfiguration; /** * */ public class OddjobLifecycleTest extends TestCase { public static class MyValue implements ValueFactory<String> { private int count = 0; @Override public String toValue() throws ArooaConversionException { ++count; return "" + count; } } public static class MyJob implements Runnable, ArooaContextAware { private List<String> events = new ArrayList<String>(); @Override public void setArooaContext(ArooaContext context) { events.add("setArooaContext"); context.getRuntime().addRuntimeListener(new RuntimeListener() { @Override public void beforeInit(RuntimeEvent event) throws ArooaConfigurationException { events.add("beforeInit"); } @Override public void beforeDestroy(RuntimeEvent event) throws ArooaConfigurationException { events.add("beforeDestroy"); } @Override public void beforeConfigure(RuntimeEvent event) throws ArooaConfigurationException { events.add("beforeConfigure"); } @Override public void afterInit(RuntimeEvent event) throws ArooaConfigurationException { events.add("afterInit"); } @Override public void afterDestroy(RuntimeEvent event) throws ArooaConfigurationException { events.add("afterDestroy"); } @Override public void afterConfigure(RuntimeEvent event) throws ArooaConfigurationException { events.add("afterConfigure"); } }); } private String value; @Override public void run() { events.add("run"); } public String getValue() { return value; } @ArooaElement public void setValue(String value) { events.add("setValue " + value); this.value = value; } public List<String> getEvents() { return events; } } public void testOddjobConfiguresThingsOnce() throws ArooaPropertyException, ArooaConversionException { String xml = "<oddjob>" + " <job>" + " <bean class='" + MyJob.class.getName() + "' id='job'>" + " <value>" + " <bean class='" + MyValue.class.getName() + "'/>" + " </value>" + " </bean>" + " </job>" + "</oddjob>"; StandardArooaSession parentSession = new StandardArooaSession(new NullArooaDescriptor()); Oddjob oddjob = new Oddjob(); oddjob.setArooaSession(parentSession); oddjob.setConfiguration(new XMLConfiguration("XLM", xml)); oddjob.run(); OddjobLookup lookup = new OddjobLookup(oddjob); assertEquals("1", lookup.lookup("job.value")); List<?> list = lookup.lookup("job.events", List.class); oddjob.destroy(); assertEquals("setArooaContext", list.get(0)); assertEquals("beforeInit", list.get(1)); assertEquals("afterInit", list.get(2)); assertEquals("beforeConfigure", list.get(3)); assertEquals("setValue 1", list.get(4)); assertEquals("afterConfigure", list.get(5)); assertEquals("run", list.get(6)); assertEquals("beforeDestroy", list.get(7)); assertEquals("setValue null", list.get(8)); assertEquals("afterDestroy", list.get(9)); assertEquals(10, list.size()); } }