package com.jadarstudios.developercapes.user;
import com.jadarstudios.developercapes.DevCapes;
import com.jadarstudios.developercapes.cape.CapeManager;
import com.jadarstudios.developercapes.cape.ICape;
import java.util.HashMap;
import java.util.Set;
/**
* @author jadar
*/
public enum UserManager {
INSTANCE;
protected HashMap<String, User> users;
private UserManager() {
this.users = new HashMap<String, User>();
}
public User getUser(String username) {
return this.users.get(username);
}
public void addUser(User user) throws NullPointerException {
if (user == null || user.username == null || user.username.isEmpty()) {
DevCapes.logger.error("Cannot add a null user.");
throw new NullPointerException();
}
this.users.put(user.username, user);
CapeManager.INSTANCE.addCapes(user.capes);
}
public void addUsers(Set<User> users) throws Exception {
for (User u : users) {
this.addUser(u);
}
}
public User newInstance(String username) {
User instance = null;
if (this.users.containsKey(username)) {
instance = this.getUser(username);
} else {
instance = new User(username);
this.users.put(username, instance);
}
return instance;
}
public User parse(Object user, Object cape) {
User userInstance = null;
if (!(user instanceof String)) {
DevCapes.logger.error(String.format("User %s could not be parsed because it was not a String!", user.toString()));
return userInstance;
}
userInstance = new User((String) user);
ICape capeInstance = CapeManager.INSTANCE.parse((String) user, cape);
if (capeInstance != null) {
userInstance.capes.add(capeInstance);
} else {
DevCapes.logger.info(String.format("Error parsing cape, %s", cape.toString()));
}
return userInstance;
}
}