/*
* 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.composite.*;
import com.inspiresoftware.lib.dto.geda.exception.GeDAException;
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.ArrayList;
import java.util.Collection;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
/**
* DTOAssembler test.
*
* @author Denis Pavlov
* @since 2.0.2
*
*/
@RunWith(value = ParameterizedSynthesizer.class)
public class DTOAssemblerCompositeDtoTest {
private String synthesizer;
/**
* @param synthesizer parameter
*/
public DTOAssemblerCompositeDtoTest(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 several entity object types can be combined to a single DTO using
* composite assembler.
*
* @throws com.inspiresoftware.lib.dto.geda.exception.GeDAException exception
*/
@Test
public void testSimpleCompositeAssembly() throws GeDAException {
final TestEntity30Class e30 = new TestEntity30Class();
e30.setField30("v30");
final TestEntity31Class e31 = new TestEntity31Class();
e31.setField31("v31");
final TestEntity32Class e32 = new TestEntity32Class();
e32.setField32("v32");
final TestDto30Class dto = new TestDto30Class();
final Assembler asm = DTOAssembler.newCustomCompositeAssembler(
TestDto30Class.class,
new Class[] {TestEntity30Class.class, TestEntity31Class.class, TestEntity32Class.class },
this.synthesizer);
asm.assembleDto(dto, new Object[] { e30, e31, e32 }, null, null);
assertEquals(dto.getField30(), "v30");
assertEquals(dto.getField31(), "v31");
assertEquals(dto.getField32(), "v32");
dto.setField30("dto30");
dto.setField31("dto31");
dto.setField32("dto32");
asm.assembleEntity(dto, new Object[] { e30, e31, e32 }, null, null);
assertEquals(e30.getField30(), "dto30");
assertEquals(e31.getField31(), "dto31");
assertEquals(e32.getField32(), "dto32");
}
/**
* Test that composite DTO can be assembled from few parts only and composite
* DTO can update only few entities.
*
* @throws com.inspiresoftware.lib.dto.geda.exception.GeDAException exception
*/
@Test
public void testPartialSingleCompositeAssembly() throws GeDAException {
final TestEntity30Class e30 = new TestEntity30Class();
e30.setField30("v30");
final TestEntity31Class e31 = new TestEntity31Class();
e31.setField31("v31");
final TestEntity32Class e32 = new TestEntity32Class();
e32.setField32("v32");
final TestDto30Class dto = new TestDto30Class();
final Assembler asm = DTOAssembler.newCustomCompositeAssembler(
TestDto30Class.class,
new Class[] {TestEntity30Class.class, TestEntity31Class.class, TestEntity32Class.class },
this.synthesizer);
asm.assembleDto(dto, e31, null, null);
assertNull(dto.getField30());
assertEquals(dto.getField31(), "v31");
assertNull(dto.getField32());
dto.setField30("dto30");
dto.setField31("dto31");
dto.setField32("dto32");
asm.assembleEntity(dto, e31, null, null);
assertEquals(e30.getField30(), "v30");
assertEquals(e31.getField31(), "dto31");
assertEquals(e32.getField32(), "v32");
}
/**
* Test that composite DTO can be assembled from few parts only and composite
* DTO can update only few entities.
*
* @throws com.inspiresoftware.lib.dto.geda.exception.GeDAException exception
*/
@Test
public void testPartialManyCompositeAssembly() throws GeDAException {
final TestEntity30Class e30 = new TestEntity30Class();
e30.setField30("v30");
final TestEntity31Class e31 = new TestEntity31Class();
e31.setField31("v31");
final TestEntity32Class e32 = new TestEntity32Class();
e32.setField32("v32");
final TestDto30Class dto = new TestDto30Class();
final Assembler asm = DTOAssembler.newCustomCompositeAssembler(
TestDto30Class.class,
new Class[] {TestEntity30Class.class, TestEntity31Class.class, TestEntity32Class.class },
this.synthesizer);
asm.assembleDto(dto, new Object[] { e31, e32 }, null, null);
assertNull(dto.getField30());
assertEquals(dto.getField31(), "v31");
assertEquals(dto.getField32(), "v32");
dto.setField30("dto30");
dto.setField31("dto31");
dto.setField32("dto32");
asm.assembleEntity(dto, new Object[] { e30, e31 }, null, null);
assertEquals(e30.getField30(), "dto30");
assertEquals(e31.getField31(), "dto31");
assertEquals(e32.getField32(), "v32");
}
/**
* Test that several entity object types can be combined to a single DTO using
* composite assembler.
*
* @throws com.inspiresoftware.lib.dto.geda.exception.GeDAException exception
*/
@Test
public void testSimpleCompositeAssemblyOnInterface() throws GeDAException {
final TestEntity30Interface e30 = new TestEntity30Class();
e30.setField30("v30");
final TestEntity31Interface e31 = new TestEntity31Class();
e31.setField31("v31");
final TestEntity32Interface e32 = new TestEntity32Class();
e32.setField32("v32");
final TestDto30Class dto = new TestDto30Class();
final Assembler asm = DTOAssembler.newCustomCompositeAssembler(
TestDto30Class.class,
new Class[] {TestEntity30Interface.class, TestEntity31Interface.class, TestEntity32Interface.class },
this.synthesizer);
asm.assembleDto(dto, new Object[] { e30, e31, e32 }, null, null);
assertEquals(dto.getField30(), "v30");
assertEquals(dto.getField31(), "v31");
assertEquals(dto.getField32(), "v32");
dto.setField30("dto30");
dto.setField31("dto31");
dto.setField32("dto32");
asm.assembleEntity(dto, new Object[] { e30, e31, e32 }, null, null);
assertEquals(e30.getField30(), "dto30");
assertEquals(e31.getField31(), "dto31");
assertEquals(e32.getField32(), "dto32");
}
/**
* Test that several entity object types can be combined to a single DTO using
* composite assembler.
*
* @throws com.inspiresoftware.lib.dto.geda.exception.GeDAException exception
*/
@Test
public void testCollectionCompositeAssemblyOnInterface() throws GeDAException {
final TestEntity30Interface e30 = new TestEntity30Class();
e30.setField30("v30");
final TestEntity31Interface e31 = new TestEntity31Class();
e31.setField31("v31");
final TestEntity32Interface e32 = new TestEntity32Class();
e32.setField32("v32");
final Assembler asm = DTOAssembler.newCustomCompositeAssembler(
TestDto30Class.class,
new Class[] {TestEntity30Interface.class, TestEntity31Interface.class, TestEntity32Interface.class },
this.synthesizer);
final List<TestDto30Interface> dtos = new ArrayList<TestDto30Interface>();
final List<Object[]> entities = new ArrayList<Object[]>();
entities.add(new Object[] { e30, e31, e32 });
asm.assembleDtos(dtos, entities, null, null);
assertEquals(1, dtos.size());
final TestDto30Interface dto = dtos.get(0);
assertEquals(dto.getField30(), "v30");
assertEquals(dto.getField31(), "v31");
assertEquals(dto.getField32(), "v32");
}
/**
* Test that several entity object types can be combined to a single DTO using
* composite assembler.
*
* @throws com.inspiresoftware.lib.dto.geda.exception.GeDAException exception
*/
@Test
public void testCollectionPartialCompositeAssemblyOnInterface() throws GeDAException {
final TestEntity30Interface e30 = new TestEntity30Class();
e30.setField30("v30");
final TestEntity31Interface e31 = new TestEntity31Class();
e31.setField31("v31");
final TestEntity32Interface e32 = new TestEntity32Class();
e32.setField32("v32");
final Assembler asm = DTOAssembler.newCustomCompositeAssembler(
TestDto30Class.class,
new Class[] {TestEntity30Interface.class, TestEntity31Interface.class, TestEntity32Interface.class },
this.synthesizer);
final List<TestDto30Interface> dtos = new ArrayList<TestDto30Interface>();
final List<Object[]> entities = new ArrayList<Object[]>();
entities.add(new Object[] { e30 });
entities.add(new Object[] { e31 });
entities.add(new Object[] { e30, e31, e32 });
asm.assembleDtos(dtos, entities, null, null);
assertEquals(3, dtos.size());
final TestDto30Interface dto1 = dtos.get(0);
assertEquals(dto1.getField30(), "v30");
assertNull(dto1.getField31());
assertNull(dto1.getField32());
final TestDto30Interface dto2 = dtos.get(1);
assertNull(dto2.getField30());
assertEquals(dto2.getField31(), "v31");
assertNull(dto2.getField32());
final TestDto30Interface dto3 = dtos.get(2);
assertEquals(dto3.getField30(), "v30");
assertEquals(dto3.getField31(), "v31");
assertEquals(dto3.getField32(), "v32");
}
/**
* Test that composite dto collection to entities collection is not supported.
*
* @throws com.inspiresoftware.lib.dto.geda.exception.GeDAException exception
*/
@Test(expected = UnsupportedOperationException.class)
public void testCollectionToEntitiesCompositeAssemblyNotSupported() throws GeDAException {
final Assembler asm = DTOAssembler.newCustomCompositeAssembler(
TestDto30Class.class,
new Class[] {TestEntity30Interface.class, TestEntity31Interface.class, TestEntity32Interface.class },
this.synthesizer);
final List<TestDto30Interface> dtos = new ArrayList<TestDto30Interface>();
final TestDto30Interface dto1 = new TestDto30Class();
dto1.setField30("a");
dto1.setField31("b");
dto1.setField32("c");
dtos.add(dto1);
final List<Object[]> entities = new ArrayList<Object[]>();
asm.assembleEntities(dtos, entities, null, null);
}
}