001package org.gbif.api.model.collections.request;
002
003import java.io.Serializable;
004import java.util.Date;
005import java.util.List;
006import javax.annotation.Nullable;
007import lombok.AllArgsConstructor;
008import lombok.Builder;
009import lombok.Data;
010import lombok.NoArgsConstructor;
011import org.gbif.api.model.common.paging.Pageable;
012import org.gbif.api.model.common.paging.PageableBase;
013import org.gbif.api.model.common.paging.PagingConstants;
014import org.gbif.api.model.common.paging.PagingRequest;
015import org.gbif.api.vocabulary.Country;
016import org.gbif.api.vocabulary.Rank;
017
018@Data
019@NoArgsConstructor
020@AllArgsConstructor
021@Builder
022public class DescriptorSearchRequest extends PageableBase implements Serializable {
023
024  @Nullable private String q;
025  @Nullable private Long descriptorGroupKey;
026  @Nullable private List<Integer> usageKey;
027  @Nullable private List<String> usageName;
028  @Nullable private List<Rank> usageRank;
029  @Nullable private List<Integer> taxonKey;
030  @Nullable private List<Country> country;
031  @Nullable private String individualCount;
032  @Nullable private List<String> identifiedBy;
033  @Nullable private Date dateIdentified;
034  @Nullable private Date dateIdentifiedFrom;
035  @Nullable private Date dateIdentifiedBefore;
036  @Nullable private List<String> typeStatus;
037  @Nullable private List<String> recordedBy;
038  @Nullable private List<String> discipline;
039  @Nullable private List<String> objectClassification;
040  @Nullable private List<String> issues;
041
042  public Pageable getPage() {
043    return new PagingRequest(getOffset(), getLimit());
044  }
045
046  public static DescriptorSearchRequestBuilder builder() {
047    return new CustomBuilder();
048  }
049
050  public static class DescriptorSearchRequestBuilder {
051    long offset = PagingConstants.DEFAULT_PARAM_OFFSET;
052    int limit = PagingConstants.DEFAULT_PARAM_LIMIT;
053
054    public DescriptorSearchRequestBuilder offset(long offset) {
055      this.offset = offset;
056      return this;
057    }
058
059    public DescriptorSearchRequestBuilder limit(int limit) {
060      this.limit = limit;
061      return this;
062    }
063  }
064
065  public static class CustomBuilder extends DescriptorSearchRequestBuilder {
066
067    @Override
068    public DescriptorSearchRequest build() {
069      DescriptorSearchRequest descriptorSearchRequest = super.build();
070      descriptorSearchRequest.setOffset(offset);
071      descriptorSearchRequest.setLimit(limit);
072      return descriptorSearchRequest;
073    }
074  }
075}