You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by nu...@apache.org on 2006/10/17 21:55:55 UTC
svn commit: r465019 - in /jakarta/commons/sandbox/pipeline/trunk/src:
main/java/org/apache/commons/pipeline/
main/java/org/apache/commons/pipeline/config/
main/java/org/apache/commons/pipeline/testFramework/
test/java/org/apache/commons/pipeline/config...
Author: nuttycom
Date: Tue Oct 17 12:55:53 2006
New Revision: 465019
URL: http://svn.apache.org/viewvc?view=rev&rev=465019
Log:
Added global environment variables to StageContext.
Modified:
jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Pipeline.java
jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/StageContext.java
jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/config/PipelineRuleSet.java
jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/testFramework/TestStageContext.java
jakarta/commons/sandbox/pipeline/trunk/src/test/java/org/apache/commons/pipeline/config/DigesterPipelineFactoryTest.java
jakarta/commons/sandbox/pipeline/trunk/src/test/resources/TestResources.properties
jakarta/commons/sandbox/pipeline/trunk/src/test/resources/test_conf.xml
Modified: jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Pipeline.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Pipeline.java?view=diff&rev=465019&r1=465018&r2=465019
==============================================================================
--- jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Pipeline.java (original)
+++ jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/Pipeline.java Tue Oct 17 12:55:53 2006
@@ -73,6 +73,9 @@
// Feeder used to handle output of final stage
private Feeder terminalFeeder = Feeder.VOID;
+ // Global environment variables
+ private Map<String,Object> env = Collections.synchronizedMap(new HashMap<String,Object>());
+
/**
* Creates and initializes a new Pipeline.
*/
@@ -164,6 +167,23 @@
}
return branches.get(branch).getSourceFeeder();
+ }
+
+ /**
+ * Global environment accessor method.
+ *
+ * @return the global environment value corresponding to the specified
+ * key, or null if no such key is found.
+ */
+ public Object getEnv(String key) {
+ return this.env.get(key);
+ }
+
+ /**
+ * Sets the value corresponding to the specified environment variable key.
+ */
+ public void setEnv(String key, Object value) {
+ this.env.put(key, value);
}
/**
Modified: jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/StageContext.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/StageContext.java?view=diff&rev=465019&r1=465018&r2=465019
==============================================================================
--- jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/StageContext.java (original)
+++ jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/StageContext.java Tue Oct 17 12:55:53 2006
@@ -59,11 +59,21 @@
/**
* This method is used by a stage driver to pass data from one stage to the next.
- * @returns the feeder for the downstream stage, or {@link Feeder#VOID} if no downstream
+ * @return the feeder for the downstream stage, or {@link Feeder#VOID} if no downstream
* stage exists.
* @param stage The stage from which "downstream" will be determined. Ordinarily a Stage implementation
* will call this method with a reference to itself.
* @return The {@link Feeder} for the subsequent stage.
*/
public Feeder getDownstreamFeeder(Stage stage);
+
+ /**
+ * A StageContext implementation provides a global environment for the
+ * stages being run. This method allows objects in the global environment
+ * to be accessed by the stages running in this context.
+ *
+ * @return the object corresponding to the specified string key, or null
+ * if no such key exists.
+ */
+ public Object getEnv(String key);
}
Modified: jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/config/PipelineRuleSet.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/config/PipelineRuleSet.java?view=diff&rev=465019&r1=465018&r2=465019
==============================================================================
--- jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/config/PipelineRuleSet.java (original)
+++ jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/config/PipelineRuleSet.java Tue Oct 17 12:55:53 2006
@@ -94,6 +94,7 @@
*/
public class PipelineRuleSet extends RuleSetBase {
private static Class[] addBranchTypes = { String.class, Pipeline.class };
+ private static Class[] setEnvTypes = { String.class, Object.class };
private List<RuleSet> nestedRuleSets;
/**
@@ -128,12 +129,23 @@
digester.addSetProperties("pipeline");
digester.addRule("pipeline", new PipelineDriverFactoriesRule());
- // these rules are used to add subchains to the main pipeline
+ //these rules are used to add branches to the main pipeline
digester.addFactoryCreate("*/branch/pipeline", pipelineFactory);
digester.addRule("*/branch/pipeline", new CallMethodRule(1, "addBranch", 2, addBranchTypes));
digester.addCallParam("*/branch/pipeline", 0, "key");
digester.addCallParam("*/branch/pipeline", 1, 0);
digester.addRule("*/branch/pipeline", new PipelineDriverFactoriesRule());
+
+ //rules for adding values to the global pipeline environment
+ digester.addObjectCreate("*/pipeline/env/object", "java.lang.Object", "className");
+ digester.addSetProperties("*/pipeline/env/object");
+ digester.addRule("*/pipeline/env/object", new CallMethodRule(1, "setEnv", 2, setEnvTypes));
+ digester.addCallParam("*/pipeline/env/object", 0, "key");
+ digester.addCallParam("*/pipeline/env/object", 1, 0);
+
+ digester.addRule("*/pipeline/env/value", new CallMethodRule(0, "setEnv", 2, setEnvTypes));
+ digester.addCallParam("*/pipeline/env/value", 0, "key");
+ digester.addCallParam("*/pipeline/env/value", 1);
//this rule is intended to be used to add a StageEventListener to the pipeline.
digester.addObjectCreate("*/pipeline/listener", "org.apache.commons.pipeline.StageEventListener", "className");
Modified: jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/testFramework/TestStageContext.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/testFramework/TestStageContext.java?view=diff&rev=465019&r1=465018&r2=465019
==============================================================================
--- jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/testFramework/TestStageContext.java (original)
+++ jakarta/commons/sandbox/pipeline/trunk/src/main/java/org/apache/commons/pipeline/testFramework/TestStageContext.java Tue Oct 17 12:55:53 2006
@@ -33,6 +33,7 @@
public List<EventObject> raisedEvents = new ArrayList<EventObject>();
public Map<String, TestFeeder> branchFeeders = new HashMap<String,TestFeeder>();
public Map<Stage, Feeder> downstreamFeeders = new HashMap<Stage,Feeder>();
+ public Map<String, Object> env = new HashMap<String, Object>();
public void registerListener(StageEventListener listener) {
this.listeners.add(listener);
@@ -81,4 +82,15 @@
public Collection<StageEventListener> getRegisteredListeners() {
return this.listeners;
}
+
+ /**
+ * This method allows objects in the global environment
+ * to be accessed by the stages running in this context.
+ *
+ * @return the object corresponding to the specified string key, or null
+ * if no such key exists.
+ */
+ public Object getEnv(String key) {
+ return this.env.get(key);
+ }
}
Modified: jakarta/commons/sandbox/pipeline/trunk/src/test/java/org/apache/commons/pipeline/config/DigesterPipelineFactoryTest.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/pipeline/trunk/src/test/java/org/apache/commons/pipeline/config/DigesterPipelineFactoryTest.java?view=diff&rev=465019&r1=465018&r2=465019
==============================================================================
--- jakarta/commons/sandbox/pipeline/trunk/src/test/java/org/apache/commons/pipeline/config/DigesterPipelineFactoryTest.java (original)
+++ jakarta/commons/sandbox/pipeline/trunk/src/test/java/org/apache/commons/pipeline/config/DigesterPipelineFactoryTest.java Tue Oct 17 12:55:53 2006
@@ -38,28 +38,28 @@
super(testName);
}
- public static junit.framework.Test suite() {
+ public static junit.framework.Test suite() {
junit.framework.TestSuite suite = new junit.framework.TestSuite(DigesterPipelineFactoryTest.class);
return suite;
- }
+ }
public void testCreatePipeline() throws Exception {
Log log = LogFactory.getLog(this.getClass());
URL confURL = this.getClass().getClassLoader().getResource(testResources.getString(keyBase + ".configFile"));
PipelineFactory factory = new DigesterPipelineFactory(confURL);
-
- Pipeline pipeline = factory.createPipeline();
+
+ Pipeline pipeline = factory.createPipeline();
assertNotNull("Pipeline exists.", pipeline);
-
- int i = 0;
+
+ int i = 0;
for (Stage stage : pipeline.getStages()) {
assertNotNull("Stage is not null.", stage);
assertEquals(stage.getClass(), Class.forName(testResources.getString(keyBase + ".stage" + i + ".class")));
- i++;
- }
-
- pipeline.run();
+ i++;
+ }
+
+ pipeline.run();
boolean eventsRecorded = false;
assertTrue("Pipeline has at least one listener.", pipeline.getRegisteredListeners().size() > 0);
@@ -68,8 +68,11 @@
log.info(((ObjectProcessedEventCounter) l).getCounts().size() + " event sources found.");
assertTrue("Events were recorded by the ObjectProcessedEventListener.", ((ObjectProcessedEventCounter) l).getCounts().size() > 0);
eventsRecorded = true;
- }
+ }
}
assertTrue("Events were raised and properly recorded by the listener.", eventsRecorded);
+
+ assertNotNull(pipeline.getEnv("testDate"));
+ assertEquals("Hello, World!", pipeline.getEnv("testEnvVar"));
}
}
Modified: jakarta/commons/sandbox/pipeline/trunk/src/test/resources/TestResources.properties
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/pipeline/trunk/src/test/resources/TestResources.properties?view=diff&rev=465019&r1=465018&r2=465019
==============================================================================
--- jakarta/commons/sandbox/pipeline/trunk/src/test/resources/TestResources.properties (original)
+++ jakarta/commons/sandbox/pipeline/trunk/src/test/resources/TestResources.properties Tue Oct 17 12:55:53 2006
@@ -19,3 +19,4 @@
test.DigesterPipelineFactoryTest.stage0.class=org.apache.commons.pipeline.stage.FileFinderStage
test.DigesterPipelineFactoryTest.stage1.class=org.apache.commons.pipeline.stage.LogStage
test.DigesterPipelineFactoryTest.stage2.class=org.apache.commons.pipeline.stage.RaiseEventStage
+test.DigesterPipelineFactoryTest.stage3.class=org.apache.commons.pipeline.stage.RaiseKeyAvailableEventStage
Modified: jakarta/commons/sandbox/pipeline/trunk/src/test/resources/test_conf.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/pipeline/trunk/src/test/resources/test_conf.xml?view=diff&rev=465019&r1=465018&r2=465019
==============================================================================
--- jakarta/commons/sandbox/pipeline/trunk/src/test/resources/test_conf.xml (original)
+++ jakarta/commons/sandbox/pipeline/trunk/src/test/resources/test_conf.xml Tue Oct 17 12:55:53 2006
@@ -21,6 +21,10 @@
<pipeline>
<listener className="org.apache.commons.pipeline.listener.ObjectProcessedEventCounter"/>
<driverFactory className="org.apache.commons.pipeline.driver.DedicatedThreadStageDriverFactory" id="f1"/>
+ <env>
+ <object className="java.util.Date" key="testDate"/>
+ <value key="testEnvVar">Hello, World!</value>
+ </env>
<stage className="org.apache.commons.pipeline.stage.FileFinderStage" driverFactoryId="f1"
filePattern=".*\.java" />
@@ -28,6 +32,11 @@
<stage className="org.apache.commons.pipeline.stage.LogStage" driverFactoryId="f1" />
<stage className="org.apache.commons.pipeline.stage.RaiseEventStage" driverFactoryId="f1" />
+
+ <!--
+ <stage className="org.apache.commons.pipeline.stage.RaiseKeyAvailableEventStage" driverFactoryId="f1"
+ keyFactoryClass="org.apache.commons.pipeline.opt.KeyFactory$HashKeyFactory"/>
+ -->
<feed>
<value>src/main/java</value>
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org