/* * Copyright 2014 Global Biodiversity Information Facility (GBIF) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.gbif.api.service.checklistbank; import org.gbif.api.model.checklistbank.NameUsage; import org.gbif.api.model.checklistbank.NameUsageMetrics; import org.gbif.api.model.checklistbank.ParsedName; import org.gbif.api.model.checklistbank.VerbatimNameUsage; import org.gbif.api.model.common.paging.Pageable; import org.gbif.api.model.common.paging.PagingResponse; import java.util.List; import java.util.Locale; import java.util.UUID; import javax.annotation.Nullable; /** * This is the public interface providing methods for retrieving name usages in general, no matter if nub or * checklist usage. * * @see NameUsage */ public interface NameUsageService { /** * Attempt to find a name usage matching the passed key. * The given Locale determines the name used for the NameUsage.vernacularName property * with null ignoring any vernacular name. * * @param taxonKey that identifies a name usage * @param locale the locale's language determines the vernacular name to use for a usage. * Use null to not load any common name * * @return a matching name usage, or null if no name usage found */ @Nullable NameUsage get(int taxonKey, @Nullable Locale locale); /** * Gets the parsed name representation of a given name usage. * * @param taxonKey that identifies a name usage * * @return the parsed name of the name usage or null if none can be found */ @Nullable ParsedName getParsedName(int taxonKey); /** * Gets the metrics for a given name usage. * * @param taxonKey that identifies a name usage * * @return the usage metrics of the name usage or null if none can be found */ @Nullable NameUsageMetrics getMetrics(int taxonKey); /** * Returns the verbatim data for the usage or null if its a generated usage having no verbatim data. * This happens for all nub usages and some other usages which have a non SOURCE origin. * * @return verbatim data for the usage or null */ @Nullable VerbatimNameUsage getVerbatim(int taxonKey); /** * Page through all usages across all or one checklists. * * @param datasetKey the optional checklist key to limit paging to. * @param sourceId the optional checklist key to limit paging to. * @param locale the locale's language determines the vernacular name to use for a usage * Use null to not load any common name * @param page paging parameters or null for first page with default size * * @return Paged list of usages */ PagingResponse<NameUsage> list(Locale locale, @Nullable UUID datasetKey, @Nullable String sourceId, @Nullable Pageable page); /** * Page through all usages with a given canonical name across all or some checklists. * * @param canonicalName the canonical name of a name usage. * @param locale the locale's language determines the vernacular name to use for a usage * Use null to not load any common name * @param datasetKey the optional list of checklist keys to limit paging to. * @param page paging parameters or null for first page with default size * * @return Paged list of usages matching the exact canonical name */ PagingResponse<NameUsage> listByCanonicalName(Locale locale, String canonicalName, @Nullable Pageable page, @Nullable UUID ... datasetKey); /** * Lists all accepted child name usages for a given parent. * * @param parentKey that identifies the parent name usage * @param locale the locale's language determines the vernacular name to use for a usage * Use null to not load any common name * @param page paging parameters or null for first page with default size * * @return Paged list of child usages. */ PagingResponse<NameUsage> listChildren(int parentKey, Locale locale, @Nullable Pageable page); /** * Lists the complete parental hierarchy of a name usage regardless of their ranks. * * @param taxonKey that identifies the name usage to show parents of * @param locale the locale's language determines the vernacular name to use for a usage * Use null to not load any common name * * @return List of parent usages with the last usage being the immediate parent */ List<NameUsage> listParents(int taxonKey, Locale locale); /** * Lists all related checklist usages for a given nub usage. * * @param taxonKey that identifies a nub usage * @param locale the locale's language determines the vernacular name to use for a usage * Use null to not load any common name * @param page paging parameters or null for first page with default size * @param datasetKey Optional list of checklist keys to restrict related usages to * * @return Paged list of related name usages. */ PagingResponse<NameUsage> listRelated(int taxonKey, Locale locale, @Nullable Pageable page, @Nullable UUID... datasetKey); /** * Lists all root usages for a given checklist, i.e. accepted usages without a parent. * To list the 8 root kingdoms of the nub use the respective datasetKey, * @see org.gbif.api.model.Constants#NUB_DATASET_KEY * * @param datasetKey the registered dataset key for the checklist in question * @param locale the locale's language determines the vernacular name to use for a usage * Use null to not load any common name * @param page paging parameters or null for first page with default size * * @return Paged list of root name usages. * */ PagingResponse<NameUsage> listRoot(UUID datasetKey, Locale locale, @Nullable Pageable page); /** * Lists all synonym name usages for a given accepted name usage. * * @param taxonKey that identifies any name usage * @param locale the locale's language determines the vernacular name to use for a usage * Use null to not load any common name * @param page paging parameters or null for first page with default size * * @return Paged list of synonym name usages. */ PagingResponse<NameUsage> listSynonyms(int taxonKey, Locale locale, @Nullable Pageable page); /** * Lists all combinations or names at different rank that are based on this basionym, i.e. a list of all name usages sharing the same basionym (homotypical group). * The basionym itself is not included in this list. * * @param basionymKey the name usage key of the basionym * @param locale the locale's language determines the vernacular name to use for a usage * Use null to not load any common name * * @return List of name usages sharing the same basionym. */ List<NameUsage> listCombinations(int basionymKey, Locale locale); }