X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fsnippets%2Fhighlevelstatehandlers%2Fstandard%2Fsubcomponent%2FDelegatingSubcomponentHighLevelStateHandler.java;h=069a6cb3d406ed7c9b7082fdcd50c6238491cd40;hb=375ec3e8653279a066a8fd644d13f9028049c18f;hp=0d1fd655d7bee732db524e41fcb009f59a4acd78;hpb=b32414f8406634aca730d724a011023c0da8bf22;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/subcomponent/DelegatingSubcomponentHighLevelStateHandler.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/subcomponent/DelegatingSubcomponentHighLevelStateHandler.java index 0d1fd655..069a6cb3 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/subcomponent/DelegatingSubcomponentHighLevelStateHandler.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/subcomponent/DelegatingSubcomponentHighLevelStateHandler.java @@ -28,9 +28,19 @@ public class DelegatingSubcomponentHighLevelStateHandler implements Subcomponent 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(ModelComponent delegateTarget, String prefix) @@ -43,26 +53,40 @@ public class DelegatingSubcomponentHighLevelStateHandler implements Subcomponent { 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); } @@ -81,7 +105,7 @@ public class DelegatingSubcomponentHighLevelStateHandler implements Subcomponent public DelegatingSubcomponentHighLevelStateHandlerParams getParamsForSerializing(IdentifyParams idParams) { DelegatingSubcomponentHighLevelStateHandlerParams params = new DelegatingSubcomponentHighLevelStateHandlerParams(); - params.delegateTarget = delegateTarget.name; + params.delegateTarget = delegateTarget.getName(); params.prefix = prefix; return params; }