com.inspiresoftware.lib.dto.geda.examples.usecases.dsl.RunDSLReuseMapping Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of geda.examples Show documentation
Show all versions of geda.examples Show documentation
Provides several examples of use of GeDA
/*
* 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.examples.usecases.dsl;
import com.inspiresoftware.lib.dto.geda.adapter.BeanFactory;
import com.inspiresoftware.lib.dto.geda.adapter.EntityRetriever;
import com.inspiresoftware.lib.dto.geda.adapter.ExtensibleBeanFactory;
import com.inspiresoftware.lib.dto.geda.adapter.ValueConverter;
import com.inspiresoftware.lib.dto.geda.assembler.DTOAssembler;
import com.inspiresoftware.lib.dto.geda.dsl.Registries;
import com.inspiresoftware.lib.dto.geda.examples.usecases.SimpleMapExtensibleBeanFactory;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.*;
/**
* User: denispavlov
* Date: 13-04-22
* Time: 5:59 PM
*/
public class RunDSLReuseMapping {
/**
* Example of how mapping from one DTO-Entity context can be copied to
* another DTO-Entity context to reduce code duplication.
*/
public void reuseMapping() {
final ExtensibleBeanFactory bf = new SimpleMapExtensibleBeanFactory();
final com.inspiresoftware.lib.dto.geda.dsl.Registry registry = Registries.registry(bf);
bf.registerDto("myDto", MyDtoClass.class.getCanonicalName());
bf.registerDto("myDtoField3Dto", MyDtoField3Class.class.getCanonicalName());
bf.registerEntity("myEntityField3Entity", MyEntityField3Class.class.getCanonicalName(), MyEntityField3Class.class.getCanonicalName());
bf.registerDto("field4ParentDto", MyDtoField4Class.class.getCanonicalName());
bf.registerEntity("field4ParentEntity", MyEntityField4Class.class.getCanonicalName(), MyEntityField4Class.class.getCanonicalName());
registry
// main mapping
.dto("myDto").forEntity(MyEntity.class)
// field 1
.withField("field1").forField("field1")
.readOnly()
.converter("field1Converter")
// field 2
.and()
.withField("field2").forField("field2.subField1").entityBeanKeys("field2")
// field 5
.and()
.withField("field5virtual").forVirtual()
.converter("field5VirtualConverter")
;
registry.dto("myDto").useContextFor(
registry
// main mapping
.dto("myDto").forEntity(MyEntity.class),
Map.class
);
final Map conv = new HashMap();
conv.put("field1Converter", new ValueConverter() {
public Object convertToDto(final Object object, final BeanFactory beanFactory) {
final MyEntity.Field1 field1 = (MyEntity.Field1) object;
return Boolean.valueOf(field1 == MyEntity.Field1.YES);
}
public Object convertToEntity(final Object object, final Object oldEntity, final BeanFactory beanFactory) {
if ((Boolean) object) {
return MyEntity.Field1.YES;
}
return MyEntity.Field1.NO;
}
});
conv.put("field5VirtualConverter", new ValueConverter() {
public Object convertToDto(final Object object, final BeanFactory beanFactory) {
return String.valueOf(object.hashCode());
}
public Object convertToEntity(final Object object, final Object oldEntity, final BeanFactory beanFactory) {
((Map) oldEntity).put("virtual5", object);
return null;
}
});
conv.put("parentFieldEntityById", new EntityRetriever() {
public Object retrieveByPrimaryKey(final Class entityInterface, final Class entityClass, final Object primaryKey) {
final MyEntityField4Class parent = new MyEntityField4Class();
parent.setId(99L);
parent.setSubField1("Parent 99");
return parent;
}
});
// create asm for interface
DTOAssembler.newAssembler(MyDtoClass.class, Map.class, registry);
final Map entity = new HashMap();
entity.put("field1", MyEntity.Field1.YES);
entity.put("field2", "my sub data 1");
entity.put("field5virtual", "virtual");
final MyDtoClass dto = new MyDtoClass();
// create asm for class and make sure it picks up on interface
DTOAssembler.newAssembler(MyDtoClass.class, entity.getClass(), registry).assembleDto(dto, entity, conv, bf);
assertTrue(dto.getField1());
assertEquals(dto.getField2(), "my sub data 1");
assertEquals(dto.getField5virtual(), String.valueOf(entity.hashCode()));
final Map toEntity = new HashMap();
// create asm for class and make sure it picks up on interface
DTOAssembler.newAssembler(MyDtoClass.class, entity.getClass(), registry).assembleEntity(dto, toEntity, conv, bf);
assertNull(toEntity.get("field1")); // it is read only
assertEquals(toEntity.get("field2"), "my sub data 1");
assertEquals(toEntity.get("virtual5"), dto.getField5virtual());
}
public static void main(String[] args) {
new RunDSLReuseMapping().reuseMapping();
}
}