merging /branches/cdmlib/SPRINT-Chichorieae1/ to trunk
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / TaxonController.java
index 6b8edc198d633473f86049a399741d15e444b12c..db31ff505bc55a0bce7856cb97278068dded6874 100644 (file)
@@ -13,7 +13,9 @@ package eu.etaxonomy.cdm.remote.controller;
 import java.io.IOException;\r
 import java.util.Arrays;\r
 import java.util.HashSet;\r
+import java.util.List;\r
 import java.util.Set;\r
+import java.util.UUID;\r
 \r
 import javax.servlet.http.HttpServletRequest;\r
 import javax.servlet.http.HttpServletResponse;\r
@@ -21,6 +23,9 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.log4j.Logger;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Controller;\r
+import org.springframework.web.bind.WebDataBinder;\r
+import org.springframework.web.bind.annotation.InitBinder;\r
+import org.springframework.web.bind.annotation.PathVariable;\r
 import org.springframework.web.bind.annotation.RequestMapping;\r
 import org.springframework.web.bind.annotation.RequestMethod;\r
 \r
@@ -28,6 +33,8 @@ import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.cdm.remote.editor.UUIDPropertyEditor;\r
 \r
 /**\r
  * TODO write controller documentation\r
@@ -37,14 +44,18 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase;
  *\r
  */\r
 @Controller\r
-@RequestMapping(value = {"/*/taxon/*","/*/taxon/*/*", "/*/taxon/*/annotation"})\r
+@RequestMapping(value = {"/taxon/*", "/taxon/{uuid}"})\r
 public class TaxonController extends AnnotatableController<TaxonBase, ITaxonService>\r
 {\r
        public static final Logger logger = Logger.getLogger(TaxonController.class);\r
        \r
+       protected static final List<String> TAXONNODE_INIT_STRATEGY = Arrays.asList(new String []{\r
+                       "taxonNodes"\r
+       });\r
+       \r
        public TaxonController(){\r
                super();\r
-               setUuidParameterPattern("^/(?:[^/]+)/taxon/([^/?#&\\.]+).*");\r
+               setUuidParameterPattern("^/taxon/([^/?#&\\.]+).*");\r
                setInitializationStrategy(Arrays.asList(new String[]{"$","name.nomenclaturalReference"}));\r
        }\r
        \r
@@ -71,10 +82,13 @@ public class TaxonController extends AnnotatableController<TaxonBase, ITaxonServ
         *         {@link #DEFAULT_INIT_STRATEGY}\r
         * @throws IOException\r
         */\r
-       @RequestMapping(value = "/*/taxon/*/accepted", method = RequestMethod.GET)\r
-       public Set<TaxonBase> getAccepted(HttpServletRequest request, HttpServletResponse response) throws IOException {\r
+       @RequestMapping(value = "{uuid}/accepted", method = RequestMethod.GET)\r
+       public Set<TaxonBase> doGetAccepted(\r
+                       @PathVariable("uuid") UUID uuid,\r
+                       HttpServletRequest request, \r
+                       HttpServletResponse response) throws IOException {\r
                logger.info("getAccepted() " + request.getServletPath());\r
-               TaxonBase tb = doGet(request, response);\r
+               TaxonBase tb = service.load(uuid);\r
                HashSet<TaxonBase> resultset = new HashSet<TaxonBase>();\r
                if(tb instanceof Taxon){\r
                        //the taxon already is accepted\r
@@ -87,7 +101,20 @@ public class TaxonController extends AnnotatableController<TaxonBase, ITaxonServ
                }\r
                return resultset;\r
        }\r
+       \r
+       @RequestMapping(value = "{uuid}/taxonNodes", method = RequestMethod.GET)\r
+       public Set<TaxonNode>  doGetTaxonNodes(\r
+                       @PathVariable("uuid") UUID uuid,\r
+                       HttpServletRequest request, \r
+                       HttpServletResponse response) throws IOException {\r
+               TaxonBase tb = service.load(uuid, TAXONNODE_INIT_STRATEGY);\r
+               if(tb instanceof Taxon){\r
+                       return ((Taxon)tb).getTaxonNodes();\r
+               } else {\r
+                       HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response);\r
+                       return null;\r
+               }\r
+       }\r
                \r
 \r
-       \r
-}\r
+}
\ No newline at end of file