@Override public List<FunctionParameter> parameters() { return asList(new FunctionParameter("x", integerType), new FunctionParameter("y", integerType)); } };
@Test public void buildFunction() { FunctionDataType dataType = (FunctionDataType) DataType.fromFunction(new SomeFunction()); // Return type assertThat(dataType.getReturnType().isPresent(), is(true)); assertThat(dataType.getReturnType().get(), equalTo(STRING)); // Parameters assertThat(dataType.getParameters(), hasSize(2)); FunctionParameter first = dataType.getParameters().get(0); assertThat(first.getName(), is("fst")); assertThat(first.getType(), equalTo(NUMBER)); assertThat(first.getDefaultValueResolver(), nullValue()); FunctionParameter second = dataType.getParameters().get(1); assertThat(second.getName(), is("snd")); assertThat(second.getType(), equalTo(OBJECT)); // Default assertThat(second.getDefaultValueResolver().getDefaultValue(builder().build()), is("wow")); }
@Override public List<FunctionParameter> parameters() { return asList(new FunctionParameter("x", dataType)); } };
@Test public void buildFunction() { FunctionDataType dataType = (FunctionDataType) DataType.fromFunction(new SomeFunction()); // Return type assertThat(dataType.getReturnType().isPresent(), is(true)); assertThat(dataType.getReturnType().get(), equalTo(STRING)); // Parameters assertThat(dataType.getParameters(), hasSize(2)); FunctionParameter first = dataType.getParameters().get(0); assertThat(first.getName(), is("fst")); assertThat(first.getType(), equalTo(NUMBER)); assertThat(first.getDefaultValueResolver(), nullValue()); FunctionParameter second = dataType.getParameters().get(1); assertThat(second.getName(), is("snd")); assertThat(second.getType(), equalTo(OBJECT)); // Default assertThat(second.getDefaultValueResolver().getDefaultValue(builder().build()), is("wow")); }
@Override public List<FunctionParameter> parameters() { List<FunctionParameter> parameters = new ArrayList<>(); parameters.add(new FunctionParameter("fst", NUMBER)); parameters.add(new FunctionParameter("snd", OBJECT, ctx -> "wow")); return parameters; }
@Override public List<FunctionParameter> parameters() { List<FunctionParameter> parameters = new ArrayList<>(); parameters.add(new FunctionParameter("word", STRING)); parameters.add(new FunctionParameter("times", fromType(Integer.class), ctx -> 1)); return parameters; }
@Override public FunctionExecutor createExecutor(FunctionModel functionModel, FunctionParameterDefaultValueResolverFactory defaultResolverFactory) { DataType returnType = fromType(getType(functionModel.getOutput().getType()) .orElseThrow(() -> new MuleRuntimeException(createStaticMessage(format( "Failed to obtain the return type for function [%s]", functionModel.getName()))))); List<FunctionParameter> functionParameters = functionModel.getAllParameterModels().stream().map(p -> { MetadataType paramType = p.getType(); DataType type = isTypedValue(paramType) ? fromType(TypedValue.class) : toDataType(paramType); if (p.isRequired()) { return new FunctionParameter(p.getName(), type); } Object defaultValue = p.getDefaultValue(); if (defaultValue == null) { return new FunctionParameter(p.getName(), type, context -> Defaults.defaultValue(type.getType())); } return new FunctionParameter(p.getName(), type, defaultResolverFactory.create(defaultValue, type)); }).collect(toList()); return new ReflectiveExpressionFunctionExecutor(functionModel, returnType, functionParameters, method, getDelegateInstance()); }
@Override public List<FunctionParameter> parameters() { return asList(new FunctionParameter("flowName", STRING), new FunctionParameter("payload", OBJECT)); }
@Test public void templateFunction() { FunctionParameter functionParameter = new FunctionParameter("fst", NUMBER); final DataType template = DataType.builder() .functionType(SomeFunction.class) .returnType(STRING) .parametersType(singletonList(functionParameter)) .build(); final DataType dataType = DataType.builder(template).build(); assertThat(dataType, instanceOf(DefaultFunctionDataType.class)); assertThat(dataType.getType(), is(equalTo(SomeFunction.class))); assertThat(((DefaultFunctionDataType) dataType).getReturnType().get(), is(STRING)); assertThat(((DefaultFunctionDataType) dataType).getParameters(), hasItems(functionParameter)); }
@Override public List<FunctionParameter> parameters() { return singletonList(new FunctionParameter("name", STRING)); }
@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 List<FunctionParameter> parameters() { return asList(new FunctionParameter("x", integerType), new FunctionParameter("y", integerType)); } };
@Override public List<FunctionParameter> parameters() { return asList(new FunctionParameter("x", dataType)); } };
@Override public List<FunctionParameter> parameters() { List<FunctionParameter> parameters = new ArrayList<>(); parameters.add(new FunctionParameter("fst", NUMBER)); parameters.add(new FunctionParameter("snd", OBJECT, ctx -> "wow")); return parameters; }
@Override public List<FunctionParameter> parameters() { List<FunctionParameter> parameters = new ArrayList<>(); parameters.add(new FunctionParameter("word", STRING)); parameters.add(new FunctionParameter("times", fromType(Integer.class), ctx -> 1)); return parameters; }
@Override public FunctionExecutor createExecutor(FunctionModel functionModel, FunctionParameterDefaultValueResolverFactory defaultResolverFactory) { DataType returnType = fromType(getType(functionModel.getOutput().getType()) .orElseThrow(() -> new MuleRuntimeException(createStaticMessage(format( "Failed to obtain the return type for function [%s]", functionModel.getName()))))); List<FunctionParameter> functionParameters = functionModel.getAllParameterModels().stream().map(p -> { MetadataType paramType = p.getType(); DataType type = isTypedValue(paramType) ? fromType(TypedValue.class) : toDataType(paramType); if (p.isRequired()) { return new FunctionParameter(p.getName(), type); } Object defaultValue = p.getDefaultValue(); if (defaultValue == null) { return new FunctionParameter(p.getName(), type, context -> Defaults.defaultValue(type.getType())); } return new FunctionParameter(p.getName(), type, defaultResolverFactory.create(defaultValue, type)); }).collect(toList()); return new ReflectiveExpressionFunctionExecutor(functionModel, returnType, functionParameters, method, getDelegateInstance()); }
@Test public void templateFunction() { FunctionParameter functionParameter = new FunctionParameter("fst", NUMBER); final DataType template = DataType.builder() .functionType(SomeFunction.class) .returnType(STRING) .parametersType(singletonList(functionParameter)) .build(); final DataType dataType = DataType.builder(template).build(); assertThat(dataType, instanceOf(DefaultFunctionDataType.class)); assertThat(dataType.getType(), is(equalTo(SomeFunction.class))); assertThat(((DefaultFunctionDataType) dataType).getReturnType().get(), is(STRING)); assertThat(((DefaultFunctionDataType) dataType).getParameters(), hasItems(functionParameter)); }