Adapt Editor to new system, removed json duplication
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / snippets / CodeSnippetSupplier.java
index 86b5765..26d5a0d 100644 (file)
@@ -1,11 +1,13 @@
 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;
 
@@ -14,9 +16,16 @@ public class CodeSnippetSupplier<C, S>
                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)
@@ -29,13 +38,10 @@ public class CodeSnippetSupplier<C, S>
        {
                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)
@@ -48,6 +54,13 @@ public class CodeSnippetSupplier<C, S>
                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)