Merge branch 'development' of https://gitlab.lrz.de/lrr-tum/students/eragp-misim...
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / snippets / highlevelstatehandlers / standard / atomic / DelegatingAtomicHighLevelStateHandler.java
1 package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic;
2
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.snippets.highlevelstatehandlers.standard.HighLevelStateHandlerContext;
6
7 public class DelegatingAtomicHighLevelStateHandler implements AtomicHighLevelStateHandler
8 {
9         private final SubmodelComponent parentComponent;
10         private GUIComponent delegateTarget;
11         private String subStateID;
12
13         public DelegatingAtomicHighLevelStateHandler(HighLevelStateHandlerContext context)
14         {
15                 this(context, null);
16         }
17
18         public DelegatingAtomicHighLevelStateHandler(HighLevelStateHandlerContext context, DelegatingAtomicHighLevelStateHandlerParams params)
19         {
20                 this.parentComponent = context.component;
21                 if (params != null)
22                 {
23                         // TODO document this
24                         if (params.delegateTarget == null)
25                                 setDelegateTarget(parentComponent);
26                         else
27                                 setDelegateTarget(parentComponent.submodel.getComponentsByName().get(params.delegateTarget));
28                         setSubStateID(params.subStateID);
29                 }
30         }
31
32         public void set(GUIComponent delegateTarget, String subStateID)
33         {
34                 setDelegateTarget(delegateTarget);
35                 setSubStateID(subStateID);
36         }
37
38         public void setDelegateTarget(GUIComponent delegateTarget)
39         {
40                 if (delegateTarget == null)
41                         this.delegateTarget = parentComponent;
42                 else if (!parentComponent.submodel.getComponentsByName().containsValue(delegateTarget))
43                         throw new IllegalArgumentException(
44                                         "Can only set components belonging to the submodel of the parent component of this handler as the delegate target");
45                 this.delegateTarget = delegateTarget;
46         }
47
48         public void setSubStateID(String subStateID)
49         {
50                 this.subStateID = subStateID;
51         }
52
53         @Override
54         public Object getHighLevelState()
55         {
56                 return delegateTarget.getHighLevelState(subStateID);
57         }
58
59         @Override
60         public void setHighLevelState(Object newState)
61         {
62                 delegateTarget.setHighLevelState(subStateID, newState);
63         }
64
65         public static class DelegatingAtomicHighLevelStateHandlerParams
66         {
67                 public String delegateTarget;
68                 public String subStateID;
69         }
70 }