0,0 → 1,80 |
package ak.hostadmiral.core.action; |
|
import java.util.Set; |
import java.util.HashSet; |
import java.util.Iterator; |
|
import javax.servlet.http.HttpSessionListener; |
import javax.servlet.http.HttpSessionEvent; |
import javax.servlet.http.HttpSession; |
|
import org.apache.log4j.Logger; |
|
import org.apache.struts.Globals; |
|
import ak.hostadmiral.util.ModelException; |
import ak.hostadmiral.core.model.User; |
import ak.hostadmiral.core.model.UserManager; |
import ak.hostadmiral.core.model.UserModifiedListener; |
import ak.hostadmiral.core.servlet.SessionKeys; |
|
public final class UserUpdater |
implements UserModifiedListener, HttpSessionListener |
{ |
private static final Logger logger = Logger.getLogger(UserUpdater.class); |
|
protected Set sessions = new HashSet(); |
protected boolean registered = false; |
|
public UserUpdater() |
{ |
logger.info("registered for session events"); |
} |
|
protected void register() |
{ |
UserManager.getInstance().addModifiedListener(this); |
registered = true; |
|
logger.info("registered for user modifications"); |
} |
|
public void sessionCreated(HttpSessionEvent se) |
{ |
if(!registered) register(); // FIXME is application always initialized |
// before create a session? |
|
logger.info("add session"); |
sessions.add(se.getSession()); |
} |
|
public void sessionDestroyed(HttpSessionEvent se) |
{ |
if(!registered) register(); |
|
if(logger.isInfoEnabled()) { |
logger.info("remove session for " + se.getSession().getAttribute(SessionKeys.USER)); |
} |
|
sessions.remove(se.getSession()); |
} |
|
public void userModified(User editor, User user, User oldUser) |
throws ModelException |
{ |
logger.info("user modified: " + user); |
|
for(Iterator i = sessions.iterator(); i.hasNext(); ) { |
HttpSession s = (HttpSession)i.next(); |
User u = (User)s.getAttribute(SessionKeys.USER); |
|
if(u != null) { |
if(u.equals(oldUser)) { |
logger.info("update user"); |
s.setAttribute(SessionKeys.USER, user); |
s.setAttribute(Globals.LOCALE_KEY, user.getLocale()); |
} |
} |
} |
} |
} |