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

org.sourcelab.github.client.request.UserReposRequest Maven / Gradle / Ivy

The newest version!
package org.sourcelab.github.client.request;

import org.sourcelab.github.client.response.UserReposResponse;
import org.sourcelab.github.client.response.parser.ResponseParser;
import org.sourcelab.github.client.response.parser.UserReposResponseParser;

import java.time.format.DateTimeFormatter;
import java.util.Objects;
import java.util.stream.Collectors;

public class UserReposRequest extends GetRequest implements PageableRequest {
    private final UserReposFilterCriteria options;
    private PageOptions pageOptions;

    /**
     * Constructor.@param options
     */
    public UserReposRequest(final UserReposFilterCriteria options) {
        Objects.requireNonNull(options);
        this.pageOptions = options.getPageOptions() == null ? new PageOptions() : options.getPageOptions();
        this.options = Objects.requireNonNull(options);
    }

    @Override
    public String getPath() {
        return "/user/repos";
    }

    /**
     * KeyValue pairs of Request Parameters.
     * @return RequestParameters associated with request.
     */
    @Override
    public RequestParameters getRequestParameters() {
        final RequestParametersBuilder builder = RequestParameters.newBuilder();
        if (pageOptions != null) {
            builder.withPageOptions(pageOptions);
        }

        if (options.getVisibility() != null && !options.getVisibility().trim().isEmpty()) {
            builder.withParameter("visibility", options.getVisibility());
        }
        if (!options.getAffiliation().isEmpty()) {
            builder.withParameter("affiliation", options.getAffiliation()
                .stream()
                .map(Enum::name)
                .collect(Collectors.joining(","))
            );
        }
        if (!options.getType().isEmpty()) {
            builder.withParameter("type", options.getType()
                .stream()
                .map(Enum::name)
                .collect(Collectors.joining(","))
            );
        }
        if (options.getSort() != null) {
            builder.withParameter("sort", options.getSort().name());
        }
        if (options.getSortDirection() != null) {
            builder.withParameter("direction", options.getSortDirection().name());
        }
        if (options.getSince() != null) {
            builder.withParameter("since", options.getSince().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
        }
        if (options.getBefore() != null) {
            builder.withParameter("before", options.getBefore().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
        }

        return builder.build();
    }

    @Override
    public ResponseParser getResponseParser() {
        return new UserReposResponseParser(this);
    }

    @Override
    public void updatePageOptions(final PageOptions pageOptions) {
        this.pageOptions = Objects.requireNonNull(pageOptions);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy