From: Daniel Kirschten Date: Mon, 15 Jul 2019 14:22:37 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/development' into development X-Git-Url: https://mograsim.net/gitweb/?a=commitdiff_plain;h=6ff37062ffff3ee3499e15b8d8bf532b4eaa6608;hp=-c;p=Mograsim.git Merge remote-tracking branch 'origin/development' into development --- 6ff37062ffff3ee3499e15b8d8bf532b4eaa6608 diff --combined net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java index 2de33454,adf24338..8109a37f --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java @@@ -1,55 -1,23 +1,57 @@@ 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 @@@ -76,33 -44,44 +78,51 @@@ 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 getSubmodelMovablePins() + { - return super.getSubmodelScale(); ++ return super.getSubmodelMovablePins(); + } + @Override - public Map 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 } diff --combined net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java index a8f192e5,1c6a4846..23f8bcb8 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java @@@ -2,7 -2,7 +2,8 @@@ package net.mograsim.logic.model.serial import java.io.IOException; import java.io.InputStream; +import java.io.UncheckedIOException; + import java.util.Collection; import java.util.HashMap; import java.util.Map; @@@ -11,7 -11,6 +12,7 @@@ import com.google.gson.JsonNull 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 @@@ -53,6 -52,11 +54,11 @@@ standardComponentIDs.put(standardComponentID, associatedComponentID); } + public static Collection getStandardComponentIDs() + { + return standardComponentIDs.keySet(); + } + public static void setComponentSupplier(String className, ComponentSupplier componentSupplier) { componentSuppliers.put(className, componentSupplier); @@@ -90,18 -94,9 +96,18 @@@ 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); }