summaryrefslogtreecommitdiffstats
path: root/Essentials/src/com/earth2me/essentials/user/UserMap.java
diff options
context:
space:
mode:
Diffstat (limited to 'Essentials/src/com/earth2me/essentials/user/UserMap.java')
-rw-r--r--Essentials/src/com/earth2me/essentials/user/UserMap.java113
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;
}
}