1 package net.mograsim.logic.model.editor;
3 import java.io.IOException;
5 import java.util.Map.Entry;
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.widgets.FileDialog;
9 import org.eclipse.swt.widgets.Shell;
11 import net.mograsim.logic.model.model.ViewModelModifiable;
12 import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
13 import net.mograsim.logic.model.serializing.IdentifierGetter;
14 import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
15 import net.mograsim.logic.model.serializing.SubmodelComponentSerializer;
16 import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers;
17 import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandlerSnippetSuppliers;
19 public class SaveLoadManager
21 private String savePath = null;
22 private Editor editor;
24 public SaveLoadManager(Editor editor)
37 public void openSaveAsDialog()
39 Shell fdShell = new Shell();
40 FileDialog fd = new FileDialog(fdShell, SWT.SAVE);
41 fd.setText("Save as...");
42 fd.setFilterExtensions(new String[] { "*.json" });
43 String result = fd.open();
52 private void innerSave()
56 IdentifierGetter idGetter = new IdentifierGetter();
57 idGetter.componentIDs = c ->
59 if (Editor.identifierPerComponent.containsKey(c))
60 return Editor.identifierPerComponent.get(c);
61 return getStandardID(c, IndirectGUIComponentCreator.getStandardComponentIDs(), true);
63 idGetter.symbolRendererIDs = h -> getStandardID(h,
64 SubmodelComponentSnippetSuppliers.symbolRendererSupplier.getStandardSnippetIDs());
65 idGetter.outlineRendererIDs = h -> getStandardID(h,
66 SubmodelComponentSnippetSuppliers.outlineRendererSupplier.getStandardSnippetIDs());
67 idGetter.highLevelStateHandlerIDs = h -> getStandardID(h,
68 SubmodelComponentSnippetSuppliers.highLevelStateHandlerSupplier.getStandardSnippetIDs());
69 idGetter.atomicHighLevelStateHandlerIDs = h -> getStandardID(h,
70 StandardHighLevelStateHandlerSnippetSuppliers.atomicHandlerSupplier.getStandardSnippetIDs());
71 idGetter.subcomponentHighLevelStateHandlerIDs = h -> getStandardID(h,
72 StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier.getStandardSnippetIDs());
73 SubmodelComponentSerializer.serialize(editor.toBeEdited, idGetter, savePath);
78 System.err.println("Failed to save component!");
83 private static String getStandardID(Object o, Map<String, String> standardIDs)
85 return getStandardID(o, standardIDs, false);
88 private static String getStandardID(Object o, Map<String, String> standardIDs, boolean standardIDsHaveClassConcatenated)
90 String verboseID = (standardIDsHaveClassConcatenated ? "class:" : "") + o.getClass().getCanonicalName();
91 return standardIDs.entrySet().stream().filter(e -> e.getValue().equals(verboseID)).map(Entry::getKey).findAny()
92 .orElseGet(() -> (standardIDsHaveClassConcatenated ? "" : "class:") + verboseID);
95 public static void openLoadDialog() throws IOException
97 Shell fdShell = new Shell();
98 FileDialog fd = new FileDialog(fdShell, SWT.OPEN);
99 fd.setText("Load component...");
100 fd.setFilterExtensions(new String[] { "*.json" });
101 String result = fd.open();
105 new Editor((DeserializedSubmodelComponent) SubmodelComponentSerializer.deserialize(new ViewModelModifiable(), result));