All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.lyncode.jtwig.functions.resolver.impl.DelegateFunctionResolver Maven / Gradle / Ivy

The newest version!
package com.lyncode.jtwig.functions.resolver.impl;

import com.google.common.base.Optional;
import com.lyncode.jtwig.functions.parameters.input.InputParameters;
import com.lyncode.jtwig.functions.parameters.resolve.api.MethodParametersResolver;
import com.lyncode.jtwig.functions.parameters.resolve.model.ResolvedParameters;
import com.lyncode.jtwig.functions.repository.api.FunctionRepository;
import com.lyncode.jtwig.functions.repository.model.Function;
import com.lyncode.jtwig.functions.resolver.api.FunctionResolver;
import com.lyncode.jtwig.functions.resolver.model.Executable;

import java.util.Collection;

import static com.google.common.base.Optional.absent;

public class DelegateFunctionResolver implements FunctionResolver {
    private final FunctionRepository repository;
    private final MethodParametersResolver parametersResolver;

    public DelegateFunctionResolver(FunctionRepository repository, MethodParametersResolver parametersResolver) {
        this.repository = repository;
        this.parametersResolver = parametersResolver;
    }

    @Override
    public Optional resolve(String name, InputParameters parameters) {
        Collection functions = repository.retrieve(name, parameters);
        for (Function function : functions) {
            ResolvedParameters resolvedParameters = new ResolvedParameters(function.method());
            resolvedParameters = parametersResolver.resolve(resolvedParameters, parameters);
            if (resolvedParameters.isFullyResolved())
                return Optional.of(new Executable(function, resolvedParameters.values()));
        }
        return absent();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy