- Revision
- 942
- Author
- mauro
- Date
- 2008-09-21 13:28:54 -0500 (Sun, 21 Sep 2008)
Log Message
Updated trader example to use a container to find script configured components. There are still some classloading issues that merit further attention (see FIXME in TraderContainer).
Modified Paths
Added Paths
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/TraderContainer.java
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/XMLContainer.java
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/trader.xml
- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderContainerSteps.java
Diff
Added: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/TraderContainer.java (0 => 942)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/TraderContainer.java (rev 0) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/TraderContainer.java 2008-09-21 18:28:54 UTC (rev 942) @@ -0,0 +1,11 @@ +package org.jbehave.examples.trader.container; + + +//FIXME there are classloading issues (only using maven plugin) if TraderContainer extends the XMLPicoContainer cointained in core +//Not quite sure what the root cause is - need more investigation. +public class TraderContainer extends XMLContainer { + + public TraderContainer(ClassLoader classLoader) { + super("org/jbehave/examples/trader/container/trader.xml", classLoader); + } +}
Added: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/XMLContainer.java (0 => 942)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/XMLContainer.java (rev 0) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/XMLContainer.java 2008-09-21 18:28:54 UTC (rev 942) @@ -0,0 +1,53 @@ +package org.jbehave.examples.trader.container; + +import java.io.InputStreamReader; +import java.io.Reader; + +import org.jbehave.container.Container; +import org.picocontainer.PicoContainer; +import org.picocontainer.script.ScriptedContainerBuilder; +import org.picocontainer.script.xml.XMLContainerBuilder; + +/** + * Simplified XML Pico-based Container + * + * @author Mauro Talevi + */ +public class XMLContainer implements Container { + + private final ClassLoader classLoader; + private final PicoContainer container; + + public XMLContainer(String resource) { + this(resource, Thread.currentThread().getContextClassLoader()); + } + + public XMLContainer(String resource, ClassLoader classLoader) { + this.classLoader = classLoader; + this.container = buildContainer(resource); + } + + public <T> T getComponent(Class<T> type) { + return container.getComponent(type); + } + + @SuppressWarnings("unchecked") + public <T> T getComponent(Class<T> type, Object key) { + return (T) container.getComponent(key); + } + + private PicoContainer buildContainer(String resource) { + Reader script = getReader(resource, classLoader); + ScriptedContainerBuilder builder = createContainerBuilder(script, classLoader); + return builder.buildContainer(null, null, false); + } + + private Reader getReader(String resource, ClassLoader classLoader) { + return new InputStreamReader(classLoader.getResourceAsStream(resource)); + } + + protected ScriptedContainerBuilder createContainerBuilder(Reader script, ClassLoader classLoader) { + return new XMLContainerBuilder(script, classLoader); + } + +}
Added: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/trader.xml (0 => 942)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/trader.xml (rev 0) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/container/trader.xml 2008-09-21 18:28:54 UTC (rev 942) @@ -0,0 +1,25 @@ +<container component-instance-factory='org.picocontainer.script.xml.XStreamComponentInstanceFactory'> + + <component-instance key='org.jbehave.examples.trader.model.Trader'> + <org.jbehave.examples.trader.model.Trader> + <name>Mauro</name> + <stocks class="java.util.Arrays$ArrayList"> + <a class="org.jbehave.examples.trader.model.Stock-array"> + <org.jbehave.examples.trader.model.Stock> + <prices class="java.util.Arrays$ArrayList"> + <a class="java.lang.Double-array"> + <double>1.0</double> + </a> + </prices> + <alertPrice>10.0</alertPrice> + <status>OFF</status> + </org.jbehave.examples.trader.model.Stock> + </a> + </stocks> + </org.jbehave.examples.trader.model.Trader> + </component-instance> + + <component-implementation class='org.jbehave.examples.trader.persistence.TraderPersister' /> + <component-implementation class='org.jbehave.examples.trader.converters.TraderConverter' /> + +</container>
Added: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderContainerSteps.java (0 => 942)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderContainerSteps.java (rev 0) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderContainerSteps.java 2008-09-21 18:28:54 UTC (rev 942) @@ -0,0 +1,58 @@ +package org.jbehave.examples.trader.scenarios; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.jbehave.util.JUnit4Ensure.ensureThat; + +import java.util.List; + +import org.jbehave.container.Container; +import org.jbehave.examples.trader.container.TraderContainer; +import org.jbehave.examples.trader.model.Stock; +import org.jbehave.examples.trader.model.Trader; +import org.jbehave.examples.trader.persistence.TraderPersister; +import org.jbehave.scenario.annotations.Given; +import org.jbehave.scenario.annotations.Then; +import org.jbehave.scenario.annotations.When; +import org.jbehave.scenario.steps.Steps; +import org.jbehave.scenario.steps.StepsConfiguration; + +public class TraderContainerSteps extends Steps { + + private double threshold; + private Stock stock; + private Trader trader; + private Container container; + + public TraderContainerSteps(double threshold, ClassLoader classLoader) { + super(new StepsConfiguration()); + this.threshold = threshold; + this.container = new TraderContainer(classLoader); + } + + @Given("a trader of name $name") + public void aTrader(String name) { + this.trader = container.getComponent(TraderPersister.class).retrieveTrader(name); + } + + @Given("a stock of prices $prices") + public void aStockOfPrice(List<Double> prices) { + stock = new Stock(prices, threshold); + } + + @When("the stock is traded at $price") + public void theStockIsTradedAt(double price) { + stock.tradeAt(price); + } + + @Then("the alert status should be $status") + public void theAlertStatusShouldBe(String status) { + ensureThat(stock.getStatus().name(), equalTo(status)); + } + + @Then("the trader sells all stocks") + public void theTraderSellsAllStocks() { + trader.sellAllStocks(); + ensureThat(trader.getStocks().size(), equalTo(0)); + } + +}
Modified: trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderSellsAllStocks.java (941 => 942)
--- trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderSellsAllStocks.java 2008-09-21 17:51:34 UTC (rev 941) +++ trunk/examples/trader/src/main/java/org/jbehave/examples/trader/scenarios/TraderSellsAllStocks.java 2008-09-21 18:28:54 UTC (rev 942) @@ -1,10 +1,10 @@ package org.jbehave.examples.trader.scenarios; +import org.jbehave.scenario.JUnitScenario; import org.jbehave.scenario.PropertyBasedConfiguration; -import org.jbehave.scenario.JUnitScenario; +import org.jbehave.scenario.parser.ClasspathScenarioDefiner; import org.jbehave.scenario.parser.PatternScenarioParser; import org.jbehave.scenario.parser.ScenarioDefiner; -import org.jbehave.scenario.parser.ClasspathScenarioDefiner; import org.jbehave.scenario.parser.UnderscoredCamelCaseResolver; @@ -19,7 +19,7 @@ public ScenarioDefiner forDefiningScenarios() { return new ClasspathScenarioDefiner(new UnderscoredCamelCaseResolver(".scenario"), new PatternScenarioParser(this), classLoader); } - }, new TraderSteps(10.0, classLoader)); + }, new TraderContainerSteps(10.0, classLoader)); // Could also use new TraderSteps(10.0, classLoader) } }
To unsubscribe from this list please visit:
