Merge branch 'development' of
[Mograsim.git] / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / SaveLoadManager.java
1 package net.mograsim.logic.model.editor;
2
3 import java.io.IOException;
4
5 import net.mograsim.logic.model.editor.DialogManager.InteractiveDialog;
6 import net.mograsim.logic.model.model.ViewModelModifiable;
7 import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
8 import net.mograsim.logic.model.serializing.SubmodelComponentDeserializer;
9 import net.mograsim.logic.model.util.JsonHandler;
10
11 public class SaveLoadManager
12 {
13         private String savePath = null;
14         private Editor editor;
15
16         public SaveLoadManager(Editor editor)
17         {
18                 this.editor = editor;
19         }
20
21         public void save()
22         {
23                 if (savePath == null)
24                         openSaveAsDialog();
25                 else
26                         innerSave();
27         }
28
29         public void openSaveAsDialog()
30         {
31                 InteractiveDialog d = new InteractiveDialog("Save as...", "Save", "Cancel", "Path");
32                 d.open();
33                 
34                 if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(d.getState()))
35                 {
36                         savePath = d.getText();
37                         innerSave();
38                 }
39         }
40
41         private void innerSave()
42         {
43                 try
44                 {
45                         JsonHandler.writeJson(editor.toBeEdited.calculateParams(c ->
46                         {
47                                 if (Editor.identifierPerComponent.containsKey(c))
48                                         return Editor.identifierPerComponent.get(c);
49                                 return "class:" + c.getClass().getCanonicalName();
50                         }), savePath);
51                 } catch (IOException e)
52                 {
53                         savePath = null;
54                         System.err.println("Failed to save component!");
55                         e.printStackTrace();
56                 }
57         }
58
59         public static void openLoadDialog()
60         {
61                 InteractiveDialog load = new InteractiveDialog("Load Component...", "Load", "Cancel", "Path");
62                 load.open();
63                 if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(load.getState()))
64                 {
65                         new Editor((DeserializedSubmodelComponent) SubmodelComponentDeserializer
66                                         .create(new ViewModelModifiable(), load.getText()));
67                 }
68         }
69 }