Merge remote-tracking branch 'origin/development' into development
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / serializing / DeserializedSubmodelComponent.java
index adf2433..8109a37 100644 (file)
@@ -2,22 +2,56 @@ package net.mograsim.logic.model.serializing;
 
 import java.util.Map;
 
+import com.google.gson.JsonElement;
+
 import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
 import net.mograsim.logic.model.model.ViewModelModifiable;
 import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
 import net.mograsim.logic.model.model.wires.MovablePin;
 import net.mograsim.logic.model.model.wires.Pin;
-import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.snippets.HighLevelStateHandler;
+import net.mograsim.logic.model.snippets.Renderer;
 
+//TODO serialize handlers
 public class DeserializedSubmodelComponent extends SubmodelComponent
 {
-       public Renderer outlineRenderer;
-       public Renderer symbolRenderer;
+       /**
+        * If a DeserializedSubmodelComponent is part of another SubmodelComponent, when it it serialized, it should not return its internal
+        * structure, but rather the component ID used to create it.
+        * 
+        * @see SubmodelComponentSerializer#deserialize(ViewModelModifiable, SubmodelComponentParams, String, String, JsonElement)
+        *      SubmodelComponentSerializer.deserialize(...)
+        * @see SubmodelComponentSerializer#serialize(SubmodelComponent, java.util.function.Function) SubmodelComponentSerializer.serialize(...)
+        */
+       public final String idForSerializingOverride;
+       /**
+        * See {@link #idForSerializingOverride}
+        */
+       public final JsonElement paramsForSerializingOverride;
+
+       private Renderer outlineRenderer;
+       private Renderer symbolRenderer;
+       private HighLevelStateHandler highLevelStateHandler;
 
-       public DeserializedSubmodelComponent(ViewModelModifiable model, String name)
+       public DeserializedSubmodelComponent(ViewModelModifiable model, String name, String idForSerializingOverride,
+                       JsonElement paramsForSerializingOverride)
        {
                super(model, name);
+               this.idForSerializingOverride = idForSerializingOverride;
+               this.paramsForSerializingOverride = paramsForSerializingOverride;
+       }
+
+       @Override
+       public void setHighLevelState(String stateID, Object newState)
+       {
+               highLevelStateHandler.setHighLevelState(stateID, newState);
+       }
+
+       @Override
+       public Object getHighLevelState(String stateID)
+       {
+               return highLevelStateHandler.getHighLevelState(stateID);
        }
 
        @Override
@@ -44,39 +78,44 @@ public class DeserializedSubmodelComponent extends SubmodelComponent
                this.symbolRenderer = symbolRenderer;
        }
 
+       public void setHighLevelStateHandler(HighLevelStateHandler highLevelStateHandler)
+       {
+               this.highLevelStateHandler = highLevelStateHandler;
+       }
+
        public ViewModelModifiable getSubmodelModifiable()
        {
                return submodelModifiable;
        }
 
        @Override
-       public void setSubmodelScale(double submodelScale)
+       public double getSubmodelScale()
        {
-               super.setSubmodelScale(submodelScale);
+               return super.getSubmodelScale();
        }
 
        @Override
-       public void setSize(double width, double height)
+       public void setSubmodelScale(double submodelScale)
        {
-               super.setSize(width, height);
+               super.setSubmodelScale(submodelScale);
        }
 
        @Override
-       public Pin addSubmodelInterface(MovablePin supermodelPin)
+       public void setSize(double width, double height)
        {
-               return super.addSubmodelInterface(supermodelPin);
+               super.setSize(width, height);
        }
 
        @Override
-       public double getSubmodelScale()
+       public Map<String, MovablePin> getSubmodelMovablePins()
        {
-               return super.getSubmodelScale();
+               return super.getSubmodelMovablePins();
        }
 
        @Override
-       public Map<String, MovablePin> getSubmodelMovablePins()
+       public Pin addSubmodelInterface(MovablePin supermodelPin)
        {
-               return super.getSubmodelMovablePins();
+               return super.addSubmodelInterface(supermodelPin);
        }
 
        @Override
@@ -84,4 +123,6 @@ public class DeserializedSubmodelComponent extends SubmodelComponent
        {
                super.removeSubmodelInterface(name);
        }
+
+       // TODO static initializer
 }
\ No newline at end of file