8e4d459c76036aa951d69421fe7d30fed38f43a1
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / serializing / DeserializedSubmodelComponent.java
1 package net.mograsim.logic.model.serializing;
2
3 import com.google.gson.JsonElement;
4
5 import net.mograsim.logic.model.model.LogicModelModifiable;
6 import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
7 import net.mograsim.logic.model.model.wires.MovablePin;
8 import net.mograsim.logic.model.model.wires.Pin;
9 import net.mograsim.logic.model.snippets.HighLevelStateHandler;
10 import net.mograsim.logic.model.snippets.Renderer;
11
12 public class DeserializedSubmodelComponent extends SubmodelComponent
13 {
14         /**
15          * If a DeserializedSubmodelComponent is part of another SubmodelComponent, when it it serialized, it should not return its internal
16          * structure, but rather the component ID used to create it.
17          * 
18          * @see SubmodelComponentSerializer#deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)
19          *      SubmodelComponentSerializer.deserialize(...)
20          * @see SubmodelComponentSerializer#serialize(SubmodelComponent, java.util.function.Function) SubmodelComponentSerializer.serialize(...)
21          */
22         public final String idForSerializingOverride;
23         /**
24          * See {@link #idForSerializingOverride}
25          */
26         public final Object paramsForSerializingOverride;
27
28         public DeserializedSubmodelComponent(LogicModelModifiable model, String name, String idForSerializingOverride,
29                         Object paramsForSerializingOverride)
30         {
31                 super(model, name, false);
32                 this.idForSerializingOverride = idForSerializingOverride;
33                 this.paramsForSerializingOverride = paramsForSerializingOverride;
34                 init();
35         }
36
37         /**
38          * If this component has an {@link #idForSerializingOverride} set (e.g. non-null) (see
39          * {@link SubmodelComponentSerializer#deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)
40          * SubmodelComponentSerializer.deserialize(...)}), this ID is returned<br>
41          * If this case doesn't apply (this component has no {@link #idForSerializingOverride} set),
42          * {@link SubmodelComponent#getIDForSerializing(IdentifyParams)} is invoced.
43          */
44         @Override
45         public String getIDForSerializing(IdentifyParams idParams)
46         {
47                 return idForSerializingOverride == null ? super.getIDForSerializing(idParams) : idForSerializingOverride;
48         }
49
50         /**
51          * If this component has an {@link #idForSerializingOverride} set (e.g. non-null) (see
52          * {@link SubmodelComponentSerializer#deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)
53          * SubmodelComponentSerializer.deserialize(...)}), {@link #paramsForSerializingOverride} is returned<br>
54          * If this case doesn't apply (this component has no {@link #idForSerializingOverride} set),
55          * {@link SubmodelComponent#getParamsForSerializing(IdentifyParams)} is invoced.
56          */
57         @Override
58         public Object getParamsForSerializing(IdentifyParams idParams)
59         {
60                 return idForSerializingOverride == null ? super.getParamsForSerializing(idParams) : paramsForSerializingOverride;
61         }
62
63         @Override
64         public void setSymbolRenderer(Renderer symbolRenderer)
65         {
66                 super.setSymbolRenderer(symbolRenderer);
67         }
68
69         @Override
70         public void setOutlineRenderer(Renderer outlineRenderer)
71         {
72                 super.setOutlineRenderer(outlineRenderer);
73         }
74
75         @Override
76         public void setHighLevelStateHandler(HighLevelStateHandler handler)
77         {
78                 super.setHighLevelStateHandler(handler);
79         }
80
81         public LogicModelModifiable getSubmodelModifiable()
82         {
83                 return submodelModifiable;
84         }
85
86         @Override
87         public void setSubmodelScale(double submodelScale)
88         {
89                 super.setSubmodelScale(submodelScale);
90         }
91
92         @Override
93         public void setSize(double width, double height)
94         {
95                 super.setSize(width, height);
96         }
97
98         @Override
99         public Pin addSubmodelInterface(MovablePin supermodelPin)
100         {
101                 return super.addSubmodelInterface(supermodelPin);
102         }
103
104         @Override
105         public void removeSubmodelInterface(String name)
106         {
107                 super.removeSubmodelInterface(name);
108         }
109 }