use of org.knime.core.data.convert.map.SimpleCellValueConsumerFactory in project knime-core by knime.
the class MappingFrameworkTest method consumerTest.
/**
* @throws Exception
*/
@Test
public void consumerTest() throws Exception {
/* One time setup */
final CellValueConsumer<H2ODestination, Object, H2OParameters> generalConsumer = (c, v, p) -> {
c.h2oFrame.get(p.rowIndex)[p.columnIndex] = v;
};
// TODO extension point
//
MappingFramework.forDestinationType(H2ODestination.class).unregisterAllConsumers().register(//
intConsumer).register(//
new SimpleCellValueConsumerFactory<>(Long.class, "LONG", generalConsumer)).register(//
new SimpleCellValueConsumerFactory<>(Float.class, "FLOAT", generalConsumer)).register(//
new SimpleCellValueConsumerFactory<>(Double.class, "DOUBLE", generalConsumer)).register(//
stringConsumer).register(// Will display a CODING error, but should not succeed
stringConsumer);
assertEquals(intConsumer, MappingFramework.forDestinationType(H2ODestination.class).getFactories(Integer.class, "INT").stream().findFirst().get());
final List<ConsumptionPath> paths = MappingFramework.forDestinationType(H2ODestination.class).getAvailableConsumptionPaths(IntCell.TYPE);
assertEquals(4, paths.size());
final String[] inTypes = paths.stream().map(p -> p.m_consumerFactory.getDestinationType()).toArray(n -> new String[n]);
assertEquals(1, Stream.of(inTypes).filter(s -> s.equals("INT")).count());
assertEquals(1, Stream.of(inTypes).filter(s -> s.equals("STR")).count());
assertEquals(1, Stream.of(inTypes).filter(s -> s.equals("LONG")).count());
assertEquals(1, Stream.of(inTypes).filter(s -> s.equals("DOUBLE")).count());
assertEquals(intConsumer.getDestinationType(), intConsumer.getName());
// TODO later: deprecation mechanism?
// TODO later: priority mechanism (=deprecation?).
final ConsumptionPath expectedPath = new ConsumptionPath(DataCellToJavaConverterRegistry.getInstance().getConverterFactories(IntCell.TYPE, Integer.class).stream().findFirst().get(), intConsumer);
assertTrue(paths.contains(expectedPath));
assertTrue(MappingFramework.forDestinationType(H2ODestination.class).getFactories(ConsumptionPath.class, "INT").isEmpty());
// TODO
// Assumption: RESULTSET is stateful...
// expectedPath.map(Col, RESULTSET);
// expectedPath.map(Col, RESULTSET);
/* Some example input */
final DefaultRow row = new DefaultRow(RowKey.createRowKey(0L), new StringCell("KNIME"), new IntCell(42), new LongCell(42L), new MissingCell("missing"));
final H2ODestination testSink = new H2ODestination();
testSink.h2oFrame.add(new Object[4]);
final ConsumptionPath[] mapping = new ConsumptionPath[] { new ConsumptionPath(DataCellToJavaConverterRegistry.getInstance().getConverterFactories(StringCell.TYPE, String.class).stream().findFirst().get(), MappingFramework.forDestinationType(H2ODestination.class).getFactory("java.lang.String->STR").get()), new ConsumptionPath(DataCellToJavaConverterRegistry.getInstance().getConverterFactories(IntCell.TYPE, Integer.class).stream().findFirst().get(), MappingFramework.forDestinationType(H2ODestination.class).getFactory("java.lang.Integer->INT").get()), new ConsumptionPath(DataCellToJavaConverterRegistry.getInstance().getConverterFactories(LongCell.TYPE, Long.class).stream().findFirst().get(), MappingFramework.forDestinationType(H2ODestination.class).getFactory("java.lang.Long->LONG").get()), new ConsumptionPath(DataCellToJavaConverterRegistry.getInstance().getConverterFactories(LongCell.TYPE, Long.class).stream().findFirst().get(), MappingFramework.forDestinationType(H2ODestination.class).getFactory("java.lang.Long->LONG").get()) };
H2OParameters[] parameters = new H2OParameters[4];
for (int i = 0; i < parameters.length; ++i) {
parameters[i] = new H2OParameters();
parameters[i].columnIndex = i;
parameters[i].rowIndex = 0;
}
MappingFramework.map(row, testSink, mapping, parameters);
assertEquals(1, testSink.h2oFrame.size());
assertEquals(4, testSink.h2oFrame.get(0).length);
assertArrayEquals(new Object[] { "KNIME", new Integer(42), new Long(42L), null }, testSink.h2oFrame.get(0));
}
Aggregations