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.submodels.SubmodelComponent;
-import net.mograsim.logic.model.serializing.IdentifierGetter;
+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;
{
private final SubmodelComponent component;
private final Map<String, SubcomponentHighLevelStateHandler> subcomponentHighLevelStateHandlers;
+ private final Map<String, SubcomponentHighLevelStateHandler> subcomponentHighLevelStateHandlersUnmodifiable;
private final Map<String, AtomicHighLevelStateHandler> atomicHighLevelStateHandlers;
+ private final Map<String, AtomicHighLevelStateHandler> atomicHighLevelStateHandlersUnmodifiable;
public StandardHighLevelStateHandler(SubmodelComponent component)
{
{
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);
}
public <P, H extends SubcomponentHighLevelStateHandler> H addSubcomponentHighLevelState(String subcomponentStateID,
- BiFunction<HighLevelStateHandlerContext, P, H> handlerConstructor, P handlerParams)
+ BiFunction<SubmodelComponent, P, H> handlerConstructor, P handlerParams)
{
return addSubcomponentHighLevelState(subcomponentStateID, c -> handlerConstructor.apply(c, handlerParams));
}
public <H extends SubcomponentHighLevelStateHandler> H addSubcomponentHighLevelState(String subcomponentStateID,
- Function<HighLevelStateHandlerContext, H> handlerConstructor)
+ Function<SubmodelComponent, H> handlerConstructor)
{
- HighLevelStateHandlerContext context = new HighLevelStateHandlerContext(component, subcomponentStateID);
- H handler = handlerConstructor.apply(context);
+ H handler = handlerConstructor.apply(component);
addSubcomponentHighLevelState(subcomponentStateID, handler);
return handler;
}
subcomponentHighLevelStateHandlers.put(subcomponentStateID, handler);
}
+ public void removeSubcomponentHighLevelState(String subcomponentStateID)
+ {
+ checkHighLevelStateIDPart(subcomponentStateID);
+ subcomponentHighLevelStateHandlers.remove(subcomponentStateID);
+ }
+
+ public Map<String, SubcomponentHighLevelStateHandler> getSubcomponentHighLevelStates()
+ {
+ return subcomponentHighLevelStateHandlersUnmodifiable;
+ }
+
public AtomicHighLevelStateHandler addAtomicHighLevelState(String atomicStateID, AtomicHighLevelStateHandlerParams handlerParams)
{
return addAtomicHighLevelState(atomicStateID,
}
public <P, H extends AtomicHighLevelStateHandler> H addAtomicHighLevelState(String subcomponentStateID,
- BiFunction<HighLevelStateHandlerContext, P, H> handlerConstructor, P handlerParams)
+ BiFunction<SubmodelComponent, P, H> handlerConstructor, P handlerParams)
{
return addAtomicHighLevelState(subcomponentStateID, c -> handlerConstructor.apply(c, handlerParams));
}
public <H extends AtomicHighLevelStateHandler> H addAtomicHighLevelState(String subcomponentStateID,
- Function<HighLevelStateHandlerContext, H> handlerConstructor)
+ Function<SubmodelComponent, H> handlerConstructor)
{
- HighLevelStateHandlerContext context = new HighLevelStateHandlerContext(component, subcomponentStateID);
- H handler = handlerConstructor.apply(context);
+ H handler = handlerConstructor.apply(component);
addAtomicHighLevelState(subcomponentStateID, handler);
return handler;
}
atomicHighLevelStateHandlers.put(atomicStateID, handler);
}
+ public void removeAtomicHighLevelState(String atomicStateID)
+ {
+ checkHighLevelStateIDPart(atomicStateID);
+ atomicHighLevelStateHandlers.remove(atomicStateID);
+ }
+
+ public Map<String, AtomicHighLevelStateHandler> getAtomicHighLevelStates()
+ {
+ return atomicHighLevelStateHandlersUnmodifiable;
+ }
+
private static void checkHighLevelStateIDPart(String stateIDPart)
{
if (stateIDPart.indexOf('.') != -1)
}
@Override
- public StandardHighLevelStateHandlerParams getParamsForSerializing(IdentifierGetter idGetter)
+ 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<>();
+ params.subcomponentHighLevelStates = new TreeMap<>();
+ params.atomicHighLevelStates = new TreeMap<>();
for (Entry<String, SubcomponentHighLevelStateHandler> e : subcomponentHighLevelStateHandlers.entrySet())
{
String stateID = e.getKey();
SubcomponentHighLevelStateHandler handler = e.getValue();
SubcomponentHighLevelStateHandlerParams handlerParams = new SubcomponentHighLevelStateHandlerParams();
- handlerParams.id = idGetter.subcomponentHighLevelStateHandlerIDs.apply(handler);
- handlerParams.params = handler.getParamsForSerializingJSON(idGetter);
+ handlerParams.id = handler.getIDForSerializing(idParams);
+ handlerParams.params = handler.getParamsForSerializingJSON(idParams);
params.subcomponentHighLevelStates.put(stateID, handlerParams);
}
for (Entry<String, AtomicHighLevelStateHandler> e : atomicHighLevelStateHandlers.entrySet())
String stateID = e.getKey();
AtomicHighLevelStateHandler handler = e.getValue();
AtomicHighLevelStateHandlerParams handlerParams = new AtomicHighLevelStateHandlerParams();
- handlerParams.id = idGetter.atomicHighLevelStateHandlerIDs.apply(handler);
- handlerParams.params = handler.getParamsForSerializingJSON(idGetter);
+ handlerParams.id = handler.getIDForSerializing(idParams);
+ handlerParams.params = handler.getParamsForSerializingJSON(idParams);
params.atomicHighLevelStates.put(stateID, handlerParams);
}
return params;