diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java index 828cc96..bc8b77a 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java @@ -4,16 +4,28 @@ import android.util.Log; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.google.gson.internal.LinkedTreeMap; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; -import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Preset; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Presets; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.ActionDeserializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.ActionSerializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.ConfigDeserializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.ConfigSerializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.ConfigurationDeserializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.ConfigurationSerializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.GroupDeserializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.GroupSerializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.PresetsDeserializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.PresetsSerializer; import org.timecrafters.TimeCraftersConfigurationTool.serializers.SettingsDeserializer; import org.timecrafters.TimeCraftersConfigurationTool.serializers.SettingsSerializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.VariableDeserializer; +import org.timecrafters.TimeCraftersConfigurationTool.serializers.VariableSerializer; import org.timecrafters.TimeCraftersConfigurationTool.tacnet.Server; -import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; @@ -21,13 +33,8 @@ import java.io.FileReader; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Date; -import java.util.LinkedHashMap; -import java.util.Map; public class Backend { private static final String TAG = "Backend"; @@ -49,8 +56,6 @@ public class Backend { loadSettings(); if (!settings.config.isEmpty()) { loadConfig(settings.config); - } else { - config = new Config("DEBUG DEBUG DEBUG"); } tacnet = new TACNET(); @@ -105,6 +110,8 @@ public class Backend { config.getConfiguration().updatedAt = new Date(); config.getConfiguration().revision += 1; configChanged = true; + + saveConfig(); } public boolean isConfigChanged() { return configChanged; } @@ -114,14 +121,18 @@ public class Backend { File file = new File(path); if (file.exists() && file.isFile()) { - config = new Config(name, path); + config = gsonForConfig().fromJson(readFromFile(path), Config.class); + config.setName(name); } } - public boolean saveConfig(String name) { - // TODO: Implement save config + public boolean saveConfig() { + if (config == null) { return false; } + + final String path = "" + TAC.CONFIGS_PATH + File.separator + getConfig().getName() + ".json"; configChanged = false; - return false; + + return writeToFile(path, gsonForConfig().toJson(config)); } public void uploadConfig() { @@ -173,13 +184,26 @@ public class Backend { return list; } - // TODO: Write De/serializers for config public Gson gsonForConfig() { -// return new GsonBuilder() -// .registerTypeAdapter(Config.class, new ConfigSerializer()) -// .registerTypeAdapter(COnfig.class, new ConfigDeserializer()) -// .create(); - return new GsonBuilder().create(); + return new GsonBuilder() + .registerTypeAdapter(Config.class, new ConfigSerializer()) + .registerTypeAdapter(Config.class, new ConfigDeserializer()) + + .registerTypeAdapter(Configuration.class, new ConfigurationSerializer()) + .registerTypeAdapter(Configuration.class, new ConfigurationDeserializer()) + + .registerTypeAdapter(Group.class, new GroupSerializer()) + .registerTypeAdapter(Group.class, new GroupDeserializer()) + + .registerTypeAdapter(Action.class, new ActionSerializer()) + .registerTypeAdapter(Action.class, new ActionDeserializer()) + + .registerTypeAdapter(Variable.class, new VariableSerializer()) + .registerTypeAdapter(Variable.class, new VariableDeserializer()) + + .registerTypeAdapter(Presets.class, new PresetsSerializer()) + .registerTypeAdapter(Presets.class, new PresetsDeserializer()) + .create(); } public void settingsChanged() { diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Config.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Config.java index d8898e1..894bb52 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Config.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Config.java @@ -1,12 +1,9 @@ package org.timecrafters.TimeCraftersConfigurationTool.backend; -import com.google.gson.Gson; - +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; -import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; -import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; -import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Preset; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Presets; import java.util.ArrayList; import java.util.Date; @@ -15,48 +12,33 @@ public class Config { private String name; private Configuration configuration; private ArrayList groups; - private ArrayList presets; + private Presets presets; public Config(String name) { this.name = name; - this.configuration = new Configuration(new Date(), new Date(), TAC.CONFIG_SPEC_VERSION, 32); + this.configuration = new Configuration(new Date(), new Date(), TAC.CONFIG_SPEC_VERSION, 0); groups = new ArrayList<>(); - presets = new ArrayList<>(); + presets = new Presets(new ArrayList(), new ArrayList()); } - - public Config(String name, String path) { - this.name = name; - parse(path); - } - - public Config(Configuration configuration, ArrayList groups, ArrayList presets) { + public Config(Configuration configuration, ArrayList groups, Presets presets) { this.configuration = configuration; this.groups = groups; this.presets = presets; } public String getName() { return name; } + public void setName(String name) { this.name = name; } public Configuration getConfiguration() { return configuration; } - public ArrayList getPresets() { + public Presets getPresets() { return presets; } public ArrayList getGroups() { return groups; } - - private void parse(String path) { - Gson gson = new Gson(); - String json = Backend.instance().readFromFile(path); - Config config = gson.fromJson(json, Config.class); - - this.configuration = config.configuration; - this.groups = config.groups; - this.presets = config.presets; - } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Configuration.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Configuration.java index 7c2af53..1ad0387 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Configuration.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Configuration.java @@ -3,6 +3,8 @@ package org.timecrafters.TimeCraftersConfigurationTool.backend.config; import java.util.Date; public class Configuration { + public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss Z"; + public Date createdAt, updatedAt; private int specVersion; public int revision; diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Preset.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Presets.java similarity index 50% rename from app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Preset.java rename to app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Presets.java index 2c5c35e..a1612c5 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Preset.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Presets.java @@ -3,12 +3,20 @@ package org.timecrafters.TimeCraftersConfigurationTool.backend.config; import java.util.ArrayList; -public class Preset { +public class Presets { private ArrayList groups; private ArrayList actions; - public Preset(ArrayList groups, ArrayList actions) { + public Presets(ArrayList groups, ArrayList actions) { this.groups = groups; this.actions = actions; } + + public ArrayList getGroups() { + return groups; + } + + public ArrayList getActions() { + return actions; + } } \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ActionDeserializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ActionDeserializer.java new file mode 100644 index 0000000..b638505 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ActionDeserializer.java @@ -0,0 +1,33 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ActionDeserializer implements JsonDeserializer { + @Override + public Action deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { + JsonObject jsonObject = json.getAsJsonObject(); + + final String name = jsonObject.get("name").getAsString(); + final String comment = jsonObject.get("comment").getAsString(); + final boolean enabled = jsonObject.get("enabled").getAsBoolean(); + Variable[] variablesArray = context.deserialize(jsonObject.get("variables"), Variable[].class); + + List variablesList = Arrays.asList(variablesArray); + ArrayList variables = new ArrayList<>(variablesList); + + return new Action(name, comment, enabled, variables); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ActionSerializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ActionSerializer.java new file mode 100644 index 0000000..5a2c562 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ActionSerializer.java @@ -0,0 +1,27 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; + +import java.lang.reflect.Type; + +public class ActionSerializer implements JsonSerializer { + @Override + public JsonElement serialize(Action action, Type type, JsonSerializationContext context) { + JsonObject container = new JsonObject(); + + container.add("name", new JsonPrimitive(action.name)); + container.add("comment", new JsonPrimitive(action.comment)); + container.add("enabled", new JsonPrimitive(action.enabled)); + container.add("variables", context.serialize(action.getVariables().toArray(), Variable[].class)); + + return container; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigDeserializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigDeserializer.java new file mode 100644 index 0000000..55b928e --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigDeserializer.java @@ -0,0 +1,34 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.Config; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Presets; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ConfigDeserializer implements JsonDeserializer { + @Override + public Config deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { + JsonObject jsonObject = json.getAsJsonObject(); + JsonObject data = jsonObject.get("data").getAsJsonObject(); + + Configuration configuration = context.deserialize(jsonObject.get("config"), Configuration.class); + Group[] groupsArray = context.deserialize(data.get("groups"), Group[].class); + List groupsList = Arrays.asList(groupsArray); + ArrayList groups = new ArrayList<>(groupsList); + + Presets presets = context.deserialize(data.get("presets"), Presets.class); + + return new Config(configuration, groups, presets); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigSerializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigSerializer.java new file mode 100644 index 0000000..5682f05 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigSerializer.java @@ -0,0 +1,32 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.Config; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; + +import java.lang.reflect.Type; + +public class ConfigSerializer implements JsonSerializer { + @Override + public JsonElement serialize(Config config, Type type, JsonSerializationContext context) { + JsonObject container = new JsonObject(); + JsonObject result = new JsonObject(); + JsonObject presets = new JsonObject(); + container.add("config", context.serialize(config.getConfiguration(), Configuration.class)); + result.add("groups", context.serialize(config.getGroups().toArray(), Group[].class)); + + presets.add("groups", context.serialize(config.getPresets().getGroups().toArray(), Group[].class)); + presets.add("actions", context.serialize(config.getPresets().getActions().toArray(), Action[].class)); + + result.add("presets", presets); + container.add("data", result); + + return container; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigurationDeserializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigurationDeserializer.java new file mode 100644 index 0000000..799da84 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigurationDeserializer.java @@ -0,0 +1,36 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration; + +import java.lang.reflect.Type; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class ConfigurationDeserializer implements JsonDeserializer { + @Override + public Configuration deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { + JsonObject config = json.getAsJsonObject(); + + SimpleDateFormat dateFormat = new SimpleDateFormat(Configuration.DATE_FORMAT); + Date createdAt = new Date(); + Date updatedAt = new Date(); + try { + createdAt = dateFormat.parse(config.get("created_at").getAsString()); + updatedAt = dateFormat.parse(config.get("updated_at").getAsString()); + } catch (ParseException e) { + e.printStackTrace(); + } + + final int spec_version = config.get("spec_version").getAsInt(); + final int revision = config.get("revision").getAsInt(); + + return new Configuration(createdAt, updatedAt, spec_version, revision); + } +} diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigurationSerializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigurationSerializer.java new file mode 100644 index 0000000..6639bc8 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/ConfigurationSerializer.java @@ -0,0 +1,29 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; + +import java.lang.reflect.Type; +import java.text.SimpleDateFormat; + +public class ConfigurationSerializer implements JsonSerializer { + @Override + public JsonElement serialize(Configuration configuration, Type type, JsonSerializationContext context) { + JsonObject container = new JsonObject(); + + SimpleDateFormat dateFormat = new SimpleDateFormat(Configuration.DATE_FORMAT); + + container.add("created_at", new JsonPrimitive(dateFormat.format(configuration.createdAt))); + container.add("updated_at", new JsonPrimitive(dateFormat.format(configuration.updatedAt))); + container.add("spec_version", new JsonPrimitive(configuration.getSpecVersion())); + container.add("revision", new JsonPrimitive(configuration.revision)); + + return container; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/GroupDeserializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/GroupDeserializer.java new file mode 100644 index 0000000..36b6ced --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/GroupDeserializer.java @@ -0,0 +1,33 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.Config; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Presets; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class GroupDeserializer implements JsonDeserializer { + @Override + public Group deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { + JsonObject jsonObject = json.getAsJsonObject(); + + final String name = jsonObject.get("name").getAsString(); + Action[] actionsArray = context.deserialize(jsonObject.get("actions"), Action[].class); + + List actionsList = Arrays.asList(actionsArray); + ArrayList actions = new ArrayList<>(actionsList); + + return new Group(name, actions); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/GroupSerializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/GroupSerializer.java new file mode 100644 index 0000000..5f22240 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/GroupSerializer.java @@ -0,0 +1,26 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.Config; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; + +import java.lang.reflect.Type; + +public class GroupSerializer implements JsonSerializer { + @Override + public JsonElement serialize(Group group, Type type, JsonSerializationContext context) { + JsonObject container = new JsonObject(); + + container.add("name", new JsonPrimitive(group.name)); + container.add("actions", context.serialize(group.getActions().toArray(), Action[].class)); + + return container; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/PresetsDeserializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/PresetsDeserializer.java new file mode 100644 index 0000000..50d7263 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/PresetsDeserializer.java @@ -0,0 +1,33 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Presets; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class PresetsDeserializer implements JsonDeserializer { + @Override + public Presets deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { + JsonObject jsonObject = json.getAsJsonObject(); + + Group[] GroupsArray = context.deserialize(jsonObject.get("groups"), Group[].class); + Action[] actionsArray = context.deserialize(jsonObject.get("actions"), Action[].class); + + List groupsList = Arrays.asList(GroupsArray); + ArrayList groups = new ArrayList<>(groupsList); + List actionsList = Arrays.asList(actionsArray); + ArrayList actions = new ArrayList<>(actionsList); + + return new Presets(groups, actions); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/PresetsSerializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/PresetsSerializer.java new file mode 100644 index 0000000..297440e --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/PresetsSerializer.java @@ -0,0 +1,25 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Presets; + +import java.lang.reflect.Type; + +public class PresetsSerializer implements JsonSerializer { + @Override + public JsonElement serialize(Presets presets, Type type, JsonSerializationContext context) { + JsonObject container = new JsonObject(); + + container.add("groups", context.serialize(presets.getGroups().toArray(), Group[].class)); + container.add("actions", context.serialize(presets.getActions().toArray(), Action[].class)); + + return container; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/VariableDeserializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/VariableDeserializer.java new file mode 100644 index 0000000..8d8d2ad --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/VariableDeserializer.java @@ -0,0 +1,28 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class VariableDeserializer implements JsonDeserializer { + @Override + public Variable deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { + JsonObject jsonObject = json.getAsJsonObject(); + + final String name = jsonObject.get("name").getAsString(); + final String value = jsonObject.get("value").getAsString(); + + return new Variable(name, value); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/VariableSerializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/VariableSerializer.java new file mode 100644 index 0000000..35ac60a --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/VariableSerializer.java @@ -0,0 +1,23 @@ +package org.timecrafters.TimeCraftersConfigurationTool.serializers; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; + +import java.lang.reflect.Type; + +public class VariableSerializer implements JsonSerializer { + @Override + public JsonElement serialize(Variable variable, Type type, JsonSerializationContext context) { + JsonObject container = new JsonObject(); + + container.add("name", new JsonPrimitive(variable.name)); + container.add("value", new JsonPrimitive(variable.rawValue())); + + return container; + } +} \ No newline at end of file