/*
* Copyright 2007 Zhang, Zheng <oldbig@gmail.com>
*
* This file is part of ZOJ.
*
* ZOJ is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either revision 3 of the License, or (at your option) any later revision.
*
* ZOJ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with ZOJ. if not, see
* <http://www.gnu.org/licenses/>.
*/
package cn.edu.zju.acm.onlinejudge.util;
import cn.edu.zju.acm.onlinejudge.bean.UserProfile;
import cn.edu.zju.acm.onlinejudge.persistence.PersistenceCreationException;
import cn.edu.zju.acm.onlinejudge.persistence.PersistenceException;
import cn.edu.zju.acm.onlinejudge.persistence.UserPersistence;
import cn.edu.zju.acm.onlinejudge.util.cache.Cache;
public class UserManager {
private final Cache<UserProfile> userCache;
/**
* UserManager.
*/
private static UserManager instance = null;
/**
* <p>
* Constructor of UserManager class.
* </p>
*
* @throws PersistenceCreationException
*
*/
private UserManager() throws PersistenceCreationException {
this.userCache = new Cache<UserProfile>(60000, 200);
}
/**
* Gets the singleton instance.
*
* @return the singleton instance.
* @throws PersistenceCreationException
*/
public static UserManager getInstance() throws PersistenceCreationException {
if (UserManager.instance == null) {
synchronized (UserManager.class) {
if (UserManager.instance == null) {
UserManager.instance = new UserManager();
}
}
}
return UserManager.instance;
}
public UserProfile getUserProfile(long userId) throws PersistenceException {
Object key = new Long(userId);
synchronized (this.userCache) {
UserProfile user = this.userCache.get(key);
if (user == null) {
UserPersistence userPersistence = PersistenceManager.getInstance().getUserPersistence();
user = userPersistence.getUserProfile(userId);
this.userCache.put(key, user);
}
return user;
}
}
public void refresh(long userId) {
Object key = new Long(userId);
synchronized (this.userCache) {
this.userCache.remove(key);
}
}
}