Package com.inspiresoftware.lib.dto.geda.osgi

Source Code of com.inspiresoftware.lib.dto.geda.osgi.OSGiTest

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

import com.inspiresoftware.lib.dto.geda.adapter.ExtensibleBeanFactory;
import com.inspiresoftware.lib.dto.geda.dsl.Registry;
import com.inspiresoftware.lib.dto.geda.event.DTOEventListener;
import com.inspiresoftware.lib.dto.geda.osgi.test.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.ProbeBuilder;
import org.ops4j.pax.exam.TestProbeBuilder;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerMethod;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.inject.Inject;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.junit.Assert.*;
import static org.ops4j.pax.exam.CoreOptions.*;

/**
* User: denispavlov
* Date: 13-02-19
* Time: 2:23 PM
*/
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerMethod.class)
public class OSGiTest {

    @Inject
    private BundleContext bundleContext;

    @Configuration
    public Option[] configFelix() throws Exception{

        return options(
                cleanCaches(),
                mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.javassist", "3.12.1.ga_1").start(),
                mavenBundle("com.inspire-software.lib.dto.geda", "geda.osgi").versionAsInProject().start(),
                bootDelegationPackage("com.inspiresoftware.lib.dto.geda.osgi.test"),
                junitBundles()
        );
    }

    @ProbeBuilder
    public TestProbeBuilder probeConfiguration(TestProbeBuilder probe) {
        return probe;
    }

    @Test
    public void testServicesAreSetup() throws Exception {

        final Logger log = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);

        String vendor = bundleContext.getBundle(0).getHeaders().get(Constants.BUNDLE_VENDOR);
        if (vendor == null) {
            vendor = bundleContext.getBundle(0).getHeaders().get(Constants.BUNDLE_SYMBOLICNAME);
        }
        String version = bundleContext.getBundle(0).getHeaders().get(Constants.BUNDLE_VERSION);
        log.info("\n\nOSGi Framework : {} - {} \n\n", vendor, version);

        final ServiceReference<GeDAFacade> facadeReference =
                bundleContext.getServiceReference(GeDAFacade.class);
        assertNotNull(facadeReference);

        final GeDAFacade facade =
                bundleContext.getService(facadeReference);
        assertNotNull(facade);

    }

    @Test
    public void testAnnotationsSimpleByClass() throws Exception {

        final ServiceReference<GeDAFacade> facadeReference =
                bundleContext.getServiceReference(GeDAFacade.class);
        assertNotNull(facadeReference);

        final GeDAFacade facade =
                bundleContext.getService(facadeReference);
        assertNotNull(facade);

        final DTOSupportAnnotationsService annotationsService = facade.getAnnService(this.getClass().getClassLoader());

        final SimpleEntityClass entity = new SimpleEntityClass();
        entity.setString("aether");
        entity.setDecimal(new BigDecimal("28.97"));
        entity.setInteger(1);
        final SimpleDTOClass dto = new SimpleDTOClass();

        final DTOEventListener expectations = new ExpectationsDTOEventListener(new Object[] { dto, entity });

        annotationsService.addListener("onDtoAssembled", expectations);

        annotationsService.assembleDto(dto, entity, null, "simple");

        annotationsService.removeListener(expectations);

        assertEquals("aether", dto.getString());
        assertTrue(new BigDecimal("28.97").compareTo(dto.getDecimal()) == 0);
        assertEquals(1, dto.getInteger());

        final SimpleEntityClass copy = new SimpleEntityClass();

        annotationsService.assembleEntity(dto, copy, null, "copy");

        assertEquals("aether", copy.getString());
        assertTrue(new BigDecimal("28.97").compareTo(copy.getDecimal()) == 0);
        assertEquals(1, copy.getInteger());

    }

    @Test
    public void testAnnotationsSimpleByInterface() throws Exception {

        final ServiceReference<GeDAFacade> facadeReference =
                bundleContext.getServiceReference(GeDAFacade.class);
        assertNotNull(facadeReference);

        final GeDAFacade facade =
                bundleContext.getService(facadeReference);
        assertNotNull(facade);

        final DTOSupportAnnotationsService annotationsService = facade.getAnnService(this.getClass().getClassLoader());

        final SimpleEntity entity = new SimpleEntityClass();
        entity.setString("aether");
        entity.setDecimal(new BigDecimal("28.97"));
        entity.setInteger(1);
        final SimpleDTO dto = new SimpleDTOClass();

        final DTOEventListener expectations = new ExpectationsDTOEventListener(new Object[] { dto, entity });

        annotationsService.addListener("onDtoAssembled", expectations);

        annotationsService.assembleDto(dto, entity, null, "simple");

        annotationsService.removeListener(expectations);

        assertEquals("aether", dto.getString());
        assertTrue(new BigDecimal("28.97").compareTo(dto.getDecimal()) == 0);
        assertEquals(1, dto.getInteger());

        final SimpleEntity copy = new SimpleEntityClass();

        annotationsService.assembleEntity(dto, copy, null, "copy");

        assertEquals("aether", copy.getString());
        assertTrue(new BigDecimal("28.97").compareTo(copy.getDecimal()) == 0);
        assertEquals(1, copy.getInteger());

    }


    @Test
    public void testAnnotationsComplex() throws Exception {

        final ServiceReference<GeDAFacade> facadeReference =
                bundleContext.getServiceReference(GeDAFacade.class);
        assertNotNull(facadeReference);

        final GeDAFacade facade =
                bundleContext.getService(facadeReference);
        assertNotNull(facade);

        final ExtensibleBeanFactory beanFactory = facade.createBeanFactory(this.getClass().getClassLoader());
        final DTOSupportAnnotationsService annotationsService = facade.getAnnService(this.getClass().getClassLoader());

        beanFactory.registerDto("SimpleDTO",
                "com.inspiresoftware.lib.dto.geda.osgi.test.SimpleDTOClass");
        beanFactory.registerEntity("SimpleEntity",
                "com.inspiresoftware.lib.dto.geda.osgi.test.SimpleEntityClass",
                "com.inspiresoftware.lib.dto.geda.osgi.test.SimpleEntity");
        beanFactory.registerDto("ComplexDTO",
                "com.inspiresoftware.lib.dto.geda.osgi.test.ComplexDTOClass");
        beanFactory.registerEntity("ComplexEntity",
                "com.inspiresoftware.lib.dto.geda.osgi.test.ComplexEntityClass",
                "com.inspiresoftware.lib.dto.geda.osgi.test.ComplexEntity");
        annotationsService.registerAdapter("EqualsByString", new EqualsByStringMatcher());

        final SimpleEntity inner = (SimpleEntity) beanFactory.get("SimpleEntity");
        inner.setString("aether");
        inner.setDecimal(new BigDecimal("28.97"));
        inner.setInteger(1);

        final SimpleEntity colItem = (SimpleEntity) beanFactory.get("SimpleEntity");
        colItem.setString("aqua");
        colItem.setDecimal(new BigDecimal("18.0153"));
        colItem.setInteger(2);
        final List<SimpleEntity> col = new ArrayList<SimpleEntity>();
        col.add(colItem);

        final SimpleEntity mapItem = (SimpleEntity) beanFactory.get("SimpleEntity");
        mapItem.setString("terra");
        mapItem.setDecimal(new BigDecimal("150"));
        mapItem.setInteger(3);
        final Map<String, SimpleEntity> map = new HashMap<String, SimpleEntity>();
        map.put(mapItem.getString(), mapItem);

        final ComplexEntity entity = (ComplexEntity) beanFactory.get("ComplexEntity");
        entity.setName("elements");
        entity.setInner(inner);
        entity.setCollection(col);
        entity.setMap(map);

        final ComplexDTO dto = (ComplexDTO) beanFactory.get("ComplexDTO");

        final DTOEventListener expectations = new ExpectationsDTOEventListener(new Object[] { dto, entity });

        annotationsService.addListener("onDtoAssembled", expectations);

        annotationsService.assembleDto(dto, entity, beanFactory, "simple");

        annotationsService.removeListener(expectations);

        assertEquals("elements", dto.getName());

        final SimpleDTO dtoInner = dto.getInner();
        assertNotNull(dtoInner);
        assertEquals("aether", dtoInner.getString());
        assertTrue(new BigDecimal("28.97").compareTo(dtoInner.getDecimal()) == 0);
        assertEquals(1, dtoInner.getInteger());

        final List<SimpleDTO> dtoCol = dto.getCollection();
        assertNotNull(dtoCol);
        assertEquals(1, dtoCol.size());
        final SimpleDTO dtoColItem = dtoCol.get(0);
        assertNotNull(dtoColItem);
        assertEquals("aqua", dtoColItem.getString());
        assertTrue(new BigDecimal("18.0153").compareTo(dtoColItem.getDecimal()) == 0);
        assertEquals(2, dtoColItem.getInteger());

        final Map<String, SimpleDTO> dtoMap = dto.getMap();
        assertNotNull(dtoMap);
        assertEquals(1, dtoMap.size());
        final Map.Entry<String, SimpleDTO> dtoMapItem = dtoMap.entrySet().iterator().next();
        assertNotNull(dtoMapItem);
        assertEquals("terra", dtoMapItem.getKey());
        assertNotNull(dtoMapItem.getValue());
        assertEquals("terra", dtoMapItem.getValue().getString());
        assertTrue(new BigDecimal("150").compareTo(dtoMapItem.getValue().getDecimal()) == 0);
        assertEquals(3, dtoMapItem.getValue().getInteger());

        final ComplexEntity copy = new ComplexEntityClass();

        annotationsService.assembleEntity(dto, copy, beanFactory, "copy");

        assertEquals("elements", copy.getName());

        final SimpleEntity copyInner = copy.getInner();
        assertNotNull(copyInner);
        assertEquals("aether", copyInner.getString());
        assertTrue(new BigDecimal("28.97").compareTo(copyInner.getDecimal()) == 0);
        assertEquals(1, copyInner.getInteger());

        final List<SimpleEntity> copyCol = copy.getCollection();
        assertNotNull(copyCol);
        assertEquals(1, copyCol.size());
        final SimpleEntity copyColItem = copyCol.get(0);
        assertNotNull(copyColItem);
        assertEquals("aqua", copyColItem.getString());
        assertTrue(new BigDecimal("18.0153").compareTo(copyColItem.getDecimal()) == 0);
        assertEquals(2, copyColItem.getInteger());

        final Map<String, SimpleEntity> copyMap = copy.getMap();
        assertNotNull(copyMap);
        assertEquals(1, copyMap.size());
        final Map.Entry<String, SimpleEntity> copyMapItem = copyMap.entrySet().iterator().next();
        assertNotNull(copyMapItem);
        assertEquals("terra", copyMapItem.getKey());
        assertNotNull(copyMapItem.getValue());
        assertEquals("terra", copyMapItem.getValue().getString());
        assertTrue(new BigDecimal("150").compareTo(copyMapItem.getValue().getDecimal()) == 0);
        assertEquals(3, copyMapItem.getValue().getInteger());

    }

    @Test
    public void testDSLSimple() throws Exception {

        final ServiceReference<GeDAFacade> facadeReference =
                bundleContext.getServiceReference(GeDAFacade.class);
        assertNotNull(facadeReference);

        final GeDAFacade facade =
                bundleContext.getService(facadeReference);
        assertNotNull(facade);

        final ExtensibleBeanFactory beanFactory = facade.createBeanFactory(this.getClass().getClassLoader());
        final DTOSupportDSLService dslService = facade.getDSLService(this.getClass().getClassLoader());
        Registry basic = dslService.getRegistry("basic");
        if (basic == null) {
            basic = dslService.createRegistry("basic", beanFactory);
            basic.dto(SimpleDTOClass.class).alias("SimpleDTO").forEntityGeneric()
                    .withField("string").and().withField("decimal").and().withField("integer");
        }

        final SimpleEntity entity = new SimpleEntityClass();
        entity.setString("aether");
        entity.setDecimal(new BigDecimal("28.97"));
        entity.setInteger(1);
        final SimpleDTO dto = new SimpleDTOClass();

        final DTOEventListener expectations = new ExpectationsDTOEventListener(new Object[] { dto, entity });

        dslService.addListener("onDtoAssembled", expectations);

        dslService.assembleDto(dto, entity, basic, "simple");

        dslService.removeListener(expectations);

        assertEquals("aether", dto.getString());
        assertTrue(new BigDecimal("28.97").compareTo(dto.getDecimal()) == 0);
        assertEquals(1, dto.getInteger());

        final SimpleEntity copy = new SimpleEntityClass();

        dslService.assembleEntity(dto, copy, basic, "copy");

        assertEquals("aether", copy.getString());
        assertTrue(new BigDecimal("28.97").compareTo(copy.getDecimal()) == 0);
        assertEquals(1, copy.getInteger());

    }


    @Test
    public void testDSLComplex() throws Exception {

        final ServiceReference<GeDAFacade> facadeReference =
                bundleContext.getServiceReference(GeDAFacade.class);
        assertNotNull(facadeReference);

        final GeDAFacade facade =
                bundleContext.getService(facadeReference);
        assertNotNull(facade);

        final ExtensibleBeanFactory beanFactory = facade.createBeanFactory(this.getClass().getClassLoader());
        final DTOSupportDSLService dslService = facade.getDSLService(this.getClass().getClassLoader());
        Registry basic = dslService.getRegistry("basic");
        if (basic == null) {

            beanFactory.registerEntity("SimpleEntity",
                    "com.inspiresoftware.lib.dto.geda.osgi.test.SimpleEntityClass",
                    "com.inspiresoftware.lib.dto.geda.osgi.test.SimpleEntity");

            basic = dslService.createRegistry("basic", beanFactory);
            basic.dto(SimpleDTOClass.class).alias("SimpleDTO").forEntityGeneric()
                    .withField("string").and().withField("decimal").and().withField("integer");
            basic.dto(ComplexDTOClass.class).alias("ComplexDTO").forEntityGeneric()
                    .withField("name").and()
                    .withField("inner")
                        .dtoBeanKey("SimpleDTO")
                        .entityBeanKeys("SimpleEntity").and()
                    .withCollection("collection")
                        .dtoBeanKey("SimpleDTO")
                        .entityBeanKeys("SimpleEntity")
                        .dtoToEntityMatcherKey("EqualsByString").and()
                    .withMap("map")
                        .dtoBeanKey("SimpleDTO")
                        .entityBeanKeys("SimpleEntity")
                        .dtoToEntityMatcherKey("EqualsByString").and();

        }

        dslService.registerAdapter("EqualsByString", new EqualsByStringMatcher());


        final SimpleEntity inner = new SimpleEntityClass();
        inner.setString("aether");
        inner.setDecimal(new BigDecimal("28.97"));
        inner.setInteger(1);

        final SimpleEntity colItem = new SimpleEntityClass();
        colItem.setString("aqua");
        colItem.setDecimal(new BigDecimal("18.0153"));
        colItem.setInteger(2);
        final List<SimpleEntity> col = new ArrayList<SimpleEntity>();
        col.add(colItem);

        final SimpleEntity mapItem = new SimpleEntityClass();
        mapItem.setString("terra");
        mapItem.setDecimal(new BigDecimal("150"));
        mapItem.setInteger(3);
        final Map<String, SimpleEntity> map = new HashMap<String, SimpleEntity>();
        map.put(mapItem.getString(), mapItem);

        final ComplexEntity entity = new ComplexEntityClass();
        entity.setName("elements");
        entity.setInner(inner);
        entity.setCollection(col);
        entity.setMap(map);

        final ComplexDTO dto = new ComplexDTOClass();

        final DTOEventListener expectations = new ExpectationsDTOEventListener(new Object[] { dto, entity });

        dslService.addListener("onDtoAssembled", expectations);

        dslService.assembleDto(dto, entity, basic, "simple");

        dslService.removeListener(expectations);


        assertEquals("elements", dto.getName());

        final SimpleDTO dtoInner = dto.getInner();
        assertNotNull(dtoInner);
        assertEquals("aether", dtoInner.getString());
        assertTrue(new BigDecimal("28.97").compareTo(dtoInner.getDecimal()) == 0);
        assertEquals(1, dtoInner.getInteger());

        final List<SimpleDTO> dtoCol = dto.getCollection();
        assertNotNull(dtoCol);
        assertEquals(1, dtoCol.size());
        final SimpleDTO dtoColItem = dtoCol.get(0);
        assertNotNull(dtoColItem);
        assertEquals("aqua", dtoColItem.getString());
        assertTrue(new BigDecimal("18.0153").compareTo(dtoColItem.getDecimal()) == 0);
        assertEquals(2, dtoColItem.getInteger());

        final Map<String, SimpleDTO> dtoMap = dto.getMap();
        assertNotNull(dtoMap);
        assertEquals(1, dtoMap.size());
        final Map.Entry<String, SimpleDTO> dtoMapItem = dtoMap.entrySet().iterator().next();
        assertNotNull(dtoMapItem);
        assertEquals("terra", dtoMapItem.getKey());
        assertNotNull(dtoMapItem.getValue());
        assertEquals("terra", dtoMapItem.getValue().getString());
        assertTrue(new BigDecimal("150").compareTo(dtoMapItem.getValue().getDecimal()) == 0);
        assertEquals(3, dtoMapItem.getValue().getInteger());

        final ComplexEntity copy = new ComplexEntityClass();

        dslService.assembleEntity(dto, copy, basic, "copy");

        assertEquals("elements", copy.getName());

        final SimpleEntity copyInner = copy.getInner();
        assertNotNull(copyInner);
        assertEquals("aether", copyInner.getString());
        assertTrue(new BigDecimal("28.97").compareTo(copyInner.getDecimal()) == 0);
        assertEquals(1, copyInner.getInteger());

        final List<SimpleEntity> copyCol = copy.getCollection();
        assertNotNull(copyCol);
        assertEquals(1, copyCol.size());
        final SimpleEntity copyColItem = copyCol.get(0);
        assertNotNull(copyColItem);
        assertEquals("aqua", copyColItem.getString());
        assertTrue(new BigDecimal("18.0153").compareTo(copyColItem.getDecimal()) == 0);
        assertEquals(2, copyColItem.getInteger());

        final Map<String, SimpleEntity> copyMap = copy.getMap();
        assertNotNull(copyMap);
        assertEquals(1, copyMap.size());
        final Map.Entry<String, SimpleEntity> copyMapItem = copyMap.entrySet().iterator().next();
        assertNotNull(copyMapItem);
        assertEquals("terra", copyMapItem.getKey());
        assertNotNull(copyMapItem.getValue());
        assertEquals("terra", copyMapItem.getValue().getString());
        assertTrue(new BigDecimal("150").compareTo(copyMapItem.getValue().getDecimal()) == 0);
        assertEquals(3, copyMapItem.getValue().getInteger());

    }




}
TOP

Related Classes of com.inspiresoftware.lib.dto.geda.osgi.OSGiTest

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.