IndirectModelComponentCreator no longer caches jsonfile: components
[Mograsim.git] / plugins / net.mograsim.logic.model / src / net / mograsim / logic / model / serializing / IndirectModelComponentCreator.java
index 4bc9a36..13205b2 100644 (file)
@@ -10,7 +10,6 @@ import java.util.Objects;
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonNull;
-import com.google.gson.JsonObject;
 
 import net.mograsim.logic.model.model.LogicModelModifiable;
 import net.mograsim.logic.model.model.components.ModelComponent;
@@ -24,7 +23,7 @@ public class IndirectModelComponentCreator
 
        private static final Map<String, ComponentSupplier> componentSuppliers = new HashMap<>();
        private static final Map<String, ResourceLoader> resourceLoaders = new HashMap<>();
-       private static final Map<String, JsonObject> componentCache = new HashMap<>();
+       private static final Map<String, SubmodelComponentParams> componentCache = new HashMap<>();
 
        private static final ResourceLoader defaultResourceLoader;
        static
@@ -96,7 +95,7 @@ public class IndirectModelComponentCreator
                if (id == null)
                        throw new NullPointerException("Component ID is null");
                if (componentCache.containsKey(id))
-                       return loadComponentFromJsonObject(model, id, name, componentCache.get(id));
+                       return loadComponentFromJsonObject(model, id, name, componentCache.get(id), false);
                String resolvedID = resolveID(id);
                if (resolvedID == null)
                        throw new IllegalArgumentException("Unknown standard ID or illegal resolved ID: " + id);
@@ -104,17 +103,17 @@ public class IndirectModelComponentCreator
                String firstPart = parts[0];
                if (firstPart.equals("jsonfile"))
                {
-                       JsonObject jsonContents;
+                       SubmodelComponentParams jsonContents;
                        try
                        {
                                // don't use parts[1], because the path could contain ':'
-                               jsonContents = JsonHandler.readJson(resolvedID.substring("jsonfile:".length()), JsonObject.class);
+                               jsonContents = JsonHandler.readJson(resolvedID.substring("jsonfile:".length()), SubmodelComponentParams.class);
                        }
                        catch (IOException e)
                        {
                                throw new UncheckedIOException("Error loading JSON file", e);
                        }
-                       return loadComponentFromJsonObject(model, id, name, jsonContents);
+                       return loadComponentFromJsonObject(model, id, name, jsonContents, false);
                }
                ResourceLoader loader;
                String resTypeID;
@@ -139,18 +138,18 @@ public class IndirectModelComponentCreator
                }
                if (resTypeID.equals("jsonres"))
                {
-                       JsonObject jsonContents;
+                       SubmodelComponentParams jsonContents;
                        try
                        {
                                @SuppressWarnings("resource") // jsonStream is closed in JsonHandler
                                InputStream jsonStream = Objects.requireNonNull(loader.loadResource(resID), "Error loading JSON resource: Not found");
-                               jsonContents = JsonHandler.readJson(jsonStream, JsonObject.class);
+                               jsonContents = JsonHandler.readJson(jsonStream, SubmodelComponentParams.class);
                        }
                        catch (IOException e)
                        {
                                throw new UncheckedIOException("Error loading JSON resource", e);
                        }
-                       return loadComponentFromJsonObject(model, id, name, jsonContents);
+                       return loadComponentFromJsonObject(model, id, name, jsonContents, true);
                } else if (resTypeID.equals("class"))
                {
                        ComponentSupplier componentSupplier = componentSuppliers.get(resID);
@@ -185,15 +184,16 @@ public class IndirectModelComponentCreator
        }
 
        private static SubmodelComponent loadComponentFromJsonObject(LogicModelModifiable model, String id, String name,
-                       JsonObject jsonContents)
-       {
-               componentCache.putIfAbsent(id, jsonContents);
-               SerializablePojo jsonContentsAsSerializablePojo = JsonHandler.parser.fromJson(jsonContents, SerializablePojo.class);
-               if (jsonContentsAsSerializablePojo.version == null)
-                       return LegacySubmodelComponentSerializer.deserialize(model,
-                                       JsonHandler.parser.fromJson(jsonContents, LegacySubmodelComponentParams.class), name, id, null);
-               return SubmodelComponentSerializer.deserialize(model, JsonHandler.parser.fromJson(jsonContents, SubmodelComponentParams.class),
-                               name, id, null);
+                       SubmodelComponentParams jsonContents, boolean cache)
+       {
+               if (cache)
+                       componentCache.putIfAbsent(id, jsonContents);
+               return SubmodelComponentSerializer.deserialize(model, jsonContents, name, id, null);
+       }
+
+       public static void clearComponentCache()
+       {
+               componentCache.clear();
        }
 
        public static void registerResourceLoader(ResourceLoader resourceLoader)