package net.mograsim.logic.model.snippets;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class CodeSnippetSupplier<C, S>
{
private final Map<String, String> standardSnippetIDClassNames = new HashMap<>();
+ private final Map<String, String> standardSnippetIDClassNamesUnmodifiable = Collections.unmodifiableMap(standardSnippetIDClassNames);
private final Map<String, SnippetDefinintion<C, ?, S>> snippetSuppliersForClassNames = new HashMap<>();
private final SnippetDefinintion<C, ?, S> defaultSnippetSupplier;
this.defaultSnippetSupplier = defaultSnippetSupplier;
}
- public void addStandardSnippetID(String standardSnippetID, String associatedSnippetClassName)
+ public void addStandardSnippetID(String standardSnippetID, String associatedSnippetID)
{
- standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName);
+ if (!associatedSnippetID.startsWith("class:"))
+ throw new IllegalArgumentException("Unrecognized snippet ID format: " + associatedSnippetID);
+ standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetID);
+ }
+
+ public Map<String, String> getStandardSnippetIDs()
+ {
+ return standardSnippetIDClassNamesUnmodifiable;
}
public void setSnippetSupplier(String id, SnippetDefinintion<C, ?, S> snippetSupplier)
{
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<C, ?, S> snippetSupplier = snippetSuppliersForClassNames.get(snippetClassName);
if (snippetSupplier != null)
return defaultSnippetSupplier;
}
+ public String resolveID(String id)
+ {
+ if (id.startsWith("class:"))
+ return id;
+ return standardSnippetIDClassNames.get(id);
+ }
+
// static helpers
private static void tryLoadSnippetClass(String snippetClassName)