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 class BrainslugExecutionContext implements ExecutionContext { Registry registry; private FlowInstance flowInstance; TriggerContext trigger; public BrainslugExecutionContext(FlowInstance flowInstance, TriggerContext trigger, Registry registry) { this.flowInstance = flowInstance; this.trigger = trigger; this.registry = registry; } public TriggerContext getTrigger() { return trigger; } @Override public FlowInstance getInstance() { return flowInstance; } @Override public boolean isAsync() { return trigger.isAsync(); } @Override public boolean isSignaling() { return trigger.isSignaling(); } @Override public void setProperty(String key, Object value) { trigger.setProperty(key, value); } @Override public <T> void setProperty(Property<T> property, T value) { setProperty(property.getValue(), value); } @Override public void setProperty(Identifier key, Object value) { setProperty(key.stringValue(), value); } @Override public void setProperty(Enum key, Object value) { setProperty(key.name(), value); } @Override public void setProperty(String key, Object value, boolean isTransient) { trigger.setProperty(key, value, isTransient); } @Override public <T> void setProperty(Property<T> property, T value, boolean isTransient) { setProperty(property.getValue(), value, isTransient); } @Override public void setProperty(Identifier key, Object value, boolean isTransient) { setProperty(key.stringValue(), value, isTransient); } @Override public void setProperty(Enum key, Object value, boolean isTransient) { setProperty(key.name(), value, isTransient); } @Override public void setProperties(FlowInstanceProperties executionProperties) { trigger.setProperties(executionProperties); } @Override public FlowInstanceProperties<?, FlowInstanceProperty<?>> getProperties() { return trigger.getProperties(); } @Override public <T> T property(Property<T> property) { return property(property.getValue(), property.getValueClass()); } @Override public <T> T property(Identifier key, Class<T> clazz) { return getTrigger().getProperty(key.stringValue(), clazz); } @Override public <T> T property(String key, Class<T> clazz) { return getTrigger().getProperty(key, clazz); } @Override public <T> T property(Enum key, Class<T> clazz) { return getTrigger().getProperty(key.name(), clazz); } @Override public <T> T service(Class<T> clazz) { return registry.getService(clazz); } @Override public Object service(String serviceName) { return registry.getService(serviceName); } }