/* * This code is distributed under The GNU Lesser General Public License (LGPLv3) * Please visit GNU site for LGPLv3 http://www.gnu.org/copyleft/lesser.html * * Copyright Denis Pavlov 2009 * Web: http://www.genericdtoassembler.org * SVN: https://svn.code.sf.net/p/geda-genericdto/code/trunk/ * SVN (mirror): http://geda-genericdto.googlecode.com/svn/trunk/ */ package com.inspiresoftware.lib.dto.geda.assembler; import com.inspiresoftware.lib.dto.geda.adapter.BeanFactory; import com.inspiresoftware.lib.dto.geda.assembler.examples.collections.*; import com.inspiresoftware.lib.dto.geda.assembler.examples.maps.*; import com.inspiresoftware.lib.dto.geda.assembler.examples.simple.TestDto15Class; import com.inspiresoftware.lib.dto.geda.assembler.examples.simple.TestEntity15Class; import com.inspiresoftware.lib.dto.geda.exception.*; import com.inspiresoftware.lib.dto.geda.utils.ParameterizedSynthesizer; import com.inspiresoftware.lib.dto.geda.utils.ParameterizedSynthesizer.Parameters; import org.junit.Test; import org.junit.runner.RunWith; import java.util.*; import static org.junit.Assert.*; /** * DTOAssembler test. * * @author Denis Pavlov * @since 1.0.0 * */ @RunWith(value = ParameterizedSynthesizer.class) public class DTOAssemblerDtoMapTest { private static final int I_3 = 3; private String synthesizer; /** * @param synthesizer parameter */ public DTOAssemblerDtoMapTest(final String synthesizer) { super(); this.synthesizer = synthesizer; } /** * @return synthesizers keys */ @Parameters public static Collection<String[]> data() { final List<String[]> params = new ArrayList<String[]>(); for (final String param : MethodSynthesizerProxy.getAvailableSynthesizers()) { params.add(new String[] { param }); } return params; } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test public void testMapToCollectionMapping() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12MapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first assembler.assembleEntity(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return TestDto12CollectionIterface.class; } else if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return new TestDto12CollectionClass(); } else if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); assertNotNull(eWrap.getCollectionWrapper().getItems()); assertEquals(2, eWrap.getCollectionWrapper().getItems().size()); Iterator<TestEntity12CollectionItemInterface> eiter; eiter = eWrap.getCollectionWrapper().getItems().iterator(); final TestEntity12CollectionItemInterface itm1 = eiter.next(); final TestEntity12CollectionItemInterface itm2 = eiter.next(); assertEquals("itm2", itm1.getName()); assertEquals("itm3", itm2.getName()); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test public void testMapToMapValueMapping() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12MapInterface eMap = new TestEntity12MapClass(); eMap.setItems(new HashMap<String, TestEntity12CollectionItemInterface>()); eMap.getItems().put("itm1", eItem1); eMap.getItems().put("itm2", eItem2); final TestDto12MapIterface dMap = new TestDto12MapToMapClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eMap.getClass(), synthesizer); assembler.assembleDto(dMap, eMap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first assembler.assembleEntity(dMap, eMap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); assertNotNull(eMap.getItems()); assertEquals(2, eMap.getItems().size()); final Set<String> ekeys = eMap.getItems().keySet(); for (String key : ekeys) { if ("itm2".equals(key)) { assertEquals("itm2", eMap.getItems().get(key).getName()); } else if ("itm3".equals(key)) { assertEquals("itm3", eMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test public void testMapToMapKeyMapping() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12MapByKeyInterface eMap = new TestEntity12MapByKeyClass(); eMap.setItems(new HashMap<TestEntity12CollectionItemInterface, String>()); eMap.getItems().put(eItem1, "itm1"); eMap.getItems().put(eItem2, "itm2"); final TestDto12MapByKeyIterface dMap = new TestDto12MapToMapByKeyClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eMap.getClass(), synthesizer); assembler.assembleDto(dMap, eMap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<TestDto12CollectionItemIterface> keys = dMap.getItems().keySet(); TestDto12CollectionItemIterface dItem1 = null; TestDto12CollectionItemIterface dItem2 = null; for (TestDto12CollectionItemIterface key : keys) { if ("itm1".equals(key.getName())) { assertEquals("itm1", dMap.getItems().get(key)); dItem1 = key; } else if ("itm2".equals(key.getName())) { assertEquals("itm2", dMap.getItems().get(key)); dItem2 = key; } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put(dto3, "itm3"); dMap.getItems().put(dItem2, "itm no 2"); dMap.getItems().remove(dItem1); // first assembler.assembleEntity(dMap, eMap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); assertNotNull(eMap.getItems()); assertEquals(2, eMap.getItems().size()); final Set<TestEntity12CollectionItemInterface> ekeys = eMap.getItems().keySet(); for (TestEntity12CollectionItemInterface key : ekeys) { if ("itm2".equals(key.getName())) { assertEquals("itm no 2", eMap.getItems().get(key)); } else if ("itm3".equals(key.getName())) { assertEquals("itm3", eMap.getItems().get(key)); } else { fail("Unknown key"); } } } /** * Test collection of nested objects. * * @throws GeDAException exception */ @Test public void testCollectionEntityToNullProperty() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12MapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); dMap.setItems(null); assembler.assembleEntity(dMap, eWrap, null, null); assertNotNull(eWrap.getCollectionWrapper().getItems()); assertEquals(0, eWrap.getCollectionWrapper().getItems().size()); } /** * Test collection of nested objects. * * @throws GeDAException exception */ @Test public void testMapEntityToNullProperty() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12MapInterface eMap = new TestEntity12MapClass(); eMap.setItems(new HashMap<String, TestEntity12CollectionItemInterface>()); eMap.getItems().put("itm1", eItem1); eMap.getItems().put("itm2", eItem2); final TestDto12MapIterface dMap = new TestDto12MapToMapClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eMap.getClass(), synthesizer); assembler.assembleDto(dMap, eMap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); dMap.setItems(null); assembler.assembleEntity(dMap, eMap, null, null); assertNotNull(eMap.getItems()); assertEquals(0, eMap.getItems().size()); } /** * Test collection of nested objects. * * @throws GeDAException exception */ @Test public void testCollectionNullToNullProperty() throws GeDAException { final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12MapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, null); assertNull(dMap.getItems()); assembler.assembleEntity(dMap, eWrap, null, null); assertNull(eWrap.getCollectionWrapper().getItems()); } /** * Test collection of nested objects. * * @throws GeDAException exception */ @Test public void testMapNullToNullProperty() throws GeDAException { final TestEntity12MapInterface eMap = new TestEntity12MapClass(); final TestDto12MapIterface dMap = new TestDto12MapToMapClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eMap.getClass(), synthesizer); assembler.assembleDto(dMap, eMap, null, null); assertNull(dMap.getItems()); assembler.assembleEntity(dMap, eMap, null, null); assertNull(eMap.getItems()); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test public void testMapToCollectionMappingNestedCreate() throws GeDAException { final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); final TestDto12MapIterface dMap = new TestDto12MapToCollectionClass(); dMap.setItems(new HashMap<String, TestDto12CollectionItemIterface>()); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); final TestDto12CollectionItemClass dto1 = new TestDto12CollectionItemClass(); dto1.setName("itm1"); final TestDto12CollectionItemClass dto2 = new TestDto12CollectionItemClass(); dto2.setName("itm2"); final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm1", dto1); dMap.getItems().put("itm2", dto2); dMap.getItems().put("itm3", dto3); assembler.assembleEntity(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return TestEntity12CollectionInterface.class; } else if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return new TestEntity12CollectionClass(); } else if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); assertNotNull(eWrap.getCollectionWrapper().getItems()); assertEquals(I_3, eWrap.getCollectionWrapper().getItems().size()); boolean item1 = false; boolean item2 = false; boolean item3 = false; for (TestEntity12CollectionItemInterface item : eWrap.getCollectionWrapper().getItems()) { if ("itm1".equals(item.getName())) { item1 = true; } else if ("itm2".equals(item.getName())) { item2 = true; } else if ("itm3".equals(item.getName())) { item3 = true; } else { fail("Unkown item"); } } assertTrue(item1 && item2 && item3); } /** * Test that map pipe is able to handle immutable objects. * * @throws GeDAException exception */ @SuppressWarnings("unchecked") @Test public void testMapBindingOnImmutableObjects() throws GeDAException { final TestEntity16Class entities = new TestEntity16Class( (Collection) Arrays.asList( new TestEntity15Class("1", "one"), new TestEntity15Class("2", "two"), new TestEntity15Class("3", "three") ) ); final TestDto17Class dtos = new TestDto17Class(); final Assembler assembler = DTOAssembler.newCustomAssembler( TestDto17Class.class, TestEntity16Class.class, synthesizer); assembler.assembleDto(dtos, entities, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("TestDto15Class".equals(entityBeanKey)) { return TestDto15Class.class; } return null; } public Object get(final String entityBeanKey) { if ("TestDto15Class".equals(entityBeanKey)) { return new TestDto15Class(); } return null; } }); final int noOfItems = 3; assertNotNull(dtos.getItems()); assertEquals(noOfItems, dtos.getItems().size()); assertEquals("1", dtos.getItems().get("1").getName()); assertEquals("2", dtos.getItems().get("2").getName()); assertEquals("3", dtos.getItems().get("3").getName()); for (String dtoKey : dtos.getItems().keySet()) { final TestDto15Class dto = dtos.getItems().get(dtoKey); dto.setName("DTO_" + dtoKey); dtos.getItems().put(dtoKey, dto); } assembler.assembleEntity(dtos, entities, null, null); assertNotNull(entities.getItems()); assertEquals(noOfItems, entities.getItems().size()); final Iterator<TestEntity15Class> iterEntity = entities.getItems().iterator(); assertEquals("1", iterEntity.next().getName()); assertEquals("2", iterEntity.next().getName()); assertEquals("3", iterEntity.next().getName()); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test(expected = DtoToEntityMatcherNotFoundException.class) public void testMapToCollectionMappingWithNoMatcherInConverters() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12aMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first assembler.assembleEntity(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return TestDto12CollectionClass.class; } else if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return new TestDto12CollectionClass(); } else if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test(expected = NotDtoToEntityMatcherException.class) public void testMapToCollectionMappingWithInvalidMatcherInConverters() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12aMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first final Map<String, Object> converters = new HashMap<String, Object>(); converters.put("Test12KeyMapToEntityMatcher.class", new Object()); assembler.assembleEntity(dMap, eWrap, converters, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return TestDto12CollectionClass.class; } else if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return new TestDto12CollectionClass(); } else if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test public void testMapToCollectionMappingWithMatcherInConverters() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12aMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first final Map<String, Object> converters = new HashMap<String, Object>(); converters.put("Test12KeyMapToEntityMatcher.class", new Test12KeyMapToEntityMatcher()); assembler.assembleEntity(dMap, eWrap, converters, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return TestDto12CollectionClass.class; } else if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return new TestDto12CollectionClass(); } else if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); assertNotNull(eWrap.getCollectionWrapper().getItems()); assertEquals(2, eWrap.getCollectionWrapper().getItems().size()); Iterator<TestEntity12CollectionItemInterface> eiter; eiter = eWrap.getCollectionWrapper().getItems().iterator(); final TestEntity12CollectionItemInterface itm1 = eiter.next(); final TestEntity12CollectionItemInterface itm2 = eiter.next(); assertEquals("itm2", itm1.getName()); assertEquals("itm3", itm2.getName()); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test(expected = BeanFactoryNotFoundException.class) public void testMapToCollectionMappingWithDtoMapKeyNoBeanFactory() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12bMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, null); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test(expected = UnableToCreateInstanceException.class) public void testMapToCollectionMappingWithDtoMapKeyBeanFactoryUnableToInstantiate() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12bMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } return null; } }); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test public void testMapToCollectionMappingWithDtoMapKey() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12bMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } else if ("dtoMap".equals(entityBeanKey)) { return new HashMap<Object, Object>(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first final Map<String, Object> converters = new HashMap<String, Object>(); converters.put("Test12KeyMapToEntityMatcher.class", new Test12KeyMapToEntityMatcher()); assembler.assembleEntity(dMap, eWrap, converters, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return TestDto12CollectionClass.class; } else if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return new TestDto12CollectionClass(); } else if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); assertNotNull(eWrap.getCollectionWrapper().getItems()); assertEquals(2, eWrap.getCollectionWrapper().getItems().size()); Iterator<TestEntity12CollectionItemInterface> eiter; eiter = eWrap.getCollectionWrapper().getItems().iterator(); final TestEntity12CollectionItemInterface itm1 = eiter.next(); final TestEntity12CollectionItemInterface itm2 = eiter.next(); assertEquals("itm2", itm1.getName()); assertEquals("itm3", itm2.getName()); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test(expected = BeanFactoryNotFoundException.class) public void testMapToCollectionMappingWithEntityMapKeyNoBeanFactory() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12bMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } else if ("dtoMap".equals(entityBeanKey)) { return new HashMap<Object, Object>(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first final Map<String, Object> converters = new HashMap<String, Object>(); converters.put("Test12KeyMapToEntityMatcher.class", new Test12KeyMapToEntityMatcher()); eWrap.getCollectionWrapper().setItems(null); assembler.assembleEntity(dMap, eWrap, converters, null); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test(expected = UnableToCreateInstanceException.class) public void testMapToCollectionMappingWithEntityMapKeyBeanFactoryUnableToCreateInstance() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12bMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } else if ("dtoMap".equals(entityBeanKey)) { return new HashMap<Object, Object>(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first final Map<String, Object> converters = new HashMap<String, Object>(); converters.put("Test12KeyMapToEntityMatcher.class", new Test12KeyMapToEntityMatcher()); eWrap.getCollectionWrapper().setItems(null); assembler.assembleEntity(dMap, eWrap, converters, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return TestDto12CollectionClass.class; } else if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return new TestDto12CollectionClass(); } else if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test public void testMapToCollectionMappingWithEntityMapKey() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12bMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } else if ("dtoMap".equals(entityBeanKey)) { return new HashMap<Object, Object>(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first final Map<String, Object> converters = new HashMap<String, Object>(); converters.put("Test12KeyMapToEntityMatcher.class", new Test12KeyMapToEntityMatcher()); eWrap.getCollectionWrapper().setItems(null); assembler.assembleEntity(dMap, eWrap, converters, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return TestDto12CollectionClass.class; } else if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return new TestDto12CollectionClass(); } else if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } else if ("entityMapOrCollection".equals(entityBeanKey)) { return new ArrayList<Object>(); } return null; } }); assertNotNull(eWrap.getCollectionWrapper().getItems()); assertEquals(2, eWrap.getCollectionWrapper().getItems().size()); Iterator<TestEntity12CollectionItemInterface> eiter; eiter = eWrap.getCollectionWrapper().getItems().iterator(); while (eiter.hasNext()) { TestEntity12CollectionItemInterface itm = (TestEntity12CollectionItemInterface) eiter.next(); if (!"itm2".equals(itm.getName()) && !"itm3".equals(itm.getName())) { fail("Invalid element: " + itm.getName()); } } } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test public void testMapToCollectionMappingWithDtoMapKeyWithGenericTypeIoC() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12cMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } else if ("TestEntity12CollectionItemInterface".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } else if ("dtoMap".equals(entityBeanKey)) { return new HashMap<Object, Object>(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first final Map<String, Object> converters = new HashMap<String, Object>(); converters.put("Test12KeyMapToEntityMatcher.class", new Test12KeyMapToEntityMatcher()); assembler.assembleEntity(dMap, eWrap, converters, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return TestDto12CollectionClass.class; } else if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } else if ("TestEntity12CollectionItemInterface".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return new TestDto12CollectionClass(); } else if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); assertNotNull(eWrap.getCollectionWrapper().getItems()); assertEquals(2, eWrap.getCollectionWrapper().getItems().size()); Iterator<TestEntity12CollectionItemInterface> eiter; eiter = eWrap.getCollectionWrapper().getItems().iterator(); final TestEntity12CollectionItemInterface itm1 = eiter.next(); final TestEntity12CollectionItemInterface itm2 = eiter.next(); assertEquals("itm2", itm1.getName()); assertEquals("itm3", itm2.getName()); } /** * Test that DTO map correctly maps to entity collection. * * @throws GeDAException exception */ @Test public void testMapToCollectionMappingWithDtoMapKeyWithGenericTypeAuto() throws GeDAException { final TestEntity12CollectionItemInterface eItem1 = new TestEntity12CollectionItemClass(); eItem1.setName("itm1"); final TestEntity12CollectionItemInterface eItem2 = new TestEntity12CollectionItemClass(); eItem2.setName("itm2"); final TestEntity12CollectionInterface eColl = new TestEntity12CollectionClass(); eColl.setItems(new ArrayList<TestEntity12CollectionItemInterface>()); eColl.getItems().add(eItem1); eColl.getItems().add(eItem2); final TestEntity12WrapCollectionInterface eWrap = new TestEntity12WrapCollectionClass(); eWrap.setCollectionWrapper(eColl); final TestDto12MapIterface dMap = new TestDto12dMapToCollectionClass(); final Assembler assembler = DTOAssembler.newCustomAssembler(dMap.getClass(), eWrap.getClass(), synthesizer); assembler.assembleDto(dMap, eWrap, null, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return TestDto12CollectionItemClass.class; } else if ("TestEntity12CollectionItemInterface".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("dtoItem".equals(entityBeanKey)) { return new TestDto12CollectionItemClass(); } else if ("dtoMap".equals(entityBeanKey)) { return new HashMap<Object, Object>(); } return null; } }); assertNotNull(dMap.getItems()); assertEquals(2, dMap.getItems().size()); final Set<String> keys = dMap.getItems().keySet(); for (String key : keys) { if ("itm1".equals(key)) { assertEquals("itm1", dMap.getItems().get(key).getName()); } else if ("itm2".equals(key)) { assertEquals("itm2", dMap.getItems().get(key).getName()); } else { fail("Unknown key"); } } final TestDto12CollectionItemClass dto3 = new TestDto12CollectionItemClass(); dto3.setName("itm3"); dMap.getItems().put("itm3", dto3); dMap.getItems().remove("itm1"); // first final Map<String, Object> converters = new HashMap<String, Object>(); converters.put("Test12KeyMapToEntityMatcher.class", new Test12KeyMapToEntityMatcher()); assembler.assembleEntity(dMap, eWrap, converters, new BeanFactory() { public Class getClazz(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return TestDto12CollectionClass.class; } else if ("entityItem".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } else if ("TestEntity12CollectionItemInterface".equals(entityBeanKey)) { return TestEntity12CollectionItemInterface.class; } return null; } public Object get(final String entityBeanKey) { if ("nestedEntity".equals(entityBeanKey)) { return new TestDto12CollectionClass(); } else if ("entityItem".equals(entityBeanKey)) { return new TestEntity12CollectionItemClass(); } return null; } }); assertNotNull(eWrap.getCollectionWrapper().getItems()); assertEquals(2, eWrap.getCollectionWrapper().getItems().size()); Iterator<TestEntity12CollectionItemInterface> eiter; eiter = eWrap.getCollectionWrapper().getItems().iterator(); final TestEntity12CollectionItemInterface itm1 = eiter.next(); final TestEntity12CollectionItemInterface itm2 = eiter.next(); assertEquals("itm2", itm1.getName()); assertEquals("itm3", itm2.getName()); } }