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