Shortened the memory test a bit because it was longer than necessary
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / serializing / DeserializedSubmodelComponent.java
index 8db85a1..8e4d459 100644 (file)
@@ -2,9 +2,7 @@ package net.mograsim.logic.model.serializing;
 
 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.LogicModelModifiable;
 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;
@@ -17,7 +15,7 @@ public class DeserializedSubmodelComponent extends SubmodelComponent
         * 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)
+        * @see SubmodelComponentSerializer#deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)
         *      SubmodelComponentSerializer.deserialize(...)
         * @see SubmodelComponentSerializer#serialize(SubmodelComponent, java.util.function.Function) SubmodelComponentSerializer.serialize(...)
         */
@@ -25,61 +23,62 @@ public class DeserializedSubmodelComponent extends SubmodelComponent
        /**
         * See {@link #idForSerializingOverride}
         */
-       public final JsonElement paramsForSerializingOverride;
+       public final Object paramsForSerializingOverride;
 
-       private Renderer outlineRenderer;
-       private Renderer symbolRenderer;
-       private HighLevelStateHandler highLevelStateHandler;
-
-       public DeserializedSubmodelComponent(ViewModelModifiable model, String name, String idForSerializingOverride, JsonElement paramsForSerializingOverride)
+       public DeserializedSubmodelComponent(LogicModelModifiable model, String name, String idForSerializingOverride,
+                       Object paramsForSerializingOverride)
        {
-               super(model, name);
+               super(model, name, false);
                this.idForSerializingOverride = idForSerializingOverride;
                this.paramsForSerializingOverride = paramsForSerializingOverride;
+               init();
        }
 
+       /**
+        * If this component has an {@link #idForSerializingOverride} set (e.g. non-null) (see
+        * {@link SubmodelComponentSerializer#deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)
+        * SubmodelComponentSerializer.deserialize(...)}), this ID is returned<br>
+        * If this case doesn't apply (this component has no {@link #idForSerializingOverride} set),
+        * {@link SubmodelComponent#getIDForSerializing(IdentifyParams)} is invoced.
+        */
        @Override
-       public void setHighLevelState(String stateID, Object newState)
+       public String getIDForSerializing(IdentifyParams idParams)
        {
-               highLevelStateHandler.setHighLevelState(stateID, newState);
+               return idForSerializingOverride == null ? super.getIDForSerializing(idParams) : idForSerializingOverride;
        }
 
+       /**
+        * If this component has an {@link #idForSerializingOverride} set (e.g. non-null) (see
+        * {@link SubmodelComponentSerializer#deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)
+        * SubmodelComponentSerializer.deserialize(...)}), {@link #paramsForSerializingOverride} is returned<br>
+        * If this case doesn't apply (this component has no {@link #idForSerializingOverride} set),
+        * {@link SubmodelComponent#getParamsForSerializing(IdentifyParams)} is invoced.
+        */
        @Override
-       public Object getHighLevelState(String stateID)
+       public Object getParamsForSerializing(IdentifyParams idParams)
        {
-               return highLevelStateHandler.getHighLevelState(stateID);
+               return idForSerializingOverride == null ? super.getParamsForSerializing(idParams) : paramsForSerializingOverride;
        }
 
        @Override
-       protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
+       public void setSymbolRenderer(Renderer symbolRenderer)
        {
-               if (outlineRenderer != null)
-                       outlineRenderer.render(gc, visibleRegion);
+               super.setSymbolRenderer(symbolRenderer);
        }
 
        @Override
-       protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
-       {
-               if (symbolRenderer != null)
-                       symbolRenderer.render(gc, visibleRegion);
-       }
-
        public void setOutlineRenderer(Renderer outlineRenderer)
        {
-               this.outlineRenderer = outlineRenderer;
+               super.setOutlineRenderer(outlineRenderer);
        }
 
-       public void setSymbolRenderer(Renderer symbolRenderer)
-       {
-               this.symbolRenderer = symbolRenderer;
-       }
-
-       public void setHighLevelStateHandler(HighLevelStateHandler highLevelStateHandler)
+       @Override
+       public void setHighLevelStateHandler(HighLevelStateHandler handler)
        {
-               this.highLevelStateHandler = highLevelStateHandler;
+               super.setHighLevelStateHandler(handler);
        }
 
-       public ViewModelModifiable getSubmodelModifiable()
+       public LogicModelModifiable getSubmodelModifiable()
        {
                return submodelModifiable;
        }
@@ -102,5 +101,9 @@ public class DeserializedSubmodelComponent extends SubmodelComponent
                return super.addSubmodelInterface(supermodelPin);
        }
 
-       // TODO static initializer
+       @Override
+       public void removeSubmodelInterface(String name)
+       {
+               super.removeSubmodelInterface(name);
+       }
 }
\ No newline at end of file