From 5b0b926cbd1bd285434f247d1156f58c46317a2c Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Sun, 8 Jul 2018 19:06:10 +0800 Subject: [PATCH] Move config serialization/deserialization to Config class --- .../org/jackhuang/hmcl/setting/Config.java | 31 ++++++++++++++++++- .../org/jackhuang/hmcl/setting/Settings.java | 24 ++------------ .../hmcl/ui/export/ExportWizardProvider.java | 2 +- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java index 916e6b786..3e2727be6 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -17,12 +17,21 @@ */ package org.jackhuang.hmcl.setting; +import java.io.File; import java.util.Map; import java.util.TreeMap; +import org.hildan.fxgson.creators.ObservableListCreator; +import org.hildan.fxgson.creators.ObservableMapCreator; +import org.hildan.fxgson.creators.ObservableSetCreator; +import org.hildan.fxgson.factories.JavaFxPropertyTypeAdapterFactory; import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServer; +import org.jackhuang.hmcl.util.FileTypeAdapter; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; import javafx.beans.property.BooleanProperty; @@ -36,9 +45,25 @@ import javafx.beans.property.StringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.collections.ObservableMap; +import javafx.collections.ObservableSet; public final class Config implements Cloneable { + private static final Gson CONFIG_GSON = new GsonBuilder() + .registerTypeAdapter(VersionSetting.class, VersionSetting.Serializer.INSTANCE) + .registerTypeAdapter(Profile.class, Profile.Serializer.INSTANCE) + .registerTypeAdapter(File.class, FileTypeAdapter.INSTANCE) + .registerTypeAdapter(ObservableList.class, new ObservableListCreator()) + .registerTypeAdapter(ObservableSet.class, new ObservableSetCreator()) + .registerTypeAdapter(ObservableMap.class, new ObservableMapCreator()) + .registerTypeAdapterFactory(new JavaFxPropertyTypeAdapterFactory(true, true)) + .setPrettyPrinting() + .create(); + + public static Config fromJson(String json) throws JsonParseException { + return CONFIG_GSON.fromJson(json, Config.class); + } + @SerializedName("last") public final StringProperty selectedProfile = new SimpleStringProperty(""); @@ -104,8 +129,12 @@ public final class Config implements Cloneable { public final ObservableList authlibInjectorServers = FXCollections.observableArrayList(); + public String toJson() { + return CONFIG_GSON.toJson(this); + } + @Override public Config clone() { - return Settings.GSON.fromJson(Settings.GSON.toJson(this), Config.class); + return fromJson(this.toJson()); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java index dc7f3f7c0..15b6f0386 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java @@ -17,21 +17,11 @@ */ package org.jackhuang.hmcl.setting; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - import javafx.beans.property.ObjectProperty; import javafx.beans.property.StringProperty; import javafx.beans.value.ObservableValue; -import javafx.collections.ObservableList; -import javafx.collections.ObservableMap; -import javafx.collections.ObservableSet; import javafx.scene.text.Font; -import org.hildan.fxgson.creators.ObservableListCreator; -import org.hildan.fxgson.creators.ObservableMapCreator; -import org.hildan.fxgson.creators.ObservableSetCreator; -import org.hildan.fxgson.factories.JavaFxPropertyTypeAdapterFactory; import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.AccountFactory; @@ -60,16 +50,6 @@ import static org.jackhuang.hmcl.util.Lang.tryCast; import static org.jackhuang.hmcl.util.Logging.LOG; public class Settings { - public static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(VersionSetting.class, VersionSetting.Serializer.INSTANCE) - .registerTypeAdapter(Profile.class, Profile.Serializer.INSTANCE) - .registerTypeAdapter(File.class, FileTypeAdapter.INSTANCE) - .registerTypeAdapter(ObservableList.class, new ObservableListCreator()) - .registerTypeAdapter(ObservableSet.class, new ObservableSetCreator()) - .registerTypeAdapter(ObservableMap.class, new ObservableMapCreator()) - .registerTypeAdapterFactory(new JavaFxPropertyTypeAdapterFactory(true, true)) - .setPrettyPrinting() - .create(); public static final String SETTINGS_FILE_NAME = "hmcl.json"; public static final File SETTINGS_FILE = new File(SETTINGS_FILE_NAME).getAbsoluteFile(); @@ -131,7 +111,7 @@ public class Settings { if (StringUtils.isBlank(str)) Logging.LOG.finer("Settings file is empty, use the default settings."); else { - Config d = GSON.fromJson(str, Config.class); + Config d = Config.fromJson(str); if (d != null) c = d; } @@ -152,7 +132,7 @@ public class Settings { SETTINGS.accounts.add(storage); } - FileUtils.writeText(SETTINGS_FILE, GSON.toJson(SETTINGS)); + FileUtils.writeText(SETTINGS_FILE, SETTINGS.toJson()); } catch (IOException ex) { Logging.LOG.log(Level.SEVERE, "Failed to save config", ex); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java index 0b4316d57..71bc7c7e2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java @@ -93,7 +93,7 @@ public final class ExportWizardProvider implements WizardProvider { config.logLines.set(100); config.configurations.clear(); - zip.putTextFile(Settings.GSON.toJson(config), Settings.SETTINGS_FILE_NAME); + zip.putTextFile(config.toJson(), Settings.SETTINGS_FILE_NAME); zip.putFile(tempModpack, "modpack.zip"); File bg = new File("bg").getAbsoluteFile();