1 package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomponent;
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 DelegatingSubcomponentHighLevelStateHandler implements SubcomponentHighLevelStateHandler
12 private final SubmodelComponent parentComponent;
13 private ModelComponent 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(ModelComponent delegateTarget, String prefix)
38 setDelegateTarget(delegateTarget);
42 public void setDelegateTarget(ModelComponent 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 String getIDForSerializing(IdentifyParams idParams)
81 public DelegatingSubcomponentHighLevelStateHandlerParams getParamsForSerializing(IdentifyParams idParams)
83 DelegatingSubcomponentHighLevelStateHandlerParams params = new DelegatingSubcomponentHighLevelStateHandlerParams();
84 params.delegateTarget = delegateTarget.name;
85 params.prefix = prefix;
89 public static class DelegatingSubcomponentHighLevelStateHandlerParams
91 public String delegateTarget;
97 StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier
98 .setSnippetSupplier(DelegatingSubcomponentHighLevelStateHandler.class.getCanonicalName(), SnippetDefinintion
99 .create(DelegatingSubcomponentHighLevelStateHandlerParams.class, DelegatingSubcomponentHighLevelStateHandler::new));