X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fsnippets%2Fhighlevelstatehandlers%2Fstandard%2Fatomic%2FDelegatingAtomicHighLevelStateHandler.java;h=1deabde833b22e07972cfc9efc5a66741e9d3ffb;hb=5140b424c507b8f22f80b452e475d0b56a3a36ce;hp=7a568827be7e1aa9f45b61f85b1a4234efa10c9f;hpb=93b398d6271a538a2a4c9f4de07a3b4a8a2a7fd4;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/DelegatingAtomicHighLevelStateHandler.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/DelegatingAtomicHighLevelStateHandler.java index 7a568827..1deabde8 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/DelegatingAtomicHighLevelStateHandler.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/DelegatingAtomicHighLevelStateHandler.java @@ -27,9 +27,19 @@ public class DelegatingAtomicHighLevelStateHandler implements AtomicHighLevelSta 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) @@ -42,26 +52,40 @@ public class DelegatingAtomicHighLevelStateHandler implements AtomicHighLevelSta { 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 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); } @@ -75,7 +99,7 @@ public class DelegatingAtomicHighLevelStateHandler implements AtomicHighLevelSta public DelegatingAtomicHighLevelStateHandlerParams getParamsForSerializing(IdentifyParams idParams) { DelegatingAtomicHighLevelStateHandlerParams params = new DelegatingAtomicHighLevelStateHandlerParams(); - params.delegateTarget = delegateTarget.name; + params.delegateTarget = delegateTarget.getName(); params.subStateID = subStateID; return params; }