/** * 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.builder; import java.util.List; import org.eobjects.analyzer.configuration.AnalyzerBeansConfigurationImpl; import org.eobjects.analyzer.connection.Datastore; import org.eobjects.analyzer.connection.DatastoreCatalogImpl; import org.eobjects.analyzer.data.InputColumn; import org.eobjects.analyzer.data.MutableInputColumn; import org.eobjects.analyzer.job.AnalysisJob; import org.eobjects.analyzer.test.MockAnalyzer; import org.eobjects.analyzer.test.MockTransformer; import org.eobjects.analyzer.test.TestHelper; import junit.framework.TestCase; public class AnalysisJobBuilderImportHelperTest extends TestCase { public void testImportTransformersWithBackwardsChaining() throws Exception { // build a job with a renamed transformer output column final Datastore datastore = TestHelper.createSampleDatabaseDatastore("orderdb"); final AnalyzerBeansConfigurationImpl conf = new AnalyzerBeansConfigurationImpl() .replace(new DatastoreCatalogImpl(datastore)); final AnalysisJob originalJob; try (AnalysisJobBuilder jobBuilder = new AnalysisJobBuilder(conf)) { jobBuilder.setDatastore(datastore); jobBuilder.addSourceColumns("EMPLOYEES.FIRSTNAME"); TransformerJobBuilder<MockTransformer> transformer1 = jobBuilder.addTransformer(MockTransformer.class); { transformer1.addInputColumn(jobBuilder.getSourceColumnByName("FIRSTNAME")); List<MutableInputColumn<?>> columns = transformer1.getOutputColumns(); assertEquals("[TransformedInputColumn[id=trans-0001-0002,name=mock output]]", columns.toString()); MutableInputColumn<?> renamedColumn = columns.get(0); renamedColumn.setName("foo"); } TransformerJobBuilder<MockTransformer> transformer2 = jobBuilder.addTransformer(MockTransformer.class); { transformer2.addInputColumn(jobBuilder.getSourceColumnByName("FIRSTNAME")); List<MutableInputColumn<?>> columns = transformer2.getOutputColumns(); assertEquals("[TransformedInputColumn[id=trans-0003-0004,name=mock output]]", columns.toString()); MutableInputColumn<?> renamedColumn = columns.get(0); renamedColumn.setName("bar"); } // re-wire transformer1 to depend on transformer2 transformer1.clearInputColumns(); transformer1.addInputColumn(transformer2.getOutputColumnByName("bar")); jobBuilder.addAnalyzer(MockAnalyzer.class).addInputColumn(transformer1.getOutputColumnByName("foo")); originalJob = jobBuilder.toAnalysisJob(); } try (AnalysisJobBuilder jobBuilder = new AnalysisJobBuilder(conf, originalJob)) { AnalyzerJobBuilder<?> analyzer = jobBuilder.getAnalyzerJobBuilders().get(0); assertEquals("foo", analyzer.getInputColumns().get(0).getName()); List<TransformerJobBuilder<?>> transformers = jobBuilder.getTransformerJobBuilders(); assertEquals(2, transformers.size()); TransformerJobBuilder<?> transformer1 = transformers.get(0); assertEquals("foo", transformer1.getOutputColumns().get(0).getName()); assertEquals("bar", transformer1.getInputColumns().get(0).getName()); TransformerJobBuilder<?> transformer2 = transformers.get(1); assertEquals("bar", transformer2.getOutputColumns().get(0).getName()); assertEquals("FIRSTNAME", transformer2.getInputColumns().get(0).getName()); final List<InputColumn<?>> inputColumns1 = transformer1.getInputColumns(); final List<MutableInputColumn<?>> outputColumns2 = transformer2.getOutputColumns(); final InputColumn<?> expected = inputColumns1.get(0); final MutableInputColumn<?> actual = outputColumns2.get(0); assertEquals(expected, actual); assertSame(expected, actual); } } public void testImportTransformerAndAnalyzer() throws Exception { // build a job with a renamed transformer output column Datastore datastore = TestHelper.createSampleDatabaseDatastore("orderdb"); AnalyzerBeansConfigurationImpl conf = new AnalyzerBeansConfigurationImpl().replace(new DatastoreCatalogImpl( datastore)); final AnalysisJob originalJob; try (AnalysisJobBuilder jobBuilder = new AnalysisJobBuilder(conf)) { jobBuilder.setDatastore(datastore); jobBuilder.addSourceColumns("EMPLOYEES.FIRSTNAME"); TransformerJobBuilder<MockTransformer> transformer = jobBuilder.addTransformer(MockTransformer.class); transformer.addInputColumn(jobBuilder.getSourceColumnByName("FIRSTNAME")); List<MutableInputColumn<?>> columns = transformer.getOutputColumns(); assertEquals("[TransformedInputColumn[id=trans-0001-0002,name=mock output]]", columns.toString()); MutableInputColumn<?> renamedColumn = columns.get(0); renamedColumn.setName("foobar"); jobBuilder.addAnalyzer(MockAnalyzer.class).addInputColumn(renamedColumn); originalJob = jobBuilder.toAnalysisJob(); } try (AnalysisJobBuilder jobBuilder = new AnalysisJobBuilder(conf, originalJob)) { List<TransformerJobBuilder<?>> transformers = jobBuilder.getTransformerJobBuilders(); assertEquals(1, transformers.size()); List<MutableInputColumn<?>> outputColumns = transformers.get(0).getOutputColumns(); assertEquals("foobar", outputColumns.get(0).getName()); } } }