@Benchmark public Object payloadBinding() { return bctx.lookup(BindingContextUtils.PAYLOAD); }
@Benchmark public Object parentLookup() { return childCtx.lookup("onParent"); } }
@Benchmark public Object varsBinding() { return bctx.lookup(VARS); }
@Test public void addsBinding() { BindingContext context = builder.addBinding(ID, typedValue).build(); assertThat(context.bindings(), hasSize(1)); assertThat(context.identifiers(), hasItem("id")); assertThat(context.lookup("id").get(), is(sameInstance(typedValue))); }
@Test public void addsBindings() { ExpressionModule module = ExpressionModule.builder(namespace).addBinding(ID, typedValue).build(); BindingContext previousContext = BindingContext.builder() .addBinding(ID, typedValue) .addBinding(OTHER_ID, typedValue) .addModule(module) .build(); BindingContext context = builder.addAll(previousContext).build(); assertThat(context.bindings(), hasSize(2)); assertThat(context.identifiers(), hasItems(ID, OTHER_ID)); assertThat(context.lookup(ID).get(), is(sameInstance(typedValue))); assertThat(context.lookup(OTHER_ID).get(), is(sameInstance(typedValue))); assertThat(context.modules(), hasSize(1)); assertThat(context.modules(), hasItems(module)); Collection<Binding> moduleBindings = context.modules().iterator().next().bindings(); assertThat(moduleBindings, hasSize(1)); assertThat(moduleBindings.iterator().next().identifier(), is(ID)); }
@Test public void fromPreviousBindings() { ExpressionModule module = ExpressionModule.builder(namespace).addBinding("id", typedValue).build(); BindingContext previousContext = BindingContext.builder() .addBinding(ID, typedValue) .addBinding(OTHER_ID, typedValue) .addModule(module) .build(); BindingContext context = BindingContext.builder(previousContext).build(); assertThat(context.bindings(), hasSize(2)); assertThat(context.identifiers(), hasItems(ID, OTHER_ID)); assertThat(context.lookup(ID).get(), is(sameInstance(typedValue))); assertThat(context.lookup(OTHER_ID).get(), is(sameInstance(typedValue))); assertThat(context.modules(), hasSize(1)); assertThat(context.modules(), hasItems(module)); }
private <T> T lookupValue(BindingContext context, String binding, T fallback) { return context.lookup(binding).map(typedValue -> (T) typedValue.getValue()).orElse(fallback); }
public DefaultBindingContextBuilder(BindingContext bindingContext) { this.bindings = bindingContext.identifiers().stream().collect(toMap(id -> id, id -> () -> bindingContext.lookup(id).get())); this.modules = new ArrayList<>(bindingContext.modules()); }
@Override public BindingContext.Builder addAll(BindingContext context) { context.identifiers().forEach(id -> bindings.put(id, () -> context.lookup(id).get())); modules.addAll(context.modules()); return this; }
@Override public List<FunctionParameter> parameters() { return Arrays.asList(new FunctionParameter("error", fromType(Error.class), context -> context.lookup(ERROR).orElse(null)), new FunctionParameter("type", STRING)); } }
@Override public TypedValue evaluate(String expression, CoreEvent event, CoreEvent.Builder eventBuilder, ComponentLocation componentLocation, BindingContext bindingContext) { expression = removeExpressionMarker(expression); Map<String, Object> bindingMap = bindingContext.identifiers().stream().collect(toMap(id -> id, id -> bindingContext.lookup(id).get() .getValue())); final Object value = evaluateUntyped(expression, (PrivilegedEvent) event, (PrivilegedEvent.Builder) eventBuilder, componentLocation, bindingMap); if (value instanceof TypedValue) { return (TypedValue) value; } else { final Serializable compiledExpression = expressionExecutor.getCompiledExpression(expression); DataType dataType = event != null ? dataTypeResolver.resolve(value, (PrivilegedEvent) event, compiledExpression) : OBJECT; return new TypedValue(value, dataType); } }
@Override public TypedValue evaluate(String expression, CoreEvent event, CoreEvent.Builder eventBuilder, ComponentLocation componentLocation, BindingContext context) { String sanitized = sanitize(expression); if (isPayloadExpression(sanitized)) { return event != null ? event.getMessage().getPayload() : context != null ? context.lookup(PAYLOAD).orElse(null) : null; } else { BindingContext.Builder contextBuilder = bindingContextBuilderFor(componentLocation, event, context); return evaluate(sanitized, exp -> expressionExecutor.evaluate(exp, contextBuilder.build())); } }
@Test public void addsBinding() { BindingContext context = builder.addBinding(ID, typedValue).build(); assertThat(context.bindings(), hasSize(1)); assertThat(context.identifiers(), hasItem("id")); assertThat(context.lookup("id").get(), is(sameInstance(typedValue))); }
@Test public void addsBindings() { ExpressionModule module = ExpressionModule.builder(namespace).addBinding(ID, typedValue).build(); BindingContext previousContext = BindingContext.builder() .addBinding(ID, typedValue) .addBinding(OTHER_ID, typedValue) .addModule(module) .build(); BindingContext context = builder.addAll(previousContext).build(); assertThat(context.bindings(), hasSize(2)); assertThat(context.identifiers(), hasItems(ID, OTHER_ID)); assertThat(context.lookup(ID).get(), is(sameInstance(typedValue))); assertThat(context.lookup(OTHER_ID).get(), is(sameInstance(typedValue))); assertThat(context.modules(), hasSize(1)); assertThat(context.modules(), hasItems(module)); Collection<Binding> moduleBindings = context.modules().iterator().next().bindings(); assertThat(moduleBindings, hasSize(1)); assertThat(moduleBindings.iterator().next().identifier(), is(ID)); }
@Test public void fromPreviousBindings() { ExpressionModule module = ExpressionModule.builder(namespace).addBinding("id", typedValue).build(); BindingContext previousContext = BindingContext.builder() .addBinding(ID, typedValue) .addBinding(OTHER_ID, typedValue) .addModule(module) .build(); BindingContext context = BindingContext.builder(previousContext).build(); assertThat(context.bindings(), hasSize(2)); assertThat(context.identifiers(), hasItems(ID, OTHER_ID)); assertThat(context.lookup(ID).get(), is(sameInstance(typedValue))); assertThat(context.lookup(OTHER_ID).get(), is(sameInstance(typedValue))); assertThat(context.modules(), hasSize(1)); assertThat(context.modules(), hasItems(module)); }