/**
* ESUP-Portail Helpdesk - Copyright (c) 2004-2009 ESUP-Portail consortium.
*/
package org.esupportail.helpdesk.domain.userManagement.specific;
import java.util.ArrayList;
import java.util.List;
import org.esupportail.commons.exceptions.UserNotFoundException;
import org.esupportail.commons.services.authentication.AuthUtils;
import org.esupportail.commons.services.logging.Logger;
import org.esupportail.commons.services.logging.LoggerImpl;
import org.esupportail.helpdesk.domain.beans.User;
import org.esupportail.helpdesk.domain.userManagement.AbstractUserManager;
/**
* An XML-based user manager.
*/
public class XmlUserManagerImpl extends AbstractUserManager implements SpecificUserManager {
/**
* The prefix of users' id.
*/
private static String USER_ID_PREFIX = "xml-";
/**
* The serialization id.
*/
private static final long serialVersionUID = 5201541435806972416L;
/**
* A logger.
*/
private final Logger logger = new LoggerImpl(getClass());
/**
* The users.
*/
private List<BasicSpecificUser> specificUsers;
/**
* Constructor.
*/
public XmlUserManagerImpl() {
super(true);
}
/**
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
@Override
public void afterPropertiesSet() {
super.afterPropertiesSet();
}
/**
* @see org.esupportail.helpdesk.domain.userManagement.AbstractUserManager#getDatabasePrefix()
*/
@Override
protected String getDatabasePrefix() {
return USER_ID_PREFIX;
}
/**
* @see org.esupportail.helpdesk.domain.userManagement.UserManager#getAuthType()
*/
@Override
public String getAuthType() {
return AuthUtils.SPECIFIC;
}
/**
* @param realId
* @return the internal user with the given id.
* @throws UserNotFoundException
*/
protected BasicSpecificUser getSpecificUser(
final String realId) throws UserNotFoundException {
if (specificUsers != null) {
for (BasicSpecificUser specificUser : specificUsers) {
if (realId.equals(specificUser.getId())) {
return specificUser;
}
}
}
throw new UserNotFoundException("specific user [" + realId + "] not found");
}
/**
* @see org.esupportail.helpdesk.domain.userManagement.AbstractUserManager#getUserEmail(
* org.esupportail.helpdesk.domain.beans.User)
*/
@Override
public String getUserEmail(
final User user) {
try {
return getSpecificUser(user.getRealId()).getEmail();
} catch (UserNotFoundException e) {
return null;
}
}
/**
* @see org.esupportail.helpdesk.domain.userManagement.specific.SpecificUserManager#setUserInfo(
* org.esupportail.helpdesk.domain.beans.User)
*/
@Override
public boolean setUserInfo(
final User user) {
BasicSpecificUser specificUser = getSpecificUser(user.getRealId());
String displayName = specificUser.getDisplayName();
if (displayName.equals(user.getDisplayName())) {
return false;
}
user.setDisplayName(displayName);
return true;
}
/**
* @see org.esupportail.helpdesk.domain.userManagement.specific.SpecificUserManager#createUser(java.lang.String)
*/
@Override
public User createUser(final String realId) {
User user = newUser(realId);
setUserInfo(user);
getDaoService().addUser(user);
logger.info("Specific user [" + user.getRealId() + "] has been added to the database");
return user;
}
/**
* @see org.esupportail.helpdesk.domain.userManagement.specific.SpecificUserManager#getUserIdWithEmail(
* java.lang.String)
*/
@Override
public String getUserIdWithEmail(
final String email) {
if (specificUsers != null) {
for (BasicSpecificUser specificUser : specificUsers) {
if (email.equals(specificUser.getEmail())) {
return specificUser.getId();
}
}
}
return null;
}
/**
* @see org.esupportail.helpdesk.domain.userManagement.AbstractUserManager#getUserEmails(
* org.esupportail.helpdesk.domain.beans.User)
*/
@Override
public List<String> getUserEmails(
final User user) {
try {
List<String> emails = new ArrayList<String>();
emails.add(getSpecificUser(user.getRealId()).getEmail());
return emails;
} catch (UserNotFoundException e) {
// the user was probably removed from the LDAP directory
return null;
}
}
/**
* @see org.esupportail.helpdesk.domain.userManagement.specific.SpecificUserManager#authenticate(
* java.lang.String, java.lang.String)
*/
@Override
public boolean authenticate(
final String id,
final String password) {
if (specificUsers != null) {
for (BasicSpecificUser specificUser : specificUsers) {
if (id.equals(specificUser.getId()) && password.equals(specificUser.getPassword())) {
return true;
}
}
}
return false;
}
/**
* @return the specificUsers
*/
protected List<BasicSpecificUser> getSpecificUsers() {
return specificUsers;
}
/**
* @param specificUsers the specificUsers to set
*/
public void setSpecificUsers(final List<BasicSpecificUser> specificUsers) {
this.specificUsers = specificUsers;
}
}