1 package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard;
3 import java.util.HashMap;
6 import net.mograsim.logic.model.model.components.GUIComponent;
7 import net.mograsim.logic.model.snippets.HighLevelStateHandler;
8 import net.mograsim.logic.model.snippets.SnippetDefinintion;
9 import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers;
10 import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.AtomicHighLevelStateHandler;
11 import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.AtomicHighLevelStateHandler.AtomicHighLevelStateHandlerParams;
12 import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomponent.SubcomponentHighLevelStateHandler;
13 import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomponent.SubcomponentHighLevelStateHandler.SubcomponentHighLevelStateHandlerParams;
15 public class StandardHighLevelStateHandler implements HighLevelStateHandler
17 private final GUIComponent component;
18 private final Map<String, SubcomponentHighLevelStateHandler> subcomponentHighLevelStateHandlers;
19 private final Map<String, AtomicHighLevelStateHandler> atomicHighLevelStateHandlers;
21 public StandardHighLevelStateHandler(GUIComponent component, SimpleHighLevelStateHandlerParams params)
23 this.component = component;
24 this.subcomponentHighLevelStateHandlers = new HashMap<>();
25 this.atomicHighLevelStateHandlers = new HashMap<>();
26 params.subcomponentHighLevelStates.forEach(this::addSubcomponentHighLevelState);
27 params.atomicHighLevelStates.forEach(this::addAtomicHighLevelState);
30 public void addSubcomponentHighLevelState(String subcomponentStateID, SubcomponentHighLevelStateHandlerParams handlerParams)
32 HighLevelStateHandlerContext context = new HighLevelStateHandlerContext(component, subcomponentStateID);
33 addSubcomponentHighLevelState(subcomponentStateID, StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier
34 .getSnippetSupplier(handlerParams.id).create(context, handlerParams.params));
37 public void addSubcomponentHighLevelState(String subcomponentStateID, SubcomponentHighLevelStateHandler handler)
39 checkHighLevelStateIDPart(subcomponentStateID);
40 subcomponentHighLevelStateHandlers.put(subcomponentStateID, handler);
43 public void addAtomicHighLevelState(String atomicStateID, AtomicHighLevelStateHandlerParams handlerParams)
45 HighLevelStateHandlerContext context = new HighLevelStateHandlerContext(component, atomicStateID);
46 addSubcomponentHighLevelState(atomicStateID, StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier
47 .getSnippetSupplier(handlerParams.id).create(context, handlerParams.params));
50 public void addAtomicHighLevelState(String atomicStateID, AtomicHighLevelStateHandler handler)
52 checkHighLevelStateIDPart(atomicStateID);
53 atomicHighLevelStateHandlers.put(atomicStateID, handler);
56 private static void checkHighLevelStateIDPart(String stateIDPart)
58 if (stateIDPart.indexOf('.') != -1)
59 throw new IllegalArgumentException("Illegal high level state ID part (contains dot): " + stateIDPart);
63 public Object getHighLevelState(String stateID)
65 int indexOfDot = stateID.indexOf('.');
68 AtomicHighLevelStateHandler handler = atomicHighLevelStateHandlers.get(stateID);
70 return handler.getHighLevelState();
73 SubcomponentHighLevelStateHandler handler = subcomponentHighLevelStateHandlers.get(stateID.substring(0, indexOfDot));
75 return handler.getHighLevelState(stateID.substring(indexOfDot + 1));
77 throw new IllegalArgumentException("No high level state with ID " + stateID);
81 public void setHighLevelState(String stateID, Object newState)
83 int indexOfDot = stateID.indexOf('.');
86 AtomicHighLevelStateHandler handler = atomicHighLevelStateHandlers.get(stateID);
88 handler.setHighLevelState(newState);
90 throw new IllegalArgumentException("No high level state with ID " + stateID);
93 SubcomponentHighLevelStateHandler handler = subcomponentHighLevelStateHandlers.get(stateID.substring(0, indexOfDot));
95 handler.setHighLevelState(stateID.substring(indexOfDot + 1), newState);
97 throw new IllegalArgumentException("No high level state with ID " + stateID);
101 public static class SimpleHighLevelStateHandlerParams
103 public Map<String, SubcomponentHighLevelStateHandlerParams> subcomponentHighLevelStates;
104 public Map<String, AtomicHighLevelStateHandlerParams> atomicHighLevelStates;
109 SubmodelComponentSnippetSuppliers.highLevelStateHandlerSupplier.setSnippetSupplier(
110 StandardHighLevelStateHandler.class.getCanonicalName(),
111 SnippetDefinintion.create(SimpleHighLevelStateHandlerParams.class, StandardHighLevelStateHandler::new));