1 package net.mograsim.logic.model.serializing;
3 import static net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers.highLevelStateHandlerSupplier;
4 import static net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers.outlineRendererSupplier;
5 import static net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers.symbolRendererSupplier;
6 import static net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandlerSnippetSuppliers.atomicHandlerSupplier;
7 import static net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier;
10 import java.util.Map.Entry;
11 import java.util.function.Function;
13 import net.mograsim.logic.model.model.components.GUIComponent;
14 import net.mograsim.logic.model.snippets.CodeSnippetSupplier;
15 import net.mograsim.logic.model.snippets.HighLevelStateHandler;
16 import net.mograsim.logic.model.snippets.Renderer;
17 import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.AtomicHighLevelStateHandler;
18 import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomponent.SubcomponentHighLevelStateHandler;
21 public class IdentifierGetter
23 // TODO save IDs for everything than can be deserialized / serialized (=every JSONSerializable?)
24 public Function<GUIComponent, String> componentIDs;
25 public Function<Renderer, String> symbolRendererIDs;
26 public Function<Renderer, String> outlineRendererIDs;
27 public Function<HighLevelStateHandler, String> highLevelStateHandlerIDs;
28 public Function<SubcomponentHighLevelStateHandler, String> subcomponentHighLevelStateHandlerIDs;
29 public Function<AtomicHighLevelStateHandler, String> atomicHighLevelStateHandlerIDs;
32 * Creates a new IdentifierGetter using the following as the default for all ID getter functions: <br>
33 * Define the verbose ID as <code>"class:" + canonicalClassName</code>.<br>
34 * If there is a standard ID mapping to this verbose ID recorded in the matching {@link CodeSnippetSupplier}, use this ID; if not, use
37 public IdentifierGetter()
39 componentIDs = generateStandardIDFunction(IndirectGUIComponentCreator.getStandardComponentIDs());
40 symbolRendererIDs = generateStandardIDFunction(symbolRendererSupplier);
41 outlineRendererIDs = generateStandardIDFunction(outlineRendererSupplier);
42 highLevelStateHandlerIDs = generateStandardIDFunction(highLevelStateHandlerSupplier);
43 atomicHighLevelStateHandlerIDs = generateStandardIDFunction(atomicHandlerSupplier);
44 subcomponentHighLevelStateHandlerIDs = generateStandardIDFunction(subcomponentHandlerSupplier);
47 private static <T> Function<T, String> generateStandardIDFunction(CodeSnippetSupplier<?, T> snippetSupplier)
49 return generateStandardIDFunction(snippetSupplier.getStandardSnippetIDs());
52 private static <T> Function<T, String> generateStandardIDFunction(Map<String, String> standardComponentIDs)
56 String verboseID = "class:" + t.getClass().getCanonicalName();
57 return standardComponentIDs.entrySet().stream().filter(e -> e.getValue().equals(verboseID)).map(Entry::getKey).findAny()