GUIComponents now have names
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / serializing / CodeSnippetSupplier.java
index 453e2ac..a6b9dae 100644 (file)
@@ -5,32 +5,37 @@ import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
 
-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.HighLevelStateHandler;
+import net.mograsim.logic.ui.serializing.snippets.Renderer;
+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<S>
 {
        // public static members
-       public static final CodeSnippetSupplier<RendererProvider> symbolRendererProviderSupplier;
-       public static final CodeSnippetSupplier<RendererProvider> outlineRendererProviderSupplier;
+       public static final CodeSnippetSupplier<Renderer> symbolRendererSupplier;
+       public static final CodeSnippetSupplier<Renderer> outlineRendererSupplier;
+       public static final CodeSnippetSupplier<HighLevelStateHandler> highLevelStateHandlerSupplier;
 
        static
        {
-               symbolRendererProviderSupplier = new CodeSnippetSupplier<>(new DefaultSymbolRendererProvider());
-               outlineRendererProviderSupplier = new CodeSnippetSupplier<>(new DefaultOutlineRendererProvider());
+               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));
        }
 
        // per-instance members
 
        private final Map<String, String> standardSnippetIDClassNames = new HashMap<>();
-       private final Map<String, S> snippetProvidersForClassNames = new HashMap<>();
-       private final S defaultSnippetProvider;
+       private final Map<String, SnippetSupplier<?, S>> snippetSuppliersForClassNames = new HashMap<>();
+       private final SnippetSupplier<?, S> defaultSnippetSupplier;
 
-       private CodeSnippetSupplier(S defaultSnippetProvider)
+       private CodeSnippetSupplier(SnippetSupplier<?, S> defaultSnippetSupplier)
        {
-               this.defaultSnippetProvider = defaultSnippetProvider;
+               this.defaultSnippetSupplier = defaultSnippetSupplier;
        }
 
        public void addStandardSnippetID(String standardSnippetID, String associatedSnippetClassName)
@@ -38,31 +43,31 @@ public class CodeSnippetSupplier<S>
                standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName);
        }
 
-       public void setSnippetProvider(String id, S snippetProvider)
+       public void setSnippetSupplier(String id, SnippetSupplier<?, S> snippetSupplier)
        {
-               snippetProvidersForClassNames.put(id, snippetProvider);
+               snippetSuppliersForClassNames.put(id, snippetSupplier);
        }
 
        // TODO report errors
-       public S getSnippetProvider(String id)
+       public SnippetSupplier<?, S> getSnippetSupplier(String id)
        {
                if (id != null)
                {
-                       String snippetProviderClassName;
+                       String snippetClassName;
                        if (id.startsWith("class:"))
-                               snippetProviderClassName = id.substring(6);
+                               snippetClassName = id.substring(6);
                        else
-                               snippetProviderClassName = standardSnippetIDClassNames.get(id);
-                       if (snippetProviderClassName != null)
+                               snippetClassName = standardSnippetIDClassNames.get(id);
+                       if (snippetClassName != null)
                        {
-                               tryLoadSnippetClass(snippetProviderClassName);
-                               S snippetProvider = snippetProvidersForClassNames.get(snippetProviderClassName);
-                               if (snippetProvider != null)
-                                       return snippetProvider;
+                               tryLoadSnippetClass(snippetClassName);
+                               SnippetSupplier<?, S> 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 defaultSnippetProvider;
+               return defaultSnippetSupplier;
        }
 
        // static helpers
@@ -74,8 +79,9 @@ public class CodeSnippetSupplier<S>
                        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);
+                       tmp.standardOutlineRendererSuppliers.forEach(outlineRendererSupplier::addStandardSnippetID);
+                       tmp.standardSymbolRendererSuppliers.forEach(symbolRendererSupplier::addStandardSnippetID);
+                       tmp.standardHighLevelStateHandlerSuppliers.forEach(highLevelStateHandlerSupplier::addStandardSnippetID);
                }
                catch (Exception e)
                {
@@ -86,8 +92,9 @@ public class CodeSnippetSupplier<S>
 
        private static class SnippetIDClassNames
        {
-               public Map<String, String> standardOutlineRendererProviders;
-               public Map<String, String> standardSymbolRendererProviders;
+               public Map<String, String> standardOutlineRendererSuppliers;
+               public Map<String, String> standardSymbolRendererSuppliers;
+               public Map<String, String> standardHighLevelStateHandlerSuppliers;
        }
 
        private static void tryLoadSnippetClass(String snippetClassName)