package com.uploadcare.api;
import com.uploadcare.data.FilePageData;
import com.uploadcare.urls.FilesFromParameter;
import com.uploadcare.urls.FilesRemovedParameter;
import com.uploadcare.urls.FilesStoredParameter;
import com.uploadcare.urls.FilesToParameter;
import com.uploadcare.urls.UrlParameter;
import com.uploadcare.urls.Urls;
import java.net.URI;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* File resource request builder.
*
* Allows to specify some file filters and get results.
*
* @see com.uploadcare.api.File
*/
public class FilesQueryBuilder implements PaginatedQueryBuilder<File> {
private final Client client;
private final List<UrlParameter> parameters = new ArrayList<UrlParameter>();
/**
* Initializes a new builder for the given client.
*/
public FilesQueryBuilder(Client client) {
this.client = client;
}
/**
* Adds a filter for removed files.
*
* @param removed If {@code true}, accepts removed files, otherwise declines them.
*/
public FilesQueryBuilder removed(boolean removed) {
parameters.add(new FilesRemovedParameter(removed));
return this;
}
/**
* Adds a filter for stored files.
*
* @param stored If {@code true}, accepts stored files, otherwise declines them.
*/
public FilesQueryBuilder stored(boolean stored) {
parameters.add(new FilesStoredParameter(stored));
return this;
}
/**
* Adds a filter for datetime from objects will be returned.
*
* @param from A uploading datetime from which objects will be returned.
*/
public FilesQueryBuilder from(Date from) {
parameters.add(new FilesFromParameter(from));
return this;
}
/**
* Adds a filter for datetime to which objects will be returned.
*
* @param to A uploading datetime to which objects will be returned.
*/
public FilesQueryBuilder to(Date to) {
parameters.add(new FilesToParameter(to));
return this;
}
public Iterable<File> asIterable() {
URI url = Urls.apiFiles();
RequestHelper requestHelper = client.getRequestHelper();
FileDataWrapper dataWrapper = new FileDataWrapper(client);
return requestHelper.executePaginatedQuery(url, parameters, true, FilePageData.class, dataWrapper);
}
public List<File> asList() {
List<File> files = new ArrayList<File>();
for (File file : asIterable()) {
files.add(file);
}
return files;
}
}