package models.database.HotDatabase;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import models.IMailbox;
import models.Mailbox;
import models.Notification;
import models.User;
import models.database.IUserDatabase;
import models.helpers.ICleanup;
public class HotUserDatabase implements IUserDatabase, ICleanup<User> {
/** Tracks all users by their lowercase(!) usernames. */
private final HashMap<String, User> users = new HashMap();
private final IMailbox moderatorMailbox = new Mailbox("Moderators");
public boolean isAvailable(String username) {
return get(username) == null;
}
public User register(String username, String password, String email) {
User user = new User(username, password, email, this);
users.put(username.toLowerCase(), user);
return user;
}
public User get(String name) {
return users.get(name.toLowerCase());
}
public Collection<User> all() {
return users.values();
}
public int count() {
return users.size();
}
public void clear(boolean keepAdmins) {
Collection<User> mods = this.allModerators();
users.clear();
for (Notification n : moderatorMailbox.getAllNotifications()) {
n.delete();
}
if (keepAdmins) {
for (User mod : mods) {
users.put(mod.getName().toLowerCase(), mod);
}
}
}
public Collection<User> allModerators() {
Set<User> moderators = new HashSet();
for (User user : users.values()) {
if (user.isModerator()) {
moderators.add(user);
}
}
return moderators;
}
public IMailbox getModeratorMailbox() {
return this.moderatorMailbox;
}
/**
* Remove all references to the <code>User</code> when it's being deleted
* (Callback method).
*
* @see models.helpers.ICleanup#cleanUp(java.lang.Object)
*/
public void cleanUp(User user) {
this.users.remove(user.getName().toLowerCase());
}
}