You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2013/01/11 00:12:37 UTC

svn commit: r1431721 [15/19] - in /uima/sandbox/uimafit/trunk: uimafit-examples/src/main/java/org/apache/uima/fit/examples/experiment/pos/ uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/ uimafit-examples/src/main/java/org/apache...

Modified: uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AggregateBuilderTest.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AggregateBuilderTest.java?rev=1431721&r1=1431720&r2=1431721&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AggregateBuilderTest.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AggregateBuilderTest.java Thu Jan 10 23:12:33 2013
@@ -45,164 +45,163 @@ import org.junit.Test;
  */
 public class AggregateBuilderTest extends ComponentTestBase {
 
-	@Test
-	public void testAggregateBuilder() throws UIMAException, IOException {
-		tokenBuilder.buildTokens(jCas, "Anyone up for a game of Foosball?");
-
-		AggregateBuilder builder = new AggregateBuilder();
-		builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator1.class,
-				typeSystemDescription), ViewNames.PARENTHESES_VIEW, "A");
-		builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator2.class,
-				typeSystemDescription), ViewNames.SORTED_VIEW, "B",
-				ViewNames.SORTED_PARENTHESES_VIEW, "C", ViewNames.PARENTHESES_VIEW, "A");
-		builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator3.class,
-				typeSystemDescription), ViewNames.INITIAL_VIEW, "B");
-		AnalysisEngine aggregateEngine = builder.createAggregate();
-
-		aggregateEngine.process(jCas);
-
-		assertEquals("Anyone up for a game of Foosball?", jCas.getDocumentText());
-		assertEquals("Any(o)n(e) (u)p f(o)r (a) g(a)m(e) (o)f F(oo)sb(a)ll?", jCas.getView("A")
-				.getDocumentText());
-		assertEquals("?AFaaabeeffgllmnnoooooprsuy", jCas.getView("B").getDocumentText());
-		assertEquals("(((((((((())))))))))?AFaaabeeffgllmnnoooooprsuy", jCas.getView("C")
-				.getDocumentText());
-		assertEquals("yusrpooooonnmllgffeebaaaFA?", jCas.getView(ViewNames.REVERSE_VIEW)
-				.getDocumentText());
-
-		JCasFactory.loadJCas(jCas, "src/test/resources/data/docs/test.xmi");
-		AnalysisEngine ae1 = AnalysisEngineFactory.createPrimitive(NoOpAnnotator.class,
-				typeSystemDescription);
-
-		SimplePipeline.runPipeline(jCas, ae1, aggregateEngine);
-
-		AnalysisEngineDescription aggregateDescription = builder.createAggregateDescription();
-		builder = new AggregateBuilder();
-		builder.add(aggregateDescription);
-		builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator1.class,
-				typeSystemDescription), ViewNames.PARENTHESES_VIEW, "PARENS");
-		aggregateEngine = builder.createAggregate();
-
-		jCas.reset();
-
-		tokenBuilder.buildTokens(jCas, "Anyone up for a game of Foosball?");
-
-		aggregateEngine.process(jCas);
-
-		assertEquals("Anyone up for a game of Foosball?", jCas.getDocumentText());
-		assertEquals("Any(o)n(e) (u)p f(o)r (a) g(a)m(e) (o)f F(oo)sb(a)ll?", jCas.getView("A")
-				.getDocumentText());
-		assertEquals("?AFaaabeeffgllmnnoooooprsuy", jCas.getView("B").getDocumentText());
-		assertEquals("(((((((((())))))))))?AFaaabeeffgllmnnoooooprsuy", jCas.getView("C")
-				.getDocumentText());
-		assertEquals("yusrpooooonnmllgffeebaaaFA?", jCas.getView(ViewNames.REVERSE_VIEW)
-				.getDocumentText());
-		assertEquals("Any(o)n(e) (u)p f(o)r (a) g(a)m(e) (o)f F(oo)sb(a)ll?", jCas
-				.getView("PARENS").getDocumentText());
-
-	}
-
-	@Test
-	public void testAggregateBuilder2() throws UIMAException {
-		tokenBuilder.buildTokens(jCas, "'Verb' is a noun!?");
-
-		AggregateBuilder builder = new AggregateBuilder();
-		String componentName1 = builder.add(AnalysisEngineFactory.createPrimitiveDescription(
-				Annotator1.class, typeSystemDescription));
-		String componentName2 = builder.add(AnalysisEngineFactory.createPrimitiveDescription(
-				Annotator1.class, typeSystemDescription));
-		String componentName3 = builder.add(AnalysisEngineFactory.createPrimitiveDescription(
-				Annotator1.class, typeSystemDescription));
-
-		assertEquals("org.apache.uima.fit.factory.testAes.Annotator1", componentName1);
-		assertEquals("org.apache.uima.fit.factory.testAes.Annotator1.2", componentName2);
-		assertEquals("org.apache.uima.fit.factory.testAes.Annotator1.3", componentName3);
-
-		builder.addSofaMapping(componentName1, ViewNames.PARENTHESES_VIEW, "A");
-		builder.addSofaMapping(componentName2, ViewNames.PARENTHESES_VIEW, "B");
-		builder.addSofaMapping(componentName3, ViewNames.PARENTHESES_VIEW, "C");
-		AnalysisEngineDescription aggregateEngineDescription = builder.createAggregateDescription();
-
-		AnalysisEngine aggregateEngine = AnalysisEngineFactory
-				.createAggregate(aggregateEngineDescription);
-
-		aggregateEngine.process(jCas);
-
-		assertEquals("'Verb' is a noun!?", jCas.getDocumentText());
-		assertEquals("'V(e)rb' (i)s (a) n(ou)n!?", jCas.getView("A").getDocumentText());
-		assertEquals("'V(e)rb' (i)s (a) n(ou)n!?", jCas.getView("B").getDocumentText());
-		assertEquals("'V(e)rb' (i)s (a) n(ou)n!?", jCas.getView("C").getDocumentText());
-
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void testOddNumberOfViewNames() throws ResourceInitializationException {
-		AggregateBuilder builder = new AggregateBuilder();
-		builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator1.class,
-				typeSystemDescription), ViewNames.PARENTHESES_VIEW);
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void testDuplicateComponentNames() throws ResourceInitializationException {
-		AggregateBuilder builder = new AggregateBuilder();
-		builder.add("name", AnalysisEngineFactory.createPrimitiveDescription(Annotator1.class,
-				typeSystemDescription));
-		builder.add("name", AnalysisEngineFactory.createPrimitiveDescription(Annotator1.class,
-				typeSystemDescription));
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void testBadSofaMapping() {
-		AggregateBuilder builder = new AggregateBuilder();
-		builder.addSofaMapping("name", ViewNames.PARENTHESES_VIEW, "A");
-	}
-
-	@Test
-	public void testAggregateBuilderWithFlowController() throws UIMAException {
-		tokenBuilder.buildTokens(jCas, "An honest man can never surrender an honest doubt.");
-
-		AggregateBuilder builder = new AggregateBuilder();
-		builder.add(AnalysisEngineFactory.createPrimitiveDescription(FlowAE1.class,
-				typeSystemDescription));
-		builder.add(AnalysisEngineFactory.createPrimitiveDescription(FlowAE2.class,
-				typeSystemDescription));
-		builder.add(AnalysisEngineFactory.createPrimitiveDescription(FlowAE3.class,
-				typeSystemDescription));
-
-		FlowControllerDescription fcd = FlowControllerFactory
-				.createFlowControllerDescription(ReversableTestFlowController.class);
-		builder.setFlowControllerDescription(fcd);
-		AnalysisEngine aggregateEngine = builder.createAggregate();
-		aggregateEngine.process(jCas);
-
-		String text = "An honest man can never surrender an honest doubt.";
-		text = text.replaceAll("[aeiou]+", "($0)"); // this is what FlowAE1 does
-		text = FlowAE2.sort(text);
-		text = FlowAE3.reverse(text);
-
-		assertEquals(text, TypeSystemUtil.getAnalyzedText(jCas));
-		assertEquals("vuutttsssrrrrooonnnnnnnnmhheeeeeeddcbaaaA.)))))))))))))(((((((((((((",
-				TypeSystemUtil.getAnalyzedText(jCas));
-
-		fcd = FlowControllerFactory.createFlowControllerDescription(
-				ReversableTestFlowController.class,
-				ReversableTestFlowController.PARAM_REVERSE_ORDER, true);
-		builder.setFlowControllerDescription(fcd);
-		aggregateEngine = builder.createAggregate();
-
-		jCas.reset();
-		tokenBuilder.buildTokens(jCas, "An honest man can never surrender an honest doubt.");
-		aggregateEngine.process(jCas);
-
-		text = "An honest man can never surrender an honest doubt.";
-		text = FlowAE3.reverse(text);
-		text = FlowAE2.sort(text);
-		text = text.replaceAll("[aeiou]+", "($0)"); // this is what FlowAE1 does
-
-		assertEquals(text, TypeSystemUtil.getAnalyzedText(jCas));
-		assertEquals(".A(aaa)bcdd(eeeeee)hhmnnnnnnnn(ooo)rrrrsssttt(uu)v",
-				TypeSystemUtil.getAnalyzedText(jCas));
+  @Test
+  public void testAggregateBuilder() throws UIMAException, IOException {
+    tokenBuilder.buildTokens(jCas, "Anyone up for a game of Foosball?");
+
+    AggregateBuilder builder = new AggregateBuilder();
+    builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator1.class,
+            typeSystemDescription), ViewNames.PARENTHESES_VIEW, "A");
+    builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator2.class,
+            typeSystemDescription), ViewNames.SORTED_VIEW, "B", ViewNames.SORTED_PARENTHESES_VIEW,
+            "C", ViewNames.PARENTHESES_VIEW, "A");
+    builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator3.class,
+            typeSystemDescription), ViewNames.INITIAL_VIEW, "B");
+    AnalysisEngine aggregateEngine = builder.createAggregate();
+
+    aggregateEngine.process(jCas);
+
+    assertEquals("Anyone up for a game of Foosball?", jCas.getDocumentText());
+    assertEquals("Any(o)n(e) (u)p f(o)r (a) g(a)m(e) (o)f F(oo)sb(a)ll?", jCas.getView("A")
+            .getDocumentText());
+    assertEquals("?AFaaabeeffgllmnnoooooprsuy", jCas.getView("B").getDocumentText());
+    assertEquals("(((((((((())))))))))?AFaaabeeffgllmnnoooooprsuy", jCas.getView("C")
+            .getDocumentText());
+    assertEquals("yusrpooooonnmllgffeebaaaFA?", jCas.getView(ViewNames.REVERSE_VIEW)
+            .getDocumentText());
+
+    JCasFactory.loadJCas(jCas, "src/test/resources/data/docs/test.xmi");
+    AnalysisEngine ae1 = AnalysisEngineFactory.createPrimitive(NoOpAnnotator.class,
+            typeSystemDescription);
+
+    SimplePipeline.runPipeline(jCas, ae1, aggregateEngine);
+
+    AnalysisEngineDescription aggregateDescription = builder.createAggregateDescription();
+    builder = new AggregateBuilder();
+    builder.add(aggregateDescription);
+    builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator1.class,
+            typeSystemDescription), ViewNames.PARENTHESES_VIEW, "PARENS");
+    aggregateEngine = builder.createAggregate();
+
+    jCas.reset();
+
+    tokenBuilder.buildTokens(jCas, "Anyone up for a game of Foosball?");
+
+    aggregateEngine.process(jCas);
+
+    assertEquals("Anyone up for a game of Foosball?", jCas.getDocumentText());
+    assertEquals("Any(o)n(e) (u)p f(o)r (a) g(a)m(e) (o)f F(oo)sb(a)ll?", jCas.getView("A")
+            .getDocumentText());
+    assertEquals("?AFaaabeeffgllmnnoooooprsuy", jCas.getView("B").getDocumentText());
+    assertEquals("(((((((((())))))))))?AFaaabeeffgllmnnoooooprsuy", jCas.getView("C")
+            .getDocumentText());
+    assertEquals("yusrpooooonnmllgffeebaaaFA?", jCas.getView(ViewNames.REVERSE_VIEW)
+            .getDocumentText());
+    assertEquals("Any(o)n(e) (u)p f(o)r (a) g(a)m(e) (o)f F(oo)sb(a)ll?", jCas.getView("PARENS")
+            .getDocumentText());
+
+  }
+
+  @Test
+  public void testAggregateBuilder2() throws UIMAException {
+    tokenBuilder.buildTokens(jCas, "'Verb' is a noun!?");
+
+    AggregateBuilder builder = new AggregateBuilder();
+    String componentName1 = builder.add(AnalysisEngineFactory.createPrimitiveDescription(
+            Annotator1.class, typeSystemDescription));
+    String componentName2 = builder.add(AnalysisEngineFactory.createPrimitiveDescription(
+            Annotator1.class, typeSystemDescription));
+    String componentName3 = builder.add(AnalysisEngineFactory.createPrimitiveDescription(
+            Annotator1.class, typeSystemDescription));
+
+    assertEquals("org.apache.uima.fit.factory.testAes.Annotator1", componentName1);
+    assertEquals("org.apache.uima.fit.factory.testAes.Annotator1.2", componentName2);
+    assertEquals("org.apache.uima.fit.factory.testAes.Annotator1.3", componentName3);
+
+    builder.addSofaMapping(componentName1, ViewNames.PARENTHESES_VIEW, "A");
+    builder.addSofaMapping(componentName2, ViewNames.PARENTHESES_VIEW, "B");
+    builder.addSofaMapping(componentName3, ViewNames.PARENTHESES_VIEW, "C");
+    AnalysisEngineDescription aggregateEngineDescription = builder.createAggregateDescription();
+
+    AnalysisEngine aggregateEngine = AnalysisEngineFactory
+            .createAggregate(aggregateEngineDescription);
+
+    aggregateEngine.process(jCas);
+
+    assertEquals("'Verb' is a noun!?", jCas.getDocumentText());
+    assertEquals("'V(e)rb' (i)s (a) n(ou)n!?", jCas.getView("A").getDocumentText());
+    assertEquals("'V(e)rb' (i)s (a) n(ou)n!?", jCas.getView("B").getDocumentText());
+    assertEquals("'V(e)rb' (i)s (a) n(ou)n!?", jCas.getView("C").getDocumentText());
+
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testOddNumberOfViewNames() throws ResourceInitializationException {
+    AggregateBuilder builder = new AggregateBuilder();
+    builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator1.class,
+            typeSystemDescription), ViewNames.PARENTHESES_VIEW);
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testDuplicateComponentNames() throws ResourceInitializationException {
+    AggregateBuilder builder = new AggregateBuilder();
+    builder.add("name", AnalysisEngineFactory.createPrimitiveDescription(Annotator1.class,
+            typeSystemDescription));
+    builder.add("name", AnalysisEngineFactory.createPrimitiveDescription(Annotator1.class,
+            typeSystemDescription));
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testBadSofaMapping() {
+    AggregateBuilder builder = new AggregateBuilder();
+    builder.addSofaMapping("name", ViewNames.PARENTHESES_VIEW, "A");
+  }
+
+  @Test
+  public void testAggregateBuilderWithFlowController() throws UIMAException {
+    tokenBuilder.buildTokens(jCas, "An honest man can never surrender an honest doubt.");
+
+    AggregateBuilder builder = new AggregateBuilder();
+    builder.add(AnalysisEngineFactory.createPrimitiveDescription(FlowAE1.class,
+            typeSystemDescription));
+    builder.add(AnalysisEngineFactory.createPrimitiveDescription(FlowAE2.class,
+            typeSystemDescription));
+    builder.add(AnalysisEngineFactory.createPrimitiveDescription(FlowAE3.class,
+            typeSystemDescription));
+
+    FlowControllerDescription fcd = FlowControllerFactory
+            .createFlowControllerDescription(ReversableTestFlowController.class);
+    builder.setFlowControllerDescription(fcd);
+    AnalysisEngine aggregateEngine = builder.createAggregate();
+    aggregateEngine.process(jCas);
+
+    String text = "An honest man can never surrender an honest doubt.";
+    text = text.replaceAll("[aeiou]+", "($0)"); // this is what FlowAE1 does
+    text = FlowAE2.sort(text);
+    text = FlowAE3.reverse(text);
+
+    assertEquals(text, TypeSystemUtil.getAnalyzedText(jCas));
+    assertEquals("vuutttsssrrrrooonnnnnnnnmhheeeeeeddcbaaaA.)))))))))))))(((((((((((((",
+            TypeSystemUtil.getAnalyzedText(jCas));
+
+    fcd = FlowControllerFactory.createFlowControllerDescription(ReversableTestFlowController.class,
+            ReversableTestFlowController.PARAM_REVERSE_ORDER, true);
+    builder.setFlowControllerDescription(fcd);
+    aggregateEngine = builder.createAggregate();
+
+    jCas.reset();
+    tokenBuilder.buildTokens(jCas, "An honest man can never surrender an honest doubt.");
+    aggregateEngine.process(jCas);
+
+    text = "An honest man can never surrender an honest doubt.";
+    text = FlowAE3.reverse(text);
+    text = FlowAE2.sort(text);
+    text = text.replaceAll("[aeiou]+", "($0)"); // this is what FlowAE1 does
+
+    assertEquals(text, TypeSystemUtil.getAnalyzedText(jCas));
+    assertEquals(".A(aaa)bcdd(eeeeee)hhmnnnnnnnn(ooo)rrrrsssttt(uu)v",
+            TypeSystemUtil.getAnalyzedText(jCas));
 
-	}
+  }
 
 }

Modified: uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AggregateWithReaderTest.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AggregateWithReaderTest.java?rev=1431721&r1=1431720&r2=1431721&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AggregateWithReaderTest.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AggregateWithReaderTest.java Thu Jan 10 23:12:33 2013
@@ -39,158 +39,160 @@ import org.junit.Test;
 /**
  */
 public class AggregateWithReaderTest {
-	
-	/**
-	 * Demo of running a collection reader as part of an aggregate engine. This allows to run
-	 * a pipeline an access the output CASes directly - no need to write the data to files.
-	 */
-	@Test
-	public void demoAggregateWithReader() throws UIMAException {
-		ResourceSpecifierFactory factory = UIMAFramework.getResourceSpecifierFactory();
-
-		CollectionReaderDescription reader = factory.createCollectionReaderDescription();
-		reader.getMetaData().setName("reader");
-		reader.setImplementationName(SimpleReader.class.getName());
-
-		AnalysisEngineDescription analyzer = factory.createAnalysisEngineDescription();
-		analyzer.getMetaData().setName("analyzer");
-		analyzer.setPrimitive(true);
-		analyzer.setImplementationName(SimpleAnalyzer.class.getName());
-
-		FixedFlow flow = factory.createFixedFlow();
-		flow.setFixedFlow(new String[] { "reader", "analyzer" });
-
-		AnalysisEngineDescription aggregate = factory.createAnalysisEngineDescription();
-		aggregate.getMetaData().setName("aggregate");
-		aggregate.getAnalysisEngineMetaData().setFlowConstraints(flow);
-		aggregate.getAnalysisEngineMetaData().getOperationalProperties().setOutputsNewCASes(true);
-		aggregate.getAnalysisEngineMetaData().getOperationalProperties()
-				.setMultipleDeploymentAllowed(false);
-		aggregate.setPrimitive(false);
-		aggregate.getDelegateAnalysisEngineSpecifiersWithImports().put("reader", reader);
-		aggregate.getDelegateAnalysisEngineSpecifiersWithImports().put("analyzer", analyzer);
-
-		AnalysisEngine pipeline = UIMAFramework.produceAnalysisEngine(aggregate);
-		CasIterator iterator = pipeline.processAndOutputNewCASes(pipeline.newCAS());
-		while (iterator.hasNext()) {
-			CAS cas = iterator.next();
-			System.out.printf("[%s] is [%s]%n", cas.getDocumentText(), cas.getDocumentLanguage());
-		}
-	}
-
-	/**
-	 * Demo of disguising a reader as a CAS multiplier. This works because internally, UIMA wraps
-	 * the reader in a CollectionReaderAdapter. This nice thing about this is, that in principle
-	 * it would be possible to define sofa mappings. However, UIMA-2419 prevents this.
-	 */
-	@Test
-	public void demoAggregateWithDisguisedReader() throws UIMAException {
-		ResourceSpecifierFactory factory = UIMAFramework.getResourceSpecifierFactory();
-		
-		AnalysisEngineDescription reader = factory.createAnalysisEngineDescription();
-		reader.getMetaData().setName("reader");
-		reader.setPrimitive(true);
-		reader.setImplementationName(SimpleReader.class.getName());
-		reader.getAnalysisEngineMetaData().getOperationalProperties().setOutputsNewCASes(true);
-	
-		AnalysisEngineDescription analyzer = factory.createAnalysisEngineDescription();
-		analyzer.getMetaData().setName("analyzer");
-		analyzer.setPrimitive(true);
-		analyzer.setImplementationName(SimpleAnalyzer.class.getName());
-	
-		FixedFlow flow = factory.createFixedFlow();
-		flow.setFixedFlow(new String[] { "reader", "analyzer" });
-	
-		AnalysisEngineDescription aggregate = factory.createAnalysisEngineDescription();
-		aggregate.getMetaData().setName("aggregate");
-		aggregate.setPrimitive(false);
-		aggregate.getAnalysisEngineMetaData().setFlowConstraints(flow);
-		aggregate.getAnalysisEngineMetaData().getOperationalProperties().setOutputsNewCASes(true);
-		aggregate.getAnalysisEngineMetaData().getOperationalProperties()
-				.setMultipleDeploymentAllowed(false);
-		aggregate.getDelegateAnalysisEngineSpecifiersWithImports().put("reader", reader);
-		aggregate.getDelegateAnalysisEngineSpecifiersWithImports().put("analyzer", analyzer);
-	
-		AnalysisEngine pipeline = UIMAFramework.produceAnalysisEngine(aggregate);
-		CasIterator iterator = pipeline.processAndOutputNewCASes(pipeline.newCAS());
-		while (iterator.hasNext()) {
-			CAS cas = iterator.next();
-			System.out.printf("[%s] is [%s]%n", cas.getDocumentText(), cas.getDocumentLanguage());
-		}
-	}
-
-//	@Test
-//	public void testAggregateBuilderWithReaderAndSofaMapping() throws UIMAException {
-//		CollectionReaderDescription reader = CollectionReaderFactory.createDescription(TestReader.class);
-//		
-//		AnalysisEngineDescription readerAed = UIMAFramework.getResourceSpecifierFactory().createAnalysisEngineDescription();
-//		readerAed.setAnnotatorImplementationName(reader.getImplementationName());
-//		readerAed.setExternalResourceDependencies(reader.getExternalResourceDependencies());
-//		readerAed.setFrameworkImplementation(reader.getFrameworkImplementation());
-//		readerAed.setImplementationName(reader.getImplementationName());
-//		readerAed.setMetaData(reader.getMetaData());
-////		readerAed.getAnalysisEngineMetaData().getOperationalProperties().setModifiesCas(true);
-////		readerAed.getAnalysisEngineMetaData().getOperationalProperties().setOutputsNewCASes(true);
-//		readerAed.setPrimitive(true);
-//		readerAed.setResourceManagerConfiguration(reader.getResourceManagerConfiguration());
-//		readerAed.setSourceUrl(reader.getSourceUrl());
-//		
-//		AggregateBuilder builder = new AggregateBuilder();
-//		builder.add(readerAed, 
-//				ViewNames.INITIAL_VIEW, "A");
-//		builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator3.class), 
-//				ViewNames.INITIAL_VIEW, "A",
-//				ViewNames.REVERSE_VIEW, "B");
-//		
-//		builder.setFlowControllerDescription(createFlowControllerDescription(FixedFlowController.class,
-//				FixedFlowController.PARAM_ACTION_AFTER_CAS_MULTIPLIER, "drop"));
-//		
-//		AnalysisEngineDescription aggregateEngineDesc = builder.createAggregateDescription();
-//		aggregateEngineDesc.getAnalysisEngineMetaData().getOperationalProperties().setOutputsNewCASes(true);
-//
-//		AnalysisEngine aggregateEngine = createAggregate(aggregateEngineDesc);
-//		
-//		jCas.reset();
-//		JCasIterator ji = aggregateEngine.processAndOutputNewCASes(jCas);
-//		while (ji.hasNext()) {
-//			JCas jc = ji.next();
-//			FSIterator<SofaFS> i = jc.getSofaIterator();
-//			while (i.hasNext()) {
-//				SofaFS s = i.next();
-//				System.out.printf("%s - %s%n", s.getSofaID(), jc.getView(s.getSofaID()).getDocumentText());
-//			}
-//
-//			assertEquals("Anyone up for a game of Foosball?", jc.getView("A").getDocumentText());
-//			assertEquals("?llabsooF fo emag a rof pu enoynA", jc.getView("B").getDocumentText());
-//		}
-//	}
-	
-	public static class SimpleReader extends CollectionReader_ImplBase {
-		private boolean done = false;
-
-		public void getNext(CAS aCAS) throws IOException, CollectionException {
-			aCAS.setDocumentText("Anyone up for a game of Foosball?");
-			done = true;
-		}
-
-		public boolean hasNext() throws IOException, CollectionException {
-			return !done;
-		}
-
-		public Progress[] getProgress() {
-			return new Progress[0];
-		}
-
-		public void close() throws IOException {
-			// Nothing to do
-		}
-	}
-
-	public static class SimpleAnalyzer extends CasAnnotator_ImplBase {
-
-		@Override
-		public void process(CAS aCas) throws AnalysisEngineProcessException {
-			aCas.setDocumentLanguage("en");
-		}
-	}
+
+  /**
+   * Demo of running a collection reader as part of an aggregate engine. This allows to run a
+   * pipeline an access the output CASes directly - no need to write the data to files.
+   */
+  @Test
+  public void demoAggregateWithReader() throws UIMAException {
+    ResourceSpecifierFactory factory = UIMAFramework.getResourceSpecifierFactory();
+
+    CollectionReaderDescription reader = factory.createCollectionReaderDescription();
+    reader.getMetaData().setName("reader");
+    reader.setImplementationName(SimpleReader.class.getName());
+
+    AnalysisEngineDescription analyzer = factory.createAnalysisEngineDescription();
+    analyzer.getMetaData().setName("analyzer");
+    analyzer.setPrimitive(true);
+    analyzer.setImplementationName(SimpleAnalyzer.class.getName());
+
+    FixedFlow flow = factory.createFixedFlow();
+    flow.setFixedFlow(new String[] { "reader", "analyzer" });
+
+    AnalysisEngineDescription aggregate = factory.createAnalysisEngineDescription();
+    aggregate.getMetaData().setName("aggregate");
+    aggregate.getAnalysisEngineMetaData().setFlowConstraints(flow);
+    aggregate.getAnalysisEngineMetaData().getOperationalProperties().setOutputsNewCASes(true);
+    aggregate.getAnalysisEngineMetaData().getOperationalProperties()
+            .setMultipleDeploymentAllowed(false);
+    aggregate.setPrimitive(false);
+    aggregate.getDelegateAnalysisEngineSpecifiersWithImports().put("reader", reader);
+    aggregate.getDelegateAnalysisEngineSpecifiersWithImports().put("analyzer", analyzer);
+
+    AnalysisEngine pipeline = UIMAFramework.produceAnalysisEngine(aggregate);
+    CasIterator iterator = pipeline.processAndOutputNewCASes(pipeline.newCAS());
+    while (iterator.hasNext()) {
+      CAS cas = iterator.next();
+      System.out.printf("[%s] is [%s]%n", cas.getDocumentText(), cas.getDocumentLanguage());
+    }
+  }
+
+  /**
+   * Demo of disguising a reader as a CAS multiplier. This works because internally, UIMA wraps the
+   * reader in a CollectionReaderAdapter. This nice thing about this is, that in principle it would
+   * be possible to define sofa mappings. However, UIMA-2419 prevents this.
+   */
+  @Test
+  public void demoAggregateWithDisguisedReader() throws UIMAException {
+    ResourceSpecifierFactory factory = UIMAFramework.getResourceSpecifierFactory();
+
+    AnalysisEngineDescription reader = factory.createAnalysisEngineDescription();
+    reader.getMetaData().setName("reader");
+    reader.setPrimitive(true);
+    reader.setImplementationName(SimpleReader.class.getName());
+    reader.getAnalysisEngineMetaData().getOperationalProperties().setOutputsNewCASes(true);
+
+    AnalysisEngineDescription analyzer = factory.createAnalysisEngineDescription();
+    analyzer.getMetaData().setName("analyzer");
+    analyzer.setPrimitive(true);
+    analyzer.setImplementationName(SimpleAnalyzer.class.getName());
+
+    FixedFlow flow = factory.createFixedFlow();
+    flow.setFixedFlow(new String[] { "reader", "analyzer" });
+
+    AnalysisEngineDescription aggregate = factory.createAnalysisEngineDescription();
+    aggregate.getMetaData().setName("aggregate");
+    aggregate.setPrimitive(false);
+    aggregate.getAnalysisEngineMetaData().setFlowConstraints(flow);
+    aggregate.getAnalysisEngineMetaData().getOperationalProperties().setOutputsNewCASes(true);
+    aggregate.getAnalysisEngineMetaData().getOperationalProperties()
+            .setMultipleDeploymentAllowed(false);
+    aggregate.getDelegateAnalysisEngineSpecifiersWithImports().put("reader", reader);
+    aggregate.getDelegateAnalysisEngineSpecifiersWithImports().put("analyzer", analyzer);
+
+    AnalysisEngine pipeline = UIMAFramework.produceAnalysisEngine(aggregate);
+    CasIterator iterator = pipeline.processAndOutputNewCASes(pipeline.newCAS());
+    while (iterator.hasNext()) {
+      CAS cas = iterator.next();
+      System.out.printf("[%s] is [%s]%n", cas.getDocumentText(), cas.getDocumentLanguage());
+    }
+  }
+
+  // @Test
+  // public void testAggregateBuilderWithReaderAndSofaMapping() throws UIMAException {
+  // CollectionReaderDescription reader =
+  // CollectionReaderFactory.createDescription(TestReader.class);
+  //
+  // AnalysisEngineDescription readerAed =
+  // UIMAFramework.getResourceSpecifierFactory().createAnalysisEngineDescription();
+  // readerAed.setAnnotatorImplementationName(reader.getImplementationName());
+  // readerAed.setExternalResourceDependencies(reader.getExternalResourceDependencies());
+  // readerAed.setFrameworkImplementation(reader.getFrameworkImplementation());
+  // readerAed.setImplementationName(reader.getImplementationName());
+  // readerAed.setMetaData(reader.getMetaData());
+  // // readerAed.getAnalysisEngineMetaData().getOperationalProperties().setModifiesCas(true);
+  // // readerAed.getAnalysisEngineMetaData().getOperationalProperties().setOutputsNewCASes(true);
+  // readerAed.setPrimitive(true);
+  // readerAed.setResourceManagerConfiguration(reader.getResourceManagerConfiguration());
+  // readerAed.setSourceUrl(reader.getSourceUrl());
+  //
+  // AggregateBuilder builder = new AggregateBuilder();
+  // builder.add(readerAed,
+  // ViewNames.INITIAL_VIEW, "A");
+  // builder.add(AnalysisEngineFactory.createPrimitiveDescription(Annotator3.class),
+  // ViewNames.INITIAL_VIEW, "A",
+  // ViewNames.REVERSE_VIEW, "B");
+  //
+  // builder.setFlowControllerDescription(createFlowControllerDescription(FixedFlowController.class,
+  // FixedFlowController.PARAM_ACTION_AFTER_CAS_MULTIPLIER, "drop"));
+  //
+  // AnalysisEngineDescription aggregateEngineDesc = builder.createAggregateDescription();
+  // aggregateEngineDesc.getAnalysisEngineMetaData().getOperationalProperties().setOutputsNewCASes(true);
+  //
+  // AnalysisEngine aggregateEngine = createAggregate(aggregateEngineDesc);
+  //
+  // jCas.reset();
+  // JCasIterator ji = aggregateEngine.processAndOutputNewCASes(jCas);
+  // while (ji.hasNext()) {
+  // JCas jc = ji.next();
+  // FSIterator<SofaFS> i = jc.getSofaIterator();
+  // while (i.hasNext()) {
+  // SofaFS s = i.next();
+  // System.out.printf("%s - %s%n", s.getSofaID(), jc.getView(s.getSofaID()).getDocumentText());
+  // }
+  //
+  // assertEquals("Anyone up for a game of Foosball?", jc.getView("A").getDocumentText());
+  // assertEquals("?llabsooF fo emag a rof pu enoynA", jc.getView("B").getDocumentText());
+  // }
+  // }
+
+  public static class SimpleReader extends CollectionReader_ImplBase {
+    private boolean done = false;
+
+    public void getNext(CAS aCAS) throws IOException, CollectionException {
+      aCAS.setDocumentText("Anyone up for a game of Foosball?");
+      done = true;
+    }
+
+    public boolean hasNext() throws IOException, CollectionException {
+      return !done;
+    }
+
+    public Progress[] getProgress() {
+      return new Progress[0];
+    }
+
+    public void close() throws IOException {
+      // Nothing to do
+    }
+  }
+
+  public static class SimpleAnalyzer extends CasAnnotator_ImplBase {
+
+    @Override
+    public void process(CAS aCas) throws AnalysisEngineProcessException {
+      aCas.setDocumentLanguage("en");
+    }
+  }
 }

Modified: uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AnalysisEngineFactoryExternalResourceTest.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AnalysisEngineFactoryExternalResourceTest.java?rev=1431721&r1=1431720&r2=1431721&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AnalysisEngineFactoryExternalResourceTest.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/AnalysisEngineFactoryExternalResourceTest.java Thu Jan 10 23:12:33 2013
@@ -17,7 +17,6 @@
  * under the License.
  */
 
-
 package org.apache.uima.fit.factory;
 
 import static org.apache.uima.fit.factory.AnalysisEngineFactory.createAggregate;
@@ -58,348 +57,350 @@ import org.xml.sax.SAXException;
 /**
  */
 public class AnalysisEngineFactoryExternalResourceTest {
-	/**
-	 * Test simple injection.
-	 */
-	@Test
-	public void resource_testInjection() throws Exception {
-		AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithResource.class,
-				TestAnalysisEngineWithResource.PARAM_RESOURCE,
-				createExternalResourceDescription(TestExternalResource.class,
-						TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE)));
-		
-		AnalysisEngine ae = createPrimitive(aeDesc);
-		ae.process(ae.newCAS());
-	}
-
-	/**
-	 * Test shared simple injection.
-	 */
-	@Test
-	public void resource_testSharedInjection() throws Exception {
-		ExternalResourceDescription resDesc = createExternalResourceDescription(
-				TestExternalResource.class,
-				TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE);
-		
-		AnalysisEngineDescription aeDesc1 = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithResource.class,
-				TestAnalysisEngineWithResource.PARAM_RESOURCE, resDesc));
-
-		AnalysisEngineDescription aeDesc2 = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithResource.class,
-				TestAnalysisEngineWithResource.PARAM_RESOURCE, resDesc));
-
-		dumpResourceConfiguration(aeDesc1);
-		dumpResourceConfiguration(aeDesc2);
-		
-		AnalysisEngine ae1 = createPrimitive(aeDesc1);
-		AnalysisEngine ae2 = createPrimitive(aeDesc2);
-		ae1.process(ae1.newCAS());
-		ae2.process(ae2.newCAS());
-		
-		AnalysisEngine ae3 = createAggregate(createAggregateDescription(aeDesc1, aeDesc2));
-		ae3.process(ae3.newCAS());
-	}
-
-	/**
-	 * Test simple nesting.
-	 */
-	@Test
-	public void resource_testSimpleNesting() throws Exception {
-		AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithResource.class,
-				TestAnalysisEngineWithResource.PARAM_RESOURCE,
-				createExternalResourceDescription(TestExternalResource2.class,
-						TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE,
-						TestExternalResource2.PARAM_RESOURCE, createExternalResourceDescription(
-								TestExternalResource.class,
-								TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE))));
-
-		AnalysisEngine ae = createPrimitive(aeDesc);
-		ae.process(ae.newCAS());
-	}
-
-	/**
-	 * Test simple nesting.
-	 */
-	@Test
-	public void resource_testSharedSimpleNesting() throws Exception {
-		ExternalResourceDescription resDesc = createExternalResourceDescription(
-				TestExternalResource2.class,
-				TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE,
-				TestExternalResource2.PARAM_RESOURCE, createExternalResourceDescription(
-						TestExternalResource.class,
-						TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE));	
-		
-		AnalysisEngineDescription aeDesc1 = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithResource.class,
-				TestAnalysisEngineWithResource.PARAM_RESOURCE, resDesc));
-
-		dumpResourceConfiguration(aeDesc1);
-		
-		AnalysisEngineDescription aeDesc2 = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithResource.class,
-				TestAnalysisEngineWithResource.PARAM_RESOURCE, resDesc));
-
-		dumpResourceConfiguration(aeDesc1);
-		dumpResourceConfiguration(aeDesc2);
-		
-		AnalysisEngine ae1 = createPrimitive(aeDesc1);
-		AnalysisEngine ae2 = createPrimitive(aeDesc2);
-		ae1.process(ae1.newCAS());
-		ae2.process(ae2.newCAS());
-		
-		AnalysisEngine ae3 = createAggregate(createAggregateDescription(aeDesc1, aeDesc2));
-		ae3.process(ae3.newCAS());
-	}
-
-	/**
-	 * Test deeper nesting level.
-	 */
-	@Test
-	public void resource_testDeeperNesting() throws Exception {
-		ExternalResourceDescription resDesc2 = createExternalResourceDescription(
-				TestExternalResource.class,
-				TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE);
-
-		ExternalResourceDescription resDesc = createExternalResourceDescription(
-				TestExternalResource2.class,
-				TestExternalResource2.PARAM_RESOURCE, resDesc2,
-				TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE);
-
-		AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithResource.class,
-				TestAnalysisEngineWithResource.PARAM_RESOURCE,
-				createExternalResourceDescription(TestExternalResource2.class,
-						TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE,
-						TestExternalResource2.PARAM_RESOURCE, resDesc)));
-
-		dumpResourceConfiguration(aeDesc);
-
-		AnalysisEngine ae = createPrimitive(aeDesc);
-		ae.process(ae.newCAS());
-	}
-
-	/**
-	 * Test self-injection
-	 */
-	@Test
-	public void resource_testSelfInjection() throws Exception {
-		ExternalResourceDescription resDesc = createExternalResourceDescription(
-				TestExternalResource2.class,
-				TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE);
-		bindExternalResource(resDesc, TestExternalResource2.PARAM_RESOURCE, resDesc);
-
-		AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithResource.class,
-				TestAnalysisEngineWithResource.PARAM_RESOURCE, resDesc));
-		
-		dumpResourceConfiguration(aeDesc);
-		
-		AnalysisEngine ae = createPrimitive(aeDesc);
-		ae.process(ae.newCAS());
-	}
-
-	/**
-	 * Test self-injection
-	 */
-	@Test
-	public void resource_testDoubleSelfInjection() throws Exception {
-		ExternalResourceDescription resDesc = createExternalResourceDescription(
-				TestExternalResource2.class,
-				TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE);
-		bindExternalResource(resDesc, TestExternalResource2.PARAM_RESOURCE, resDesc);
-
-		AnalysisEngineDescription aeDesc1 = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithResource.class,
-				TestAnalysisEngineWithResource.PARAM_RESOURCE, resDesc));
-
-		AnalysisEngineDescription aeDesc2 = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithResource.class,
-				TestAnalysisEngineWithResource.PARAM_RESOURCE, resDesc));
-
-		dumpResourceConfiguration(aeDesc1);
-		dumpResourceConfiguration(aeDesc2);
-		
-		AnalysisEngine ae1 = createPrimitive(aeDesc1);
-		AnalysisEngine ae2 = createPrimitive(aeDesc2);
-		ae1.process(ae1.newCAS());
-		ae2.process(ae2.newCAS());
-		
-		AnalysisEngine ae3 = createAggregate(createAggregateDescription(aeDesc1, aeDesc2));
-		ae3.process(ae3.newCAS());
-	}
-	
-	/**
-	 * Test simple injection.
-	 */
-	@Test
-	public void sharedObject_testInjection() throws Exception {
-		AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithSharedResourceObject.class,
-				TestAnalysisEngineWithSharedResourceObject.PARAM_RESOURCE,
-				createExternalResourceDescription(TestSharedResourceObject.class, "http://dumm.my",
-						TestSharedResourceObject.PARAM_VALUE, TestSharedResourceObject.EXPECTED_VALUE)));
-		
-		AnalysisEngine ae = createPrimitive(aeDesc);
-		ae.process(ae.newCAS());
-	}
-
-	/**
-	 * Test shared simple injection.
-	 */
-	@Test
-	public void sharedObject_testSharedInjection() throws Exception {
-		ExternalResourceDescription resDesc = createExternalResourceDescription(
-				TestSharedResourceObject.class, "http://dumm.my",
-				TestSharedResourceObject.PARAM_VALUE, TestSharedResourceObject.EXPECTED_VALUE);
-		
-		AnalysisEngineDescription aeDesc1 = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithSharedResourceObject.class,
-				TestAnalysisEngineWithSharedResourceObject.PARAM_RESOURCE, resDesc));
-
-		AnalysisEngineDescription aeDesc2 = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithSharedResourceObject.class,
-				TestAnalysisEngineWithSharedResourceObject.PARAM_RESOURCE, resDesc));
-
-		dumpResourceConfiguration(aeDesc1);
-		dumpResourceConfiguration(aeDesc2);
-		
-		AnalysisEngine ae1 = createPrimitive(aeDesc1);
-		AnalysisEngine ae2 = createPrimitive(aeDesc2);
-		ae1.process(ae1.newCAS());
-		ae2.process(ae2.newCAS());
-		
-		AnalysisEngine ae3 = createAggregate(createAggregateDescription(aeDesc1, aeDesc2));
-		ae3.process(ae3.newCAS());
-	}
-
-	/**
-	 * Test self-injection
-	 */
-	@Test
-	public void sharedObject_testSelfInjection() throws Exception {
-		ExternalResourceDescription resDesc = createExternalResourceDescription(
-				TestSharedResourceObject2.class, "http://dumm.my",
-				TestSharedResourceObject.PARAM_VALUE, TestSharedResourceObject.EXPECTED_VALUE);
-		bindExternalResource(resDesc, TestSharedResourceObject2.PARAM_RESOURCE, resDesc);
-
-		AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
-				TestAnalysisEngineWithSharedResourceObject.class,
-				TestAnalysisEngineWithSharedResourceObject.PARAM_RESOURCE, resDesc));
-		
-		dumpResourceConfiguration(aeDesc);
-		
-		AnalysisEngine ae = createPrimitive(aeDesc);
-		ae.process(ae.newCAS());
-	}
-
-	public static class TestExternalResource2 extends TestExternalResource {
-		public final static String PARAM_RESOURCE = "resource2";
-		@ExternalResource(key = PARAM_RESOURCE)
-		private TestExternalResource resource;
-
-		@Override
-		public void afterResourcesInitialized() {
-			System.out.println(getClass().getSimpleName()+".afterResourcesInitialized()");
-			// Ensure the External Resource is bound
-			assertNotNull(resource);
-			if (this != resource) {
-				resource.assertConfiguredOk();
-			}
-			assertConfiguredOk();
-		}
-	}
-
-	public static class TestSharedResourceObject2 extends TestSharedResourceObject implements
-			ExternalResourceAware {
-		public final static String PARAM_RESOURCE = "resource2";
-		@ExternalResource(key = PARAM_RESOURCE)
-		private TestSharedResourceObject resource;
-
-		@ConfigurationParameter(name=ExternalResourceFactory.PARAM_RESOURCE_NAME)
-		private String resourceName;
-
-		public void afterResourcesInitialized() {
-			System.out.println(getClass().getSimpleName()+".afterResourcesInitialized()");
-			// Ensure the External Resource is bound
-			assertNotNull(resource);
-			if (this != resource) {
-				resource.assertConfiguredOk();
-			}
-			assertConfiguredOk();
-		}
-
-		public String getResourceName() {
-			return resourceName;
-		}
-	}
-
-	public static class TestAnalysisEngineWithResource extends CasAnnotator_ImplBase {
-
-		public final static String PARAM_RESOURCE = "resource";
-		@ExternalResource(key = PARAM_RESOURCE)
-		private TestExternalResource resource;
-		
-		@Override
-		public void process(CAS aCAS) throws AnalysisEngineProcessException {
-			System.out.println(getClass().getSimpleName()+".process()");
-			assertNotNull(resource);
-			resource.assertConfiguredOk();
-		}
-	}
-
-	public static class TestAnalysisEngineWithSharedResourceObject extends CasAnnotator_ImplBase {
-
-		public final static String PARAM_RESOURCE = "resource";
-		@ExternalResource(key = PARAM_RESOURCE)
-		private TestSharedResourceObject resource;
-		
-		@Override
-		public void process(CAS aCAS) throws AnalysisEngineProcessException {
-			System.out.println(getClass().getSimpleName()+".process()");
-			assertNotNull(resource);
-			resource.assertConfiguredOk();
-		}
-	}
-
-	AnalysisEngineDescription saveLoad(AnalysisEngineDescription aDesc)
-			throws InvalidXMLException, SAXException, IOException {
-		ByteArrayOutputStream bos = new ByteArrayOutputStream();
-		aDesc.toXML(bos);
-		return UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
-				new XMLInputSource(new ByteArrayInputStream(bos.toByteArray()), null));
-	}
-	
-	private void dumpResourceConfiguration(ResourceCreationSpecifier aSpec)
-	{
-		System.out.println("-- begin resource configuration");
-		for (ExternalResourceBinding b : aSpec.getResourceManagerConfiguration()
-				.getExternalResourceBindings()) {
-			System.out.printf("Binding : %s -> %s %n", b.getKey(), b.getResourceName());
-		}
-
-		for (ExternalResourceDescription r : aSpec.getResourceManagerConfiguration()
-				.getExternalResources()) {
-			if (r.getImplementationName() != null) {
-				System.out.printf("Resource: %s -> %s %n", r.getName(), r.getImplementationName());
-			}
-			else {
-				System.out
-						.printf("Resource: %s -> %s %n", r.getName(), ((CustomResourceSpecifier) r
-								.getResourceSpecifier()).getResourceClassName());
-			}
-		}
-		System.out.println("-- end resource configuration");
-	}
-
-	@Rule
-	public TestName name = new TestName();
-
-	@Before
-	public void printSeparator()
-	{
-		System.out.println("\n=== " + name.getMethodName() + " =====================");
-	}
+  /**
+   * Test simple injection.
+   */
+  @Test
+  public void resource_testInjection() throws Exception {
+    AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithResource.class,
+            TestAnalysisEngineWithResource.PARAM_RESOURCE,
+            createExternalResourceDescription(TestExternalResource.class,
+                    TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE)));
+
+    AnalysisEngine ae = createPrimitive(aeDesc);
+    ae.process(ae.newCAS());
+  }
+
+  /**
+   * Test shared simple injection.
+   */
+  @Test
+  public void resource_testSharedInjection() throws Exception {
+    ExternalResourceDescription resDesc = createExternalResourceDescription(
+            TestExternalResource.class, TestExternalResource.PARAM_VALUE,
+            TestExternalResource.EXPECTED_VALUE);
+
+    AnalysisEngineDescription aeDesc1 = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithResource.class, TestAnalysisEngineWithResource.PARAM_RESOURCE,
+            resDesc));
+
+    AnalysisEngineDescription aeDesc2 = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithResource.class, TestAnalysisEngineWithResource.PARAM_RESOURCE,
+            resDesc));
+
+    dumpResourceConfiguration(aeDesc1);
+    dumpResourceConfiguration(aeDesc2);
+
+    AnalysisEngine ae1 = createPrimitive(aeDesc1);
+    AnalysisEngine ae2 = createPrimitive(aeDesc2);
+    ae1.process(ae1.newCAS());
+    ae2.process(ae2.newCAS());
+
+    AnalysisEngine ae3 = createAggregate(createAggregateDescription(aeDesc1, aeDesc2));
+    ae3.process(ae3.newCAS());
+  }
+
+  /**
+   * Test simple nesting.
+   */
+  @Test
+  public void resource_testSimpleNesting() throws Exception {
+    AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithResource.class,
+            TestAnalysisEngineWithResource.PARAM_RESOURCE,
+            createExternalResourceDescription(
+                    TestExternalResource2.class,
+                    TestExternalResource.PARAM_VALUE,
+                    TestExternalResource.EXPECTED_VALUE,
+                    TestExternalResource2.PARAM_RESOURCE,
+                    createExternalResourceDescription(TestExternalResource.class,
+                            TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE))));
+
+    AnalysisEngine ae = createPrimitive(aeDesc);
+    ae.process(ae.newCAS());
+  }
+
+  /**
+   * Test simple nesting.
+   */
+  @Test
+  public void resource_testSharedSimpleNesting() throws Exception {
+    ExternalResourceDescription resDesc = createExternalResourceDescription(
+            TestExternalResource2.class,
+            TestExternalResource.PARAM_VALUE,
+            TestExternalResource.EXPECTED_VALUE,
+            TestExternalResource2.PARAM_RESOURCE,
+            createExternalResourceDescription(TestExternalResource.class,
+                    TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE));
+
+    AnalysisEngineDescription aeDesc1 = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithResource.class, TestAnalysisEngineWithResource.PARAM_RESOURCE,
+            resDesc));
+
+    dumpResourceConfiguration(aeDesc1);
+
+    AnalysisEngineDescription aeDesc2 = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithResource.class, TestAnalysisEngineWithResource.PARAM_RESOURCE,
+            resDesc));
+
+    dumpResourceConfiguration(aeDesc1);
+    dumpResourceConfiguration(aeDesc2);
+
+    AnalysisEngine ae1 = createPrimitive(aeDesc1);
+    AnalysisEngine ae2 = createPrimitive(aeDesc2);
+    ae1.process(ae1.newCAS());
+    ae2.process(ae2.newCAS());
+
+    AnalysisEngine ae3 = createAggregate(createAggregateDescription(aeDesc1, aeDesc2));
+    ae3.process(ae3.newCAS());
+  }
+
+  /**
+   * Test deeper nesting level.
+   */
+  @Test
+  public void resource_testDeeperNesting() throws Exception {
+    ExternalResourceDescription resDesc2 = createExternalResourceDescription(
+            TestExternalResource.class, TestExternalResource.PARAM_VALUE,
+            TestExternalResource.EXPECTED_VALUE);
+
+    ExternalResourceDescription resDesc = createExternalResourceDescription(
+            TestExternalResource2.class, TestExternalResource2.PARAM_RESOURCE, resDesc2,
+            TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE);
+
+    AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithResource.class,
+            TestAnalysisEngineWithResource.PARAM_RESOURCE,
+            createExternalResourceDescription(TestExternalResource2.class,
+                    TestExternalResource.PARAM_VALUE, TestExternalResource.EXPECTED_VALUE,
+                    TestExternalResource2.PARAM_RESOURCE, resDesc)));
+
+    dumpResourceConfiguration(aeDesc);
+
+    AnalysisEngine ae = createPrimitive(aeDesc);
+    ae.process(ae.newCAS());
+  }
+
+  /**
+   * Test self-injection
+   */
+  @Test
+  public void resource_testSelfInjection() throws Exception {
+    ExternalResourceDescription resDesc = createExternalResourceDescription(
+            TestExternalResource2.class, TestExternalResource.PARAM_VALUE,
+            TestExternalResource.EXPECTED_VALUE);
+    bindExternalResource(resDesc, TestExternalResource2.PARAM_RESOURCE, resDesc);
+
+    AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithResource.class, TestAnalysisEngineWithResource.PARAM_RESOURCE,
+            resDesc));
+
+    dumpResourceConfiguration(aeDesc);
+
+    AnalysisEngine ae = createPrimitive(aeDesc);
+    ae.process(ae.newCAS());
+  }
+
+  /**
+   * Test self-injection
+   */
+  @Test
+  public void resource_testDoubleSelfInjection() throws Exception {
+    ExternalResourceDescription resDesc = createExternalResourceDescription(
+            TestExternalResource2.class, TestExternalResource.PARAM_VALUE,
+            TestExternalResource.EXPECTED_VALUE);
+    bindExternalResource(resDesc, TestExternalResource2.PARAM_RESOURCE, resDesc);
+
+    AnalysisEngineDescription aeDesc1 = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithResource.class, TestAnalysisEngineWithResource.PARAM_RESOURCE,
+            resDesc));
+
+    AnalysisEngineDescription aeDesc2 = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithResource.class, TestAnalysisEngineWithResource.PARAM_RESOURCE,
+            resDesc));
+
+    dumpResourceConfiguration(aeDesc1);
+    dumpResourceConfiguration(aeDesc2);
+
+    AnalysisEngine ae1 = createPrimitive(aeDesc1);
+    AnalysisEngine ae2 = createPrimitive(aeDesc2);
+    ae1.process(ae1.newCAS());
+    ae2.process(ae2.newCAS());
+
+    AnalysisEngine ae3 = createAggregate(createAggregateDescription(aeDesc1, aeDesc2));
+    ae3.process(ae3.newCAS());
+  }
+
+  /**
+   * Test simple injection.
+   */
+  @Test
+  public void sharedObject_testInjection() throws Exception {
+    AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithSharedResourceObject.class,
+            TestAnalysisEngineWithSharedResourceObject.PARAM_RESOURCE,
+            createExternalResourceDescription(TestSharedResourceObject.class, "http://dumm.my",
+                    TestSharedResourceObject.PARAM_VALUE, TestSharedResourceObject.EXPECTED_VALUE)));
+
+    AnalysisEngine ae = createPrimitive(aeDesc);
+    ae.process(ae.newCAS());
+  }
+
+  /**
+   * Test shared simple injection.
+   */
+  @Test
+  public void sharedObject_testSharedInjection() throws Exception {
+    ExternalResourceDescription resDesc = createExternalResourceDescription(
+            TestSharedResourceObject.class, "http://dumm.my", TestSharedResourceObject.PARAM_VALUE,
+            TestSharedResourceObject.EXPECTED_VALUE);
+
+    AnalysisEngineDescription aeDesc1 = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithSharedResourceObject.class,
+            TestAnalysisEngineWithSharedResourceObject.PARAM_RESOURCE, resDesc));
+
+    AnalysisEngineDescription aeDesc2 = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithSharedResourceObject.class,
+            TestAnalysisEngineWithSharedResourceObject.PARAM_RESOURCE, resDesc));
+
+    dumpResourceConfiguration(aeDesc1);
+    dumpResourceConfiguration(aeDesc2);
+
+    AnalysisEngine ae1 = createPrimitive(aeDesc1);
+    AnalysisEngine ae2 = createPrimitive(aeDesc2);
+    ae1.process(ae1.newCAS());
+    ae2.process(ae2.newCAS());
+
+    AnalysisEngine ae3 = createAggregate(createAggregateDescription(aeDesc1, aeDesc2));
+    ae3.process(ae3.newCAS());
+  }
+
+  /**
+   * Test self-injection
+   */
+  @Test
+  public void sharedObject_testSelfInjection() throws Exception {
+    ExternalResourceDescription resDesc = createExternalResourceDescription(
+            TestSharedResourceObject2.class, "http://dumm.my",
+            TestSharedResourceObject.PARAM_VALUE, TestSharedResourceObject.EXPECTED_VALUE);
+    bindExternalResource(resDesc, TestSharedResourceObject2.PARAM_RESOURCE, resDesc);
+
+    AnalysisEngineDescription aeDesc = saveLoad(createPrimitiveDescription(
+            TestAnalysisEngineWithSharedResourceObject.class,
+            TestAnalysisEngineWithSharedResourceObject.PARAM_RESOURCE, resDesc));
+
+    dumpResourceConfiguration(aeDesc);
+
+    AnalysisEngine ae = createPrimitive(aeDesc);
+    ae.process(ae.newCAS());
+  }
+
+  public static class TestExternalResource2 extends TestExternalResource {
+    public final static String PARAM_RESOURCE = "resource2";
+
+    @ExternalResource(key = PARAM_RESOURCE)
+    private TestExternalResource resource;
+
+    @Override
+    public void afterResourcesInitialized() {
+      System.out.println(getClass().getSimpleName() + ".afterResourcesInitialized()");
+      // Ensure the External Resource is bound
+      assertNotNull(resource);
+      if (this != resource) {
+        resource.assertConfiguredOk();
+      }
+      assertConfiguredOk();
+    }
+  }
+
+  public static class TestSharedResourceObject2 extends TestSharedResourceObject implements
+          ExternalResourceAware {
+    public final static String PARAM_RESOURCE = "resource2";
+
+    @ExternalResource(key = PARAM_RESOURCE)
+    private TestSharedResourceObject resource;
+
+    @ConfigurationParameter(name = ExternalResourceFactory.PARAM_RESOURCE_NAME)
+    private String resourceName;
+
+    public void afterResourcesInitialized() {
+      System.out.println(getClass().getSimpleName() + ".afterResourcesInitialized()");
+      // Ensure the External Resource is bound
+      assertNotNull(resource);
+      if (this != resource) {
+        resource.assertConfiguredOk();
+      }
+      assertConfiguredOk();
+    }
+
+    public String getResourceName() {
+      return resourceName;
+    }
+  }
+
+  public static class TestAnalysisEngineWithResource extends CasAnnotator_ImplBase {
+
+    public final static String PARAM_RESOURCE = "resource";
+
+    @ExternalResource(key = PARAM_RESOURCE)
+    private TestExternalResource resource;
+
+    @Override
+    public void process(CAS aCAS) throws AnalysisEngineProcessException {
+      System.out.println(getClass().getSimpleName() + ".process()");
+      assertNotNull(resource);
+      resource.assertConfiguredOk();
+    }
+  }
+
+  public static class TestAnalysisEngineWithSharedResourceObject extends CasAnnotator_ImplBase {
+
+    public final static String PARAM_RESOURCE = "resource";
+
+    @ExternalResource(key = PARAM_RESOURCE)
+    private TestSharedResourceObject resource;
+
+    @Override
+    public void process(CAS aCAS) throws AnalysisEngineProcessException {
+      System.out.println(getClass().getSimpleName() + ".process()");
+      assertNotNull(resource);
+      resource.assertConfiguredOk();
+    }
+  }
+
+  AnalysisEngineDescription saveLoad(AnalysisEngineDescription aDesc) throws InvalidXMLException,
+          SAXException, IOException {
+    ByteArrayOutputStream bos = new ByteArrayOutputStream();
+    aDesc.toXML(bos);
+    return UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
+            new XMLInputSource(new ByteArrayInputStream(bos.toByteArray()), null));
+  }
+
+  private void dumpResourceConfiguration(ResourceCreationSpecifier aSpec) {
+    System.out.println("-- begin resource configuration");
+    for (ExternalResourceBinding b : aSpec.getResourceManagerConfiguration()
+            .getExternalResourceBindings()) {
+      System.out.printf("Binding : %s -> %s %n", b.getKey(), b.getResourceName());
+    }
+
+    for (ExternalResourceDescription r : aSpec.getResourceManagerConfiguration()
+            .getExternalResources()) {
+      if (r.getImplementationName() != null) {
+        System.out.printf("Resource: %s -> %s %n", r.getName(), r.getImplementationName());
+      } else {
+        System.out.printf("Resource: %s -> %s %n", r.getName(),
+                ((CustomResourceSpecifier) r.getResourceSpecifier()).getResourceClassName());
+      }
+    }
+    System.out.println("-- end resource configuration");
+  }
+
+  @Rule
+  public TestName name = new TestName();
+
+  @Before
+  public void printSeparator() {
+    System.out.println("\n=== " + name.getMethodName() + " =====================");
+  }
 }