From dbda073d92ae9dd8e701d904c4c71dd0edd1fce7 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Thu, 4 Jul 2019 10:50:11 +0200 Subject: [PATCH] Made CodeSnippetSupplier generic --- .../ui/serializing/CodeSnippetSupplier.java | 103 +++++++++--------- .../SubmodelComponentDeserializer.java | 7 +- .../CenteredTextSymbolRendererProvider.java | 2 +- ...RectangularLikeSymbolRendererProvider.java | 4 +- .../serializing/standardSnippetIDMapping.json | 7 +- 5 files changed, 64 insertions(+), 59 deletions(-) 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..453e2ac3 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,89 +5,89 @@ import java.io.InputStream; import java.util.HashMap; import java.util.Map; -import com.google.gson.JsonElement; - -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.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 symbolRendererProviderSupplier; + public static final CodeSnippetSupplier outlineRendererProviderSupplier; - 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()); - } + symbolRendererProviderSupplier = new CodeSnippetSupplier<>(new DefaultSymbolRendererProvider()); + outlineRendererProviderSupplier = new CodeSnippetSupplier<>(new DefaultOutlineRendererProvider()); } - 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 snippetProvidersForClassNames = new HashMap<>(); + private final S defaultSnippetProvider; - public static void setSymbolRendererProvider(String id, RendererProvider symbolRendererProvider) + private CodeSnippetSupplier(S defaultSnippetProvider) { - symbolRendererProvidersForComponentClassNames.put(id, symbolRendererProvider); + this.defaultSnippetProvider = defaultSnippetProvider; } - 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 setSnippetProvider(String id, S snippetProvider) { - return getSnippet(id, symbolRendererProvidersForComponentClassNames, defaultSymbolRendererProvider).create(component, params); + snippetProvidersForClassNames.put(id, snippetProvider); } // TODO report errors - private static C getSnippet(String id, Map specializedCodeMap, C defaultSnippet) + public S getSnippetProvider(String id) { if (id != null) { - String snippetClassName; + String snippetProviderClassName; if (id.startsWith("class:")) - snippetClassName = id.substring(6); + snippetProviderClassName = id.substring(6); else - snippetClassName = standardSnippetIDClassNames.get(id); - if (snippetClassName != null) + snippetProviderClassName = standardSnippetIDClassNames.get(id); + if (snippetProviderClassName != null) { - tryLoadSnippetClass(snippetClassName); - C specializedCode = specializedCodeMap.get(snippetClassName); - if (specializedCode != null) - return specializedCode; + tryLoadSnippetClass(snippetProviderClassName); + S snippetProvider = snippetProvidersForClassNames.get(snippetProviderClassName); + if (snippetProvider != null) + return snippetProvider; } } System.err.println("Couldn't load snippet " + id + "; using default"); - return defaultSnippet; + return defaultSnippetProvider; + } + + // 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.standardOutlineRendererProviders.forEach(outlineRendererProviderSupplier::addStandardSnippetID); + tmp.standardSymbolRendererProviders.forEach(symbolRendererProviderSupplier::addStandardSnippetID); + } + catch (Exception e) + { + System.err.println("Failed to initialize standard snippet ID mapping: "); + e.printStackTrace(); + } + } + + private static class SnippetIDClassNames + { + public Map standardOutlineRendererProviders; + public Map standardSymbolRendererProviders; } private static void tryLoadSnippetClass(String snippetClassName) @@ -106,4 +106,5 @@ public class CodeSnippetSupplier System.err.printf(errorMessageFormat, className, "ClassNotFoundException thrown: " + e.getMessage()); } } + } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/SubmodelComponentDeserializer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/SubmodelComponentDeserializer.java index e997ad28..20961a7d 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/SubmodelComponentDeserializer.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/SubmodelComponentDeserializer.java @@ -61,9 +61,10 @@ public final class SubmodelComponentDeserializer { DeserializedSubmodelComponent comp = new DeserializedSubmodelComponent(model); comp.setSubmodelScale(params.submodel.innerScale); - comp.setOutlineRenderer( - CodeSnippetSupplier.createOutlineRenderer(params.outlineRendererSnippetID, comp, params.outlineRendererParams)); - comp.setSymbolRenderer(CodeSnippetSupplier.createSymbolRenderer(params.symbolRendererSnippetID, comp, params.symbolRendererParams)); + comp.setOutlineRenderer(CodeSnippetSupplier.outlineRendererProviderSupplier.getSnippetProvider(params.outlineRendererSnippetID) + .create(comp, params.outlineRendererParams)); + comp.setSymbolRenderer(CodeSnippetSupplier.symbolRendererProviderSupplier.getSnippetProvider(params.symbolRendererSnippetID) + .create(comp, params.symbolRendererParams)); // TODO high level states comp.setSize(params.width, params.height); for (InterfacePinParams iPinParams : params.interfacePins) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java index de1551bd..98e6c439 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java @@ -51,7 +51,7 @@ public class CenteredTextSymbolRendererProvider implements RendererProvider static { - CodeSnippetSupplier.setSymbolRendererProvider(CenteredTextSymbolRendererProvider.class.getCanonicalName(), + CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(CenteredTextSymbolRendererProvider.class.getCanonicalName(), new CenteredTextSymbolRendererProvider()); } } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java index a47c47fc..c7a8fa1e 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java @@ -77,7 +77,7 @@ public class SimpleRectangularLikeSymbolRendererProvider implements RendererProv static { - CodeSnippetSupplier.setSymbolRendererProvider(SimpleRectangularLikeSymbolRendererProvider.class.getCanonicalName(), - new SimpleRectangularLikeSymbolRendererProvider()); + CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider( + SimpleRectangularLikeSymbolRendererProvider.class.getCanonicalName(), new SimpleRectangularLikeSymbolRendererProvider()); } } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json index 850d54cd..30976a09 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json @@ -1,5 +1,8 @@ mograsim version: 0.1.3 { - "CenteredTextSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.CenteredTextSymbolRendererProvider", - "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRendererProvider" + "standardOutlineRendererProviders": {}, + "standardSymbolRendererProviders": { + "CenteredTextSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.CenteredTextSymbolRendererProvider", + "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRendererProvider" + } } \ No newline at end of file -- 2.17.1