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

io.dropwizard.vavr.jersey.CollectionParameterExtractor Maven / Gradle / Ivy

package io.dropwizard.vavr.jersey;

import io.vavr.collection.Seq;
import io.vavr.control.Option;
import org.glassfish.jersey.server.internal.inject.MultivaluedParameterExtractor;

import javax.ws.rs.core.MultivaluedMap;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;

class CollectionParameterExtractor> implements MultivaluedParameterExtractor> {
    private final String name;
    private final Option defaultValue;
    private final Function fromString;
    private final Function, B> collBuilder;

    CollectionParameterExtractor(final String name,
                                 final Option defaultValue,
                                 final Function fromString,
                                 final Function, B> collBuilder) {
        this.name = name;
        this.defaultValue = defaultValue;
        this.fromString = fromString;
        this.collBuilder = collBuilder;
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public String getDefaultValueString() {
        return this.defaultValue.getOrNull();
    }

    @Override
    public Seq extract(final MultivaluedMap parameters) {
        return this.collBuilder.apply(
            Option.of(parameters.get(this.name))
                .getOrElse(() -> defaultValue.map(Collections::singletonList).getOrElse(Collections.emptyList()))
        ).map(this.fromString);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy