summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNathan Adams <dinnerbone@dinnerbone.com>2011-12-12 18:34:26 +0000
committerNathan Adams <dinnerbone@dinnerbone.com>2011-12-12 18:34:26 +0000
commit03fa22001bf37f8826d9a732da52c7a47e2fe055 (patch)
tree5e7f6971448a8b6265ef9e87f3e6ee68223ab18b /src
parent4daf43b09bd82dbf88e23d53a674bbc4e2bf62df (diff)
downloadbukkit-03fa22001bf37f8826d9a732da52c7a47e2fe055.tar
bukkit-03fa22001bf37f8826d9a732da52c7a47e2fe055.tar.gz
bukkit-03fa22001bf37f8826d9a732da52c7a47e2fe055.tar.lz
bukkit-03fa22001bf37f8826d9a732da52c7a47e2fe055.tar.xz
bukkit-03fa22001bf37f8826d9a732da52c7a47e2fe055.zip
Configuration methods .getX (int/double/etc) now try to cast existing values where possible. This fixes BUKKIT-290
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/bukkit/configuration/MemorySection.java13
-rw-r--r--src/main/java/org/bukkit/util/NumberConversions.java92
-rw-r--r--src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java16
3 files changed, 113 insertions, 8 deletions
diff --git a/src/main/java/org/bukkit/configuration/MemorySection.java b/src/main/java/org/bukkit/configuration/MemorySection.java
index 7f4ea7cf..a2eb99df 100644
--- a/src/main/java/org/bukkit/configuration/MemorySection.java
+++ b/src/main/java/org/bukkit/configuration/MemorySection.java
@@ -12,6 +12,7 @@ import java.util.regex.Pattern;
import org.bukkit.OfflinePlayer;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
+import static org.bukkit.util.NumberConversions.*;
/**
* A type of {@link ConfigurationSection} that is stored in memory.
@@ -315,7 +316,7 @@ public class MemorySection implements ConfigurationSection {
}
Object def = getDefault(path);
- return getInt(path, (def instanceof Integer) ? (Integer)def : 0);
+ return getInt(path, (def instanceof Number) ? toInt(def) : 0);
}
public int getInt(String path, int def) {
@@ -324,7 +325,7 @@ public class MemorySection implements ConfigurationSection {
}
Object val = get(path, def);
- return (val instanceof Integer) ? (Integer)val : def;
+ return (val instanceof Number) ? toInt(val) : def;
}
public boolean isInt(String path) {
@@ -369,7 +370,7 @@ public class MemorySection implements ConfigurationSection {
}
Object def = getDefault(path);
- return getDouble(path, (def instanceof Double) ? (Double)def : 0);
+ return getDouble(path, (def instanceof Number) ? toDouble(def) : 0);
}
public double getDouble(String path, double def) {
@@ -378,7 +379,7 @@ public class MemorySection implements ConfigurationSection {
}
Object val = get(path, def);
- return (val instanceof Double) ? (Double)val : def;
+ return (val instanceof Number) ? toDouble(val) : def;
}
public boolean isDouble(String path) {
@@ -396,7 +397,7 @@ public class MemorySection implements ConfigurationSection {
}
Object def = getDefault(path);
- return getLong(path, (def instanceof Long) ? (Long)def : 0);
+ return getLong(path, (def instanceof Number) ? toLong(def) : 0);
}
public long getLong(String path, long def) {
@@ -405,7 +406,7 @@ public class MemorySection implements ConfigurationSection {
}
Object val = get(path, def);
- return (val instanceof Long) ? (Long)val : def;
+ return (val instanceof Number) ? toLong(val) : def;
}
public boolean isLong(String path) {
diff --git a/src/main/java/org/bukkit/util/NumberConversions.java b/src/main/java/org/bukkit/util/NumberConversions.java
new file mode 100644
index 00000000..39bad86b
--- /dev/null
+++ b/src/main/java/org/bukkit/util/NumberConversions.java
@@ -0,0 +1,92 @@
+package org.bukkit.util;
+
+/**
+ * Utils for casting number types to other number types
+ */
+public final class NumberConversions {
+ private NumberConversions() {}
+
+ public static int toInt(Object object) {
+ if (object instanceof Number) {
+ return ((Number)object).intValue();
+ } else {
+ int result = 0;
+
+ try {
+ result = Integer.valueOf((String)object);
+ } catch (Throwable ex) {}
+
+ return result;
+ }
+ }
+
+ public static float toFloat(Object object) {
+ if (object instanceof Number) {
+ return ((Number)object).floatValue();
+ } else {
+ float result = 0;
+
+ try {
+ result = Float.valueOf((String)object);
+ } catch (Throwable ex) {}
+
+ return result;
+ }
+ }
+
+ public static double toDouble(Object object) {
+ if (object instanceof Number) {
+ return ((Number)object).doubleValue();
+ } else {
+ double result = 0;
+
+ try {
+ result = Double.valueOf((String)object);
+ } catch (Throwable ex) {}
+
+ return result;
+ }
+ }
+
+ public static long toLong(Object object) {
+ if (object instanceof Number) {
+ return ((Number)object).longValue();
+ } else {
+ long result = 0;
+
+ try {
+ result = Long.valueOf((String)object);
+ } catch (Throwable ex) {}
+
+ return result;
+ }
+ }
+
+ public static short toShort(Object object) {
+ if (object instanceof Number) {
+ return ((Number)object).shortValue();
+ } else {
+ short result = 0;
+
+ try {
+ result = Short.valueOf((String)object);
+ } catch (Throwable ex) {}
+
+ return result;
+ }
+ }
+
+ public static byte toByte(Object object) {
+ if (object instanceof Number) {
+ return ((Number)object).byteValue();
+ } else {
+ byte result = 0;
+
+ try {
+ result = Byte.valueOf((String)object);
+ } catch (Throwable ex) {}
+
+ return result;
+ }
+ }
+}
diff --git a/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java b/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java
index 6810f817..d45a4c31 100644
--- a/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java
+++ b/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java
@@ -315,9 +315,21 @@ public abstract class ConfigurationSectionTest {
ConfigurationSection section = getConfigurationSection();
String key = "exists";
double value = Double.MAX_VALUE;
-
+
section.set(key, value);
-
+
+ assertEquals(value, section.getDouble(key), 1);
+ assertNull(section.getString("doesntExist"));
+ }
+
+ @Test
+ public void testGetDoubleFromInt() {
+ ConfigurationSection section = getConfigurationSection();
+ String key = "exists";
+ double value = 123;
+
+ section.set(key, (int)value);
+
assertEquals(value, section.getDouble(key), 1);
assertNull(section.getString("doesntExist"));
}