refactoring taxon controllers, reducing code duplication
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / OccurrenceController.java
index 1102feabd32c627c90798b86b263d16c7591f904..351a774681e84a8132ef9bdec51413d407980792 100644 (file)
@@ -1,45 +1,83 @@
 // $Id$\r
 /**\r
 * Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
 * http://www.e-taxonomy.eu\r
-* \r
+*\r
 * The contents of this file are subject to the Mozilla Public License Version 1.1\r
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
 \r
 package eu.etaxonomy.cdm.remote.controller;\r
 \r
+import java.io.IOException;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+import java.util.UUID;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Controller;\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
+import org.springframework.web.servlet.ModelAndView;\r
 \r
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;\r
+import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;\r
+import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\r
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
 \r
 /**\r
  * TODO write controller documentation\r
- * \r
+ *\r
  * @author a.kohlbecker\r
  * @date 24.03.2009\r
  */\r
 @Controller\r
-@RequestMapping(value = {"/occurrence/*","/occurrence/*/annotation"})\r
-public class OccurrenceController extends AnnotatableController<SpecimenOrObservationBase, IOccurrenceService>\r
+@RequestMapping(value = {"/occurrence/{uuid}"})\r
+public class OccurrenceController extends BaseController<SpecimenOrObservationBase, IOccurrenceService>\r
 {\r
-       \r
-       public OccurrenceController(){\r
-               super();\r
-               setUuidParameterPattern("^/occurrence/([^/?#&\\.]+).*");\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.remote.controller.GenericController#setService(eu.etaxonomy.cdm.api.service.IService)\r
-        */\r
-       @Autowired\r
-       @Override\r
-       public void setService(IOccurrenceService service) {\r
-               this.service = service;\r
-       }\r
+\r
+    protected static final List<String> DEFAULT_INIT_STRATEGY = Arrays.asList(new String []{\r
+            "$",\r
+            "sequences.$",\r
+    });\r
+\r
+    private static final List<String> DERIVED_UNIT_INIT_STRATEGY =  Arrays.asList(new String []{\r
+            "derivedFrom.derivatives",\r
+            "derivedFrom.originals",\r
+    });\r
+\r
+\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.remote.controller.GenericController#setService(eu.etaxonomy.cdm.api.service.IService)\r
+     */\r
+    @Autowired\r
+    @Override\r
+    public void setService(IOccurrenceService service) {\r
+        this.service = service;\r
+    }\r
+\r
+    @RequestMapping(value = { "derivedFrom" }, method = RequestMethod.GET)\r
+    public ModelAndView doGetDerivedFrom(\r
+            @PathVariable("uuid") UUID uuid, HttpServletRequest request,\r
+            HttpServletResponse response) throws IOException {\r
+\r
+        logger.info("doGetDerivedFrom()" + request.getRequestURI());\r
+\r
+        ModelAndView mv = new ModelAndView();\r
+        SpecimenOrObservationBase sob = getCdmBaseInstance(uuid, response, DERIVED_UNIT_INIT_STRATEGY);\r
+        if(sob instanceof DerivedUnit){\r
+            DerivationEvent derivationEvent = ((DerivedUnit)sob).getDerivedFrom();\r
+            if (derivationEvent != null) {\r
+                mv.addObject(derivationEvent);\r
+            }\r
+        }\r
+        return mv;\r
+    }\r
 \r
 }\r