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;
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
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);
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;
}
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);
}
private static SubmodelComponent loadComponentFromJsonObject(LogicModelModifiable model, String id, String name,
- JsonObject jsonContents)
+ SubmodelComponentParams jsonContents, boolean cache)
{
- componentCache.putIfAbsent(id, jsonContents);
- return SubmodelComponentSerializer.deserialize(model, JsonHandler.parser.fromJson(jsonContents, SubmodelComponentParams.class),
- name, id, null);
+ 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)