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=12a98887c54153e0196dd5580bb34135f0896407;hb=8bed58cd47f4e53a0a83e066d38864aa6875502f;hp=fc3c6bd1e52cc4628ae210481c1686ca3946b19f;hpb=1ce42890e85c1a114bf647002d1aa2743ff9871a;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 fc3c6bd1..12a98887 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 @@ -4,7 +4,6 @@ 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 @@ -13,24 +12,34 @@ public class DelegatingSubcomponentHighLevelStateHandler implements Subcomponent 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(ModelComponent delegateTarget, String prefix) @@ -49,20 +58,34 @@ public class DelegatingSubcomponentHighLevelStateHandler implements Subcomponent 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); }