package org.oddjob.jobs; import java.io.OutputStream; import java.util.Arrays; import org.oddjob.arooa.ArooaSession; import org.oddjob.arooa.convert.ArooaConversionException; import org.oddjob.arooa.deploy.annotations.ArooaHidden; import org.oddjob.arooa.life.ArooaSessionAware; import org.oddjob.beanbus.SimpleBusService; import org.oddjob.beanbus.destinations.BeanDiagnostics; import org.oddjob.beanbus.drivers.IterableBusDriver; import org.oddjob.io.StdoutType; /** * @oddjob.description Dump out the types and properites of a bean or * beans. * * @author rob * */ public class BeanDiagnosticsJob implements Runnable, ArooaSessionAware { // private static final Logger logger = Logger.getLogger(BeanReportJob.class); /** * @oddjob.property * @oddjob.description The name of this job. * @oddjob.required No. */ private String name; /** * @oddjob.property * @oddjob.description A single bean to analyse. * @oddjob.required Either this or the beans are required. */ private Object bean; /** * @oddjob.property * @oddjob.description The beans to analyse. * @oddjob.required Either this or a bean is required. */ private Iterable<? extends Object> beans; /** * @oddjob.property * @oddjob.description The Output to where the report will * be written. * @oddjob.required Yes. */ private OutputStream output; /** Required for bean access. */ private ArooaSession session; @ArooaHidden @Override public void setArooaSession(ArooaSession session) { this.session = session; } @Override public void run() { if (bean != null) { beans = Arrays.asList(bean); } if (beans == null) { throw new NullPointerException("No beans."); } if (output == null) { try { output = new StdoutType().toValue(); } catch (ArooaConversionException e) { throw new RuntimeException(e); } } IterableBusDriver<Object> iterableBusDriver = new IterableBusDriver<Object>(); BeanDiagnostics<Object> diagnostics = new BeanDiagnostics<Object>(); diagnostics.setArooaSession(session); diagnostics.setOutput(output); diagnostics.setBusConductor(iterableBusDriver.getServices().getService( SimpleBusService.BEAN_BUS_SERVICE_NAME)); iterableBusDriver.setBeans(beans); iterableBusDriver.setTo(diagnostics); iterableBusDriver.run(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Object getBean() { return bean; } public void setBean(Object bean) { this.bean = bean; } public Iterable<? extends Object> getBeans() { return beans; } public void setBeans(Iterable<? extends Object> beans) { this.beans = beans; } public OutputStream getOutput() { return output; } public void setOutput(OutputStream output) { this.output = output; } @Override public String toString() { if (name == null) { return getClass().getSimpleName(); } return name; } }