package scrum.client.admin;
import ilarkesto.core.base.Str;
import ilarkesto.core.base.Utl;
import ilarkesto.core.scope.Scope;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import scrum.client.ScrumScopeManager;
import scrum.client.collaboration.UsersStatus;
import scrum.client.project.Project;
public class User extends GUser {
public static final String INITIAL_NAME = "newuser";
public static final String INITIAL_PASSWORD = "geheim";
public User() {
setName(getNextNewUserName());
}
public User(Map data) {
super(data);
}
private String getNextNewUserName() {
int index = 1;
while (true) {
String name = "newuser" + index;
if (getDao().getUserByName(name) == null) return name;
index++;
}
}
public ProjectUserConfig getProjectConfig() {
return ScrumScopeManager.getProject().getUserConfig(this);
}
public List<Project> getProjects() {
List<Project> ret = new ArrayList<Project>();
for (Project project : getDao().getProjects()) {
if (project.isParticipant(this)) ret.add(project);
}
return ret;
}
public int compareTo(User u) {
return getName().compareTo(u.getName());
}
@Override
public String toString() {
return getName();
}
@Override
public EmailModel getEmailModel() {
return new EmailModel() {
@Override
public void setValue(String value) {
if (!Str.isEmail(value)) throw new RuntimeException("Invalid email.");
super.setValue(value);
}
};
}
public static final Comparator<User> LAST_LOGIN_COMPARATOR = new Comparator<User>() {
@Override
public int compare(User a, User b) {
return Utl.compare(b.getLastLoginDateAndTime(), a.getLastLoginDateAndTime());
}
};
public static final Comparator<User> NAME_COMPARATOR = new Comparator<User>() {
@Override
public int compare(User a, User b) {
return a.getName().compareTo(b.getName());
}
};
public transient static final Comparator<User> ONLINE_OFFLINE_COMPARATOR = new Comparator<User>() {
@Override
public int compare(User a, User b) {
UsersStatus usersStatus = Scope.get().getComponent(UsersStatus.class);
boolean aOnline = usersStatus.isOnline(a);
boolean bOnline = usersStatus.isOnline(b);
if (aOnline == bOnline) return a.getName().compareTo(b.getName());
if (aOnline) return -1;
return 1;
}
};
}