@Override public SetRowMapper<ROW, SET, T, E> newJoinMapper(ContextualSourceFieldMapper<ROW, T> mapper, ConsumerErrorHandler consumerErrorHandler, MappingContextFactory<? super ROW> mappingContextFactory, UnaryFactory<SET, Enumerable<ROW>> enumerableFactory) { return new JoinMapper<ROW, SET, T, E>(mapper, consumerErrorHandler,mappingContextFactory, enumerableFactory); }
@Override public final Enumerable<T> enumerate(ROWS source) throws EX { return new JoinMapperEnumerable<ROW, T>(mapper, mappingContextFactory.newContext(), enumerateRows(source)); }
private void checkJoins(JoinMapper<Object[], Object[][], DbListObject, RuntimeException> joinMapper) { Object[][] data = new Object[][] { {1, 1l, "name1"}, {1, 2l, "name2"}, {2, 3l, "name3"} }; checkList(joinMapper.forEach(data, new ListCollector<DbListObject>()).getList()); //IFJAVA8_START checkList(joinMapper.stream(data).collect(Collectors.<DbListObject>toList())); //IFJAVA8_END List<DbListObject> list = new ArrayList<DbListObject>(); Iterator<DbListObject> iterator = joinMapper.iterator(data); while(iterator.hasNext()) { list.add(iterator.next()); } checkList(list); }
@Test public void testMultiJoinSameIdDiffContent() throws Exception { ClassMeta<Root> classMeta = ReflectionService.newInstance().getClassMeta(Root.class); AbstractMapperBuilderTest.SampleMapperBuilder<Root> builder = new AbstractMapperBuilderTest.SampleMapperBuilder<Root>(classMeta, mapperConfig()); JoinMapper<Object[], Object[][], Root, ?> mapper = (JoinMapper<Object[], Object[][], Root, ?>) builder.addMapping("id").addKey("ll_id").addKey("ll_elements_id").addMapping("ll_elements_value").mapper(); List<Root> list = mapper.forEach(data_diffvalue, new ListCollector<Root>()).getList(); assertEquals(1, list.size()); Root root = list.get(0); assertEquals(1, root.id); assertEquals(2, root.ll.size()); assertEquals(1, root.ll.get(0).id); assertEquals(2, root.ll.get(1).id); assertEquals(2, root.ll.get(0).elements.size()); assertEquals(1, root.ll.get(0).elements.get(0).id); assertEquals("a", root.ll.get(0).elements.get(0).value); assertEquals(2, root.ll.get(0).elements.get(1).id); assertEquals("b", root.ll.get(0).elements.get(1).value); assertEquals(1, root.ll.get(1).elements.size()); assertEquals(1, root.ll.get(1).elements.get(0).id); assertEquals("b", root.ll.get(1).elements.get(0).value); }
private void checkDbListJoinMapper(JoinMapper<Object[], Object[][], DbListObject, ?> mapper) throws Exception { Iterator<DbListObject> iterator = mapper.iterator(new Object[][]{ {1, 1l, "n1"}, {1, 2l, "n2"}, {2, 1l, "n1"} }); DbListObject dbListObject = iterator.next(); assertEquals(1, dbListObject.getId()); assertEquals(2, dbListObject.getObjects().size()); assertEquals(1l, dbListObject.getObjects().get(0).getId()); assertEquals("n1", dbListObject.getObjects().get(0).getName()); assertEquals(2l, dbListObject.getObjects().get(1).getId()); assertEquals("n2", dbListObject.getObjects().get(1).getName()); dbListObject = iterator.next(); assertEquals(2, dbListObject.getId()); assertEquals(1, dbListObject.getObjects().size()); assertEquals(1l, dbListObject.getObjects().get(0).getId()); assertEquals("n1", dbListObject.getObjects().get(0).getName()); }
@Test public void testMultiJoin() throws Exception { ClassMeta<Root> classMeta = ReflectionService.newInstance().getClassMeta(Root.class); AbstractMapperBuilderTest.SampleMapperBuilder<Root> builder = new AbstractMapperBuilderTest.SampleMapperBuilder<Root>(classMeta, mapperConfig()); JoinMapper<Object[], Object[][], Root, ?> mapper = (JoinMapper<Object[], Object[][], Root, ?>) builder .addMapping("id") .addKey("ll_id") .addKey("ls_id") .mapper(); List<Root> list = mapper.forEach(data, new ListCollector<Root>()).getList(); assertEquals(2, list.size()); validateRoot(list.get(0)); validateRoot(list.get(1)); }
@Override public SetRowMapper<ROW, SET, T, E> newJoinMapper(ContextualSourceFieldMapper<ROW, T> mapper, ConsumerErrorHandler consumerErrorHandler, MappingContextFactory<? super ROW> mappingContextFactory, UnaryFactory<SET, Enumerable<ROW>> enumerableFactory) { return new JoinMapper<ROW, SET, T, E>(mapper, consumerErrorHandler,mappingContextFactory, enumerableFactory); }
@Test public void testMapKeyValueJoin() throws Exception { ClassMeta<PojoWithMap> classMeta = reflectionService().getClassMeta(PojoWithMap.class); AbstractMapperBuilderTest.SampleMapperBuilder<PojoWithMap> builder = new AbstractMapperBuilderTest.SampleMapperBuilder<PojoWithMap>(classMeta, getMapperConfig()); builder.addKey("id"); builder.addMapping("map_key", MapTypeProperty.KEY_VALUE); builder.addMapping("map_value"); JoinMapper<Object[], Object[][],PojoWithMap, ?> mapper = (JoinMapper<Object[], Object[][], PojoWithMap, ?>) builder.mapper(); List<PojoWithMap> list = mapper.forEach(dataSimpleJoin, new ListCollector<PojoWithMap>()).getList(); assertEquals(2, list.size()); assertEquals(buildPojo(1, "key1", "value1", "key11", "value11"), list.get(0)); assertEquals(buildPojo(2, "key2", "value2", "key22", "value22"), list.get(1)); }
@Override public final Enumerable<T> enumerate(ROWS source) throws EX { return new JoinMapperEnumerable<ROW, T>(mapper, mappingContextFactory.newContext(), enumerateRows(source)); }
@SuppressWarnings("unchecked") @Test public void testJoinWithKey() { JoinMapper<Object[], Object[][], DbListObject, RuntimeException> joinMapper = new JoinMapper<Object[], Object[][], DbListObject, RuntimeException>( dbListObjectMapper, RethrowConsumerErrorHandler.INSTANCE, new BreakDetectorMappingContextFactory<Object[]>(keyDefinition, new KeyDefinition[] {keyDefinition}, MappingContext.EMPTY_FACTORY), SetRowMapperTest.ENUMERABLE_UNARY_FACTORY ); checkJoins(joinMapper); }
@Test public void testMapComplexKeyValueJoin() throws Exception { ClassMeta<ComplexPojoWithMap> classMeta = reflectionService().getClassMeta(ComplexPojoWithMap.class); AbstractMapperBuilderTest.SampleMapperBuilder<ComplexPojoWithMap> builder = new AbstractMapperBuilderTest.SampleMapperBuilder<ComplexPojoWithMap>(classMeta, getMapperConfig()); builder.addKey("id"); builder.addMapping("map_key_elt0"); builder.addMapping("map_key_elt1"); builder.addMapping("map_value_elt0"); builder.addMapping("map_value_elt1"); JoinMapper<Object[], Object[][],ComplexPojoWithMap, ?> mapper = (JoinMapper<Object[], Object[][], ComplexPojoWithMap, ?>) builder.mapper(); List<ComplexPojoWithMap> list = mapper.forEach(dataComplexJoin, new ListCollector<ComplexPojoWithMap>()).getList(); assertEquals(2, list.size()); assertEquals(buildComplexPojo(1, "key11", "key12", "value11", "value12", "key111", "key121", "value111", "value121"), list.get(0)); assertEquals(buildComplexPojo(2, "key21", "key22", "value21", "value22", "key211", "key221", "value211", "value221"), list.get(1)); }
@Test public void testListComplexKeyValueJoin() throws Exception { ClassMeta<ComplexPojoWithList> classMeta = reflectionService().getClassMeta(ComplexPojoWithList.class); AbstractMapperBuilderTest.SampleMapperBuilder<ComplexPojoWithList> builder = new AbstractMapperBuilderTest.SampleMapperBuilder<ComplexPojoWithList>(classMeta, getMapperConfig()); builder.addKey("id"); builder.addMapping("map_elt0_elt0_elt0"); builder.addMapping("map_elt0_elt0_elt1"); builder.addMapping("map_elt0_elt1_elt0"); builder.addMapping("map_elt0_elt1_elt1"); JoinMapper<Object[], Object[][],ComplexPojoWithList, ?> mapper = (JoinMapper<Object[], Object[][], ComplexPojoWithList, ?>) builder.mapper(); List<ComplexPojoWithList> list = mapper.forEach(dataComplexJoin, new ListCollector<ComplexPojoWithList>()).getList(); assertEquals(2, list.size()); assertEquals(buildComplexListPojo(1, "key11", "key12", "value11", "value12", "key111", "key121", "value111", "value121"), list.get(0)); assertEquals(buildComplexListPojo(2, "key21", "key22", "value21", "value22", "key211", "key221", "value211", "value221"), list.get(1)); }
@Test public void testMultiJoinOnNullNoKey() throws Exception { ClassMeta<Root2> classMeta = ReflectionService.newInstance().getClassMeta(Root2.class); AbstractMapperBuilderTest.SampleMapperBuilder<Root2> builder = new AbstractMapperBuilderTest.SampleMapperBuilder<Root2>(classMeta, mapperConfig()); JoinMapper<Object[], Object[][], Root2, ?> mapper = (JoinMapper<Object[], Object[][], Root2, ?>) builder .addKey("id") .addKey("ll_id") .addKey("ls_element_id") .mapper(); Object[][] data = new Object[][] { {1, "1", null, null}, {1, "2", null, null} }; List<Root2> list = mapper.forEach(data, new ListCollector<Root2>()).getList(); assertEquals(1, list.size()); }