Package com.inspiresoftware.lib.dto.geda.examples.usecases.generics.extend

Source Code of com.inspiresoftware.lib.dto.geda.examples.usecases.generics.extend.RunWithGenericsExtend

/*
* 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.generics.extend;

import com.inspiresoftware.lib.dto.geda.adapter.BeanFactory;
import com.inspiresoftware.lib.dto.geda.assembler.Assembler;
import com.inspiresoftware.lib.dto.geda.assembler.DTOAssembler;

import java.util.*;

import static org.junit.Assert.*;

/**
* User: denispavlov
* Date: 13-04-23
* Time: 3:01 PM
*/
public class RunWithGenericsExtend {

    /**
     * Example showing complex extends generic i.e. &lt? extends MyClass&gt.
     *
     * EntityCode is extended by EntityCatalogCode
     * EntityCatalog includes a primary code and a set of codes
     * There is also a twist where catalog code has reference to catalog to show
     * some issues with recursive object graphs.
     */
    public void genericsExtendMapping() {

        final DtoCatalogClass<DtoCodeClass> dto = new DtoCatalogClass<DtoCodeClass>();
        final EntityCatalog<EntityCatalogCode> entity = new EntityCatalogClass<EntityCatalogCode>();
        final EntityCatalogCode entityCodePrime = new EntityCatalogCodeClass();
        final EntityCatalogCode entityCodeAdditional = new EntityCatalogCodeClass();


        entity.setId("ID-ABC");
        entityCodePrime.setCatalog(entity);
        entityCodePrime.setSectionName("AdvancedGenerics");
        entityCodePrime.setCode("CODE-AG1");
        entityCodePrime.setId("ID-123");
        entityCodeAdditional.setCatalog(entity);
        entityCodeAdditional.setSectionName("DtoTrandformations");
        entityCodeAdditional.setCode("CODE-DT1");
        entityCodeAdditional.setId("ID-235");
        entity.setType(entityCodePrime);
        entity.setCodes(new ArrayList<EntityCatalogCode>(Arrays.asList(entityCodePrime, entityCodeAdditional)));

        final Assembler assembler = DTOAssembler.newAssembler(dto.getClass(), entity.getClass());

        final Map<String, Object> adapters = new HashMap<String, Object>();
        adapters.put("CatalogCodeMatcher", new CatalogCodeMatcher());

        assembler.assembleDto(dto, entity, adapters, new BeanFactory() {
            public Class getClazz(final String entityBeanKey) {
                if ("DtoCatalogCode".equals(entityBeanKey)) {
                    return DtoCatalogCodeClass.class;
                } else if ("DtoCode".equals(entityBeanKey)) {
                    return DtoCodeClass.class;
                } else if ("DtoCatalog".equals(entityBeanKey)) {
                    return DtoCatalogClass.class;
                }
                fail("Unknown DTO key: " + entityBeanKey);
                return null;
            }

            public Object get(final String entityBeanKey) {
                if ("DtoCatalogCode".equals(entityBeanKey)) {
                    return new DtoCatalogCodeClass();
                } else if ("DtoCode".equals(entityBeanKey)) {
                    return new DtoCodeClass();
                } else if ("DtoCatalog".equals(entityBeanKey)) {
                    return new DtoCatalogClass();
                }
                fail("Unknown DTO key: " + entityBeanKey);
                return null;
            }
        });

        assertEquals("ID-ABC", dto.getId());

        final DtoCodeClass dtoType = dto.getType();
        assertNotNull(dtoType);
        assertEquals("ID-123", dtoType.getId());
        assertEquals("CODE-AG1", dtoType.getCode());

        final Collection<DtoCodeClass> dtoCodes = dto.getCodes();
        assertNotNull(dtoCodes);
        assertFalse(dtoCodes.isEmpty());
        // The collection is actually an ArrayList, so we will cheat a little
        final List<DtoCodeClass> dtoCodesAsList = (List) dtoCodes;
        assertEquals(2, dtoCodesAsList.size());

        final DtoCodeClass dtoCode1 = dtoCodesAsList.get(0);
        assertNotNull(dtoCode1);
        assertEquals("ID-123", dtoCode1.getId());
        assertEquals("CODE-AG1", dtoCode1.getCode());

        final DtoCodeClass dtoCode2 = dtoCodesAsList.get(1);
        assertNotNull(dtoCode2);
        assertEquals("ID-235", dtoCode2.getId());
        assertEquals("CODE-DT1", dtoCode2.getCode());

        final EntityCatalog<EntityCatalogCode> entityCopy = new EntityCatalogClass<EntityCatalogCode>();

        assembler.assembleEntity(dto, entityCopy, adapters, new BeanFactory() {
            public Class getClazz(final String entityBeanKey) {
                if ("CatalogCode".equals(entityBeanKey)) {
                    return EntityCatalogCodeClass.class;
                } else if ("Catalog".equals(entityBeanKey)) {
                    return EntityCatalogClass.class;
                }
                fail("Unknown Entity key: " + entityBeanKey);
                return null;
            }

            public Object get(final String entityBeanKey) {
                if ("CatalogCode".equals(entityBeanKey)) {
                    return new EntityCatalogCodeClass();
                } else if ("Catalog".equals(entityBeanKey)) {
                    return new EntityCatalogClass();
                }
                fail("Unknown Entity key: " + entityBeanKey);
                return null;
            }
        });

        assertEquals("ID-ABC", entityCopy.getId());

        final EntityCatalogCode entityCopyType = entityCopy.getType();
        assertNotNull(entityCopyType);

        assertEquals("ID-123", entityCopyType.getId());
        assertEquals("CODE-AG1", entityCopyType.getCode());
        assertNull(entityCopyType.getSectionName()); // This property is not part of mapping to prevent recursion
        assertNull(entityCopyType.getCatalog()); // This property is not part of mapping to prevent recursion

        final Collection<EntityCatalogCode> entityCopyCodes = entityCopy.getCodes();
        assertNotNull(entityCopyCodes);
        assertFalse(entityCopyCodes.isEmpty());
        // The collection is actually an ArrayList, so we will cheat a little
        final List<EntityCatalogCode> entityCopyCodesAsList = (List) entityCopyCodes;
        assertEquals(2, entityCopyCodesAsList.size());

        final EntityCatalogCode entityCopyCode1 = entityCopyCodesAsList.get(0);
        assertEquals("ID-123", entityCopyCode1.getId());
        assertEquals("CODE-AG1", entityCopyCode1.getCode());
        assertNull(entityCopyCode1.getSectionName()); // This property is not part of mapping to prevent recursion
        assertNull(entityCopyCode1.getCatalog()); // This property is not part of mapping to prevent recursion

        final EntityCatalogCode entityCopyCode2 = entityCopyCodesAsList.get(1);
        assertEquals("ID-235", entityCopyCode2.getId());
        assertEquals("CODE-DT1", entityCopyCode2.getCode());
        assertNull(entityCopyCode2.getSectionName()); // This property is not part of mapping to prevent recursion
        assertNull(entityCopyCode2.getCatalog()); // This property is not part of mapping to prevent recursion

    }


    public static void main(String[] args) {
        new RunWithGenericsExtend().genericsExtendMapping();
    }

}
TOP

Related Classes of com.inspiresoftware.lib.dto.geda.examples.usecases.generics.extend.RunWithGenericsExtend

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.