1 package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic;
3 import net.mograsim.logic.model.model.components.ModelComponent;
4 import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
5 import net.mograsim.logic.model.serializing.IdentifyParams;
6 import net.mograsim.logic.model.snippets.SnippetDefinintion;
7 import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.HighLevelStateHandlerContext;
8 import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandlerSnippetSuppliers;
10 public class DelegatingAtomicHighLevelStateHandler implements AtomicHighLevelStateHandler
12 private final SubmodelComponent parentComponent;
13 private ModelComponent delegateTarget;
14 private String subStateID;
16 public DelegatingAtomicHighLevelStateHandler(HighLevelStateHandlerContext context)
21 public DelegatingAtomicHighLevelStateHandler(HighLevelStateHandlerContext context, DelegatingAtomicHighLevelStateHandlerParams params)
23 this.parentComponent = context.component;
27 if (params.delegateTarget == null)
28 setDelegateTarget(parentComponent);
30 setDelegateTarget(parentComponent.submodel.getComponentsByName().get(params.delegateTarget));
31 setSubStateID(params.subStateID);
35 public void set(ModelComponent delegateTarget, String subStateID)
37 setDelegateTarget(delegateTarget);
38 setSubStateID(subStateID);
41 public void setDelegateTarget(ModelComponent delegateTarget)
43 if (delegateTarget == null)
44 this.delegateTarget = parentComponent;
45 else if (parentComponent.submodel.getComponentsByName().get(delegateTarget.name) != delegateTarget)
46 throw new IllegalArgumentException(
47 "Can only set components belonging to the submodel of the parent component of this handler as the delegate target");
48 this.delegateTarget = delegateTarget;
51 public void setSubStateID(String subStateID)
53 this.subStateID = subStateID;
57 public Object getHighLevelState()
59 return delegateTarget.getHighLevelState(subStateID);
63 public void setHighLevelState(Object newState)
65 delegateTarget.setHighLevelState(subStateID, newState);
69 public String getIDForSerializing(IdentifyParams idParams)
75 public DelegatingAtomicHighLevelStateHandlerParams getParamsForSerializing(IdentifyParams idParams)
77 DelegatingAtomicHighLevelStateHandlerParams params = new DelegatingAtomicHighLevelStateHandlerParams();
78 params.delegateTarget = delegateTarget.name;
79 params.subStateID = subStateID;
83 public static class DelegatingAtomicHighLevelStateHandlerParams
85 public String delegateTarget;
86 public String subStateID;
91 StandardHighLevelStateHandlerSnippetSuppliers.atomicHandlerSupplier.setSnippetSupplier(
92 DelegatingAtomicHighLevelStateHandler.class.getCanonicalName(),
93 SnippetDefinintion.create(DelegatingAtomicHighLevelStateHandlerParams.class, DelegatingAtomicHighLevelStateHandler::new));