final ExtensibleBeanFactory bf = new SimpleMapExtensibleBeanFactory();
bf.registerDto("big", BigDto.class.getCanonicalName());
bf.registerDto("small", SmallDto.class.getCanonicalName());
bf.registerEntity("flatEntity", FlatEntity.class.getCanonicalName(), FlatEntity.class.getCanonicalName());
// our fat DTO
final BigDto dto = new BigDto();
dto.setSmall(new SmallDto());
dto.setOtherField("of");
dto.getSmall().setField("f");
final com.inspiresoftware.lib.dto.geda.dsl.Registry registryOption1 = Registries.registry(bf);
registryOption1.dto("small").forEntityGeneric().withField("field");
registryOption1.dto("big").forEntityGeneric().withField("otherField");
final FlatEntity entity1 = new FlatEntity();
// copy big dto fields
DTOAssembler.newAssembler(BigDto.class, entity1.getClass(), registryOption1).assembleEntity(dto, entity1, null, bf);
// copy small dto fields
DTOAssembler.newAssembler(SmallDto.class, entity1.getClass(), registryOption1).assembleEntity(dto.getSmall(), entity1, null, bf);
assertEquals(entity1.getField(), "f");
assertEquals(entity1.getOtherField(), "of");
final com.inspiresoftware.lib.dto.geda.dsl.Registry registryOption2 = Registries.registry(bf);
registryOption2.dto("big").forEntityGeneric()
.withField("otherField").and()
.withField("small").forField("field").converter("SmallToField");
final Map<String, Object> conv = new HashMap<String, Object>();
conv.put("SmallToField", new ValueConverter() {
public Object convertToDto(final Object object, final BeanFactory beanFactory) {
final String field1 = (String) object;
final SmallDto dto = new SmallDto();
dto.setField(field1);
return dto;
}
public Object convertToEntity(final Object object, final Object oldEntity, final BeanFactory beanFactory) {
if (object instanceof SmallDto) {
return ((SmallDto) object).getField();
}
return null;
}
});
final FlatEntity entity2 = new FlatEntity();
// copy big dto fields
DTOAssembler.newAssembler(BigDto.class, entity2.getClass(), registryOption2).assembleEntity(dto, entity2, conv, bf);
assertEquals(entity2.getField(), "f");
assertEquals(entity2.getOtherField(), "of");