diff --git a/src/main/java/org/saturnclient/config/property/BoolProperty.java b/src/main/java/org/saturnclient/config/property/BoolProperty.java index 233d4fa..231f314 100644 --- a/src/main/java/org/saturnclient/config/property/BoolProperty.java +++ b/src/main/java/org/saturnclient/config/property/BoolProperty.java @@ -1,5 +1,8 @@ package org.saturnclient.config.property; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; + public class BoolProperty extends Property { public boolean value; public final boolean defaultValue; @@ -8,4 +11,15 @@ public class BoolProperty extends Property { this.value = defaultValue; this.defaultValue = defaultValue; } + + @Override + public JsonNode toJson() { + return JsonNodeFactory.instance.booleanNode(this.value); + } + + @Override + public void loadFromJson(JsonNode element) { + if (element.isBoolean()) + this.value = element.booleanValue(); + } } diff --git a/src/main/java/org/saturnclient/config/property/ColorProperty.java b/src/main/java/org/saturnclient/config/property/ColorProperty.java index ac52d42..e25de45 100644 --- a/src/main/java/org/saturnclient/config/property/ColorProperty.java +++ b/src/main/java/org/saturnclient/config/property/ColorProperty.java @@ -1,5 +1,8 @@ package org.saturnclient.config.property; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; + public class ColorProperty extends Property { public int value; public final int defaultValue; @@ -9,6 +12,18 @@ public class ColorProperty extends Property { this.defaultValue = defaultValue; } + @Override + public JsonNode toJson() { + return JsonNodeFactory.instance.textNode( + String.format("#%08X", this.value)); + } + + @Override + public void loadFromJson(JsonNode element) { + if (element.isTextual()) + this.value = ColorProperty.parseHexToInt(element.textValue()); + } + public static int parseHexToInt(String hex) { hex = hex.replace("#", ""); diff --git a/src/main/java/org/saturnclient/config/property/FloatProperty.java b/src/main/java/org/saturnclient/config/property/FloatProperty.java index 9775160..6b1dd6e 100644 --- a/src/main/java/org/saturnclient/config/property/FloatProperty.java +++ b/src/main/java/org/saturnclient/config/property/FloatProperty.java @@ -1,5 +1,8 @@ package org.saturnclient.config.property; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; + public class FloatProperty extends Property { public float value; public final float defaultValue; @@ -8,4 +11,15 @@ public class FloatProperty extends Property { this.value = defaultValue; this.defaultValue = defaultValue; } + + @Override + public JsonNode toJson() { + return JsonNodeFactory.instance.numberNode(this.value); + } + + @Override + public void loadFromJson(JsonNode element) { + if (element.isNumber()) + this.value = element.floatValue(); + } } diff --git a/src/main/java/org/saturnclient/config/property/IntProperty.java b/src/main/java/org/saturnclient/config/property/IntProperty.java index b3ed3a2..8160455 100644 --- a/src/main/java/org/saturnclient/config/property/IntProperty.java +++ b/src/main/java/org/saturnclient/config/property/IntProperty.java @@ -1,5 +1,8 @@ package org.saturnclient.config.property; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; + public class IntProperty extends Property { public int value; public final int defaultValue; @@ -8,4 +11,17 @@ public class IntProperty extends Property { this.value = defaultValue; this.defaultValue = defaultValue; } + + @Override + public JsonNode toJson() { + return JsonNodeFactory.instance.numberNode(this.value); + } + + @Override + public void loadFromJson(JsonNode element) { + if (element.isInt()) + this.value = element.intValue(); + else if (element.isTextual()) + this.value = ColorProperty.parseHexToInt(element.textValue()); + } } diff --git a/src/main/java/org/saturnclient/config/property/KeybindingProperty.java b/src/main/java/org/saturnclient/config/property/KeybindingProperty.java index 5c109ab..10f4422 100644 --- a/src/main/java/org/saturnclient/config/property/KeybindingProperty.java +++ b/src/main/java/org/saturnclient/config/property/KeybindingProperty.java @@ -2,6 +2,9 @@ package org.saturnclient.config.property; import org.saturnclient.common.provider.Providers; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; + public class KeybindingProperty extends Property { public int value; public final int defaultValue; @@ -12,6 +15,17 @@ public class KeybindingProperty extends Property { this.defaultValue = defaultValue; } + @Override + public JsonNode toJson() { + return JsonNodeFactory.instance.numberNode(this.value); + } + + @Override + public void loadFromJson(JsonNode element) { + if (element.isInt()) + this.value = element.intValue(); + } + public boolean isKeyPressed() { return (Integer) value != -1 && diff --git a/src/main/java/org/saturnclient/config/property/NamespaceProperty.java b/src/main/java/org/saturnclient/config/property/NamespaceProperty.java index c6bc221..bf71ef7 100644 --- a/src/main/java/org/saturnclient/config/property/NamespaceProperty.java +++ b/src/main/java/org/saturnclient/config/property/NamespaceProperty.java @@ -2,6 +2,10 @@ package org.saturnclient.config.property; import java.util.Map; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; + public class NamespaceProperty extends Property { public final Map value; @@ -9,6 +13,33 @@ public class NamespaceProperty extends Property { this.value = value; } + @Override + public JsonNode toJson() { + ObjectNode nested = JsonNodeFactory.instance.objectNode(); + + this.value.forEach((k, v) -> { + nested.set(k, v.toJson()); + }); + + return nested; + } + + @Override + public void loadFromJson(JsonNode element) { + if (element.isObject()) { + ObjectNode obj = (ObjectNode) element; + + this.value.forEach((k, v) -> { + JsonNode e = obj.get(k); + + if (e == null) + return; + + v.loadFromJson(e); + }); + } + } + public Map getNamespaceMap() { return this.value; } diff --git a/src/main/java/org/saturnclient/config/property/Property.java b/src/main/java/org/saturnclient/config/property/Property.java index b35eafc..e9d76ce 100644 --- a/src/main/java/org/saturnclient/config/property/Property.java +++ b/src/main/java/org/saturnclient/config/property/Property.java @@ -1,26 +1,10 @@ package org.saturnclient.config.property; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.JsonNodeFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; import java.util.Map; public abstract class Property { - - public enum PropertyType { - BOOLEAN, - INTEGER, - FLOAT, - STRING, - HEX, - NAMESPACE, - SELECT, - KEYBINDING, - } - - public boolean isReset = false; - // ---------- Factory Methods ---------- public static NamespaceProperty namespace(Map value) { @@ -66,112 +50,11 @@ public abstract class Property { } public void reset() { - isReset = true; } // ---------- JSON Serialization ---------- - public JsonNode toJson() { + public abstract JsonNode toJson(); - if (this instanceof BoolProperty p) { - return JsonNodeFactory.instance.booleanNode(p.value); - } - - if (this instanceof IntProperty p) { - return JsonNodeFactory.instance.numberNode(p.value); - } - - if (this instanceof FloatProperty p) { - return JsonNodeFactory.instance.numberNode(p.value); - } - - if (this instanceof StringProperty p) { - return JsonNodeFactory.instance.textNode(p.value); - } - - if (this instanceof ColorProperty p) { - return JsonNodeFactory.instance.textNode( - String.format("#%08X", p.value)); - } - - if (this instanceof KeybindingProperty p) { - return JsonNodeFactory.instance.numberNode(p.value); - } - - if (this instanceof SelectProperty p) { - return JsonNodeFactory.instance.numberNode(p.value); - } - - if (this instanceof NamespaceProperty p) { - ObjectNode nested = JsonNodeFactory.instance.objectNode(); - - p.value.forEach((k, v) -> { - nested.set(k, v.toJson()); - }); - - return nested; - } - - return null; - } - - public void loadFromJson(JsonNode element) { - - if (element == null) - return; - - if (this instanceof BoolProperty p) { - if (element.isBoolean()) - p.value = element.booleanValue(); - return; - } - - if (this instanceof IntProperty p) { - if (element.isInt()) - p.value = element.intValue(); - else if (element.isTextual()) - p.value = ColorProperty.parseHexToInt(element.textValue()); - return; - } - - if (this instanceof FloatProperty p) { - if (element.isNumber()) - p.value = element.floatValue(); - return; - } - - if (this instanceof StringProperty p) { - if (element.isTextual()) - p.value = element.textValue(); - return; - } - - if (this instanceof ColorProperty p) { - if (element.isTextual()) - p.value = ColorProperty.parseHexToInt(element.textValue()); - return; - } - - if (this instanceof NamespaceProperty p) { - if (element.isObject()) { - ObjectNode obj = (ObjectNode) element; - - p.value.forEach((k, v) -> { - v.loadFromJson(obj.get(k)); - }); - } - return; - } - - if (this instanceof SelectProperty p) { - if (element.isInt()) - p.setSelection(element.intValue()); - return; - } - - if (this instanceof KeybindingProperty p) { - if (element.isInt()) - p.value = element.intValue(); - } - } + public abstract void loadFromJson(JsonNode element); } \ No newline at end of file diff --git a/src/main/java/org/saturnclient/config/property/SelectProperty.java b/src/main/java/org/saturnclient/config/property/SelectProperty.java index b5171f7..4edb555 100644 --- a/src/main/java/org/saturnclient/config/property/SelectProperty.java +++ b/src/main/java/org/saturnclient/config/property/SelectProperty.java @@ -1,5 +1,8 @@ package org.saturnclient.config.property; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; + public class SelectProperty extends Property { public int value; public final int defaultValue; @@ -11,6 +14,17 @@ public class SelectProperty extends Property { this.availableValues = availableValues; } + @Override + public JsonNode toJson() { + return JsonNodeFactory.instance.numberNode(this.value); + } + + @Override + public void loadFromJson(JsonNode element) { + if (element.isInt()) + this.setSelection(element.intValue()); + } + public void next() { int i = (Integer) value; this.value = (i < availableValues.length - 1) ? i + 1 : 0; diff --git a/src/main/java/org/saturnclient/config/property/StringProperty.java b/src/main/java/org/saturnclient/config/property/StringProperty.java index 1526ce2..e09d387 100644 --- a/src/main/java/org/saturnclient/config/property/StringProperty.java +++ b/src/main/java/org/saturnclient/config/property/StringProperty.java @@ -1,5 +1,8 @@ package org.saturnclient.config.property; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; + public class StringProperty extends Property { public String value; public final String defaultValue; @@ -8,4 +11,15 @@ public class StringProperty extends Property { this.value = defaultValue; this.defaultValue = defaultValue; } + + @Override + public JsonNode toJson() { + return JsonNodeFactory.instance.textNode(this.value); + } + + @Override + public void loadFromJson(JsonNode element) { + if (element.isTextual()) + this.value = element.textValue(); + } }