refactoring taxon controllers, reducing code duplication
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / DescriptionListPortalController.java
index 4e114b3658818f40c521caf15af0ccc7f656fbbb..5e4dcb965de93e96b8edc40fc761c2eabec224e2 100644 (file)
@@ -17,6 +17,7 @@ import java.util.UUID;
 import javax.servlet.http.HttpServletRequest;\r
 import javax.servlet.http.HttpServletResponse;\r
 \r
+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
@@ -55,6 +56,7 @@ import eu.etaxonomy.cdm.remote.editor.TermBaseListPropertyEditor;
 @RequestMapping(value = {"/portal/description"})\r
 public class DescriptionListPortalController extends IdentifiableListController<DescriptionBase, IDescriptionService> {\r
 \r
+   public static final Logger logger = Logger.getLogger(DescriptionListPortalController.class);\r
 \r
     @Autowired\r
     private ITaxonService taxonService;\r
@@ -62,12 +64,29 @@ public class DescriptionListPortalController extends IdentifiableListController<
     protected static final List<String> DESCRIPTION_INIT_STRATEGY = Arrays.asList(new String []{\r
             "$",\r
             "elements.$",\r
-            "elements.sources.citation.authorTeam.$",\r
-            "elements.sources.nameUsedInSource.originalNameString",\r
-            "elements.area.level",\r
-            "elements.modifyingText",\r
-            "elements.states.*",\r
+            "elements.annotations",\r
+            "elements.markers",\r
+            "elements.stateData.$",\r
+            "elements.sources.citation.authorTeam",\r
+            "elements.sources.nameUsedInSource",\r
+            "elements.multilanguageText",\r
             "elements.media",\r
+            "elements.kindOfUnit"\r
+    });\r
+\r
+    protected static final List<String> DESCRIPTION_ELEMENT_INIT_STRATEGY = Arrays.asList(new String []{\r
+            "$",\r
+            "annotations",\r
+            "markers",\r
+            "stateData.$",\r
+            "sources.citation.authorTeam",\r
+            "sources.nameUsedInSource",\r
+            "multilanguageText",\r
+            "media",\r
+            "name.$",\r
+            "name.rank.representations",\r
+            "name.status.type.representations",\r
+            "taxon2.name"\r
     });\r
 \r
 \r
@@ -107,7 +126,7 @@ public class DescriptionListPortalController extends IdentifiableListController<
     * @return\r
     * @throws IOException\r
     */\r
-   @RequestMapping(value = "/portal/descriptionElement/find", method = RequestMethod.GET)\r
+   @RequestMapping(value = "//portal/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
@@ -142,7 +161,7 @@ public class DescriptionListPortalController extends IdentifiableListController<
     * @return\r
     * @throws IOException\r
     */\r
-   @RequestMapping(value = "/portal/descriptionElement/byFeature", method = RequestMethod.GET)\r
+   @RequestMapping(value = "//portal/descriptionElement/byFeature", method = {RequestMethod.GET, RequestMethod.POST}) // 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
@@ -156,8 +175,12 @@ public class DescriptionListPortalController extends IdentifiableListController<
        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
+               type, pagerParams.getPageSize(), pagerParams.getPageIndex(), DESCRIPTION_ELEMENT_INIT_STRATEGY);\r
 \r
        return pager;\r
    }\r
@@ -175,7 +198,7 @@ public class DescriptionListPortalController extends IdentifiableListController<
     * @return\r
     * @throws IOException\r
     */\r
-   @RequestMapping(value = "/portal/descriptionElement/byTaxon", method = RequestMethod.GET)\r
+   @RequestMapping(value = "//portal/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
@@ -197,9 +220,18 @@ public class DescriptionListPortalController extends IdentifiableListController<
                HttpStatusMessage.UUID_NOT_FOUND.send(response);\r
            }\r
        }\r
-       Pager<T> pager = service.pageDescriptionElementsForTaxon(taxon, features.asSet(), type, pageSize,\r
-               pageNumber, getInitializationStrategy());\r
-\r
+       //TODO it seems as if the InitializationStrategy is not appropriate here !!!\r
+       //   see #3728 (DescriptionListPortalController.getDescriptionElementsForTaxon() seems to be using in-appropriate init strategy)\r
+       if (logger.isDebugEnabled()){logger.debug("get pager ...");}\r
+       Pager<T> pager = service.pageDescriptionElementsForTaxon(\r
+               taxon,\r
+               (features != null ? features.asSet() : null),\r
+               type,\r
+               pagerParams.getPageSize(),\r
+               pagerParams.getPageIndex(),\r
+               DESCRIPTION_ELEMENT_INIT_STRATEGY\r
+              );\r
+       if (logger.isDebugEnabled()){logger.debug("get pager - DONE");}\r
        return pager;\r
    }\r
 }
\ No newline at end of file