package brainslug.flow.context; import brainslug.flow.definition.Identifier; import brainslug.flow.expression.Property; import brainslug.flow.execution.instance.FlowInstance; import brainslug.flow.execution.instance.FlowInstanceProperties; import brainslug.flow.execution.instance.FlowInstanceProperty; public interface ExecutionContext { FlowInstance getInstance(); boolean isAsync(); boolean isSignaling(); void setProperty(String key, Object value); <T> void setProperty(Property<T> property, T value); void setProperty(Identifier key, Object value); void setProperty(Enum key, Object value); void setProperty(String key, Object value, boolean isTransient); <T> void setProperty(Property<T> property, T value, boolean isTransient); void setProperty(Identifier key, Object value, boolean isTransient); void setProperty(Enum key, Object value, boolean isTransient); void setProperties(FlowInstanceProperties executionProperties); FlowInstanceProperties<?, FlowInstanceProperty<?>> getProperties(); <T> T property(Property<T> property); <T> T property(Identifier id, Class<T> clazz); <T> T property(String key, Class<T> clazz); <T> T property(Enum key, Class<T> clazz); <T> T service(Class<T> clazz); Object service(String className); }