1 package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic;
3 import net.mograsim.logic.model.model.components.GUIComponent;
4 import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
5 import net.mograsim.logic.model.serializing.IdentifierGetter;
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 GUIComponent 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(GUIComponent delegateTarget, String subStateID)
37 setDelegateTarget(delegateTarget);
38 setSubStateID(subStateID);
41 public void setDelegateTarget(GUIComponent 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 DelegatingAtomicHighLevelStateHandlerParams getParamsForSerializing(IdentifierGetter idGetter)
71 DelegatingAtomicHighLevelStateHandlerParams params = new DelegatingAtomicHighLevelStateHandlerParams();
72 params.delegateTarget = delegateTarget.name;
73 params.subStateID = subStateID;
77 public static class DelegatingAtomicHighLevelStateHandlerParams
79 public String delegateTarget;
80 public String subStateID;
85 StandardHighLevelStateHandlerSnippetSuppliers.atomicHandlerSupplier.setSnippetSupplier(
86 DelegatingAtomicHighLevelStateHandler.class.getCanonicalName(),
87 SnippetDefinintion.create(DelegatingAtomicHighLevelStateHandlerParams.class, DelegatingAtomicHighLevelStateHandler::new));