From f0cbb45372e15f8fe1a36334f78d61c387d6c4c9 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Wed, 28 Aug 2019 10:52:33 +0200 Subject: [PATCH] Modified SaveLoadManager to use standard IDs --- .../logic/model/editor/SaveLoadManager.java | 29 ++++++++++++++++++- .../logic/model/editor/ui/EditorGUI.java | 2 +- .../IndirectGUIComponentCreator.java | 20 +++++++------ .../model/snippets/CodeSnippetSupplier.java | 7 ++--- 4 files changed, 43 insertions(+), 15 deletions(-) diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java index 3d22b9cf..6d951aff 100644 --- a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java @@ -1,6 +1,8 @@ package net.mograsim.logic.model.editor; import java.io.IOException; +import java.util.Map; +import java.util.Map.Entry; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; @@ -9,7 +11,10 @@ import org.eclipse.swt.widgets.Shell; import net.mograsim.logic.model.model.ViewModelModifiable; import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; import net.mograsim.logic.model.serializing.IdentifierGetter; +import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; import net.mograsim.logic.model.serializing.SubmodelComponentSerializer; +import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers; +import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandlerSnippetSuppliers; public class SaveLoadManager { @@ -53,8 +58,18 @@ public class SaveLoadManager { if (Editor.identifierPerComponent.containsKey(c)) return Editor.identifierPerComponent.get(c); - return "class:" + c.getClass().getCanonicalName(); + return getStandardID(c, IndirectGUIComponentCreator.getStandardComponentIDs(), true); }; + idGetter.symbolRendererIDs = h -> getStandardID(h, + SubmodelComponentSnippetSuppliers.symbolRendererSupplier.getStandardSnippetIDs()); + idGetter.outlineRendererIDs = h -> getStandardID(h, + SubmodelComponentSnippetSuppliers.outlineRendererSupplier.getStandardSnippetIDs()); + idGetter.highLevelStateHandlerIDs = h -> getStandardID(h, + SubmodelComponentSnippetSuppliers.highLevelStateHandlerSupplier.getStandardSnippetIDs()); + idGetter.atomicHighLevelStateHandlerIDs = h -> getStandardID(h, + StandardHighLevelStateHandlerSnippetSuppliers.atomicHandlerSupplier.getStandardSnippetIDs()); + idGetter.subcomponentHighLevelStateHandlerIDs = h -> getStandardID(h, + StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier.getStandardSnippetIDs()); SubmodelComponentSerializer.serialize(editor.toBeEdited, idGetter, savePath); } catch (IOException e) @@ -65,6 +80,18 @@ public class SaveLoadManager } } + private static String getStandardID(Object o, Map standardIDs) + { + return getStandardID(o, standardIDs, false); + } + + private static String getStandardID(Object o, Map standardIDs, boolean standardIDsHaveClassConcatenated) + { + String verboseID = (standardIDsHaveClassConcatenated ? "class:" : "") + o.getClass().getCanonicalName(); + return standardIDs.entrySet().stream().filter(e -> e.getValue().equals(verboseID)).map(Entry::getKey).findAny() + .orElseGet(() -> (standardIDsHaveClassConcatenated ? "" : "class:") + verboseID); + } + public static void openLoadDialog() throws IOException { Shell fdShell = new Shell(); diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorGUI.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorGUI.java index d0b25b17..7fd73236 100644 --- a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorGUI.java +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorGUI.java @@ -211,7 +211,7 @@ public class EditorGUI public void refreshAddList() { - addList.setItems(IndirectGUIComponentCreator.getStandardComponentIDs().stream().sorted().toArray(String[]::new)); + addList.setItems(IndirectGUIComponentCreator.getStandardComponentIDs().keySet().stream().sorted().toArray(String[]::new)); addList.select(0); } diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java index 090ca86d..2b747b2a 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java @@ -6,7 +6,6 @@ import java.io.UncheckedIOException; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.Set; import com.google.gson.JsonElement; import com.google.gson.JsonNull; @@ -19,7 +18,7 @@ import net.mograsim.logic.model.util.JsonHandler; public class IndirectGUIComponentCreator { private static final Map standardComponentIDs = new HashMap<>(); - private static final Set standardComponentIDSetUnmodifiable = Collections.unmodifiableSet(standardComponentIDs.keySet()); + private static final Map standardComponentIDsUnmodifiable = Collections.unmodifiableMap(standardComponentIDs); private static final Map componentSuppliers = new HashMap<>(); @@ -56,9 +55,9 @@ public class IndirectGUIComponentCreator standardComponentIDs.put(standardComponentID, associatedComponentID); } - public static Set getStandardComponentIDs() + public static Map getStandardComponentIDs() { - return standardComponentIDSetUnmodifiable; + return standardComponentIDsUnmodifiable; } public static void setComponentSupplier(String className, ComponentSupplier componentSupplier) @@ -85,11 +84,7 @@ public class IndirectGUIComponentCreator { if (id != null) { - String resolvedID; - if (id.startsWith("class:") || id.startsWith("file:")) - resolvedID = id; - else - resolvedID = standardComponentIDs.get(id); + String resolvedID = resolveID(id); if (resolvedID != null) { if (resolvedID.startsWith("class:")) @@ -118,6 +113,13 @@ public class IndirectGUIComponentCreator throw new RuntimeException("Could not get component supplier for ID " + id); } + public static String resolveID(String id) + { + if (id.startsWith("class:") || id.startsWith("file:")) + return id; + return standardComponentIDs.get(id); + } + private static void tryLoadComponentClass(String componentClassName) { CodeSnippetSupplier.tryInvokeStaticInitializer(componentClassName, "Error loading component class %s: %s\n"); diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java index 619254a4..0016cc72 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java @@ -3,12 +3,11 @@ package net.mograsim.logic.model.snippets; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.Set; public class CodeSnippetSupplier { private final Map standardSnippetIDClassNames = new HashMap<>(); - private final Set standardSnippetIDSetUnmodifiable = Collections.unmodifiableSet(standardSnippetIDClassNames.keySet()); + private final Map standardSnippetIDClassNamesUnmodifiable = Collections.unmodifiableMap(standardSnippetIDClassNames); private final Map> snippetSuppliersForClassNames = new HashMap<>(); private final SnippetDefinintion defaultSnippetSupplier; @@ -22,9 +21,9 @@ public class CodeSnippetSupplier standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName); } - public Set getStandardSnippetIDs() + public Map getStandardSnippetIDs() { - return standardSnippetIDSetUnmodifiable; + return standardSnippetIDClassNamesUnmodifiable; } public void setSnippetSupplier(String id, SnippetDefinintion snippetSupplier) -- 2.17.1