diff options
Diffstat (limited to 'Essentials/src/com/earth2me/essentials/user/UserMap.java')
-rw-r--r-- | Essentials/src/com/earth2me/essentials/user/UserMap.java | 113 |
1 files changed, 41 insertions, 72 deletions
diff --git a/Essentials/src/com/earth2me/essentials/user/UserMap.java b/Essentials/src/com/earth2me/essentials/user/UserMap.java index 821ee4c8f..96744da1d 100644 --- a/Essentials/src/com/earth2me/essentials/user/UserMap.java +++ b/Essentials/src/com/earth2me/essentials/user/UserMap.java @@ -1,85 +1,38 @@ package com.earth2me.essentials.user; -import com.earth2me.essentials.IConf; -import com.earth2me.essentials.IEssentials; -import com.earth2me.essentials.Util; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.util.concurrent.UncheckedExecutionException; +import com.earth2me.essentials.api.IEssentials; +import com.earth2me.essentials.api.IUser; +import com.earth2me.essentials.api.IUserMap; +import com.earth2me.essentials.api.InvalidNameException; +import com.earth2me.essentials.storage.StorageObjectMap; import java.io.File; -import java.util.Collections; import java.util.Locale; import java.util.Set; -import java.util.concurrent.ConcurrentSkipListSet; -import java.util.concurrent.ExecutionException; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -public class UserMap extends CacheLoader<String, User> implements IConf +public class UserMap extends StorageObjectMap<IUser> implements IUserMap { - private final transient IEssentials ess; - private final transient Cache<String, User> users = CacheBuilder.newBuilder().softValues().build(this); - private final transient ConcurrentSkipListSet<String> keys = new ConcurrentSkipListSet<String>(); - public UserMap(final IEssentials ess) { - super(); - this.ess = ess; - loadAllUsersAsync(ess); - } - - private void loadAllUsersAsync(final IEssentials ess) - { - ess.scheduleAsyncDelayedTask(new Runnable() - { - @Override - public void run() - { - final File userdir = new File(ess.getDataFolder(), "userdata"); - if (!userdir.exists()) - { - return; - } - keys.clear(); - users.invalidateAll(); - for (String string : userdir.list()) - { - if (!string.endsWith(".yml")) - { - continue; - } - final String name = string.substring(0, string.length() - 4); - keys.add(name.toLowerCase(Locale.ENGLISH)); - } - } - }); + super(ess, "users"); } + @Override public boolean userExists(final String name) { - return keys.contains(name.toLowerCase(Locale.ENGLISH)); + return objectExists(name); } - public User getUser(final String name) + @Override + public IUser getUser(final String name) { - try - { - return users.get(name.toLowerCase(Locale.ENGLISH)); - } - catch (ExecutionException ex) - { - return null; - } - catch (UncheckedExecutionException ex) - { - return null; - } + return getObject(name); } @Override - public User load(final String name) throws Exception + public IUser load(final String name) throws Exception { for (Player player : ess.getServer().getOnlinePlayers()) { @@ -99,30 +52,46 @@ public class UserMap extends CacheLoader<String, User> implements IConf } @Override - public void reloadConfig() + public void removeUser(final String name) throws InvalidNameException { - loadAllUsersAsync(ess); + removeObject(name); } - public void removeUser(final String name) + @Override + public Set<String> getAllUniqueUsers() { - keys.remove(name.toLowerCase(Locale.ENGLISH)); - users.invalidate(name.toLowerCase(Locale.ENGLISH)); + return getAllKeys(); } - public Set<String> getAllUniqueUsers() + @Override + public int getUniqueUsers() { - return Collections.unmodifiableSet(keys); + return getKeySize(); } - public int getUniqueUsers() + @Override + public File getUserFile(String name) throws InvalidNameException { - return keys.size(); + return getStorageFile(name); } - public File getUserFile(final String name) + @Override + public IUser getUser(final Player player) { - final File userFolder = new File(ess.getDataFolder(), "userdata"); - return new File(userFolder, Util.sanitizeFileName(name) + ".yml"); + if (player instanceof IUser) + { + return (IUser)player; + } + IUser user = getUser(player.getName()); + + if (user == null) + { + user = new User(player, ess); + } + else + { + ((User)user).update(player); + } + return user; } } |