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=af3ad22b1999b01df7f949b976119a624cd2414b;hb=1ce42890e85c1a114bf647002d1aa2743ff9871a;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..af3ad22b 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 @@ -2,8 +2,12 @@ package net.mograsim.logic.model.snippets.highlevelstatehandlers.standard; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; +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 +18,48 @@ 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 atomicHighLevelStateHandlers; - 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.atomicHighLevelStateHandlers = new HashMap<>(); - params.subcomponentHighLevelStates.forEach(this::addSubcomponentHighLevelState); - params.atomicHighLevelStates.forEach(this::addAtomicHighLevelState); + 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 void addSubcomponentHighLevelState(String subcomponentStateID, SubcomponentHighLevelStateHandlerParams handlerParams) + public H addSubcomponentHighLevelState(String subcomponentStateID, + BiFunction handlerConstructor, P handlerParams) + { + return addSubcomponentHighLevelState(subcomponentStateID, c -> handlerConstructor.apply(c, 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(context); + addSubcomponentHighLevelState(subcomponentStateID, handler); + return handler; } public void addSubcomponentHighLevelState(String subcomponentStateID, SubcomponentHighLevelStateHandler handler) @@ -40,11 +68,26 @@ public class StandardHighLevelStateHandler implements HighLevelStateHandler subcomponentHighLevelStateHandlers.put(subcomponentStateID, handler); } - public void addAtomicHighLevelState(String atomicStateID, AtomicHighLevelStateHandlerParams handlerParams) + 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) { - HighLevelStateHandlerContext context = new HighLevelStateHandlerContext(component, atomicStateID); - addSubcomponentHighLevelState(atomicStateID, StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier - .getSnippetSupplier(handlerParams.id).create(context, handlerParams.params)); + HighLevelStateHandlerContext context = new HighLevelStateHandlerContext(component, subcomponentStateID); + H handler = handlerConstructor.apply(context); + addAtomicHighLevelState(subcomponentStateID, handler); + return handler; } public void addAtomicHighLevelState(String atomicStateID, AtomicHighLevelStateHandler handler) @@ -98,7 +141,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 HashMap<>(); + params.atomicHighLevelStates = new HashMap<>(); + 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 +184,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