X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fserializing%2FCodeSnippetSupplier.java;h=a6b9dae7868f4ece349bdf969cbe92dceaf21966;hb=5ece0acf049bf9af2933f513fe0206565681f622;hp=8c13e96a96eff76793c5b5f3e6470cb1dcdab734;hpb=9ca90120a47e07c9182162351dc47aa89ae703be;p=Mograsim.git diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java index 8c13e96a..a6b9dae7 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java @@ -5,71 +5,51 @@ import java.io.InputStream; import java.util.HashMap; import java.util.Map; -import com.google.gson.JsonElement; - +import net.mograsim.logic.ui.serializing.snippets.HighLevelStateHandler; import net.mograsim.logic.ui.serializing.snippets.Renderer; -import net.mograsim.logic.ui.serializing.snippets.RendererProvider; -import net.mograsim.logic.ui.serializing.snippets.outlinerenderers.DefaultOutlineRendererProvider; -import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.DefaultSymbolRendererProvider; +import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier; +import net.mograsim.logic.ui.serializing.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler; +import net.mograsim.logic.ui.serializing.snippets.outlinerenderers.DefaultOutlineRenderer; +import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.DefaultSymbolRenderer; import net.mograsim.logic.ui.util.JsonHandler; -public class CodeSnippetSupplier +public class CodeSnippetSupplier { - private static final Map standardSnippetIDClassNames = new HashMap<>(); - - private static final Map outlineRendererProvidersForComponentClassNames = new HashMap<>(); - private static final Map symbolRendererProvidersForComponentClassNames = new HashMap<>(); + // public static members + public static final CodeSnippetSupplier symbolRendererSupplier; + public static final CodeSnippetSupplier outlineRendererSupplier; + public static final CodeSnippetSupplier highLevelStateHandlerSupplier; - private static final RendererProvider defaultOutlineRendererProvider; - private static final RendererProvider defaultSymbolRendererProvider; static { - defaultOutlineRendererProvider = new DefaultOutlineRendererProvider(); - defaultSymbolRendererProvider = new DefaultSymbolRendererProvider(); - } - - static - { - try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardSnippetIDMapping.json")) - { - if (s == null) - throw new IOException("Resource not found"); - Map tmp = JsonHandler.readJson(s, Map.class); - standardSnippetIDClassNames.putAll(tmp); - } - catch (IOException e) - { - System.err.println("Failed to initialize standard snippet ID mapping: " + e.getMessage()); - } + symbolRendererSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new)); + outlineRendererSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new)); + highLevelStateHandlerSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultHighLevelStateHandler::new)); } - public static void addStandardSnippetID(String standardSnippetID, String associatedSnippetClassName) - { - standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName); - } + // per-instance members - public static void setOutlineRendererProvider(String id, RendererProvider outlineRendererProvider) - { - outlineRendererProvidersForComponentClassNames.put(id, outlineRendererProvider); - } + private final Map standardSnippetIDClassNames = new HashMap<>(); + private final Map> snippetSuppliersForClassNames = new HashMap<>(); + private final SnippetSupplier defaultSnippetSupplier; - public static void setSymbolRendererProvider(String id, RendererProvider symbolRendererProvider) + private CodeSnippetSupplier(SnippetSupplier defaultSnippetSupplier) { - symbolRendererProvidersForComponentClassNames.put(id, symbolRendererProvider); + this.defaultSnippetSupplier = defaultSnippetSupplier; } - public static Renderer createOutlineRenderer(String id, DeserializedSubmodelComponent component, JsonElement params) + public void addStandardSnippetID(String standardSnippetID, String associatedSnippetClassName) { - return getSnippet(id, outlineRendererProvidersForComponentClassNames, defaultOutlineRendererProvider).create(component, params); + standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName); } - public static Renderer createSymbolRenderer(String id, DeserializedSubmodelComponent component, JsonElement params) + public void setSnippetSupplier(String id, SnippetSupplier snippetSupplier) { - return getSnippet(id, symbolRendererProvidersForComponentClassNames, defaultSymbolRendererProvider).create(component, params); + snippetSuppliersForClassNames.put(id, snippetSupplier); } // TODO report errors - private static C getSnippet(String id, Map specializedCodeMap, C defaultSnippet) + public SnippetSupplier getSnippetSupplier(String id) { if (id != null) { @@ -81,13 +61,40 @@ public class CodeSnippetSupplier if (snippetClassName != null) { tryLoadSnippetClass(snippetClassName); - C specializedCode = specializedCodeMap.get(snippetClassName); - if (specializedCode != null) - return specializedCode; + SnippetSupplier snippetSupplier = snippetSuppliersForClassNames.get(snippetClassName); + if (snippetSupplier != null) + return snippetSupplier; } + System.err.println("Couldn't load snippet " + id + "; using default"); } - System.err.println("Couldn't load snippet " + id + "; using default"); - return defaultSnippet; + return defaultSnippetSupplier; + } + + // static helpers + + static + { + try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardSnippetIDMapping.json")) + { + if (s == null) + throw new IOException("Resource not found"); + SnippetIDClassNames tmp = JsonHandler.readJson(s, SnippetIDClassNames.class); + tmp.standardOutlineRendererSuppliers.forEach(outlineRendererSupplier::addStandardSnippetID); + tmp.standardSymbolRendererSuppliers.forEach(symbolRendererSupplier::addStandardSnippetID); + tmp.standardHighLevelStateHandlerSuppliers.forEach(highLevelStateHandlerSupplier::addStandardSnippetID); + } + catch (Exception e) + { + System.err.println("Failed to initialize standard snippet ID mapping: "); + e.printStackTrace(); + } + } + + private static class SnippetIDClassNames + { + public Map standardOutlineRendererSuppliers; + public Map standardSymbolRendererSuppliers; + public Map standardHighLevelStateHandlerSuppliers; } private static void tryLoadSnippetClass(String snippetClassName) @@ -106,4 +113,5 @@ public class CodeSnippetSupplier System.err.printf(errorMessageFormat, className, "ClassNotFoundException thrown: " + e.getMessage()); } } + } \ No newline at end of file