X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fsnippets%2FCodeSnippetSupplier.java;h=22ebc090d49b9e0adc5f6c4c8403afa00ace3d1f;hb=375ec3e8653279a066a8fd644d13f9028049c18f;hp=86b57656e923c74ae0a8b1572c87aa72de2d10d3;hpb=a393b0a2a9899707af54c9ee77a01f28ac967bd1;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java index 86b57656..22ebc090 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/CodeSnippetSupplier.java @@ -1,11 +1,15 @@ package net.mograsim.logic.model.snippets; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import net.mograsim.logic.model.serializing.ReflectionHelper; + public class CodeSnippetSupplier { private final Map standardSnippetIDClassNames = new HashMap<>(); + private final Map standardSnippetIDClassNamesUnmodifiable = Collections.unmodifiableMap(standardSnippetIDClassNames); private final Map> snippetSuppliersForClassNames = new HashMap<>(); private final SnippetDefinintion defaultSnippetSupplier; @@ -14,9 +18,16 @@ public class CodeSnippetSupplier this.defaultSnippetSupplier = defaultSnippetSupplier; } - public void addStandardSnippetID(String standardSnippetID, String associatedSnippetClassName) + public void addStandardSnippetID(String standardSnippetID, String associatedSnippetID) + { + if (!associatedSnippetID.startsWith("class:")) + throw new IllegalArgumentException("Unrecognized snippet ID format: " + associatedSnippetID); + standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetID); + } + + public Map getStandardSnippetIDs() { - standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName); + return standardSnippetIDClassNamesUnmodifiable; } public void setSnippetSupplier(String id, SnippetDefinintion snippetSupplier) @@ -29,13 +40,10 @@ public class CodeSnippetSupplier { if (id != null) { - String snippetClassName; - if (id.startsWith("class:")) - snippetClassName = id.substring(6); - else - snippetClassName = standardSnippetIDClassNames.get(id); - if (snippetClassName != null) + String resolvedID = resolveID(id); + if (resolvedID != null) { + String snippetClassName = resolvedID.substring(6); tryLoadSnippetClass(snippetClassName); SnippetDefinintion snippetSupplier = snippetSuppliersForClassNames.get(snippetClassName); if (snippetSupplier != null) @@ -48,23 +56,17 @@ public class CodeSnippetSupplier return defaultSnippetSupplier; } - // static helpers - - private static void tryLoadSnippetClass(String snippetClassName) + public String resolveID(String id) { - tryInvokeStaticInitializer(snippetClassName, "Error getting snippet class: %s: %s\n"); + if (id.startsWith("class:")) + return id; + return standardSnippetIDClassNames.get(id); } - public static void tryInvokeStaticInitializer(String className, String errorMessageFormat) + // static helpers + + private static void tryLoadSnippetClass(String snippetClassName) { - try - { - Class.forName(className, true, CodeSnippetSupplier.class.getClassLoader()); - } - catch (ClassNotFoundException e) - { - System.err.printf(errorMessageFormat, className, "ClassNotFoundException thrown: " + e.getMessage()); - } + ReflectionHelper.tryInvokeStaticInitializer(snippetClassName, "Error getting snippet class: %s: %s\n"); } - } \ No newline at end of file