Restructured serializing classes
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / serializing / SubmodelComponentParams.java
1 package net.mograsim.logic.ui.serializing;
2
3 import java.io.IOException;
4 import java.util.Map;
5
6 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
7 import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
8 import net.mograsim.logic.ui.util.JsonHandler;
9
10 /**
11  * This class contains all the information necessary to create a new {@link SubmodelComponent}
12  */
13 public class SubmodelComponentParams
14 {
15         public String type, name;
16         public double width, height;
17         public InterfacePinParams[] interfacePins;
18         public ComponentCompositionParams composition;
19         public Map<String, Object> specialized;
20
21         public static class InterfacePinParams
22         {
23                 public Point location;
24                 public String name;
25                 public int logicWidth;
26         }
27
28         public static class InnerWireParams
29         {
30                 public InnerPinParams pin1, pin2;
31                 public Point[] path;
32         }
33
34         public static class InnerPinParams
35         {
36                 public int compId;
37                 public String pinName;
38         }
39
40         public static class ComponentCompositionParams
41         {
42                 public double innerScale;
43                 public InnerComponentParams[] subComps;
44                 public InnerWireParams[] innerWires;
45
46                 public static class InnerComponentParams
47                 {
48                         public Point pos;
49                         public String name;
50                         public Map<String, Object> params;
51                 }
52         }
53
54         public static SubmodelComponentParams readJson(String path) throws IOException
55         {
56                 return JsonHandler.readJson(path, SubmodelComponentParams.class);
57         }
58
59         /**
60          * Writes this {@link SubmodelComponentParams} object into a file in json format. The correct file extension is important! Check
61          * {@link SubmodelComponentParams}.fileExtension
62          */
63         public void writeJson(String path)
64         {
65                 try
66                 {
67                         JsonHandler.writeJson(this, path);
68                 }
69                 catch (IOException e)
70                 {
71                         System.err.println("Failed to write SubComponentParams to file");
72                         e.printStackTrace();
73                 }
74         }
75 }