X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/ece46ca854d14509da77410f2f09a7340149669d..6ab939077b75134f676560103ea6fac26c6fa3d8:/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonController.java diff --git a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonController.java b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonController.java index 6b8edc198d..2b7ffb3f33 100644 --- a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonController.java +++ b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonController.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* European Distributed Institute of Taxonomy * http://www.e-taxonomy.eu -* +* * The contents of this file are subject to the Mozilla Public License Version 1.1 * See LICENSE.TXT at the top of this package for the full license terms. */ @@ -11,9 +11,12 @@ package eu.etaxonomy.cdm.remote.controller; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Set; +import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -21,73 +24,160 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; +import eu.etaxonomy.cdm.api.service.INameService; +import eu.etaxonomy.cdm.api.service.IOccurrenceService; import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.cdm.model.taxon.TaxonBase; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.cdm.persistence.query.OrderHint; +import eu.etaxonomy.cdm.persistence.query.OrderHint.SortOrder; /** * TODO write controller documentation - * + * * @author a.kohlbecker * @date 20.07.2009 * */ @Controller -@RequestMapping(value = {"/*/taxon/*","/*/taxon/*/*", "/*/taxon/*/annotation"}) -public class TaxonController extends AnnotatableController +@RequestMapping(value = {"/taxon/{uuid}"}) +public class TaxonController extends BaseController { - public static final Logger logger = Logger.getLogger(TaxonController.class); - - public TaxonController(){ - super(); - setUuidParameterPattern("^/(?:[^/]+)/taxon/([^/?#&\\.]+).*"); - setInitializationStrategy(Arrays.asList(new String[]{"$","name.nomenclaturalReference"})); - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.remote.controller.GenericController#setService(eu.etaxonomy.cdm.api.service.IService) - */ - @Autowired - @Override - public void setService(ITaxonService service) { - this.service = service; - } - - - /** - * Get the set of accepted {@link Taxon} entities for a given - * {@link TaxonBase} entity identified by the {taxon-uuid}. - *

- * URI: /{datasource-name}/taxon/{taxon-uuid}/accepted - * - * @param request - * @param response - * @return a set on a list of {@link Taxon} entities which are initialized - * using the following initialization strategy: - * {@link #DEFAULT_INIT_STRATEGY} - * @throws IOException - */ - @RequestMapping(value = "/*/taxon/*/accepted", method = RequestMethod.GET) - public Set getAccepted(HttpServletRequest request, HttpServletResponse response) throws IOException { - logger.info("getAccepted() " + request.getServletPath()); - TaxonBase tb = doGet(request, response); - HashSet resultset = new HashSet(); - if(tb instanceof Taxon){ - //the taxon already is accepted - //FIXME take the current view into account once views are implemented!!! - resultset.add((Taxon)tb); - } else { - Synonym syn = (Synonym)tb; - resultset.addAll(syn.getAcceptedTaxa()); - //TODO init Synonyms - } - return resultset; - } - - - -} + public static final Logger logger = Logger.getLogger(TaxonController.class); + + @Autowired + private IOccurrenceService occurrenceService; + @Autowired + private INameService nameService; + @Autowired + private ITaxonService taxonService; + + + protected static final List TAXONNODE_INIT_STRATEGY = Arrays.asList(new String []{ + "taxonNodes" + }); + + public TaxonController(){ + super(); + setInitializationStrategy(Arrays.asList(new String[]{"$","name.nomenclaturalReference"})); + } + + + @Autowired + public void setService(ITaxonService service) { + this.service = service; + } + + + /** + * Get the set of accepted {@link Taxon} entities for a given + * {@link TaxonBase} entity identified by the {taxon-uuid}. + *

+ * URI: /{datasource-name}/taxon/{taxon-uuid}/accepted + * + * @param request + * @param response + * @return a set on a list of {@link Taxon} entities which are initialized + * using the following initialization strategy: + * {@link #DEFAULT_INIT_STRATEGY} + * @throws IOException + */ + @RequestMapping(value = "accepted", method = RequestMethod.GET) + public Set doGetAccepted( + @PathVariable("uuid") UUID uuid, + HttpServletRequest request, + HttpServletResponse response) throws IOException { + logger.info("getAccepted() " + request.getServletPath()); + TaxonBase tb = service.load(uuid); + HashSet resultset = new HashSet(); + if(tb instanceof Taxon){ + //the taxon already is accepted + //FIXME take the current view into account once views are implemented!!! + resultset.add((Taxon)tb); + } else { + Synonym syn = (Synonym)tb; + resultset.addAll(syn.getAcceptedTaxa()); + //TODO init Synonyms + } + return resultset; + } + + @RequestMapping(value = "taxonNodes", method = RequestMethod.GET) + public Set doGetTaxonNodes( + @PathVariable("uuid") UUID uuid, + HttpServletRequest request, + HttpServletResponse response) throws IOException { + TaxonBase tb = service.load(uuid, TAXONNODE_INIT_STRATEGY); + if(tb instanceof Taxon){ + return ((Taxon)tb).getTaxonNodes(); + } else { + HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response); + return null; + } + } + + + @RequestMapping(value = "specimensOrObservations", method = RequestMethod.GET) + public ModelAndView doListSpecimensOrObservations( + @PathVariable("uuid") UUID uuid, + HttpServletRequest request, + HttpServletResponse response) throws IOException { + logger.info("doListSpecimensOrObservations() - " + request.getServletPath()); + + ModelAndView mv = new ModelAndView(); + + TaxonBase tb = service.load(uuid); + + List orderHints = new ArrayList(); + orderHints.add(new OrderHint("titleCache", SortOrder.DESCENDING)); + + if(tb instanceof Taxon){ + List specimensOrObersvations = occurrenceService.listByAssociatedTaxon(null, null, (Taxon)tb, null, null, null, orderHints, null); + mv.addObject(specimensOrObersvations); + } else { + HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response); + return null; + } + + return mv; + } + + @RequestMapping(value = "taggedName", method = RequestMethod.GET) + public ModelAndView doGetTaggedName( + @PathVariable("uuid") UUID uuid, + HttpServletRequest request, + HttpServletResponse response) throws IOException { + logger.info("doGetDescriptionElementsByType() - " + request.getServletPath()); + + ModelAndView mv = new ModelAndView(); + + TaxonBase tb = service.load(uuid, Arrays.asList(new String[] {"name"})); + mv.addObject(nameService.getTaggedName(tb.getName().getUuid())); + return mv; + } + + /** + * FIXME change @RequestMapping to /taxon/findBestMatchingTaxon and also move into TaxonListController + */ + @RequestMapping(value = "/bestMatchingTaxon/{taxonName}", method = RequestMethod.GET) + public TaxonBase doFindBestMatchingTaxon( + @PathVariable("taxonName") String taxonName, + HttpServletRequest request, + HttpServletResponse response)throws IOException { + + Taxon bestMatchingTaxon = taxonService.findBestMatchingTaxon(taxonName); + + return bestMatchingTaxon; + + + } + +} \ No newline at end of file