001package org.gbif.api.model.collections.request;
002
003import java.io.Serializable;
004import java.util.List;
005import jakarta.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  @Nullable private List<String> taxonIssues;
040  @Nullable private String checklistKey;
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}