merging /branches/cdmlib/SPRINT-Chichorieae1/ to trunk
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / TaxonController.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.cdm.remote.controller;
12
13 import java.io.IOException;
14 import java.util.Arrays;
15 import java.util.HashSet;
16 import java.util.List;
17 import java.util.Set;
18 import java.util.UUID;
19
20 import javax.servlet.http.HttpServletRequest;
21 import javax.servlet.http.HttpServletResponse;
22
23 import org.apache.log4j.Logger;
24 import org.springframework.beans.factory.annotation.Autowired;
25 import org.springframework.stereotype.Controller;
26 import org.springframework.web.bind.WebDataBinder;
27 import org.springframework.web.bind.annotation.InitBinder;
28 import org.springframework.web.bind.annotation.PathVariable;
29 import org.springframework.web.bind.annotation.RequestMapping;
30 import org.springframework.web.bind.annotation.RequestMethod;
31
32 import eu.etaxonomy.cdm.api.service.ITaxonService;
33 import eu.etaxonomy.cdm.model.taxon.Synonym;
34 import eu.etaxonomy.cdm.model.taxon.Taxon;
35 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
36 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
37 import eu.etaxonomy.cdm.remote.editor.UUIDPropertyEditor;
38
39 /**
40 * TODO write controller documentation
41 *
42 * @author a.kohlbecker
43 * @date 20.07.2009
44 *
45 */
46 @Controller
47 @RequestMapping(value = {"/taxon/*", "/taxon/{uuid}"})
48 public class TaxonController extends AnnotatableController<TaxonBase, ITaxonService>
49 {
50 public static final Logger logger = Logger.getLogger(TaxonController.class);
51
52 protected static final List<String> TAXONNODE_INIT_STRATEGY = Arrays.asList(new String []{
53 "taxonNodes"
54 });
55
56 public TaxonController(){
57 super();
58 setUuidParameterPattern("^/taxon/([^/?#&\\.]+).*");
59 setInitializationStrategy(Arrays.asList(new String[]{"$","name.nomenclaturalReference"}));
60 }
61
62 /* (non-Javadoc)
63 * @see eu.etaxonomy.cdm.remote.controller.GenericController#setService(eu.etaxonomy.cdm.api.service.IService)
64 */
65 @Autowired
66 @Override
67 public void setService(ITaxonService service) {
68 this.service = service;
69 }
70
71
72 /**
73 * Get the set of accepted {@link Taxon} entities for a given
74 * {@link TaxonBase} entity identified by the <code>{taxon-uuid}</code>.
75 * <p>
76 * URI: <b>&#x002F;{datasource-name}&#x002F;taxon&#x002F;{taxon-uuid}&#x002F;accepted</b>
77 *
78 * @param request
79 * @param response
80 * @return a set on a list of {@link Taxon} entities which are initialized
81 * using the following initialization strategy:
82 * {@link #DEFAULT_INIT_STRATEGY}
83 * @throws IOException
84 */
85 @RequestMapping(value = "{uuid}/accepted", method = RequestMethod.GET)
86 public Set<TaxonBase> doGetAccepted(
87 @PathVariable("uuid") UUID uuid,
88 HttpServletRequest request,
89 HttpServletResponse response) throws IOException {
90 logger.info("getAccepted() " + request.getServletPath());
91 TaxonBase tb = service.load(uuid);
92 HashSet<TaxonBase> resultset = new HashSet<TaxonBase>();
93 if(tb instanceof Taxon){
94 //the taxon already is accepted
95 //FIXME take the current view into account once views are implemented!!!
96 resultset.add((Taxon)tb);
97 } else {
98 Synonym syn = (Synonym)tb;
99 resultset.addAll(syn.getAcceptedTaxa());
100 //TODO init Synonyms
101 }
102 return resultset;
103 }
104
105 @RequestMapping(value = "{uuid}/taxonNodes", method = RequestMethod.GET)
106 public Set<TaxonNode> doGetTaxonNodes(
107 @PathVariable("uuid") UUID uuid,
108 HttpServletRequest request,
109 HttpServletResponse response) throws IOException {
110 TaxonBase tb = service.load(uuid, TAXONNODE_INIT_STRATEGY);
111 if(tb instanceof Taxon){
112 return ((Taxon)tb).getTaxonNodes();
113 } else {
114 HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response);
115 return null;
116 }
117 }
118
119
120 }