package org.gbif.checklistbank.ws.client;
import org.gbif.api.model.checklistbank.NameUsageMatch;
import org.gbif.api.model.common.LinneanClassification;
import org.gbif.api.service.checklistbank.NameUsageMatchingService;
import org.gbif.api.vocabulary.Rank;
import org.gbif.checklistbank.ws.client.guice.NameUsageMatchWs;
import org.gbif.checklistbank.ws.util.SimpleParameterMap;
import javax.annotation.Nullable;
import javax.ws.rs.core.MediaType;
import com.google.inject.Inject;
import com.sun.jersey.api.client.WebResource;
/**
* Client-side implementation to the ChecklistUsageService.
*/
public class NameUsageMatchWsClient implements NameUsageMatchingService {
private final WebResource resource;
@Inject
public NameUsageMatchWsClient(@NameUsageMatchWs WebResource resource) {
this.resource = resource;
}
@Override
public NameUsageMatch match(String scientificName, @Nullable Rank rank,
@Nullable LinneanClassification classification, boolean strict, boolean verbose) {
SimpleParameterMap parameters = new SimpleParameterMap()
.param("name", scientificName)
.param("strict", Boolean.toString(strict))
.param("verbose", Boolean.toString(verbose));
if (classification != null) {
parameters.param("kingdom", classification.getKingdom())
.param("phylum", classification.getPhylum())
.param("class", classification.getClazz())
.param("order", classification.getOrder())
.param("family", classification.getFamily())
.param("genus", classification.getGenus())
.param("subgenus", classification.getSubgenus());
}
if (rank != null) {
parameters.param("rank", rank.name());
}
return resource.queryParams(parameters).type(MediaType.APPLICATION_JSON).get(NameUsageMatch.class);
}
@Override
public String toString() {
return "NameUsageMatchWsClient{" + resource + '}';
}
}