X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fsnippets%2Fhighlevelstatehandlers%2Fstandard%2FStandardHighLevelStateHandler.java;h=58e8e64ce54dc7454dcb9f4c1b136944da35aea0;hb=8bed58cd47f4e53a0a83e066d38864aa6875502f;hp=af3ad22b1999b01df7f949b976119a624cd2414b;hpb=b32414f8406634aca730d724a011023c0da8bf22;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/StandardHighLevelStateHandler.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/StandardHighLevelStateHandler.java index af3ad22b..58e8e64c 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/StandardHighLevelStateHandler.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/StandardHighLevelStateHandler.java @@ -1,8 +1,10 @@ package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.TreeMap; import java.util.function.BiFunction; import java.util.function.Function; @@ -20,7 +22,9 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler { private final SubmodelComponent component; private final Map subcomponentHighLevelStateHandlers; + private final Map subcomponentHighLevelStateHandlersUnmodifiable; private final Map atomicHighLevelStateHandlers; + private final Map atomicHighLevelStateHandlersUnmodifiable; public StandardHighLevelStateHandler(SubmodelComponent component) { @@ -31,7 +35,9 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler { this.component = component; this.subcomponentHighLevelStateHandlers = new HashMap<>(); + this.subcomponentHighLevelStateHandlersUnmodifiable = Collections.unmodifiableMap(subcomponentHighLevelStateHandlers); this.atomicHighLevelStateHandlers = new HashMap<>(); + this.atomicHighLevelStateHandlersUnmodifiable = Collections.unmodifiableMap(atomicHighLevelStateHandlers); if (params != null) { params.subcomponentHighLevelStates.forEach(this::addSubcomponentHighLevelState); @@ -48,16 +54,15 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler } public H addSubcomponentHighLevelState(String subcomponentStateID, - BiFunction handlerConstructor, P handlerParams) + BiFunction handlerConstructor, P handlerParams) { return addSubcomponentHighLevelState(subcomponentStateID, c -> handlerConstructor.apply(c, handlerParams)); } public H addSubcomponentHighLevelState(String subcomponentStateID, - Function handlerConstructor) + Function handlerConstructor) { - HighLevelStateHandlerContext context = new HighLevelStateHandlerContext(component, subcomponentStateID); - H handler = handlerConstructor.apply(context); + H handler = handlerConstructor.apply(component); addSubcomponentHighLevelState(subcomponentStateID, handler); return handler; } @@ -68,6 +73,17 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler subcomponentHighLevelStateHandlers.put(subcomponentStateID, handler); } + public void removeSubcomponentHighLevelState(String subcomponentStateID) + { + checkHighLevelStateIDPart(subcomponentStateID); + subcomponentHighLevelStateHandlers.remove(subcomponentStateID); + } + + public Map getSubcomponentHighLevelStates() + { + return subcomponentHighLevelStateHandlersUnmodifiable; + } + public AtomicHighLevelStateHandler addAtomicHighLevelState(String atomicStateID, AtomicHighLevelStateHandlerParams handlerParams) { return addAtomicHighLevelState(atomicStateID, @@ -76,16 +92,15 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler } public H addAtomicHighLevelState(String subcomponentStateID, - BiFunction handlerConstructor, P handlerParams) + BiFunction handlerConstructor, P handlerParams) { return addAtomicHighLevelState(subcomponentStateID, c -> handlerConstructor.apply(c, handlerParams)); } public H addAtomicHighLevelState(String subcomponentStateID, - Function handlerConstructor) + Function handlerConstructor) { - HighLevelStateHandlerContext context = new HighLevelStateHandlerContext(component, subcomponentStateID); - H handler = handlerConstructor.apply(context); + H handler = handlerConstructor.apply(component); addAtomicHighLevelState(subcomponentStateID, handler); return handler; } @@ -96,6 +111,17 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler atomicHighLevelStateHandlers.put(atomicStateID, handler); } + public void removeAtomicHighLevelState(String atomicStateID) + { + checkHighLevelStateIDPart(atomicStateID); + atomicHighLevelStateHandlers.remove(atomicStateID); + } + + public Map getAtomicHighLevelStates() + { + return atomicHighLevelStateHandlersUnmodifiable; + } + private static void checkHighLevelStateIDPart(String stateIDPart) { if (stateIDPart.indexOf('.') != -1) @@ -151,8 +177,8 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler public StandardHighLevelStateHandlerParams getParamsForSerializing(IdentifyParams idParams) { StandardHighLevelStateHandlerParams params = new StandardHighLevelStateHandlerParams(); - params.subcomponentHighLevelStates = new HashMap<>(); - params.atomicHighLevelStates = new HashMap<>(); + params.subcomponentHighLevelStates = new TreeMap<>(); + params.atomicHighLevelStates = new TreeMap<>(); for (Entry e : subcomponentHighLevelStateHandlers.entrySet()) { String stateID = e.getKey();