1 package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomponent;
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 DelegatingSubcomponentHighLevelStateHandler implements SubcomponentHighLevelStateHandler
12 private final SubmodelComponent parentComponent;
13 private GUIComponent delegateTarget;
14 private String prefix;
16 public DelegatingSubcomponentHighLevelStateHandler(HighLevelStateHandlerContext context)
21 public DelegatingSubcomponentHighLevelStateHandler(HighLevelStateHandlerContext context,
22 DelegatingSubcomponentHighLevelStateHandlerParams params)
24 this.parentComponent = context.component;
28 if (params.delegateTarget == null)
29 setDelegateTarget(parentComponent);
31 this.delegateTarget = parentComponent.submodel.getComponentsByName().get(params.delegateTarget);
32 setPrefix(params.prefix);
36 public void set(GUIComponent delegateTarget, String prefix)
38 setDelegateTarget(delegateTarget);
42 public void setDelegateTarget(GUIComponent delegateTarget)
44 if (delegateTarget == null)
45 this.delegateTarget = parentComponent;
46 else if (parentComponent.submodel.getComponentsByName().get(delegateTarget.name) != delegateTarget)
47 throw new IllegalArgumentException(
48 "Can only set components belonging to the submodel of the parent component of this handler as the delegate target");
49 this.delegateTarget = delegateTarget;
52 public void setPrefix(String prefix)
58 public Object getHighLevelState(String subStateID)
60 return delegateTarget.getHighLevelState(getDelegateTargetHighLevelStateID(subStateID));
64 public void setHighLevelState(String subStateID, Object newState)
66 delegateTarget.setHighLevelState(getDelegateTargetHighLevelStateID(subStateID), newState);
69 private String getDelegateTargetHighLevelStateID(String subStateID)
71 return prefix == null ? subStateID : prefix + '.' + subStateID;
75 public DelegatingSubcomponentHighLevelStateHandlerParams getParamsForSerializing(IdentifierGetter idGetter)
77 DelegatingSubcomponentHighLevelStateHandlerParams params = new DelegatingSubcomponentHighLevelStateHandlerParams();
78 params.delegateTarget = delegateTarget.name;
79 params.prefix = prefix;
83 public static class DelegatingSubcomponentHighLevelStateHandlerParams
85 public String delegateTarget;
91 StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier
92 .setSnippetSupplier(DelegatingSubcomponentHighLevelStateHandler.class.getCanonicalName(), SnippetDefinintion
93 .create(DelegatingSubcomponentHighLevelStateHandlerParams.class, DelegatingSubcomponentHighLevelStateHandler::new));