Merge branch 'development' of
[Mograsim.git] / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / SaveLoadManager.java
diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java
new file mode 100644 (file)
index 0000000..848227b
--- /dev/null
@@ -0,0 +1,69 @@
+package net.mograsim.logic.model.editor;
+
+import java.io.IOException;
+
+import net.mograsim.logic.model.editor.DialogManager.InteractiveDialog;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
+import net.mograsim.logic.model.serializing.SubmodelComponentDeserializer;
+import net.mograsim.logic.model.util.JsonHandler;
+
+public class SaveLoadManager
+{
+       private String savePath = null;
+       private Editor editor;
+
+       public SaveLoadManager(Editor editor)
+       {
+               this.editor = editor;
+       }
+
+       public void save()
+       {
+               if (savePath == null)
+                       openSaveAsDialog();
+               else
+                       innerSave();
+       }
+
+       public void openSaveAsDialog()
+       {
+               InteractiveDialog d = new InteractiveDialog("Save as...", "Save", "Cancel", "Path");
+               d.open();
+               
+               if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(d.getState()))
+               {
+                       savePath = d.getText();
+                       innerSave();
+               }
+       }
+
+       private void innerSave()
+       {
+               try
+               {
+                       JsonHandler.writeJson(editor.toBeEdited.calculateParams(c ->
+                       {
+                               if (Editor.identifierPerComponent.containsKey(c))
+                                       return Editor.identifierPerComponent.get(c);
+                               return "class:" + c.getClass().getCanonicalName();
+                       }), savePath);
+               } catch (IOException e)
+               {
+                       savePath = null;
+                       System.err.println("Failed to save component!");
+                       e.printStackTrace();
+               }
+       }
+
+       public static void openLoadDialog()
+       {
+               InteractiveDialog load = new InteractiveDialog("Load Component...", "Load", "Cancel", "Path");
+               load.open();
+               if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(load.getState()))
+               {
+                       new Editor((DeserializedSubmodelComponent) SubmodelComponentDeserializer
+                                       .create(new ViewModelModifiable(), load.getText()));
+               }
+       }
+}