package net.sourceforge.stripes.examples.bugzooky.biz; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.TreeMap; /** * Manager class that is used to access a "database" of people that is tracked in memory. */ public class PersonManager { /** Sequence counter for ID generation. */ private static int idSequence = 0; /** Stores the list of people in the system. */ private static Map<Integer,Person> people = new TreeMap<Integer,Person>(); static { Person person = new Person("scooby", "scooby", "Scooby", "Doo", "scooby@mystery.machine.tv"); saveOrUpdateInternal(person); person = new Person("shaggy", "shaggy", "Shaggy", "Rogers", "shaggy@mystery.machine.tv"); saveOrUpdateInternal(person); person = new Person("scrappy", "scrappy", "Scrappy", "Doo", "scrappy@mystery.machine.tv"); saveOrUpdateInternal(person); person = new Person("daphne", "daphne", "Daphne", "Blake", "daphne@mystery.machine.tv"); saveOrUpdateInternal(person); person = new Person("velma", "velma", "Velma", "Dinkly", "velma@mystery.machine.tv"); saveOrUpdateInternal(person); person = new Person("fred", "fred", "Fred", "Jones", "fred@mystery.machine.tv"); saveOrUpdateInternal(person); } /** Returns the person with the specified ID, or null if no such person exists. */ public Person getPerson(int id) { return people.get(id); } /** Returns a person with the specified username, if one exists. */ public Person getPerson(String username) { for (Person person : PersonManager.people.values()) { if (person.getUsername().equalsIgnoreCase(username)) { return person; } } return null; } /** Gets a list of all the people in the system. */ public List<Person> getAllPeople() { return Collections.unmodifiableList( new ArrayList<Person>(people.values()) ); } /** Updates the person if the ID matches an existing person, otherwise saves a new person. */ public void saveOrUpdate(Person person) { saveOrUpdateInternal(person); } /** * Deletes a person from the system...doesn't do anything fancy to clean up where the * person is used. */ public void deletePerson(int id) { people.remove(id); } private static void saveOrUpdateInternal(Person person) { if (person.getId() == null) { person.setId(idSequence++); } people.put(person.getId(), person); } }