com.inspiresoftware.lib.dto.geda.examples.blog.BlogRun 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.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();
}
}