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

org.javersion.object.mapping.CompositeMappingResolver Maven / Gradle / Ivy

The newest version!
package org.javersion.object.mapping;

import java.util.List;
import java.util.Map;

import javax.annotation.Nonnull;

import org.javersion.reflect.ElementDescriptor;
import org.javersion.reflect.MethodDescriptor;
import org.javersion.reflect.ParameterDescriptor;
import org.javersion.reflect.StaticExecutable;
import org.javersion.reflect.TypeDescriptor;

import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;

public class CompositeMappingResolver implements MappingResolver {

    private final List resolvers;

    public CompositeMappingResolver(MappingResolver... resolvers) {
        this(ImmutableList.copyOf(resolvers));
    }

    public CompositeMappingResolver(List resolvers) {
        this.resolvers = ImmutableList.copyOf(resolvers);
    }

    @Nonnull
    @Override
    public Result delegateValue(MethodDescriptor method) {
        return find(resolver -> resolver.delegateValue(method));
    }

    @Nonnull
    @Override
    public  Result creator(T methodOrConstructor) {
        return find(resolver -> resolver.creator(methodOrConstructor));
    }

    @Nonnull
    @Override
    public Result alias(TypeDescriptor type) {
        return find(resolver -> resolver.alias(type));
    }

    @Nonnull
    @Override
    public Result> subclasses(TypeDescriptor type) {
        return find(resolver -> resolver.subclasses(type));
    }

    @Nonnull
    @Override
    public Result name(ParameterDescriptor parameter) {
        return find(resolver -> resolver.name(parameter));
    }

     Result find(Function> function) {
        for (int i=0; i < resolvers.size(); i++) {
            Result result = function.apply(resolvers.get(i));
            if (result != null && result.isPreset()) {
                return result.withPriority(i);
            }
        }
        return Result.notFound();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy