refactoring taxon controllers, reducing code duplication
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / DescriptionListController.java
index 123711972a60314ce39ad048714b5d480f9c9944..2e99d4785d0f2056f529aaf65ec3b8f85544a27e 100644 (file)
@@ -97,6 +97,29 @@ public class DescriptionListController extends IdentifiableListController<Descri
     }\r
 \r
 \r
+    /**\r
+     * Runs the {@link TransmissionEngineDistribution} in a separate Thread and\r
+     * responds with a redirect to a progress monitor REST service end point.\r
+     * <p>\r
+     * <b>NOTE</b> this is still a special implementation for the Euro+Med project.\r
+     * The parameters for the <i>superAreas</i>, the areas to which the subordinate areas should be projected,\r
+     * <i>lowerRank</i>, <i>upperRank</i> are hardcoded to: <code>TDWG_LEVEL3 areas, SUBSPECIES, GENUS</code>\r
+     *\r
+     * @param mode\r
+     *            one of <code>byAreas</code>, <code>byRanks</code>,\r
+     *            <code>byAreasAndRanks</code>\r
+     * @param frontendBaseUrl\r
+     *            the cdm server instance base URL, this is needed for the a\r
+     *            proper redirect URL when the service is running behind a\r
+     *            reverse HTTP proxy\r
+     * @param priority\r
+     *            the priority for the Thread to spawn, see\r
+     *            {@link Thread#setPriority(int)}, defaults to 3\r
+     * @param request\r
+     * @param response\r
+     * @return\r
+     * @throws IOException\r
+     */\r
     @RequestMapping(value = { "accumulateDistributions" }, method = RequestMethod.GET)\r
     public ModelAndView doAccumulateDistributions(\r
             @RequestParam(value= "mode", required = true) final AggregationMode mode,\r
@@ -151,7 +174,7 @@ public class DescriptionListController extends IdentifiableListController<Descri
     * @return\r
     * @throws IOException\r
     */\r
-   @RequestMapping(value = "/descriptionElement/find", method = RequestMethod.GET)\r
+   @RequestMapping(value = "//descriptionElement/find", method = RequestMethod.GET) // mapped as absolute path, see CdmAntPathMatcher\r
    public Pager<DescriptionElementBase> doFindDescriptionElements(\r
            @RequestParam(value = "query", required = true) String queryString,\r
            @RequestParam(value = "type", required = false) Class<? extends DescriptionElementBase> type,\r
@@ -186,7 +209,7 @@ public class DescriptionListController extends IdentifiableListController<Descri
      * @return\r
      * @throws IOException\r
      */\r
-    @RequestMapping(value = "/descriptionElement/byFeature", method = RequestMethod.GET)\r
+    @RequestMapping(value = "//descriptionElement/byFeature", method = RequestMethod.GET) // mapped as absolute path, see CdmAntPathMatcher\r
     public Pager<DescriptionElementBase> doPageDescriptionElementsByFeature(\r
             @RequestParam(value = "features", required = false) DefinedTermBaseList<Feature> features,\r
             @RequestParam(value = "descriptionType", required = true) Class<? extends DescriptionBase> descriptionType,\r
@@ -200,6 +223,10 @@ public class DescriptionListController extends IdentifiableListController<Descri
         PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);\r
         pagerParams.normalizeAndValidate(response);\r
 \r
+        if(features == null){\r
+            features = new DefinedTermBaseList<Feature>();\r
+        }\r
+\r
         Pager<DescriptionElementBase> pager = service.pageDescriptionElements(null, descriptionType, features.asSet(),\r
                 type, pagerParams.getPageSize(), pagerParams.getPageIndex(), getInitializationStrategy());\r
 \r
@@ -219,7 +246,7 @@ public class DescriptionListController extends IdentifiableListController<Descri
      * @return\r
      * @throws IOException\r
      */\r
-    @RequestMapping(value = "/descriptionElement/byTaxon", method = {RequestMethod.GET, RequestMethod.POST})\r
+    @RequestMapping(value = "//descriptionElement/byTaxon", method = {RequestMethod.GET, RequestMethod.POST}) // mapped as absolute path, see CdmAntPathMatcher\r
     public <T extends DescriptionElementBase> Pager<T> getDescriptionElementsForTaxon(\r
             @RequestParam(value = "taxon", required = true) UUID taxon_uuid,\r
             @RequestParam(value = "features", required = false) DefinedTermBaseList<Feature> features,\r