summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKHobbits <rob@khobbits.co.uk>2011-11-18 12:07:11 +0000
committerKHobbits <rob@khobbits.co.uk>2011-11-18 12:07:11 +0000
commit37bd9bc9b57de2636fd93d430f56890c62cab8d8 (patch)
tree9272308cbd55402363356b8cadd1eac97a598ad3
parente54d73704e9fb99b99324c5407c6bfddac860a26 (diff)
parentedf0ab756c9a48b46dcdd0e2fe30eee2fc3760d2 (diff)
downloadEssentials-37bd9bc9b57de2636fd93d430f56890c62cab8d8.tar
Essentials-37bd9bc9b57de2636fd93d430f56890c62cab8d8.tar.gz
Essentials-37bd9bc9b57de2636fd93d430f56890c62cab8d8.tar.lz
Essentials-37bd9bc9b57de2636fd93d430f56890c62cab8d8.tar.xz
Essentials-37bd9bc9b57de2636fd93d430f56890c62cab8d8.zip
Merge branch 'master' of github.com:essentials/Essentials into essmaster
-rw-r--r--Essentials/src/com/earth2me/essentials/ExecuteTimer.java19
-rw-r--r--Essentials/src/com/earth2me/essentials/UserMap.java68
-rw-r--r--Essentials/src/com/earth2me/essentials/textreader/TextInput.java1
3 files changed, 50 insertions, 38 deletions
diff --git a/Essentials/src/com/earth2me/essentials/ExecuteTimer.java b/Essentials/src/com/earth2me/essentials/ExecuteTimer.java
index 7a88018c2..301669428 100644
--- a/Essentials/src/com/earth2me/essentials/ExecuteTimer.java
+++ b/Essentials/src/com/earth2me/essentials/ExecuteTimer.java
@@ -1,12 +1,17 @@
package com.earth2me.essentials;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;
+import java.util.Locale;
public class ExecuteTimer
{
- private final List<ExecuteRecord> times;
+ private final transient List<ExecuteRecord> times;
+ private final transient DecimalFormat decimalFormat = new DecimalFormat("#0.000", DecimalFormatSymbols.getInstance(Locale.US));
+
public ExecuteTimer()
{
@@ -24,7 +29,7 @@ public class ExecuteTimer
{
if (!times.isEmpty() || "start".equals(label))
{
- times.add(new ExecuteRecord(label, System.currentTimeMillis()));
+ times.add(new ExecuteRecord(label, System.nanoTime()));
}
}
@@ -36,7 +41,7 @@ public class ExecuteTimer
long time0 = 0;
long time1 = 0;
long time2 = 0;
- long duration;
+ double duration;
for (ExecuteRecord pair : times)
{
@@ -44,8 +49,8 @@ public class ExecuteTimer
time2 = (Long)pair.getTime();
if (time1 > 0)
{
- duration = time2 - time1;
- output.append(mark).append(": ").append(duration).append("ms - ");
+ duration = (time2 - time1)/1000000.0;
+ output.append(mark).append(": ").append(decimalFormat.format(duration)).append("ms - ");
}
else
{
@@ -53,8 +58,8 @@ public class ExecuteTimer
}
time1 = time2;
}
- duration = time1 - time0;
- output.append("Total: ").append(duration).append("ms");
+ duration = (time1 - time0)/1000000.0;
+ output.append("Total: ").append(decimalFormat.format(duration)).append("ms");
times.clear();
return output.toString();
}
diff --git a/Essentials/src/com/earth2me/essentials/UserMap.java b/Essentials/src/com/earth2me/essentials/UserMap.java
index 580b2aaf9..dc6d310e6 100644
--- a/Essentials/src/com/earth2me/essentials/UserMap.java
+++ b/Essentials/src/com/earth2me/essentials/UserMap.java
@@ -1,24 +1,27 @@
package com.earth2me.essentials;
-import com.google.common.base.Function;
-import com.google.common.collect.ComputationException;
-import com.google.common.collect.MapMaker;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.collect.ConcurrentHashMultiset;
import java.io.File;
import java.util.HashSet;
import java.util.Set;
-import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
-public class UserMap implements Function<String, User>, IConf
+public class UserMap extends CacheLoader<String, User> implements IConf
{
private final transient IEssentials ess;
- private final transient ConcurrentMap<String, User> users = new MapMaker().softValues().makeComputingMap(this);
+ private final transient Cache<String, User> users = CacheBuilder.newBuilder().softValues().build(this);
+ private final transient ConcurrentHashMultiset<String> keys = ConcurrentHashMultiset.create();
public UserMap(final IEssentials ess)
{
+ super();
this.ess = ess;
loadAllUsersAsync(ess);
}
@@ -35,6 +38,8 @@ public class UserMap implements Function<String, User>, IConf
{
return;
}
+ keys.clear();
+ users.invalidateAll();
for (String string : userdir.list())
{
if (!string.endsWith(".yml"))
@@ -42,18 +47,7 @@ public class UserMap implements Function<String, User>, IConf
continue;
}
final String name = string.substring(0, string.length() - 4);
- try
- {
- users.get(name.toLowerCase());
- }
- catch (NullPointerException ex)
- {
- // Ignore these
- }
- catch (ComputationException ex)
- {
- Bukkit.getLogger().log(Level.INFO, "Failed to preload user " + name, ex);
- }
+ keys.add(name.toLowerCase());
}
}
});
@@ -61,21 +55,29 @@ public class UserMap implements Function<String, User>, IConf
public boolean userExists(final String name)
{
- return users.containsKey(name.toLowerCase());
+ return keys.contains(name.toLowerCase());
}
public User getUser(final String name) throws NullPointerException
{
- return users.get(name.toLowerCase());
+ try
+ {
+ return users.get(name.toLowerCase());
+ }
+ catch (ExecutionException ex)
+ {
+ throw new NullPointerException();
+ }
}
@Override
- public User apply(final String name)
+ public User load(final String name) throws Exception
{
for (Player player : ess.getServer().getOnlinePlayers())
{
if (player.getName().equalsIgnoreCase(name))
{
+ keys.add(name.toLowerCase());
return new User(player, ess);
}
}
@@ -83,37 +85,43 @@ public class UserMap implements Function<String, User>, IConf
final File userFile = new File(userFolder, Util.sanitizeFileName(name) + ".yml");
if (userFile.exists())
{
+ keys.add(name.toLowerCase());
return new User(new OfflinePlayer(name, ess), ess);
}
- return null;
+ throw new Exception("User not found!");
}
@Override
public void reloadConfig()
{
- for (User user : users.values())
- {
- user.reloadConfig();
- }
+ loadAllUsersAsync(ess);
}
public void removeUser(final String name)
{
- users.remove(name.toLowerCase());
+ keys.remove(name.toLowerCase());
+ users.invalidate(name.toLowerCase());
}
public Set<User> getAllUsers()
{
final Set<User> userSet = new HashSet<User>();
- for (String name : users.keySet())
+ for (String name : keys)
{
- userSet.add(users.get(name));
+ try
+ {
+ userSet.add(users.get(name));
+ }
+ catch (ExecutionException ex)
+ {
+ Bukkit.getLogger().log(Level.INFO, "Failed to load user " + name, ex);
+ }
}
return userSet;
}
public int getUniqueUsers()
{
- return users.size();
+ return keys.size();
}
}
diff --git a/Essentials/src/com/earth2me/essentials/textreader/TextInput.java b/Essentials/src/com/earth2me/essentials/textreader/TextInput.java
index c5536dd51..bc2230c03 100644
--- a/Essentials/src/com/earth2me/essentials/textreader/TextInput.java
+++ b/Essentials/src/com/earth2me/essentials/textreader/TextInput.java
@@ -17,7 +17,6 @@ import java.util.List;
import java.util.Map;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-import quicktime.streaming.Stream;
public class TextInput implements IText