Serializing now serializes everything; among many other things:
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / serializing / IndirectGUIComponentCreator.java
index 874a8a8..f97b901 100644 (file)
@@ -2,19 +2,24 @@ package net.mograsim.logic.model.serializing;
 
 import java.io.IOException;
 import java.io.InputStream;
+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;
 
 import net.mograsim.logic.model.model.ViewModelModifiable;
 import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.snippets.CodeSnippetSupplier;
 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, ComponentSupplier> componentSuppliers = new HashMap<>();
 
@@ -51,6 +56,11 @@ public class IndirectGUIComponentCreator
                standardComponentIDs.put(standardComponentID, associatedComponentID);
        }
 
+       public static Set<String> getStandardComponentIDs()
+       {
+               return standardComponentIDSetUnmodifiable;
+       }
+
        public static void setComponentSupplier(String className, ComponentSupplier componentSupplier)
        {
                componentSuppliers.put(className, componentSupplier);
@@ -88,9 +98,18 @@ public class IndirectGUIComponentCreator
                                if (componentSupplier != null)
                                        return componentSupplier.create(model, params, name);
                        } else
-                               // we know id has to start with "file:" here
-                               // because standardComponentIDs only contains strings starting with "class:" or "file:"
-                               return SubmodelComponentDeserializer.create(model, resolvedID.substring(5), name);
+                       // we know id has to start with "file:" here
+                       // because standardComponentIDs only contains strings starting with "class:" or "file:"
+                       if (params != null && !JsonNull.INSTANCE.equals(params))
+                               throw new IllegalArgumentException("Can't give params to a component deserialized from a JSON file");
+                       try
+                       {
+                               return SubmodelComponentSerializer.deserialize(model, resolvedID.substring(5), name, id, null);
+                       }
+                       catch (IOException e)
+                       {
+                               throw new UncheckedIOException(e);
+                       }
                }
                throw new RuntimeException("Could not get component supplier for ID " + id);
        }