Merge remote-tracking branch 'origin/development' into development
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Mon, 15 Jul 2019 14:22:37 +0000 (16:22 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Mon, 15 Jul 2019 14:22:37 +0000 (16:22 +0200)
1  2 
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.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
                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
  }
@@@ -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
                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);
        }