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 org.gbif.api.model.common.search.SearchParameter;
017import org.gbif.api.util.IsoDateInterval;
018import org.gbif.api.vocabulary.BasisOfRecord;
019import org.gbif.api.vocabulary.Continent;
020import org.gbif.api.vocabulary.Country;
021import org.gbif.api.vocabulary.EndpointType;
022import org.gbif.api.vocabulary.GbifRegion;
023import org.gbif.api.vocabulary.License;
024import org.gbif.api.vocabulary.MediaType;
025import org.gbif.api.vocabulary.OccurrenceIssue;
026import org.gbif.api.vocabulary.OccurrenceStatus;
027import org.gbif.api.vocabulary.Sex;
028import org.gbif.api.vocabulary.TaxonomicStatus;
029import org.gbif.api.vocabulary.TypeStatus;
030
031import java.util.Date;
032import java.util.UUID;
033
034/**
035 * Supported query parameters by the occurrence search and download service.
036 * For download predicates only the numerical types support comparisons other than equals.
037 */
038public enum OccurrenceSearchParameter implements SearchParameter {
039
040  /**
041   * The dataset key as a UUID.
042   */
043  DATASET_KEY(UUID.class),
044
045  /**
046   * The 4 digit year. A year of 98 will be 98 common era, not 1998.
047   * This parameter accepts comma separated range values, e.g.:
048   * <dl>
049   * <dt>*,1810</dt>
050   * <dd>Found before or equal to 1810</dd>
051   * <dt>1848,1933</dt>
052   * <dd>Year between 1848 and 1933</dd>
053   * </dl>
054   */
055  YEAR(Integer.class),
056
057  /**
058   * The month of the year, starting with 1 for January.
059   * A month query can be used to retrieve seasonal records when used without a year or a year range.
060   * This parameter accepts comma separated range values, e.g.:
061   * <dl>
062   * <dt>4,8</dt>
063   * <dd>Month between April and August</dd>
064   * </dl>
065   */
066  MONTH(Integer.class),
067
068  /**
069   * The earliest integer day of the year on which the event occurred (1 for January 1, 365 for December 31, except in a
070   * leap year, in which case it is 366).
071   */
072  START_DAY_OF_YEAR(Integer.class),
073
074  /**
075   * The latest integer day of the year on which the event occurred (1 for January 1, 365 for December 31, except in a
076   * leap year, in which case it is 366).
077   */
078  END_DAY_OF_YEAR(Integer.class),
079
080  /**
081   * Event date (date the occurrence was recorded) in ISO 8601 formats:yyyy, yyyy-MM, yyyy-MM-dd and MM-dd.
082   * This parameter accepts comma separated range values, examples of valid ranges are:
083   * <dl>
084   * <dt>2001-02-11,2010-01-10</dt>
085   * <dd>Dates between 2001-02-11 and 2010-01-10</dd>
086   * <dt>2001-02,2010-01</dt>
087   * <dd>Dates between first day of 2001-02 and last day of 2010-01</dd>
088   * <dt>2001,2010</dt>
089   * <dd>Dates between first day of 2001 and last day of 2010</dd>
090   * <dt>2001,2010-01</dt>
091   * <dd>Dates between first day of 2001 and last day of 2010-01</dd>
092   * <dt>2001-01-10,2010</dt>
093   * <dd>Dates between 2001-01-10 and last day of 2010</dd>
094   * <dt>2001-01-10,*</dt>
095   * <dd>Dates after 2001-01-10</dd>
096   * <dt>*,2001-01-10</dt>
097   * <dd>Dates before 2001-01-10</dd>
098   * <dt>*</dt>
099   * <dd>all dates</dd>
100   * </dl>
101   */
102  EVENT_DATE(IsoDateInterval.class),
103
104  /**
105   * Lower limit for the range of the event date (date the occurrence was recorded).
106   *
107   * Included for backward compatibility as it mimicks the previous search behaviour:
108   * https://github.com/gbif/occurrence/issues/346
109   */
110  @Deprecated
111  EVENT_DATE_GTE(Date.class),
112
113  /**
114   * An identifier for the set of information associated with an Event (something that occurs at a place and time).
115   * Maybe a global unique identifier or an identifier specific to the data set.
116   */
117  EVENT_ID(String.class),
118
119  /**
120   * An identifier for the broader Event that groups this and potentially other Events.
121   */
122  PARENT_EVENT_ID(String.class),
123
124  /**
125   * The name of, reference to, or description of the method or protocol used during an Event.
126   */
127  SAMPLING_PROTOCOL(String.class),
128
129  /**
130   * A list (concatenated and separated) of previous assignments of names to the organism.
131   */
132  PREVIOUS_IDENTIFICATIONS(String.class),
133
134  /**
135   * Last interpreted date in ISO 8601 formats:yyyy, yyyy-MM, yyyy-MM-dd and MM-dd.
136   * This parameter accepts comma separated range values, examples of valid ranges are:
137   * <dl>
138   * <dt>2001-02-11,2010-01-10</dt>
139   * <dd>Dates between 2001-02-11 and 2010-01-10</dd>
140   * <dt>2001-02,2010-01</dt>
141   * <dd>Dates between first day of 2001-02 and last day of 2010-01</dd>
142   * <dt>2001,2010</dt>
143   * <dd>Dates between first day of 2001 and last day of 2010</dd>
144   * <dt>2001,2010-01</dt>
145   * <dd>Dates between first day of 2001 and last day of 2010-01</dd>
146   * <dt>2001-01-10,2010</dt>
147   * <dd>Dates between 2001-01-10 and last day of 2010</dd>
148   * <dt>2001-01-10,*</dt>
149   * <dd>Dates after 2001-01-10</dd>
150   * <dt>*,2001-01-10</dt>
151   * <dd>Dates before 2001-01-10</dd>
152   * <dt>*</dt>
153   * <dd>all dates</dd>
154   * </dl>
155   */
156  LAST_INTERPRETED(Date.class),
157
158
159  /**
160   * Modified date in ISO 8601 formats:yyyy, yyyy-MM, yyyy-MM-dd and MM-dd.
161   * This parameter accepts comma separated range values, examples of valid ranges are:
162   * <dl>
163   * <dt>2001-02-11,2010-01-10</dt>
164   * <dd>Dates between 2001-02-11 and 2010-01-10</dd>
165   * <dt>2001-02,2010-01</dt>
166   * <dd>Dates between first day of 2001-02 and last day of 2010-01</dd>
167   * <dt>2001,2010</dt>
168   * <dd>Dates between first day of 2001 and last day of 2010</dd>
169   * <dt>2001,2010-01</dt>
170   * <dd>Dates between first day of 2001 and last day of 2010-01</dd>
171   * <dt>2001-01-10,2010</dt>
172   * <dd>Dates between 2001-01-10 and last day of 2010</dd>
173   * <dt>2001-01-10,*</dt>
174   * <dd>Dates after 2001-01-10</dd>
175   * <dt>*,2001-01-10</dt>
176   * <dd>Dates before 2001-01-10</dd>
177   * <dt>*</dt>
178   * <dd>all dates</dd>
179   * </dl>
180   */
181  MODIFIED(Date.class),
182
183  /**
184   * Latitude in decimals between -90 and 90 based on WGS 84.
185   */
186  DECIMAL_LATITUDE(Double.class),
187
188  /**
189   * Longitude in decimals between -180 and 180 based on WGS 84.
190   */
191  DECIMAL_LONGITUDE(Double.class),
192
193  /**
194   * The uncertainty of the coordinate in meters.
195   * This parameter accepts comma separated range values, e.g.:
196   * <dl>
197   * <dt>*,100</dt>
198   * <dd>Uncertainty below or equals 100m</dd>
199   * <dt>10000,*</dt>
200   * <dd>Uncertainty above or equals 10,000m</dd>
201   * <dt>1000,5000</dt>
202   * <dd>Uncertainty between or equals 1000m and 5000m
203   * </dd>
204   * </dl>
205   */
206  COORDINATE_UNCERTAINTY_IN_METERS(Double.class),
207
208  /**
209   * Country the occurrence was recorded in.
210   */
211  COUNTRY(Country.class),
212
213  /**
214   * GBIF region based on country
215   */
216  GBIF_REGION(GbifRegion.class),
217
218  /**
219   * Continent the occurrence was recorded in.
220   */
221  CONTINENT(Continent.class),
222
223  /**
224   * The country of the organization that publishes the dataset the occurrence belongs to.
225   */
226  PUBLISHING_COUNTRY(Country.class),
227
228  /**
229   * GBIF region based on publishibg country
230   */
231  PUBLISHED_BY_GBIF_REGION(GbifRegion.class),
232
233  /**
234   * Altitude/elevation in meters above sea level.
235   * This parameter accepts comma separated range values, e.g.:
236   * <dl>
237   * <dt>*,100</dt>
238   * <dd>Altitude below or equals 100m</dd>
239   * <dt>100,*</dt>
240   * <dd>Altitude above or equals 100m</dd>
241   * <dt>-2,8.8</dt>
242   * <dd>Altitude between or equals -2m and 8.8m</dd>
243   * </dl>
244   */
245  ELEVATION(Double.class),
246
247  /**
248   * Depth in meters relative to altitude. For example 10 meters below a lake surface with given altitude.
249   * This parameter accepts comma separated range values, e.g.:
250   * <dl>
251   * <dt>*,10</dt>
252   * <dd>Depth below or equals 10m</dd>
253   * <dt>100,*</dt>
254   * <dd>Depth above or equals 100m</dd>
255   * <dt>12.1,28.8</dt>
256   * <dd>Depth between or equals 12.1m and 28.8m</dd>
257   * </dl>
258   */
259  DEPTH(Double.class),
260
261  /**
262   * An identifier of any form assigned by the source to identify the institution
263   * the record belongs to. Not guaranteed to be unique.
264   */
265  INSTITUTION_CODE(String.class),
266
267  /**
268   * An identifier of any form assigned by the source to identify the physical collection or digital dataset
269   * uniquely within the context of an institution.
270   */
271  COLLECTION_CODE(String.class),
272
273  /**
274   * An identifier of any form assigned by the source within a physical collection or digital dataset for the record
275   * which may not be unique, but should be fairly unique in combination with the institution and collection code.
276   */
277  CATALOG_NUMBER(String.class),
278
279  /**
280   * The person who recorded the occurrence.
281   */
282  RECORDED_BY(String.class),
283
284  /**
285   * The person who identified the occurrence.
286   */
287  IDENTIFIED_BY(String.class),
288
289  /**
290   * An identifier given to the Occurrence at the time it was recorded.
291   */
292  RECORD_NUMBER(String.class),
293
294  /**
295   * A basis of record enumeration value.
296   */
297  BASIS_OF_RECORD(BasisOfRecord.class),
298
299  /**
300   * The sex of the biological individual(s) represented in the occurrence.
301   */
302  SEX(Sex.class),
303
304  /**
305   * Presents of associated sequences or an extension
306   */
307  IS_SEQUENCED(Boolean.class),
308
309  /**
310   * A taxon key from the GBIF backbone. All included and synonym taxa are included in the search, so a search for
311   * aves with taxonKey=212 will match all birds, no matter which species.
312   */
313  TAXON_KEY(Integer.class),
314
315  /**
316   * A taxon key from the GBIF backbone for the name usage of the currently valid or accepted taxon.
317   */
318  ACCEPTED_TAXON_KEY(Integer.class),
319
320  /**
321   * A kingdom key from the GBIF backbone.
322   */
323  KINGDOM_KEY(Integer.class),
324
325  /**
326   * A phylum key from the GBIF backbone.
327   */
328  PHYLUM_KEY(Integer.class),
329
330  /**
331   * A class key from the GBIF backbone.
332   */
333  CLASS_KEY(Integer.class),
334
335  /**
336   * A order key from the GBIF backbone.
337   */
338  ORDER_KEY(Integer.class),
339
340  /**
341   * A family key from the GBIF backbone.
342   */
343  FAMILY_KEY(Integer.class),
344
345  /**
346   * A genus key from the GBIF backbone.
347   */
348  GENUS_KEY(Integer.class),
349
350  /**
351   * A subgenus key from the GBIF backbone.
352   */
353  SUBGENUS_KEY(Integer.class),
354
355  /**
356   * A species key from the GBIF backbone.
357   */
358  SPECIES_KEY(Integer.class),
359
360  /**
361   * Searches the interpreted, full scientific name of the occurrence.
362   */
363  SCIENTIFIC_NAME(String.class),
364
365  /**
366   * Scientific name as provided byt the source.
367   */
368  VERBATIM_SCIENTIFIC_NAME(String.class),
369
370  /**
371   * Verbatim identifier for the set of taxon information. Maybe a global unique identifier or an identifier specific to
372   * the data set.
373   */
374  TAXON_ID(String.class),
375
376  /**
377   * An identifier for the taxonomic concept to which the record refers - not for the nomenclatural details of a taxon.
378   */
379  TAXON_CONCEPT_ID(String.class),
380
381  /**
382   * The status of the use of the  GBIF Backbone taxonKey.
383   */
384  TAXONOMIC_STATUS(TaxonomicStatus.class),
385
386  /**
387   * Searches for occurrence records which contain a value on its coordinate fields (latitude and longitude).
388   * HAS_COORDINATE=true searches for occurrence records with a coordinate value.
389   * HAS_COORDINATE=false searches for occurrence records without a coordinate value.
390   */
391  HAS_COORDINATE(Boolean.class),
392
393  /**
394   * Geometry in <a href="https://en.wikipedia.org/wiki/Well-known_text">Well Known Text</a> (WKT) format.
395   * E.g.: POLYGON ((30.0 10.0, 10.12 20.23, 20 40, 40 40, 30 10)).
396   * Multi geometries like MULTIPOLYGON are not supported and multiple parameters should be used instead.
397   * Valid geometries are:
398   * <ul>
399   * <li>POINT</li>
400   * <li>LINESTRING</li>
401   * <li>POLYGON</li>
402   * <li>LINEARRING</li>
403   * </ul>
404   */
405  GEOMETRY(String.class),
406
407  /**
408   * Use in combination of LATITUDE and LONGITUDE parameters matches within a given distance.
409   * E.g.: geo_distance=100m,40,90 geo_distance=100km,40,90 geo_distance=100mi,40,90.
410   * See supported units in {@link org.gbif.api.model.occurrence.geo.DistanceUnit}.
411   */
412  GEO_DISTANCE(String.class),
413
414  /**
415   * The distance from a known centroid, e.g. a country centroid.
416   */
417  DISTANCE_FROM_CENTROID_IN_METERS(Double.class),
418
419  /**
420   * Includes/excludes occurrence records which contain geospatial issues for their coordinate.
421   * See {@link org.gbif.api.vocabulary.OccurrenceIssue#GEOSPATIAL_RULES}
422   * HAS_GEOSPATIAL_ISSUE=true include records with spatial issues.
423   * HAS_GEOSPATIAL_ISSUE=false exclude records with spatial issues.
424   * The absence of this parameter returns any record with or without spatial issues.
425   */
426  HAS_GEOSPATIAL_ISSUE(Boolean.class),
427
428  /**
429   * Searches occurrence for those that have a specific issue.
430   */
431  ISSUE(OccurrenceIssue.class),
432
433  /**
434   * Nomenclatural type (type status, typified scientific name, publication) applied to the subject.
435   */
436  TYPE_STATUS(TypeStatus.class),
437
438  /**
439   * The kind of media object.
440   * Recommended terms from the DCMI Type Vocabulary are StillImage, Sound or MovingImage for GBIF to index and show the
441   * media files.
442   */
443  MEDIA_TYPE(MediaType.class),
444
445  /**
446   *  An identifier for the Occurrence (as opposed to a particular digital record of the occurrence).
447   *  In the absence of a persistent global unique identifier, construct one from a combination of identifiers in the
448   *  record that will most closely make the occurrenceID globally unique.
449   */
450  OCCURRENCE_ID(String.class),
451
452  /**
453   * The process by which the biological individual(s) represented in the Occurrence became established at the location.
454   */
455  ESTABLISHMENT_MEANS(String.class),
456
457  /**
458   * Provides the controlled vocabulary for information about degree to which an Organism survives, reproduces, and expands its range at the given place and time.
459   */
460  DEGREE_OF_ESTABLISHMENT(String.class),
461
462  /**
463   * Provides the controlled vocabulary for information about the process by which an Organism came to be in a given place at a given time.
464   * The pathway of an organism or organisms have been introduced to a given place and time.
465   */
466  PATHWAY(String.class),
467
468  /**
469   * Searches for records whose publishing country is different to the country where the record was recorded in.
470   */
471  REPATRIATED(Boolean.class),
472
473  /**
474   * An identifier for the Organism instance (as opposed to a particular digital record of the Organism).
475   * May be a globally unique identifier or an identifier specific to the data set.
476   */
477  ORGANISM_ID(String.class),
478
479  /**
480   * The name of the next smaller administrative region than country in which the Location occurs.
481   */
482  STATE_PROVINCE(String.class),
483
484  /**
485   * The name of the water body in which the Location occurs.
486   */
487  WATER_BODY(String.class),
488
489  /**
490   * The specific description of the place.
491   * It may contain information modified from the original to correct perceived errors or standardize the description.
492   */
493  LOCALITY(String.class),
494
495  /**
496   * Protocol used to provide the occurrence record.
497   */
498  PROTOCOL(EndpointType.class),
499
500  /**
501   * The license applied to the dataset.
502   */
503  LICENSE(License.class),
504
505  /**
506   * The owning organizations uuid key.
507   */
508  PUBLISHING_ORG(UUID.class),
509
510  /**
511   * The GBIF network that the publishing organisation belongs to.
512   */
513  NETWORK_KEY(UUID.class),
514
515  /**
516   * The technical installation key that hosts/publishes this record.
517   */
518  INSTALLATION_KEY(UUID.class),
519
520  /**
521   * The organization key of the installation that hosts this record.
522   */
523  HOSTING_ORGANIZATION_KEY(UUID.class),
524
525  /**
526   * Crawl attempt that harvested this record.
527   */
528  CRAWL_ID(Integer.class),
529
530  /**
531   * GBIF ProjectId.
532   */
533  PROJECT_ID(String.class),
534
535  /**
536   * GBIF Programme Acronym.
537   */
538  PROGRAMME(String.class),
539
540  /**
541   * A number or enumeration value for the quantity of organisms.
542   */
543  ORGANISM_QUANTITY(Double.class),
544
545  /**
546   * The type of quantification system used for the quantity of organisms.
547   */
548  ORGANISM_QUANTITY_TYPE(String.class),
549
550  /**
551   * The unit of measurement of the size (time duration, length, area, or volume) of a sample in a sampling event.
552   */
553  SAMPLE_SIZE_UNIT(String.class),
554
555  /**
556   * A numeric value for a measurement of the size (time duration, length, area, or volume) of a sample in a sampling event.
557   */
558  SAMPLE_SIZE_VALUE(Double.class),
559
560  /**
561   * Calculated organismQuantity relative to the sampleSizeValue i.e. -> organismQuantity / sampleSizeValue.
562   */
563  RELATIVE_ORGANISM_QUANTITY(Double.class),
564
565  /**
566   * Collection key. It links to the collection to which this record belongs.
567   */
568  COLLECTION_KEY(String.class),
569
570  /**
571   * Institution key. It links to the institution that maintains, recorded or digitized  this record.
572   */
573  INSTITUTION_KEY(String.class),
574
575  /**
576   * Agent identifiers from GbifTerm.recordedByID
577   */
578  RECORDED_BY_ID(String.class),
579
580  /**
581   * Agent identifiers from GbifTerm.identifiedByID
582   */
583  IDENTIFIED_BY_ID(String.class),
584
585  /**
586   * An occurrence status enumeration value.
587   */
588  OCCURRENCE_STATUS(OccurrenceStatus.class),
589
590  /**
591   * A <a href="https://gadm.org">GADM</a> identifier at any level.
592   */
593  GADM_GID(String.class),
594
595  /**
596   * A <a href="https://gadm.org">GADM</a> country, island or territory (level zero) identifier.
597   */
598  GADM_LEVEL_0_GID(String.class),
599
600  /**
601   * A <a href="https://gadm.org">GADM</a> first-level identifier.
602   */
603  GADM_LEVEL_1_GID(String.class),
604
605  /**
606   * A <a href="https://gadm.org">GADM</a> second-level identifier.
607   */
608  GADM_LEVEL_2_GID(String.class),
609
610  /**
611   * A <a href="https://gadm.org">GADM</a> third-level identifier.
612   */
613  GADM_LEVEL_3_GID(String.class),
614
615  /**
616   * The life stage of an occurrence.
617   */
618  LIFE_STAGE(String.class),
619
620  /**
621   * Searches for occurrences that are clustered.
622   */
623  IS_IN_CLUSTER(Boolean.class),
624
625  /**
626   * Searches for occurrences that have a particular DwC-A extension.
627   */
628  DWCA_EXTENSION(String.class),
629
630  /**
631   * Searches for occurrences that have a IUCN Red List Category.
632   */
633  IUCN_RED_LIST_CATEGORY(String.class),
634
635  /**
636   * The dwc dataset id.
637   */
638  DATASET_ID(String.class),
639
640  /**
641   * The dwc dataset name.
642   */
643  DATASET_NAME(String.class),
644
645  /**
646   * Other catalog numbers associated to an occurrence.
647   */
648  OTHER_CATALOG_NUMBERS(String.class),
649
650  /**
651   * Preparations methods of an occurrence.
652   */
653  PREPARATIONS(String.class),
654
655  /**
656   * The name of the island on or near which the location occurs.
657   */
658  ISLAND(String.class),
659
660  /**
661   * The name of the island group in which the location occurs.
662   */
663  ISLAND_GROUP(String.class),
664
665  /**
666   * A list (concatenated and separated) of names of people, groups, or organizations who determined the georeference
667   * (spatial representation) for the location.
668   */
669  GEOREFERENCED_BY(String.class),
670
671  /**
672   * A list (concatenated and separated) of geographic names less specific than the information captured in the locality
673   * term.
674   */
675  HIGHER_GEOGRAPHY(String.class),
676
677  /**
678   *    An identifier given to the event in the field. Often serves as a link between field notes and the event.
679   */
680  FIELD_NUMBER(String.class),
681
682  /**
683   * The full name of the earliest possible geochronologic eon or lowest chrono-stratigraphic eonothem or the informal
684   * name ("Precambrian") attributable to the stratigraphic horizon from which the MaterialEntity was collected.
685   */
686  EARLIEST_EON_OR_LOWEST_EONOTHEM(String.class),
687
688  /**
689   * The full name of the latest possible geochronologic eon or highest chrono-stratigraphic eonothem or the informal
690   * name ("Precambrian") attributable to the stratigraphic horizon from which the MaterialEntity was collected.
691   */
692  LATEST_EON_OR_HIGHEST_EONOTHEM(String.class),
693
694  /**
695   * The full name of the earliest possible geochronologic era or lowest chronostratigraphic erathem attributable to the
696   * stratigraphic horizon from which the MaterialEntity was collected.
697   */
698  EARLIEST_ERA_OR_LOWEST_ERATHEM(String.class),
699
700  /**
701   * The full name of the latest possible geochronologic era or highest chronostratigraphic erathem attributable to the
702   * stratigraphic horizon from which the MaterialEntity was collected.
703   */
704  LATEST_ERA_OR_HIGHEST_ERATHEM(String.class),
705
706  /**
707   * The full name of the earliest possible geochronologic period or lowest chronostratigraphic system attributable to
708   * the stratigraphic horizon from which the MaterialEntity was collected.
709   */
710  EARLIEST_PERIOD_OR_LOWEST_SYSTEM(String.class),
711
712  /**
713   * The full name of the latest possible geochronologic period or highest chronostratigraphic system attributable to
714   * the stratigraphic horizon from which the MaterialEntity was collected.
715   */
716  LATEST_PERIOD_OR_HIGHEST_SYSTEM(String.class),
717
718  /**
719   * The full name of the earliest possible geochronologic epoch or lowest chronostratigraphic series attributable to
720   * the stratigraphic horizon from which the MaterialEntity was collected.
721   */
722  EARLIEST_EPOCH_OR_LOWEST_SERIES(String.class),
723
724  /**
725   * The full name of the latest possible geochronologic epoch or highest chronostratigraphic series attributable to the
726   * stratigraphic horizon from which the MaterialEntity was collected.
727   */
728  LATEST_EPOCH_OR_HIGHEST_SERIES(String.class),
729
730  /**
731   * The full name of the earliest possible geochronologic age or lowest chronostratigraphic stage attributable to the
732   * stratigraphic horizon from which the MaterialEntity was collected.
733   */
734  EARLIEST_AGE_OR_LOWEST_STAGE(String.class),
735
736  /**
737   * The full name of the latest possible geochronologic age or highest chronostratigraphic stage attributable to the
738   * stratigraphic horizon from which the MaterialEntity was collected.
739   */
740  LATEST_AGE_OR_HIGHEST_STAGE(String.class),
741
742  /**
743   * The full name of the lowest possible geological biostratigraphic zone of the stratigraphic horizon from which the
744   * MaterialEntity was collected.
745   */
746  LOWEST_BIOSTRATIGRAPHIC_ZONE(String.class),
747
748  /**
749   * The full name of the highest possible geological biostratigraphic zone of the stratigraphic horizon from which the
750   * MaterialEntity was collected.
751   */
752  HIGHEST_BIOSTRATIGRAPHIC_ZONE(String.class),
753
754  /**
755   * The full name of the lithostratigraphic group from which the MaterialEntity was collected.
756   */
757  GROUP(String.class),
758
759  /**
760   * The full name of the lithostratigraphic formation from which the MaterialEntity was collected.
761   */
762  FORMATION(String.class),
763
764  /**
765   * The full name of the lithostratigraphic member from which the MaterialEntity was collected.
766   */
767  MEMBER(String.class),
768
769  /**
770   * The full name of the lithostratigraphic bed from which the MaterialEntity was collected.
771   */
772  BED(String.class),
773
774  /**
775   * A list (concatenated and separated) of identifiers (publication, global unique identifier, URI) of
776   * genetic sequence information associated with the material entity.
777   */
778  ASSOCIATED_SEQUENCES(String.class),
779
780  /**
781   * Unique GBIF key for the occurrence.
782   */
783  GBIF_ID(String.class);
784
785  private final Class<?> type;
786
787  OccurrenceSearchParameter(Class<?> type) {
788    this.type = type;
789  }
790
791  /**
792   * @return the data type expected for the value of the respective search parameter
793   */
794  @Override
795  public Class<?> type() {
796    return type;
797  }
798}