All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.inspiresoftware.lib.dto.geda.examples.blog.BlogRun Maven / Gradle / Ivy

There is a newer version: 3.2.0
Show newest version
/*
 * 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.blog;

import com.inspiresoftware.lib.dto.geda.adapter.BeanFactory;
import com.inspiresoftware.lib.dto.geda.examples.blog.domain.User;
import com.inspiresoftware.lib.dto.geda.examples.blog.domain.UserEntry;
import com.inspiresoftware.lib.dto.geda.examples.blog.domain.UserEntryReply;
import com.inspiresoftware.lib.dto.geda.examples.blog.dto.BaseUserDTO;
import com.inspiresoftware.lib.dto.geda.examples.blog.dto.BaseUserEntryDTO;
import com.inspiresoftware.lib.dto.geda.examples.blog.dto.UserDTO;
import com.inspiresoftware.lib.dto.geda.examples.blog.dto.UserEntryDTO;
import com.inspiresoftware.lib.dto.geda.examples.blog.service.UserDAO;
import com.inspiresoftware.lib.dto.geda.examples.blog.service.UserService;
import com.inspiresoftware.lib.dto.geda.examples.blog.service.impl.BlogBeanFactory;
import com.inspiresoftware.lib.dto.geda.examples.blog.service.impl.UserDAOImpl;
import com.inspiresoftware.lib.dto.geda.examples.blog.service.impl.UserServiceImpl;

import java.util.List;

import static org.junit.Assert.*;

/**
 * User: denispavlov
 * Date: 13-04-22
 * Time: 3:30 PM
 */
public class BlogRun {

    private final UserDAO dao;
    private final UserService srv;

    public BlogRun(final UserDAO dao, final UserService srv) {
        this.dao = dao;
        this.srv = srv;
    }

    /*
     * Select user Bob.
     */
    public BaseUserDTO selectBob(final List list) {
        for (final BaseUserDTO user : list) {
            if ("Bob".equals(user.getUsername())) {
                return user;
            }
        }
        return null;
    }

    /*
     * Setup some dummy users with interlinked data.
     */
    public void setupUsers() {

        final User bob = dao.create("Bob");

        final UserEntry entry = bob.createEntry();
        entry.setTitle("GeDA");
        entry.setBody("Hey all, This GeDA stuff really works!!!");

        final User john = dao.create("John");
        final UserEntryReply reply = entry.createReply(john);
        reply.getReplyEntry().setBody("Awesome!");

    }

    /**
     * Running example of services that use GeDA behind the scenes to transfer data
     * between DTO and Entities.
     *
     * This example demonstrates some of the issues with recursive object references and
     * how to get around them by limiting your DTO data size.
     */
    public void assembleUsersAndBlogEntries() {

        setupUsers();

        final List list = srv.list();
        assertNotNull(list);
        assertEquals(list.size(), 2);

        // imitate user found Bob's account in list
        final BaseUserDTO bob = selectBob(list);
        assertNotNull(bob);

        // user clicks the Bob's account entry
        final UserDTO bobFull = srv.findUser(bob.getUserId());
        assertNotNull(bobFull);

        assertNotNull(bobFull.getEntries());
        assertEquals(bobFull.getEntries().size(), 1);

        // user selects first entry
        final BaseUserEntryDTO bobEntry = bobFull.getEntries().get(0);
        assertNotNull(bobEntry);

        // user clicks bob's entry to see replies
        final UserEntryDTO bobEntryFull = srv.findEntry(bobEntry.getEntryId());
        assertNotNull(bobEntryFull);
        assertEquals(bobEntryFull.getTitle(), "GeDA");
        assertEquals(bobEntryFull.getBody(), "Hey all, This GeDA stuff really works!!!");
        assertNotNull(bobEntryFull.getReplies());
        assertEquals(bobEntryFull.getReplies().size(), 1);


        // user finds the reply
        final BaseUserEntryDTO replyToBob = bobEntryFull.getReplies().get(0);
        assertNotNull(replyToBob);
        assertEquals(replyToBob.getTitle(), "RE: GeDA");
        assertEquals(replyToBob.getBody(), "Awesome!");

        // user clicks the reply to see full details
        final UserEntryDTO replyToBobFull = srv.findEntry(replyToBob.getEntryId());
        assertNotNull(replyToBobFull);
        assertNotNull(replyToBobFull.getUser());
        assertEquals(replyToBobFull.getUser().getUsername(), "John");

        // and so on...

    }

    /**
     * Running example of services that use GeDA behind the scenes to transfer data
     * between DTO and Entities.
     *
     * This example demonstrates how you can filter out some of the data by providing
     * parent DTO class as a filter.
     */
    public void assembleUsersAndBlogEntriesWithFilter() {

        setupUsers();

        // Here we load UserDTO but we will be using BaseUserDTO as
        // assembler class so we do not populate the object fully
        final List list = srv.list("BaseUserDTO");
        assertNotNull(list);
        assertEquals(list.size(), 2);
        assertNull(list.get(0).getEntries());

        // Here we load UserDTO but we will be using BaseUserDTO as
        // assembler class so we do not populate the object fully
        final List listFull = srv.list("UserDTO");
        assertNotNull(listFull);
        assertEquals(listFull.size(), 2);
        assertNotNull(listFull.get(0).getEntries());
        assertEquals(listFull.get(0).getEntries().size(), 1);


    }

    public static void main(String[] args) {

        final UserDAO dao = new UserDAOImpl();
        final BeanFactory bf = new BlogBeanFactory();
        final UserService srv = new UserServiceImpl(dao, bf);

        final BlogRun run = new BlogRun(dao, srv);

        run.setupUsers();
        run.assembleUsersAndBlogEntries();
        run.assembleUsersAndBlogEntriesWithFilter();

    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy