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 DelegatingAtomicHighLevelStateHandler implements AtomicHighLevelStateHandler
private ModelComponent delegateTarget;
private String subStateID;
- public DelegatingAtomicHighLevelStateHandler(HighLevelStateHandlerContext context)
+ public DelegatingAtomicHighLevelStateHandler(SubmodelComponent component)
{
- this(context, null);
+ this(component, null);
}
- public DelegatingAtomicHighLevelStateHandler(HighLevelStateHandlerContext context, DelegatingAtomicHighLevelStateHandlerParams params)
+ public DelegatingAtomicHighLevelStateHandler(SubmodelComponent component, DelegatingAtomicHighLevelStateHandlerParams params)
{
- this.parentComponent = context.component;
+ this.parentComponent = component;
if (params != null)
{
// TODO document this
if (params.delegateTarget == null)
setDelegateTarget(parentComponent);
else
- setDelegateTarget(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);
+ }
setSubStateID(params.subStateID);
}
+ parentComponent.submodel.addComponentRemovedListener(c ->
+ {
+ if (delegateTarget == c)
+ delegateTarget = null;
+ });
}
public void set(ModelComponent delegateTarget, String subStateID)
this.delegateTarget = delegateTarget;
}
+ public ModelComponent getDelegateTarget()
+ {
+ return delegateTarget;
+ }
+
public void setSubStateID(String subStateID)
{
this.subStateID = subStateID;
}
+ public String getSubStateID()
+ {
+ return subStateID;
+ }
+
@Override
public Object getHighLevelState()
{
+ if (delegateTarget == null)
+ throw new IllegalStateException("Delegating to a component that was destroyed");
return delegateTarget.getHighLevelState(subStateID);
}
@Override
public void setHighLevelState(Object newState)
{
+ if (delegateTarget == null)
+ throw new IllegalStateException("Delegating to a component that was destroyed");
delegateTarget.setHighLevelState(subStateID, newState);
}
@Override
public DelegatingAtomicHighLevelStateHandlerParams getParamsForSerializing(IdentifyParams idParams)
{
+ if (delegateTarget == null)
+ throw new IllegalStateException("Delegating to a component that was destroyed");
DelegatingAtomicHighLevelStateHandlerParams params = new DelegatingAtomicHighLevelStateHandlerParams();
params.delegateTarget = delegateTarget.getName();
params.subStateID = subStateID;