/* * 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.assembler.examples.autowire.TestDto1Class; import com.inspiresoftware.lib.dto.geda.assembler.examples.autowire.TestEntity1Class; import com.inspiresoftware.lib.dto.geda.exception.GeDAException; import com.inspiresoftware.lib.dto.geda.exception.InvalidDtoCollectionException; import com.inspiresoftware.lib.dto.geda.exception.InvalidEntityCollectionException; 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.assertEquals; import static org.junit.Assert.assertNotNull; /** * DTOAssembler test. * * @author Denis Pavlov * @since 1.0.0 * */ @RunWith(value = ParameterizedSynthesizer.class) public class DTOAssemblerBatchTest { private String synthesizer; /** * @param synthesizer parameter */ public DTOAssemblerBatchTest(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 AssembleDtos throws {@link Exception} if dtos is null. * * @throws GeDAException exception */ @Test(expected = InvalidDtoCollectionException.class) public void testAssembleDtosThrowsExceptionForNullDtoCollection() throws GeDAException { final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, TestEntity1Class.class, synthesizer); assembler.assembleDtos(null, new ArrayList<TestEntity1Class>(), null, null); } /** * Test that AssembleDtos throws {@link Exception} if dtos is not empty. * * @throws GeDAException exception */ @Test(expected = InvalidDtoCollectionException.class) public void testAssembleDtosThrowsExceptionForNonEmptyDtoCollection() throws GeDAException { final List<TestDto1Class> dtos = new ArrayList<TestDto1Class>(); dtos.add(createTestDto1(0)); final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, TestEntity1Class.class, synthesizer); assembler.assembleDtos(dtos, new ArrayList<TestEntity1Class>(), null, null); } /** * Test that AssembleDtos throws {@link Exception} if entities is null. * * @throws GeDAException exception */ @Test(expected = InvalidDtoCollectionException.class) public void testAssembleDtosThrowsExceptionForNullEntitiesCollection() throws GeDAException { final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, TestEntity1Class.class, synthesizer); assembler.assembleDtos(new ArrayList<TestDto1Class>(), null, null, null); } /** * Test that AssembleDtos assembles dtos. * * @throws GeDAException exception */ @Test public void testAssembleDtos() throws GeDAException { final int totalEntities = 100000; final List<TestDto1Class> dtos = new ArrayList<TestDto1Class>(); final List<TestEntity1Class> entities = new ArrayList<TestEntity1Class>(); for (int index = 0; index < totalEntities; index++) { entities.add(createTestEntity1(index)); } final long timeStart = System.currentTimeMillis(); final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, TestEntity1Class.class, synthesizer); assembler.assembleDtos(dtos, entities, null, null); final long deltaTime = System.currentTimeMillis() - timeStart; System.out.println("Assembled " + totalEntities + " simple one level dto's from entities in about " + deltaTime + " millis"); assertEquals(totalEntities, dtos.size()); for (int index = 0; index < totalEntities; index++) { assertNotNull(entities.get(index).getNumber()); assertEquals(dtos.get(index).getMyDouble(), entities.get(index).getNumber()); assertNotNull(entities.get(index).getEntityId()); assertEquals(dtos.get(index).getMyLong(), entities.get(index).getEntityId()); assertNotNull(entities.get(index).getName()); assertEquals(dtos.get(index).getMyString(), entities.get(index).getName()); } } /** * Test that AssembleDtos assembles dtos. * * @throws GeDAException exception */ @Test public void testAssembleDtosAsMaps() throws GeDAException { final int totalEntities = 100000; final List<TestDto1Class> dtos = new ArrayList<TestDto1Class>(); final List<Map> entities = new ArrayList<Map>(); for (int index = 0; index < totalEntities; index++) { entities.add(createTestEntity1Map(index)); } final long timeStart = System.currentTimeMillis(); final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, Map.class, synthesizer); assembler.assembleDtos(dtos, entities, null, null); final long deltaTime = System.currentTimeMillis() - timeStart; System.out.println("Assembled " + totalEntities + " simple one level dto's from map in about " + deltaTime + " millis"); assertEquals(totalEntities, dtos.size()); for (int index = 0; index < totalEntities; index++) { assertNotNull(entities.get(index).get("myDouble")); assertEquals(dtos.get(index).getMyDouble(), entities.get(index).get("myDouble")); assertNotNull(entities.get(index).get("myLong")); assertEquals(dtos.get(index).getMyLong(), entities.get(index).get("myLong")); assertNotNull(entities.get(index).get("myString")); assertEquals(dtos.get(index).getMyString(), entities.get(index).get("myString")); } } /** * Test that AssembleDtos assembles dtos. * * @throws GeDAException exception */ @Test public void testAssembleDtosAsLists() throws GeDAException { final int totalEntities = 100000; final List<TestDto1Class> dtos = new ArrayList<TestDto1Class>(); final List<List> entities = new ArrayList<List>(); for (int index = 0; index < totalEntities; index++) { entities.add(createTestEntity1List(index)); } final long timeStart = System.currentTimeMillis(); final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, List.class, synthesizer); assembler.assembleDtos(dtos, entities, null, null); final long deltaTime = System.currentTimeMillis() - timeStart; System.out.println("Assembled " + totalEntities + " simple one level dto's from list in about " + deltaTime + " millis"); assertEquals(totalEntities, dtos.size()); for (int index = 0; index < totalEntities; index++) { assertNotNull(entities.get(index).get(5)); assertEquals(dtos.get(index).getMyDouble(), entities.get(index).get(5)); assertNotNull(entities.get(index).get(1)); assertEquals(dtos.get(index).getMyLong(), entities.get(index).get(1)); assertNotNull(entities.get(index).get(3)); assertEquals(dtos.get(index).getMyString(), entities.get(index).get(3)); } } /** * Test that AssembleEntities throws {@link Exception} if dto is null. * * @throws GeDAException exception */ @Test(expected = InvalidEntityCollectionException.class) public void testAssembleEntitiesThrowsExceptionForNullDtoCollection() throws GeDAException { final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, TestEntity1Class.class, synthesizer); assembler.assembleEntities(null, new ArrayList<TestEntity1Class>(), null, null); } /** * Test that AssembleEntitie throws {@link Exception} if entities is null. * * @throws GeDAException exception */ @Test(expected = InvalidEntityCollectionException.class) public void testAssembleEntitieThrowsExceptionForNullEntitiesCollection() throws GeDAException { final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, TestEntity1Class.class, synthesizer); assembler.assembleEntities(new ArrayList<TestDto1Class>(), null, null, null); } /** * Test that AssembleEntities throws {@link Exception} if entities is not empty. * * @throws GeDAException exception */ @Test(expected = InvalidEntityCollectionException.class) public void testAssembleEntitiesThrowsExceptionForNonEmptyEntityCollection() throws GeDAException { final List<TestEntity1Class> entities = new ArrayList<TestEntity1Class>(); entities.add(createTestEntity1(0)); final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, TestEntity1Class.class, synthesizer); assembler.assembleEntities(new ArrayList<TestDto1Class>(), entities, null, null); } /** * Test that AssembleEntities assembles entities. * * @throws GeDAException exception */ @Test public void testAssembleEntities() throws GeDAException { final int totalDtos = 100000; final List<TestDto1Class> dtos = new ArrayList<TestDto1Class>(); final List<TestEntity1Class> entities = new ArrayList<TestEntity1Class>(); for (int index = 0; index < totalDtos; index++) { dtos.add(createTestDto1(index)); } final long timeStart = System.currentTimeMillis(); final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, TestEntity1Class.class, synthesizer); assembler.assembleEntities(dtos, entities, null, null); final long deltaTime = System.currentTimeMillis() - timeStart; System.out.println("Assembled " + totalDtos + " simple one level entities in about " + deltaTime + " millis"); assertEquals(totalDtos, entities.size()); for (int index = 0; index < totalDtos; index++) { assertNotNull(entities.get(index).getNumber()); assertEquals(dtos.get(index).getMyDouble(), entities.get(index).getNumber()); assertNotNull(entities.get(index).getEntityId()); assertEquals(dtos.get(index).getMyLong(), entities.get(index).getEntityId()); assertNotNull(entities.get(index).getName()); assertEquals(dtos.get(index).getMyString(), entities.get(index).getName()); } } /** * Test that AssembleEntities assembles entities. * * @throws GeDAException exception */ @Test public void testAssembleEntitiesAsMaps() throws GeDAException { final int totalDtos = 100000; final List<TestDto1Class> dtos = new ArrayList<TestDto1Class>(); final List<Map> entities = new ArrayList<Map>(); for (int index = 0; index < totalDtos; index++) { dtos.add(createTestDto1(index)); } final long timeStart = System.currentTimeMillis(); final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, HashMap.class, synthesizer); assembler.assembleEntities(dtos, entities, null, null); final long deltaTime = System.currentTimeMillis() - timeStart; System.out.println("Assembled " + totalDtos + " simple one level maps in about " + deltaTime + " millis"); assertEquals(totalDtos, entities.size()); for (int index = 0; index < totalDtos; index++) { assertNotNull(entities.get(index).get("myDouble")); assertEquals(dtos.get(index).getMyDouble(), entities.get(index).get("myDouble")); assertNotNull(entities.get(index).get("myLong")); assertEquals(dtos.get(index).getMyLong(), entities.get(index).get("myLong")); assertNotNull(entities.get(index).get("myString")); assertEquals(dtos.get(index).getMyString(), entities.get(index).get("myString")); } } /** * Test that AssembleEntities assembles entities. * * @throws GeDAException exception */ @Test public void testAssembleEntitiesAsLists() throws GeDAException { final int totalDtos = 100000; final List<TestDto1Class> dtos = new ArrayList<TestDto1Class>(); final List<List> entities = new ArrayList<List>(); for (int index = 0; index < totalDtos; index++) { dtos.add(createTestDto1(index)); } final long timeStart = System.currentTimeMillis(); final Assembler assembler = DTOAssembler.newCustomAssembler(TestDto1Class.class, ArrayList.class, synthesizer); assembler.assembleEntities(dtos, entities, null, null); final long deltaTime = System.currentTimeMillis() - timeStart; System.out.println("Assembled " + totalDtos + " simple one level lists in about " + deltaTime + " millis"); assertEquals(totalDtos, entities.size()); for (int index = 0; index < totalDtos; index++) { assertNotNull(entities.get(index).get(5)); assertEquals(dtos.get(index).getMyDouble(), entities.get(index).get(5)); assertNotNull(entities.get(index).get(1)); assertEquals(dtos.get(index).getMyLong(), entities.get(index).get(1)); assertNotNull(entities.get(index).get(3)); assertEquals(dtos.get(index).getMyString(), entities.get(index).get(3)); } } private TestEntity1Class createTestEntity1(final int counter) { final TestEntity1Class entity = new TestEntity1Class(); entity.setEntityId(1L + counter); entity.setName("John Doe" + counter); entity.setNumber(2.0d + counter); return entity; } private Map<String, Object> createTestEntity1Map(final int counter) { final Map<String, Object> entity = new HashMap<String, Object>(); entity.put("myLong", 1L + counter); entity.put("myString", "John Doe" + counter); entity.put("myDouble", 2.0d + counter); return entity; } private List<Object> createTestEntity1List(final int counter) { final List<Object> entity = new ArrayList<Object>(); entity.add("myLong"); entity.add(1L + counter); entity.add("myString"); entity.add("John Doe" + counter); entity.add("myDouble"); entity.add(2.0d + counter); return entity; } private TestDto1Class createTestDto1(final int counter) { final TestDto1Class entity = new TestDto1Class(); entity.setMyLong(1L + counter); entity.setMyString("John Doe" + counter); entity.setMyDouble(2.0d + counter); return entity; } }