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

se.michaelthelin.spotify.requests.data.search.simplified.special.SearchAlbumsSpecialRequest Maven / Gradle / Ivy

There is a newer version: 9.0.0-RC1
Show newest version
package se.michaelthelin.spotify.requests.data.search.simplified.special;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.neovisionaries.i18n.CountryCode;
import org.apache.hc.core5.http.ParseException;
import se.michaelthelin.spotify.exceptions.SpotifyWebApiException;
import se.michaelthelin.spotify.model_objects.special.AlbumSimplifiedSpecial;
import se.michaelthelin.spotify.model_objects.specification.Paging;
import se.michaelthelin.spotify.requests.data.AbstractDataPagingRequest;
import se.michaelthelin.spotify.requests.data.AbstractDataRequest;

import java.io.IOException;

/**
 * Get Spotify catalog information about albums that match a keyword string.
 * 

* This class exists because it includes the property {@code totalTracks}, which is not documented in the official * specification, although the albums object as returned by the searches API includes it. */ @JsonDeserialize(builder = SearchAlbumsSpecialRequest.Builder.class) public class SearchAlbumsSpecialRequest extends AbstractDataRequest> { /** * The private {@link SearchAlbumsSpecialRequest} constructor. * * @param builder A {@link Builder}. */ private SearchAlbumsSpecialRequest(final Builder builder) { super(builder); } /** * Search for albums. * * @return An {@link AlbumSimplifiedSpecial} paging. * @throws IOException In case of networking issues. * @throws SpotifyWebApiException The Web API returned an error further specified in this exception's root cause. */ public Paging execute() throws IOException, SpotifyWebApiException, ParseException { return new AlbumSimplifiedSpecial.JsonUtil().createModelObjectPaging(getJson(), "albums"); } /** * Builder class for building a {@link SearchAlbumsSpecialRequest}. */ public static final class Builder extends AbstractDataPagingRequest.Builder { /** * Create a new {@link Builder}. * * @param accessToken Required. A valid access token from the Spotify Accounts service. */ public Builder(final String accessToken) { super(accessToken); } /** * The search query setter. * * @param q Required. The search query's keywords (and optional field filters and operators). * @return A {@link Builder}. * @see Spotify: Search Query Options */ public Builder q(final String q) { assert (q != null); assert (!q.equals("")); return setQueryParameter("q", q); } /** * The market country code setter. * * @param market Optional. An ISO 3166-1 alpha-2 country code. If a country code is given, only artists, * albums, and tracks with content playable in that market will be returned. (Playlist * results are not affected by the market parameter.) * @return A {@link Builder}. * @see Wikipedia: ISO 3166-1 alpha-2 country codes */ public Builder market(final CountryCode market) { assert (market != null); return setQueryParameter("market", market); } /** * The limit setter. * * @param limit Optional. The maximum number of results to return. Default: 20. Minimum: 1. Maximum: 50. * @return A {@link Builder}. */ @Override public Builder limit(final Integer limit) { assert (limit != null); assert (1 <= limit && limit <= 50); return setQueryParameter("limit", limit); } /** * The offset setter. * * @param offset Optional. The index of the first result to return. Default: 0 (i.e., the first result). Maximum * offset: 100.000. Use with {@link #limit(Integer)} to get the next page of search results. * @return A {@link Builder}. */ @Override public Builder offset(final Integer offset) { assert (offset != null); assert (0 <= offset && offset <= 100000); return setQueryParameter("offset", offset); } /** * The request build method. * * @return A {@link Builder}. */ @Override public SearchAlbumsSpecialRequest build() { setPath("/v1/search"); setQueryParameter("type", "album"); return new SearchAlbumsSpecialRequest(this); } @Override protected Builder self() { return this; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy