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
this.symbolRenderer = symbolRenderer;
}
+ public void setHighLevelStateHandler(HighLevelStateHandler highLevelStateHandler)
+ {
+ this.highLevelStateHandler = highLevelStateHandler;
+ }
+
public ViewModelModifiable getSubmodelModifiable()
{
return submodelModifiable;
}
- public void setSubmodelScale(double submodelScale)
+ @Override
- super.setSubmodelScale(submodelScale);
++ public double getSubmodelScale()
+ {
++ 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);
}
- public double getSubmodelScale()
+ @Override
- return super.getSubmodelScale();
++ public Map<String, MovablePin> getSubmodelMovablePins()
+ {
++ return super.getSubmodelMovablePins();
+ }
+
@Override
- public Map<String, MovablePin> getSubmodelMovablePins()
+ public Pin addSubmodelInterface(MovablePin supermodelPin)
{
- return super.getSubmodelMovablePins();
+ return super.addSubmodelInterface(supermodelPin);
}
+ @Override
+ public void removeSubmodelInterface(String name)
+ {
+ super.removeSubmodelInterface(name);
+ }
++
+ // TODO static initializer
}
import java.io.IOException;
import java.io.InputStream;
+import java.io.UncheckedIOException;
+ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import net.mograsim.logic.model.model.ViewModelModifiable;
import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.snippets.CodeSnippetSupplier;
import net.mograsim.logic.model.util.JsonHandler;
public class IndirectGUIComponentCreator
standardComponentIDs.put(standardComponentID, associatedComponentID);
}
+ public static Collection<String> getStandardComponentIDs()
+ {
+ return standardComponentIDs.keySet();
+ }
+
public static void setComponentSupplier(String className, ComponentSupplier componentSupplier)
{
componentSuppliers.put(className, componentSupplier);
if (componentSupplier != null)
return componentSupplier.create(model, params, name);
} else
- // we know id has to start with "file:" here
- // because standardComponentIDs only contains strings starting with "class:" or "file:"
- return SubmodelComponentDeserializer.create(model, resolvedID.substring(5), name);
+ // we know id has to start with "file:" here
+ // because standardComponentIDs only contains strings starting with "class:" or "file:"
+ if (params != null && !JsonNull.INSTANCE.equals(params))
+ throw new IllegalArgumentException("Can't give params to a component deserialized from a JSON file");
+ try
+ {
+ return SubmodelComponentSerializer.deserialize(model, resolvedID.substring(5), name, id, null);
+ }
+ catch (IOException e)
+ {
+ throw new UncheckedIOException(e);
+ }
}
throw new RuntimeException("Could not get component supplier for ID " + id);
}