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

io.getstream.client.apache.repo.utils.UriBuilder Maven / Gradle / Ivy

package io.getstream.client.apache.repo.utils;

import io.getstream.client.exception.UriBuilderException;
import org.apache.http.client.utils.URIBuilder;

import java.net.URI;
import java.net.URISyntaxException;

/**
 * {@link URIBuilder} wrapper class. It helps to compose paths with
 * and/or without attributes using a fluid pattern.
 * This class has a limited implementation and it has been built to meet
 * the current needs.
 */
public class UriBuilder {

    private static final String PATH_SEPARATOR = "/";

    private final URIBuilder uri;

    private UriBuilder(URI baseEndpoint) {
        this.uri = new URIBuilder(baseEndpoint);
    }

    private UriBuilder(String baseEndpoint) {
        try {
            this.uri = new URIBuilder(baseEndpoint);
        } catch (URISyntaxException e) {
            throw new UriBuilderException("Cannot build valid URI", e);
        }
    }

    /**
     * Create {@link UriBuilder} starting from a given string.
     *
     * @param endpoint Endpoint in string format.
     * @return A new UriBuilder
     */
    public static UriBuilder fromEndpoint(final String endpoint) {
        UriBuilder uriBuilder = new UriBuilder(endpoint);
        return uriBuilder;
    }

    /**
     * Create {@link UriBuilder} starting from a given URI.
     *
     * @param endpoint Endpoint in {@link URI} format.
     * @return A new UriBuilder
     */
    public static UriBuilder fromEndpoint(final URI endpoint) {
        UriBuilder uriBuilder = new UriBuilder(endpoint);
        return uriBuilder;
    }

    /**
     * Add a path component to the URI.
     *
     * @param path Path component(s) as String.
     * @return itself
     */
    public UriBuilder path(String path) {
        String uriPath = uri.getPath();
        if (null != uriPath && uriPath.endsWith(PATH_SEPARATOR)) {
            this.uri.setPath(uriPath.concat(path));
        } else {
            this.uri.setPath(uriPath.concat(PATH_SEPARATOR).concat(path));
        }
        return this;
    }

    /**
     * Add a query param (e.g: ?param=key)
     *
     * @param name  Name of the param.
     * @param value Value of the param.
     * @return itself
     */
    public UriBuilder queryParam(String name, String value) {
        this.uri.addParameter(name, value);
        return this;
    }

    /**
     * Add a query param (e.g: ?param=key)
     *
     * @param name  Name of the param.
     * @param value Value of the numeric param (must be a {@link Integer}.
     * @return itself
     */
    public UriBuilder queryParam(String name, Integer value) {
        this.uri.addParameter(name, value.toString());
        return this;
    }

    /**
     * Add a query param (e.g: ?param=key)
     *
     * @param name  Name of the param.
     * @param value Value of the numeric param (must be a {@link Long}.
     * @return itself
     */
    public UriBuilder queryParam(String name, Long value) {
        this.uri.addParameter(name, value.toString());
        return this;
    }

    /**
     * Build the final URI.
     *
     * @return A {@link URI}
     */
    public URI build() throws UriBuilderException {
        try {
            return uri.build();
        } catch (URISyntaxException e) {
            throw new UriBuilderException("Cannot build valid URI", e);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy