1 25 package org.snipsnap.user; 26 27 import org.snipsnap.container.Components; 28 import org.snipsnap.snip.storage.UserStorage; 29 import org.snipsnap.util.ApplicationAwareMap; 30 import org.snipsnap.util.ApplicationAwareIntegerMap; 31 import org.snipsnap.jdbc.IntHolder; 32 33 import java.sql.Timestamp ; 34 import java.util.*; 35 36 43 44 public class DefaultUserManager implements UserManager { 45 private ApplicationAwareIntegerMap countCache; 47 private ApplicationAwareMap missingCache; 48 49 private List delayed; 51 private UserStorage storage; 53 public static final int MILLISECS_PER_MINUTE = 60 * 1000; 54 55 public DefaultUserManager(UserStorage storage) { 56 this.storage = storage; 57 58 delayed = new LinkedList(); 59 60 countCache = new ApplicationAwareIntegerMap(HashMap.class); 61 missingCache = new ApplicationAwareMap(HashMap.class, ArrayList.class); 62 63 Timer timer = new Timer(); 64 timer.schedule(new TimerTask() { 65 public void run() { 66 synchronized (delayed) { 67 ListIterator iterator = delayed.listIterator(); 68 while (iterator.hasNext()) { 69 User user = (User) iterator.next(); 70 systemStore(user); 71 iterator.remove(); 72 } 73 } 74 } 75 }, 5 * MILLISECS_PER_MINUTE, 5 * MILLISECS_PER_MINUTE); 78 } 79 80 85 public List getAll() { 86 return storage.storageAll(); 87 } 88 89 93 public int getUserCount() { 94 IntHolder holder = countCache.getIntHolder(); 95 int count = holder.getValue(); 96 if (-1 == count) { 97 count = storage.storageUserCount(); 98 holder.setValue(count); 99 } 100 return count; 101 } 102 103 111 public User create(String login, String passwd, String email) { 112 User user = storage.storageCreate(login, passwd, email); 113 IntHolder holder = countCache.getIntHolder(); 114 if(holder.getValue() == -1) { 115 holder.setValue(storage.storageUserCount()); 116 } 117 holder.inc(); 118 return user; 120 } 121 122 127 public void store(User user) { 128 user.setMTime(new Timestamp (new Date().getTime())); 129 storage.storageStore(user); 130 return; 131 } 132 133 141 public void delayedStore(User user) { 142 synchronized (delayed) { 143 if (!delayed.contains(user)) { 144 delayed.add(user); 145 } 146 } 147 } 148 149 155 public void systemStore(User user) { 156 storage.storageStore(user); 157 return; 158 } 159 160 165 public void remove(User user) { 166 storage.storageRemove(user); 168 IntHolder holder = countCache.getIntHolder(); 169 holder.dec(); 170 return; 171 } 172 173 179 public boolean exists(String login) { 180 return (null != storage.storageLoad(login)); 183 } 184 185 191 public User load(String login) { 192 return storage.storageLoad(login); 193 } 194 } 195 | Popular Tags |