/** * AnalyzerBeans * Copyright (C) 2014 Neopost - Customer Information Management * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.eobjects.analyzer.job.runner; import java.util.ArrayList; import java.util.List; import org.eobjects.analyzer.configuration.AnalyzerBeansConfiguration; import org.eobjects.analyzer.configuration.AnalyzerBeansConfigurationImpl; import org.eobjects.analyzer.connection.PojoDatastore; import org.eobjects.analyzer.data.InputColumn; import org.eobjects.analyzer.data.InputRow; import org.eobjects.analyzer.data.MetaModelInputColumn; import org.eobjects.analyzer.data.MockInputRow; import org.eobjects.analyzer.job.AnalysisJob; import org.eobjects.analyzer.job.builder.AnalysisJobBuilder; import org.eobjects.analyzer.job.builder.AnalyzerJobBuilder; import org.eobjects.analyzer.job.builder.TransformerJobBuilder; import org.eobjects.analyzer.job.runner.ConsumeRowHandler.Configuration; import org.eobjects.analyzer.job.tasks.MockMultiRowTransformer; import org.eobjects.analyzer.test.MockAnalyzer; import org.eobjects.analyzer.test.MockTransformer; import org.apache.metamodel.pojo.ArrayTableDataProvider; import org.apache.metamodel.pojo.TableDataProvider; import org.apache.metamodel.util.SimpleTableDef; import junit.framework.TestCase; public class ConsumeRowHandlerTest extends TestCase { final AnalyzerBeansConfiguration analyzerBeansConfiguration = new AnalyzerBeansConfigurationImpl(); private AnalysisJobBuilder ajb; private MetaModelInputColumn nameColumn; private MetaModelInputColumn ageColumn; private MetaModelInputColumn countryColumn; private List<MetaModelInputColumn> sourceColumns; @Override protected void setUp() throws Exception { super.setUp(); List<TableDataProvider<?>> tableDataProviders = new ArrayList<TableDataProvider<?>>(); tableDataProviders.add(new ArrayTableDataProvider(new SimpleTableDef("table", new String[] { "name", "age", "country" }), new ArrayList<Object[]>())); ajb = new AnalysisJobBuilder(analyzerBeansConfiguration); ajb.setDatastore(new PojoDatastore("ds", "sch", tableDataProviders)); ajb.addSourceColumns("name", "age", "country"); sourceColumns = ajb.getSourceColumns(); nameColumn = sourceColumns.get(0); ageColumn = sourceColumns.get(1); countryColumn = sourceColumns.get(2); } @Override protected void tearDown() throws Exception { super.tearDown(); ajb.close(); } public void testSingleRecordOutputScenario() throws Exception { final TransformerJobBuilder<MockTransformer> tr1 = ajb.addTransformer(MockTransformer.class); tr1.addInputColumn(ajb.getSourceColumnByName("name")); final TransformerJobBuilder<MockTransformer> tr2 = ajb.addTransformer(MockTransformer.class); tr2.addInputColumn(tr1.getOutputColumns().get(0)); final AnalyzerJobBuilder<MockAnalyzer> analyzer = ajb.addAnalyzer(MockAnalyzer.class); analyzer.addInputColumns(sourceColumns); final AnalysisJob job = ajb.toAnalysisJob(true); final Configuration configuration = new Configuration(); configuration.includeAnalyzers = false; final ConsumeRowHandler handler = new ConsumeRowHandler(job, analyzerBeansConfiguration, configuration); List<InputRow> result; MockInputRow inputRow = new MockInputRow().put(nameColumn, "Kasper").put(ageColumn, null) .put(countryColumn, null); result = handler.consumeRow(inputRow).getRows(); assertEquals(1, result.size()); InputRow outputRow = result.get(0); assertEquals("TransformedInputRow[values={" + "TransformedInputColumn[id=trans-0001-0002,name=mock output]=mocked: Kasper, " + "TransformedInputColumn[id=trans-0003-0004,name=mock output]=mocked: mocked: Kasper}," + "delegate=" + inputRow.toString() + "]", outputRow.toString()); List<InputColumn<?>> outputColumns = outputRow.getInputColumns(); assertEquals(5, outputColumns.size()); assertEquals("mocked: Kasper", outputRow.getValue(outputColumns.get(3)).toString()); assertEquals("mocked: mocked: Kasper", outputRow.getValue(outputColumns.get(4)).toString()); } public void testMultiRecordOutputScenario() throws Exception { final TransformerJobBuilder<MockMultiRowTransformer> tr1 = ajb.addTransformer(MockMultiRowTransformer.class); tr1.setConfiguredProperty("Count to what?", ajb.getSourceColumnByName("age")); final TransformerJobBuilder<MockTransformer> tr2 = ajb.addTransformer(MockTransformer.class); tr2.addInputColumn(tr1.getOutputColumns().get(0)); final AnalyzerJobBuilder<MockAnalyzer> analyzer = ajb.addAnalyzer(MockAnalyzer.class); analyzer.addInputColumns(sourceColumns); final AnalysisJob job = ajb.toAnalysisJob(true); final Configuration configuration = new Configuration(); configuration.includeAnalyzers = true; final ConsumeRowHandler handler = new ConsumeRowHandler(job, analyzerBeansConfiguration, configuration); List<InputRow> result; MockInputRow inputRow = new MockInputRow(100).put(nameColumn, "Vera").put(ageColumn, 3) .put(countryColumn, "DK"); result = handler.consumeRow(inputRow).getRows(); assertEquals(3, result.size()); InputRow outputRow = result.get(0); assertEquals("TransformedInputRow[values={" + "TransformedInputColumn[id=trans-0001-0002,name=Mock multi row transformer (1)]=1, " + "TransformedInputColumn[id=trans-0001-0003,name=Mock multi row transformer (2)]=42, " + "TransformedInputColumn[id=trans-0004-0005,name=mock output]=mocked: 1}," + "delegate=" + inputRow + "]", outputRow.toString()); assertEquals(100, outputRow.getId()); outputRow = result.get(1); assertEquals("TransformedInputRow[values={" + "TransformedInputColumn[id=trans-0001-0002,name=Mock multi row transformer (1)]=2, " + "TransformedInputColumn[id=trans-0001-0003,name=Mock multi row transformer (2)]=42, " + "TransformedInputColumn[id=trans-0004-0005,name=mock output]=mocked: 2}," + "delegate=" + inputRow + "]", outputRow.toString()); assertEquals(2147383649, outputRow.getId()); outputRow = result.get(2); assertEquals("TransformedInputRow[values={" + "TransformedInputColumn[id=trans-0001-0002,name=Mock multi row transformer (1)]=3, " + "TransformedInputColumn[id=trans-0001-0003,name=Mock multi row transformer (2)]=42, " + "TransformedInputColumn[id=trans-0004-0005,name=mock output]=mocked: 3}," + "delegate=" + inputRow + "]", outputRow.toString()); assertEquals(2147383650, outputRow.getId()); List<InputColumn<?>> outputColumns = outputRow.getInputColumns(); assertEquals(6, outputColumns.size()); } }