package uk.nhs.kch.rassyeyanie.common.testing.unit; import java.util.ArrayList; import java.util.concurrent.Callable; import org.apache.camel.Processor; import ca.uhn.hl7v2.model.AbstractMessage; public class TestContextFactory<T extends AbstractMessage> { ArrayList<Object[]> testContexts = new ArrayList<Object[]>(); private String inputTemplate; private String outputTemplate; private MessageInstanceFactory<T> messageInstanceFactory; private Callable<Processor[]> processorMaker; public TestContextFactory() { this.testContexts = new ArrayList<Object[]>(); // return empty processor list when tester doesn't pass one in this.processorMaker = new ProcessorMaker(); } public interface MessageInstanceFactory<T> { T get(); } public TestContextFactory<T> setInputTemplate(String inputTemplate) { this.inputTemplate = inputTemplate; return this; } public TestContextFactory<T> setOutputTemplate(String outputTemplate) { this.outputTemplate = outputTemplate; return this; } public TestContextFactory<T> setMessageInstanceFactory( MessageInstanceFactory<T> messageInstanceFactory) { this.messageInstanceFactory = messageInstanceFactory; return this; } public TestContextFactory<T> setProcessorMaker( Callable<Processor[]> processorMaker) { this.processorMaker = processorMaker; return this; } public static class ProcessorMaker implements Callable<Processor[]> { @Override public Processor[] call() { return new Processor[] {}; } } public TestContextFactory<T> add(String messageId) throws Exception { if (this.messageInstanceFactory != null) { this.testContexts.add(new Object[] { new TestContext<T>(String .format(this.inputTemplate, messageId), String.format( this.outputTemplate, messageId), this.messageInstanceFactory.get(), this.processorMaker .call()) }); } else { this.testContexts.add(new Object[] { new TestContext<T>(String .format(this.inputTemplate, messageId), String.format( this.outputTemplate, messageId), null, this.processorMaker .call()) }); } return this; } public ArrayList<Object[]> getTestContexts() { return this.testContexts; } }