Merge remote-tracking branch 'origin/development' into development
[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.ui.DialogManager;
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                 String result[] = DialogManager.openMultiTextDialog("Save as...", "Save", "Cancel", "Path");
32                 if(result != null)
33                 {
34                         savePath = result[0];
35                         innerSave();
36                 }
37         }
38
39         private void innerSave()
40         {
41                 try
42                 {
43                         JsonHandler.writeJson(editor.toBeEdited.calculateParams(c ->
44                         {
45                                 if (Editor.identifierPerComponent.containsKey(c))
46                                         return Editor.identifierPerComponent.get(c);
47                                 return "class:" + c.getClass().getCanonicalName();
48                         }), savePath);
49                 } catch (IOException e)
50                 {
51                         savePath = null;
52                         System.err.println("Failed to save component!");
53                         e.printStackTrace();
54                 }
55         }
56
57         public static void openLoadDialog()
58         {
59                 String[] result = DialogManager.openMultiTextDialog("Load Component...", "Load", "Cancel", "Path");
60                 if(result != null)
61                 {
62                         new Editor((DeserializedSubmodelComponent) SubmodelComponentDeserializer
63                                         .create(new ViewModelModifiable(), result[0]));
64                 }
65         }
66 }