package hudson.plugins.sfee;
import hudson.Extension;
import hudson.model.User;
import hudson.plugins.sfee.webservice.UserSoapRow;
import hudson.tasks.MailAddressResolver;
import hudson.tasks.UserNameResolver;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Resolves email addresses from SFEE IDs.
*
* @TODO sane caching
*
*/
public class SFEEMailAddressResolver {
private static SFEEMailAddressResolver INSTANCE = new SFEEMailAddressResolver();
private static Logger log = Logger.getLogger(SFEEMailAddressResolver.class
.getName());
private static String UNKNOWN = "unknown";
private final Map<String, String> emails = new HashMap<String, String>();
private final Map<String, String> names = new HashMap<String, String>();
private final MailAddressResolver mailAddressResolver = new MailAddressResolver() {
@Override
public synchronized String findMailAddressFor(User u) {
String result = emails.get(u.getId());
if (result == null) {
update();
result = emails.get(u.getId());
if (result == null) {
emails.put(u.getId(), UNKNOWN);
}
}
if (UNKNOWN.equals(result)) {
return null;
} else {
return result;
}
}
};
private final UserNameResolver userNameResolver = new UserNameResolver() {
@Override
public synchronized String findNameFor(User u) {
String result = names.get(u.getId());
if (result == null) {
update();
result = names.get(u.getId());
if (result == null) {
names.put(u.getId(), UNKNOWN);
}
}
if (UNKNOWN.equals(result)) {
return null;
} else {
return result;
}
}
};
public SFEEMailAddressResolver() {
update();
}
private void update() {
try {
SourceForgeSite site = SourceForgeSite.DESCRIPTOR.getSite();
if (site != null) {
UserSoapRow[] users = site.getUsers();
for (UserSoapRow user : users) {
emails.put(user.getUserName(), user.getEmail());
names.put(user.getUserName(), user.getFullName());
}
}
} catch (Exception e) {
log.log(Level.WARNING, "Error getting users", e);
}
}
@Extension
public static MailAddressResolver getMailAddressResolver() {
return INSTANCE.mailAddressResolver;
}
@Extension
public static UserNameResolver getUserNameResolver() {
return INSTANCE.userNameResolver;
}
}