package net.sourceforge.stripes.examples.bugzooky.biz; import java.util.Date; import java.util.Map; import java.util.TreeMap; import java.util.List; import java.util.Collections; import java.util.ArrayList; /** * Maintains an in memory list of bugs in the system. * * @author Tim Fennell */ public class BugManager { /** Sequence number to use for generating IDs. */ private static int idSequence = 0; /** Storage for all known bugs. */ private static Map<Integer,Bug> bugs = new TreeMap<Integer,Bug>(); static { ComponentManager cm = new ComponentManager(); PersonManager pm = new PersonManager(); Bug bug = new Bug(); bug.setShortDescription("First ever bug in the system."); bug.setLongDescription("This is a test bug, and is the first one ever made."); bug.setOpenDate( new Date() ); bug.setStatus( Status.Resolved ); bug.setPriority( Priority.High ); bug.setComponent( cm.getComponent(0) ); bug.setOwner( pm.getPerson(3) ); saveOrUpdateInternal(bug); bug = new Bug(); bug.setShortDescription("Another bug! Oh no!."); bug.setLongDescription("How terrible - I found another bug."); bug.setOpenDate( new Date() ); bug.setStatus( Status.Assigned ); bug.setPriority( Priority.Blocker ); bug.setComponent( cm.getComponent(2) ); bug.setOwner( pm.getPerson(4) ); saveOrUpdateInternal(bug); bug = new Bug(); bug.setShortDescription("Three bugs? This is just getting out of hand."); bug.setLongDescription("What kind of system has three bugs? Egads."); bug.setOpenDate( new Date() ); bug.setStatus( Status.New ); bug.setPriority( Priority.High ); bug.setComponent( cm.getComponent(0) ); bug.setOwner( pm.getPerson(1) ); saveOrUpdateInternal(bug); bug = new Bug(); bug.setShortDescription("Oh good lord - I found a fourth bug."); bug.setLongDescription("That's it, you're all fired. I need some better developers."); bug.setOpenDate( new Date() ); bug.setStatus( Status.New ); bug.setPriority( Priority.Critical ); bug.setComponent( cm.getComponent(3) ); bug.setOwner( pm.getPerson(0) ); saveOrUpdateInternal(bug); bug = new Bug(); bug.setShortDescription("Development team gone missing."); bug.setLongDescription("No, wait! I didn't mean it! Please come back and fix the bugs!!"); bug.setOpenDate( new Date() ); bug.setStatus( Status.New ); bug.setPriority( Priority.Blocker ); bug.setComponent( cm.getComponent(2) ); bug.setOwner( pm.getPerson(5) ); saveOrUpdateInternal(bug); } /** Gets the bug with the corresponding ID, or null if it does not exist. */ public Bug getBug(int id) { return bugs.get(id); } /** Returns a sorted list of all bugs in the system. */ public List<Bug> getAllBugs() { return Collections.unmodifiableList( new ArrayList<Bug>(bugs.values()) ); } /** Updates an existing bug, or saves a new bug if the bug is a new one. */ public void saveOrUpdate(Bug bug) { saveOrUpdateInternal(bug); } /** Static helper so that it can be used both by the instance method, and in static init. */ private static void saveOrUpdateInternal(Bug bug) { if (bug.getId() == null) { bug.setId(idSequence++); } bugs.put(bug.getId(), bug); } }