Modified SaveLoadManager to use standard IDs
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Wed, 28 Aug 2019 08:52:33 +0000 (10:52 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Wed, 28 Aug 2019 08:52:33 +0000 (10:52 +0200)
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorGUI.java
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java
net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java

index 3d22b9c..6d951af 100644 (file)
@@ -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<String, String> standardIDs)
+       {
+               return getStandardID(o, standardIDs, false);
+       }
+
+       private static String getStandardID(Object o, Map<String, String> 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();
index d0b25b1..7fd7323 100644 (file)
@@ -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);
        }
 
index 090ca86..2b747b2 100644 (file)
@@ -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<String, String> standardComponentIDs = new HashMap<>();
-       private static final Set<String> standardComponentIDSetUnmodifiable = Collections.unmodifiableSet(standardComponentIDs.keySet());
+       private static final Map<String, String> standardComponentIDsUnmodifiable = Collections.unmodifiableMap(standardComponentIDs);
 
        private static final Map<String, ComponentSupplier> componentSuppliers = new HashMap<>();
 
@@ -56,9 +55,9 @@ public class IndirectGUIComponentCreator
                standardComponentIDs.put(standardComponentID, associatedComponentID);
        }
 
-       public static Set<String> getStandardComponentIDs()
+       public static Map<String, String> 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");
index 619254a..0016cc7 100644 (file)
@@ -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<C, S>
 {
        private final Map<String, String> standardSnippetIDClassNames = new HashMap<>();
-       private final Set<String> standardSnippetIDSetUnmodifiable = Collections.unmodifiableSet(standardSnippetIDClassNames.keySet());
+       private final Map<String, String> standardSnippetIDClassNamesUnmodifiable = Collections.unmodifiableMap(standardSnippetIDClassNames);
        private final Map<String, SnippetDefinintion<C, ?, S>> snippetSuppliersForClassNames = new HashMap<>();
        private final SnippetDefinintion<C, ?, S> defaultSnippetSupplier;
 
@@ -22,9 +21,9 @@ public class CodeSnippetSupplier<C, S>
                standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName);
        }
 
-       public Set<String> getStandardSnippetIDs()
+       public Map<String, String> getStandardSnippetIDs()
        {
-               return standardSnippetIDSetUnmodifiable;
+               return standardSnippetIDClassNamesUnmodifiable;
        }
 
        public void setSnippetSupplier(String id, SnippetDefinintion<C, ?, S> snippetSupplier)