001/*
002 * Licensed under the Apache License, Version 2.0 (the "License");
003 * you may not use this file except in compliance with the License.
004 * You may obtain a copy of the License at
005 *
006 *     http://www.apache.org/licenses/LICENSE-2.0
007 *
008 * Unless required by applicable law or agreed to in writing, software
009 * distributed under the License is distributed on an "AS IS" BASIS,
010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
011 * See the License for the specific language governing permissions and
012 * limitations under the License.
013 */
014package org.gbif.api.model.occurrence.search;
015
016import java.util.Date;
017import java.util.Optional;
018import java.util.UUID;
019
020import io.swagger.v3.oas.annotations.Hidden;
021
022import org.gbif.api.annotation.Experimental;
023import org.gbif.api.model.common.paging.Pageable;
024import org.gbif.api.model.common.search.FacetedSearchRequest;
025import org.gbif.api.util.IsoDateInterval;
026import org.gbif.api.vocabulary.BasisOfRecord;
027import org.gbif.api.vocabulary.Continent;
028import org.gbif.api.vocabulary.Country;
029import org.gbif.api.vocabulary.MediaType;
030import org.gbif.api.vocabulary.OccurrenceIssue;
031import org.gbif.api.vocabulary.OccurrenceStatus;
032
033/** Request class for issuing search request to the occurrence search service. */
034public class OccurrenceSearchRequest extends FacetedSearchRequest<OccurrenceSearchParameter> {
035
036  public OccurrenceSearchRequest(Pageable page) {
037    super(page);
038  }
039
040  public OccurrenceSearchRequest() {
041  }
042
043  public void addOccurrenceIDFilter(String occurrenceID) {
044    addParameter(OccurrenceSearchParameter.OCCURRENCE_ID, occurrenceID);
045  }
046
047  public void addEstablishmentMeansFilter(String establishmentMeans) {
048    addParameter(OccurrenceSearchParameter.ESTABLISHMENT_MEANS, establishmentMeans);
049  }
050
051  public void addBasisOfRecordFilter(BasisOfRecord basisOfRecord) {
052    addParameter(OccurrenceSearchParameter.BASIS_OF_RECORD, basisOfRecord);
053  }
054
055  public void addTypeStatusFilter(String typeStatus) {
056    addParameter(OccurrenceSearchParameter.TYPE_STATUS, typeStatus);
057  }
058
059  public void addCatalogNumberFilter(String catalogNumber) {
060    addParameter(OccurrenceSearchParameter.CATALOG_NUMBER, catalogNumber);
061  }
062
063  public void addRecordedByFilter(String collectorName) {
064    addParameter(OccurrenceSearchParameter.RECORDED_BY, collectorName);
065  }
066
067  public void addIdentifiedByFilter(String collectorName) {
068    addParameter(OccurrenceSearchParameter.IDENTIFIED_BY, collectorName);
069  }
070
071  public void addRecordNumberFilter(String recordNumber) {
072    addParameter(OccurrenceSearchParameter.RECORD_NUMBER, recordNumber);
073  }
074
075  public void addCountryFilter(Country country) {
076    addParameter(OccurrenceSearchParameter.COUNTRY, country.getIso2LetterCode());
077  }
078
079  public void addContinentFilter(Continent continent) {
080    addParameter(OccurrenceSearchParameter.CONTINENT, continent);
081  }
082
083  public void addDatasetKeyFilter(UUID datasetKey) {
084    addParameter(OccurrenceSearchParameter.DATASET_KEY, datasetKey.toString());
085  }
086
087  public void addGeometryFilter(String geometryAsWkt) {
088    addParameter(OccurrenceSearchParameter.GEOMETRY, geometryAsWkt);
089  }
090
091  public void addDecimalLatitudeFilter(double latitude) {
092    addParameter(OccurrenceSearchParameter.DECIMAL_LATITUDE, latitude);
093  }
094
095  public void addDecimalLongitudeFilter(double longitude) {
096    addParameter(OccurrenceSearchParameter.DECIMAL_LONGITUDE, longitude);
097  }
098
099  public void addCoordinateUncertaintyInMetersFilter(double uncertainty) {
100    addParameter(OccurrenceSearchParameter.COORDINATE_UNCERTAINTY_IN_METERS, uncertainty);
101  }
102
103  public void addMonthFilter(int month) {
104    addParameter(OccurrenceSearchParameter.MONTH, month);
105  }
106
107  public void addDayFilter(int day) {
108    addParameter(OccurrenceSearchParameter.DAY, day);
109  }
110
111  public void addTaxonKeyFilter(String taxonKey) {
112    addParameter(OccurrenceSearchParameter.TAXON_KEY, taxonKey);
113  }
114
115  public void addKingdomKeyFilter(String kingdomKey) {
116    addParameter(OccurrenceSearchParameter.KINGDOM_KEY, kingdomKey);
117  }
118
119  public void addPhylumKeyFilter(String phylumKey) {
120    addParameter(OccurrenceSearchParameter.PHYLUM_KEY, phylumKey);
121  }
122
123  public void addClassKeyFilter(String classKey) {
124    addParameter(OccurrenceSearchParameter.CLASS_KEY, classKey);
125  }
126
127  public void addOrderKeyFilter(String orderKey) {
128    addParameter(OccurrenceSearchParameter.ORDER_KEY, orderKey);
129  }
130
131  public void addFamilyKeyFilter(String familyKey) {
132    addParameter(OccurrenceSearchParameter.FAMILY_KEY, familyKey);
133  }
134
135  public void addGenusKeyFilter(String genusKey) {
136    addParameter(OccurrenceSearchParameter.GENUS_KEY, genusKey);
137  }
138
139  public void addSubGenusKeyFilter(String subGenusKey) {
140    addParameter(OccurrenceSearchParameter.SUBGENUS_KEY, subGenusKey);
141  }
142
143  public void addSpeciesKeyFilter(String speciesKey) {
144    addParameter(OccurrenceSearchParameter.SPECIES_KEY, speciesKey);
145  }
146
147  public void addYearFilter(int year) {
148    addParameter(OccurrenceSearchParameter.YEAR, year);
149  }
150
151  public void addEventDateFilter(IsoDateInterval date) {
152    addParameter(OccurrenceSearchParameter.EVENT_DATE, date);
153  }
154
155  public void addLastInterpretedFilter(Date modified) {
156    addParameter(OccurrenceSearchParameter.LAST_INTERPRETED, modified);
157  }
158
159  public void addPublishingCountryFilter(Country country) {
160    addParameter(OccurrenceSearchParameter.PUBLISHING_COUNTRY, country.getIso2LetterCode());
161  }
162
163  public void addInstitutionCodeFilter(String code) {
164    addParameter(OccurrenceSearchParameter.INSTITUTION_CODE, code);
165  }
166
167  public void addHasCoordinateFilter(boolean hasCoordinate) {
168    addParameter(OccurrenceSearchParameter.HAS_COORDINATE, hasCoordinate);
169  }
170
171  public void addSpatialIssueFilter(boolean hasSpatialIssue) {
172    addParameter(OccurrenceSearchParameter.HAS_GEOSPATIAL_ISSUE, hasSpatialIssue);
173  }
174
175  public void addIssueFilter(OccurrenceIssue issue) {
176    addParameter(OccurrenceSearchParameter.ISSUE, issue);
177  }
178
179  public void addElevationFilter(double elevation) {
180    addParameter(OccurrenceSearchParameter.ELEVATION, elevation);
181  }
182
183  public void addMediaTypeFilter(MediaType mediaType) {
184    addParameter(OccurrenceSearchParameter.MEDIA_TYPE, mediaType);
185  }
186
187  public void addRecordedByIdsFilter(String recordedByIds) {
188    addParameter(OccurrenceSearchParameter.RECORDED_BY_ID, recordedByIds);
189  }
190
191  public void addIdentifiedByIdsFilter(String identifiedByIds) {
192    addParameter(OccurrenceSearchParameter.IDENTIFIED_BY_ID, identifiedByIds);
193  }
194
195  public void addOccurrenceStatusFilter(OccurrenceStatus occurrenceStatus) {
196    addParameter(OccurrenceSearchParameter.OCCURRENCE_STATUS, occurrenceStatus);
197  }
198
199  public void addGadmGidFilter(String gadmGid) {
200    addParameter(OccurrenceSearchParameter.GADM_GID, gadmGid);
201  }
202
203  public void addGadmLevel0GidFilter(String gadm0) {
204    addParameter(OccurrenceSearchParameter.GADM_LEVEL_0_GID, gadm0);
205  }
206
207  public void addGadmLevel1GidFilter(String gadm1) {
208    addParameter(OccurrenceSearchParameter.GADM_LEVEL_1_GID, gadm1);
209  }
210
211  public void addGadmLevel2GidFilter(String gadm2) {
212    addParameter(OccurrenceSearchParameter.GADM_LEVEL_2_GID, gadm2);
213  }
214
215  public void addGadmLevel3GidFilter(String gadm3) {
216    addParameter(OccurrenceSearchParameter.GADM_LEVEL_3_GID, gadm3);
217  }
218
219  public void addGeologicalTimeFilter(String geologicalTimeConcept) {
220    addParameter(OccurrenceSearchParameter.GEOLOGICAL_TIME, geologicalTimeConcept);
221  }
222
223  public void addLithostratigraphyFilter(String lithostratigraphy) {
224    addParameter(OccurrenceSearchParameter.LITHOSTRATIGRAPHY, lithostratigraphy);
225  }
226
227  public void addBiostratigraphyFilter(String biostratigraphy) {
228    addParameter(OccurrenceSearchParameter.BIOSTRATIGRAPHY, biostratigraphy);
229  }
230
231  @Experimental
232  public void addInstitutionKeyFilter(String institutionKey) {
233    addParameter(OccurrenceSearchParameter.INSTITUTION_KEY, institutionKey);
234  }
235
236  @Experimental
237  public void addCollectionKeyFilter(String collectionKey) {
238    addParameter(OccurrenceSearchParameter.COLLECTION_KEY, collectionKey);
239  }
240
241  public void addDnaSequenceIDFilter(String dnaSequenceID) {
242    addParameter(OccurrenceSearchParameter.DNA_SEQUENCE_ID, dnaSequenceID);
243  }
244
245  @Experimental
246  public void addChecklistKeyFilter(String checklistKey) {
247    addParameter(OccurrenceSearchParameter.CHECKLIST_KEY, checklistKey);
248  }
249
250  @Experimental
251  public void addTaxonomicIssueFilter(String taxonomicIssue) {
252    addParameter(OccurrenceSearchParameter.TAXONOMIC_ISSUE, taxonomicIssue);
253  }
254}