Renamed GUI to Model:
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / snippets / highlevelstatehandlers / standard / subcomponent / DelegatingSubcomponentHighLevelStateHandler.java
index 79ec244..0d1fd65 100644 (file)
@@ -1,13 +1,16 @@
 package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomponent;
 
-import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.ModelComponent;
 import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.IdentifyParams;
+import net.mograsim.logic.model.snippets.SnippetDefinintion;
 import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.HighLevelStateHandlerContext;
+import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandlerSnippetSuppliers;
 
 public class DelegatingSubcomponentHighLevelStateHandler implements SubcomponentHighLevelStateHandler
 {
        private final SubmodelComponent parentComponent;
-       private GUIComponent delegateTarget;
+       private ModelComponent delegateTarget;
        private String prefix;
 
        public DelegatingSubcomponentHighLevelStateHandler(HighLevelStateHandlerContext context)
@@ -26,21 +29,21 @@ public class DelegatingSubcomponentHighLevelStateHandler implements Subcomponent
                                setDelegateTarget(parentComponent);
                        else
                                this.delegateTarget = parentComponent.submodel.getComponentsByName().get(params.delegateTarget);
-                       setPrefix(prefix);
+                       setPrefix(params.prefix);
                }
        }
 
-       public void set(GUIComponent delegateTarget, String prefix)
+       public void set(ModelComponent delegateTarget, String prefix)
        {
                setDelegateTarget(delegateTarget);
                setPrefix(prefix);
        }
 
-       public void setDelegateTarget(GUIComponent delegateTarget)
+       public void setDelegateTarget(ModelComponent delegateTarget)
        {
                if (delegateTarget == null)
                        this.delegateTarget = parentComponent;
-               else if (!parentComponent.submodel.getComponentsByName().containsValue(delegateTarget))
+               else if (parentComponent.submodel.getComponentsByName().get(delegateTarget.name) != delegateTarget)
                        throw new IllegalArgumentException(
                                        "Can only set components belonging to the submodel of the parent component of this handler as the delegate target");
                this.delegateTarget = delegateTarget;
@@ -68,9 +71,31 @@ public class DelegatingSubcomponentHighLevelStateHandler implements Subcomponent
                return prefix == null ? subStateID : prefix + '.' + subStateID;
        }
 
+       @Override
+       public String getIDForSerializing(IdentifyParams idParams)
+       {
+               return "delegating";
+       }
+
+       @Override
+       public DelegatingSubcomponentHighLevelStateHandlerParams getParamsForSerializing(IdentifyParams idParams)
+       {
+               DelegatingSubcomponentHighLevelStateHandlerParams params = new DelegatingSubcomponentHighLevelStateHandlerParams();
+               params.delegateTarget = delegateTarget.name;
+               params.prefix = prefix;
+               return params;
+       }
+
        public static class DelegatingSubcomponentHighLevelStateHandlerParams
        {
                public String delegateTarget;
                public String prefix;
        }
+
+       static
+       {
+               StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier
+                               .setSnippetSupplier(DelegatingSubcomponentHighLevelStateHandler.class.getCanonicalName(), SnippetDefinintion
+                                               .create(DelegatingSubcomponentHighLevelStateHandlerParams.class, DelegatingSubcomponentHighLevelStateHandler::new));
+       }
 }
\ No newline at end of file