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() + " ====================="); + } }