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.IdentifierGetter;
+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)
+ public DelegatingSubcomponentHighLevelStateHandler(SubmodelComponent component)
{
- this(context, null);
+ this(component, null);
}
- public DelegatingSubcomponentHighLevelStateHandler(HighLevelStateHandlerContext context,
+ public DelegatingSubcomponentHighLevelStateHandler(SubmodelComponent component,
DelegatingSubcomponentHighLevelStateHandlerParams params)
{
- this.parentComponent = context.component;
+ this.parentComponent = component;
if (params != null)
{
// TODO document this
if (params.delegateTarget == null)
setDelegateTarget(parentComponent);
else
- this.delegateTarget = parentComponent.submodel.getComponentsByName().get(params.delegateTarget);
+ {
+ ModelComponent delegateTarget = parentComponent.submodel.getComponentsByName().get(params.delegateTarget);
+ if (delegateTarget == null)
+ throw new NullPointerException("No subcomponent with name " + params.delegateTarget);
+ setDelegateTarget(delegateTarget);
+ }
setPrefix(params.prefix);
}
+ parentComponent.submodel.addComponentRemovedListener(c ->
+ {
+ if (delegateTarget == c)
+ delegateTarget = null;
+ });
}
- 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().get(delegateTarget.name) != delegateTarget)
+ else if (parentComponent.submodel.getComponentsByName().get(delegateTarget.getName()) != 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;
}
+ public ModelComponent getDelegateTarget()
+ {
+ return delegateTarget;
+ }
+
public void setPrefix(String prefix)
{
this.prefix = prefix;
}
+ public String getPrefix()
+ {
+ return prefix;
+ }
+
@Override
public Object getHighLevelState(String subStateID)
{
+ if (delegateTarget == null)
+ throw new IllegalStateException("Delegating to a component that was destroyed");
return delegateTarget.getHighLevelState(getDelegateTargetHighLevelStateID(subStateID));
}
@Override
public void setHighLevelState(String subStateID, Object newState)
{
+ if (delegateTarget == null)
+ throw new IllegalStateException("Delegating to a component that was destroyed");
delegateTarget.setHighLevelState(getDelegateTargetHighLevelStateID(subStateID), newState);
}
}
@Override
- public DelegatingSubcomponentHighLevelStateHandlerParams getParamsForSerializing(IdentifierGetter idGetter)
+ public String getIDForSerializing(IdentifyParams idParams)
+ {
+ return "delegating";
+ }
+
+ @Override
+ public DelegatingSubcomponentHighLevelStateHandlerParams getParamsForSerializing(IdentifyParams idParams)
{
DelegatingSubcomponentHighLevelStateHandlerParams params = new DelegatingSubcomponentHighLevelStateHandlerParams();
- params.delegateTarget = delegateTarget.name;
+ params.delegateTarget = delegateTarget.getName();
params.prefix = prefix;
return params;
}