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=c306a7b193d4191d2d531b8ed9840d79c44dcbc8;hp=ec3b04d95e70e84c5574bf20ef53965f7091b65e;hpb=a3f31d6bf39eb747172a6db329de72c803903c2e;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 ec3b04d9..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,9 +1,15 @@ 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; -import net.mograsim.logic.model.model.components.GUIComponent; +import net.mograsim.logic.model.model.components.submodels.SubmodelComponent; +import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.snippets.HighLevelStateHandler; import net.mograsim.logic.model.snippets.SnippetDefinintion; import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers; @@ -14,24 +20,51 @@ import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomp public class StandardHighLevelStateHandler implements HighLevelStateHandler { - private final GUIComponent component; + private final SubmodelComponent component; private final Map subcomponentHighLevelStateHandlers; + private final Map subcomponentHighLevelStateHandlersUnmodifiable; private final Map atomicHighLevelStateHandlers; + private final Map atomicHighLevelStateHandlersUnmodifiable; - public StandardHighLevelStateHandler(GUIComponent component, SimpleHighLevelStateHandlerParams params) + public StandardHighLevelStateHandler(SubmodelComponent component) + { + this(component, null); + } + + public StandardHighLevelStateHandler(SubmodelComponent component, StandardHighLevelStateHandlerParams params) { this.component = component; this.subcomponentHighLevelStateHandlers = new HashMap<>(); + this.subcomponentHighLevelStateHandlersUnmodifiable = Collections.unmodifiableMap(subcomponentHighLevelStateHandlers); this.atomicHighLevelStateHandlers = new HashMap<>(); - params.subcomponentHighLevelStates.forEach(this::addSubcomponentHighLevelState); - params.atomicHighLevelStates.forEach(this::addAtomicHighLevelState); + this.atomicHighLevelStateHandlersUnmodifiable = Collections.unmodifiableMap(atomicHighLevelStateHandlers); + if (params != null) + { + params.subcomponentHighLevelStates.forEach(this::addSubcomponentHighLevelState); + params.atomicHighLevelStates.forEach(this::addAtomicHighLevelState); + } + } + + public SubcomponentHighLevelStateHandler addSubcomponentHighLevelState(String subcomponentStateID, + SubcomponentHighLevelStateHandlerParams handlerParams) + { + return addSubcomponentHighLevelState(subcomponentStateID, + StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier.getSnippetSupplier(handlerParams.id)::create, + handlerParams.params); + } + + public H addSubcomponentHighLevelState(String subcomponentStateID, + BiFunction handlerConstructor, P handlerParams) + { + return addSubcomponentHighLevelState(subcomponentStateID, c -> handlerConstructor.apply(c, handlerParams)); } - public void addSubcomponentHighLevelState(String subcomponentStateID, SubcomponentHighLevelStateHandlerParams handlerParams) + public H addSubcomponentHighLevelState(String subcomponentStateID, + Function handlerConstructor) { - HighLevelStateHandlerContext context = new HighLevelStateHandlerContext(component, subcomponentStateID); - addSubcomponentHighLevelState(subcomponentStateID, StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier - .getSnippetSupplier(handlerParams.id).create(context, handlerParams.params)); + H handler = handlerConstructor.apply(component); + addSubcomponentHighLevelState(subcomponentStateID, handler); + return handler; } public void addSubcomponentHighLevelState(String subcomponentStateID, SubcomponentHighLevelStateHandler handler) @@ -40,11 +73,36 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler subcomponentHighLevelStateHandlers.put(subcomponentStateID, handler); } - public void addAtomicHighLevelState(String atomicStateID, AtomicHighLevelStateHandlerParams handlerParams) + public void removeSubcomponentHighLevelState(String subcomponentStateID) { - HighLevelStateHandlerContext context = new HighLevelStateHandlerContext(component, atomicStateID); - addSubcomponentHighLevelState(atomicStateID, StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier - .getSnippetSupplier(handlerParams.id).create(context, handlerParams.params)); + checkHighLevelStateIDPart(subcomponentStateID); + subcomponentHighLevelStateHandlers.remove(subcomponentStateID); + } + + public Map getSubcomponentHighLevelStates() + { + return subcomponentHighLevelStateHandlersUnmodifiable; + } + + public AtomicHighLevelStateHandler addAtomicHighLevelState(String atomicStateID, AtomicHighLevelStateHandlerParams handlerParams) + { + return addAtomicHighLevelState(atomicStateID, + StandardHighLevelStateHandlerSnippetSuppliers.atomicHandlerSupplier.getSnippetSupplier(handlerParams.id)::create, + handlerParams.params); + } + + public H addAtomicHighLevelState(String subcomponentStateID, + BiFunction handlerConstructor, P handlerParams) + { + return addAtomicHighLevelState(subcomponentStateID, c -> handlerConstructor.apply(c, handlerParams)); + } + + public H addAtomicHighLevelState(String subcomponentStateID, + Function handlerConstructor) + { + H handler = handlerConstructor.apply(component); + addAtomicHighLevelState(subcomponentStateID, handler); + return handler; } public void addAtomicHighLevelState(String atomicStateID, AtomicHighLevelStateHandler handler) @@ -53,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) @@ -98,7 +167,40 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler } } - public static class SimpleHighLevelStateHandlerParams + @Override + public String getIDForSerializing(IdentifyParams idParams) + { + return "standard"; + } + + @Override + public StandardHighLevelStateHandlerParams getParamsForSerializing(IdentifyParams idParams) + { + StandardHighLevelStateHandlerParams params = new StandardHighLevelStateHandlerParams(); + params.subcomponentHighLevelStates = new TreeMap<>(); + params.atomicHighLevelStates = new TreeMap<>(); + for (Entry e : subcomponentHighLevelStateHandlers.entrySet()) + { + String stateID = e.getKey(); + SubcomponentHighLevelStateHandler handler = e.getValue(); + SubcomponentHighLevelStateHandlerParams handlerParams = new SubcomponentHighLevelStateHandlerParams(); + handlerParams.id = handler.getIDForSerializing(idParams); + handlerParams.params = handler.getParamsForSerializingJSON(idParams); + params.subcomponentHighLevelStates.put(stateID, handlerParams); + } + for (Entry e : atomicHighLevelStateHandlers.entrySet()) + { + String stateID = e.getKey(); + AtomicHighLevelStateHandler handler = e.getValue(); + AtomicHighLevelStateHandlerParams handlerParams = new AtomicHighLevelStateHandlerParams(); + handlerParams.id = handler.getIDForSerializing(idParams); + handlerParams.params = handler.getParamsForSerializingJSON(idParams); + params.atomicHighLevelStates.put(stateID, handlerParams); + } + return params; + } + + public static class StandardHighLevelStateHandlerParams { public Map subcomponentHighLevelStates; public Map atomicHighLevelStates; @@ -108,6 +210,6 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler { SubmodelComponentSnippetSuppliers.highLevelStateHandlerSupplier.setSnippetSupplier( StandardHighLevelStateHandler.class.getCanonicalName(), - SnippetDefinintion.create(SimpleHighLevelStateHandlerParams.class, StandardHighLevelStateHandler::new)); + SnippetDefinintion.create(StandardHighLevelStateHandlerParams.class, StandardHighLevelStateHandler::new)); } } \ No newline at end of file