package net.mograsim.logic.model.editor;
import java.io.IOException;
+import java.util.Map;
+import java.util.Map.Entry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import net.mograsim.logic.model.model.ViewModelModifiable;
import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
import net.mograsim.logic.model.serializing.IdentifierGetter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
import net.mograsim.logic.model.serializing.SubmodelComponentSerializer;
+import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers;
+import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandlerSnippetSuppliers;
public class SaveLoadManager
{
{
if (Editor.identifierPerComponent.containsKey(c))
return Editor.identifierPerComponent.get(c);
- return "class:" + c.getClass().getCanonicalName();
+ return getStandardID(c, IndirectGUIComponentCreator.getStandardComponentIDs(), true);
};
+ idGetter.symbolRendererIDs = h -> getStandardID(h,
+ SubmodelComponentSnippetSuppliers.symbolRendererSupplier.getStandardSnippetIDs());
+ idGetter.outlineRendererIDs = h -> getStandardID(h,
+ SubmodelComponentSnippetSuppliers.outlineRendererSupplier.getStandardSnippetIDs());
+ idGetter.highLevelStateHandlerIDs = h -> getStandardID(h,
+ SubmodelComponentSnippetSuppliers.highLevelStateHandlerSupplier.getStandardSnippetIDs());
+ idGetter.atomicHighLevelStateHandlerIDs = h -> getStandardID(h,
+ StandardHighLevelStateHandlerSnippetSuppliers.atomicHandlerSupplier.getStandardSnippetIDs());
+ idGetter.subcomponentHighLevelStateHandlerIDs = h -> getStandardID(h,
+ StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier.getStandardSnippetIDs());
SubmodelComponentSerializer.serialize(editor.toBeEdited, idGetter, savePath);
}
catch (IOException e)
}
}
+ private static String getStandardID(Object o, Map<String, String> standardIDs)
+ {
+ return getStandardID(o, standardIDs, false);
+ }
+
+ private static String getStandardID(Object o, Map<String, String> standardIDs, boolean standardIDsHaveClassConcatenated)
+ {
+ String verboseID = (standardIDsHaveClassConcatenated ? "class:" : "") + o.getClass().getCanonicalName();
+ return standardIDs.entrySet().stream().filter(e -> e.getValue().equals(verboseID)).map(Entry::getKey).findAny()
+ .orElseGet(() -> (standardIDsHaveClassConcatenated ? "" : "class:") + verboseID);
+ }
+
public static void openLoadDialog() throws IOException
{
Shell fdShell = new Shell();
public void refreshAddList()
{
- addList.setItems(IndirectGUIComponentCreator.getStandardComponentIDs().stream().sorted().toArray(String[]::new));
+ addList.setItems(IndirectGUIComponentCreator.getStandardComponentIDs().keySet().stream().sorted().toArray(String[]::new));
addList.select(0);
}
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import java.util.Set;
import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
public class IndirectGUIComponentCreator
{
private static final Map<String, String> standardComponentIDs = new HashMap<>();
- private static final Set<String> standardComponentIDSetUnmodifiable = Collections.unmodifiableSet(standardComponentIDs.keySet());
+ private static final Map<String, String> standardComponentIDsUnmodifiable = Collections.unmodifiableMap(standardComponentIDs);
private static final Map<String, ComponentSupplier> componentSuppliers = new HashMap<>();
standardComponentIDs.put(standardComponentID, associatedComponentID);
}
- public static Set<String> getStandardComponentIDs()
+ public static Map<String, String> getStandardComponentIDs()
{
- return standardComponentIDSetUnmodifiable;
+ return standardComponentIDsUnmodifiable;
}
public static void setComponentSupplier(String className, ComponentSupplier componentSupplier)
{
if (id != null)
{
- String resolvedID;
- if (id.startsWith("class:") || id.startsWith("file:"))
- resolvedID = id;
- else
- resolvedID = standardComponentIDs.get(id);
+ String resolvedID = resolveID(id);
if (resolvedID != null)
{
if (resolvedID.startsWith("class:"))
throw new RuntimeException("Could not get component supplier for ID " + id);
}
+ public static String resolveID(String id)
+ {
+ if (id.startsWith("class:") || id.startsWith("file:"))
+ return id;
+ return standardComponentIDs.get(id);
+ }
+
private static void tryLoadComponentClass(String componentClassName)
{
CodeSnippetSupplier.tryInvokeStaticInitializer(componentClassName, "Error loading component class %s: %s\n");
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import java.util.Set;
public class CodeSnippetSupplier<C, S>
{
private final Map<String, String> standardSnippetIDClassNames = new HashMap<>();
- private final Set<String> standardSnippetIDSetUnmodifiable = Collections.unmodifiableSet(standardSnippetIDClassNames.keySet());
+ 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;
standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName);
}
- public Set<String> getStandardSnippetIDs()
+ public Map<String, String> getStandardSnippetIDs()
{
- return standardSnippetIDSetUnmodifiable;
+ return standardSnippetIDClassNamesUnmodifiable;
}
public void setSnippetSupplier(String id, SnippetDefinintion<C, ?, S> snippetSupplier)