diff --git a/core/src/main/java/info/openrocket/core/file/openrocket/importt/ConfigHandler.java b/core/src/main/java/info/openrocket/core/file/openrocket/importt/ConfigHandler.java
index f8283317c..e355ad486 100644
--- a/core/src/main/java/info/openrocket/core/file/openrocket/importt/ConfigHandler.java
+++ b/core/src/main/java/info/openrocket/core/file/openrocket/importt/ConfigHandler.java
@@ -1,12 +1,9 @@
package info.openrocket.core.file.openrocket.importt;
-import java.math.BigDecimal;
-import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;
import info.openrocket.core.logging.WarningSet;
-import info.openrocket.core.file.simplesax.AbstractElementHandler;
import info.openrocket.core.file.simplesax.ElementHandler;
import info.openrocket.core.file.simplesax.PlainTextHandler;
import info.openrocket.core.util.ArrayList;
@@ -14,7 +11,7 @@ import info.openrocket.core.util.Config;
import org.xml.sax.SAXException;
-public class ConfigHandler extends AbstractElementHandler {
+public class ConfigHandler extends EntryHandler {
private ConfigHandler listHandler;
private final Config config = new Config();
@@ -36,17 +33,7 @@ public class ConfigHandler extends AbstractElementHandler {
throws SAXException {
if (element.equals("entry")) {
String key = attributes.get("key");
- String type = attributes.get("type");
- Object value = null;
- if ("boolean".equals(type)) {
- value = Boolean.valueOf(content);
- } else if ("string".equals(type)) {
- value = content;
- } else if ("number".equals(type)) {
- value = parseNumber(content);
- } else if ("list".equals(type)) {
- value = listHandler.list;
- }
+ Object value = EntryHelper.getValueFromEntry(ConfigHandler.this, attributes, content);
if (value != null) {
if (key != null) {
config.put(key, value);
@@ -59,31 +46,6 @@ public class ConfigHandler extends AbstractElementHandler {
}
}
- private Number parseNumber(String str) {
- try {
- str = str.trim();
- if (str.matches("^[+-]?[0-9]+$")) {
- BigInteger value = new BigInteger(str, 10);
- if (value.equals(BigInteger.valueOf(value.intValue()))) {
- return value.intValue();
- } else if (value.equals(BigInteger.valueOf(value.longValue()))) {
- return value.longValue();
- } else {
- return value;
- }
- } else {
- BigDecimal value = new BigDecimal(str);
- if (value.equals(BigDecimal.valueOf(value.doubleValue()))) {
- return value.doubleValue();
- } else {
- return value;
- }
- }
- } catch (NumberFormatException e) {
- return null;
- }
- }
-
public Config getConfig() {
return config;
}
diff --git a/core/src/main/java/info/openrocket/core/file/openrocket/importt/EntryHandler.java b/core/src/main/java/info/openrocket/core/file/openrocket/importt/EntryHandler.java
new file mode 100644
index 000000000..b635b262f
--- /dev/null
+++ b/core/src/main/java/info/openrocket/core/file/openrocket/importt/EntryHandler.java
@@ -0,0 +1,22 @@
+package info.openrocket.core.file.openrocket.importt;
+
+import info.openrocket.core.file.simplesax.AbstractElementHandler;
+import info.openrocket.core.util.ArrayList;
+
+import java.util.List;
+
+/**
+ * Handler for entries that have a key and type attribute, and a value.
+ * For example bar
+ */
+public abstract class EntryHandler extends AbstractElementHandler {
+ protected EntryHandler listHandler;
+ protected final List