package brainslug.flow.execution.property.store; import brainslug.flow.definition.Identifier; import brainslug.flow.execution.instance.FlowInstanceProperty; import brainslug.flow.execution.instance.FlowInstanceProperties; import brainslug.flow.execution.property.ExecutionProperties; import brainslug.util.Option; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class HashMapPropertyStore implements PropertyStore { Map<Identifier<?>, ExecutionProperties> propertiesByInstance = Collections.synchronizedMap(new HashMap<Identifier<?>, ExecutionProperties>()); @Override public void setProperty(Identifier<?> instanceId, FlowInstanceProperty<?> property) { ExecutionProperties instanceProperties = propertiesByInstance.get(instanceId); if (instanceProperties != null) { instanceProperties.with(property.getKey(), property.getValue()); } } @Override public void setProperties(Identifier<?> instanceId, FlowInstanceProperties<?, FlowInstanceProperty<?>> properties) { propertiesByInstance.put(instanceId, new ExecutionProperties().from(properties.values())); } @Override public Option<FlowInstanceProperty<?>> getProperty(Identifier<?> instanceId, Identifier<?> key) { ExecutionProperties instanceProperties = propertiesByInstance.get(instanceId); if (instanceProperties == null) { return Option.empty(); } else { return Option.<FlowInstanceProperty<?>>of(instanceProperties.get(key.stringValue())); } } @Override public FlowInstanceProperties<?, FlowInstanceProperty<?>> getProperties(Identifier<?> instanceId) { return Option.of(propertiesByInstance.get(instanceId)).orElse(new ExecutionProperties()); } }