Merge branch 'release/5.1.0'
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / DescriptionListPortalController.java
index 19857cdf09cd4929a2cbb586ab30b80934195547..49470603ad632fb1fd730ae3043ad3daa302b222 100644 (file)
-// $Id$\r
-/**\r
- * Copyright (C) 2009 EDIT European Distributed Institute of Taxonomy\r
- * http://www.e-taxonomy.eu\r
- *\r
- * The contents of this file are subject to the Mozilla Public License Version\r
- * 1.1 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.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.RequestMapping;\r
-import org.springframework.web.bind.annotation.RequestMethod;\r
-import org.springframework.web.bind.annotation.RequestParam;\r
-\r
-import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
-import eu.etaxonomy.cdm.api.service.ITaxonService;\r
-import eu.etaxonomy.cdm.api.service.ITermService;\r
-import eu.etaxonomy.cdm.api.service.pager.Pager;\r
-import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
-import eu.etaxonomy.cdm.model.description.Feature;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.persistence.query.MatchMode;\r
-import eu.etaxonomy.cdm.remote.controller.util.PagerParameters;\r
-import eu.etaxonomy.cdm.remote.editor.DefinedTermBaseList;\r
-import eu.etaxonomy.cdm.remote.editor.TermBaseListPropertyEditor;\r
-\r
-/**\r
- * IMPORTANT:\r
- *\r
- * This controller is mostly a 1:1 copy of the DescriptionListController\r
- * and this provides identical end points which only differ in the depth of the\r
- * object graphs returned.\r
- * An exception is the doAccumulateDistributions() method, which is not repeated\r
- * here\r
- *\r
- * @author a.kohlbecker\r
- * @date Jun 25, 2013\r
- *\r
- */\r
-@Controller\r
-@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
-\r
-    protected static final List<String> DESCRIPTION_INIT_STRATEGY = Arrays.asList(new String []{\r
-            "$",\r
-            "elements.$",\r
-            "elements.annotations",\r
-            "elements.markers",\r
-            "elements.stateData.$",\r
-            "elements.sources.citation.authorship",\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.authorship",\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
-    public DescriptionListPortalController() {\r
-        super();\r
-        setInitializationStrategy(DESCRIPTION_INIT_STRATEGY);\r
-    }\r
-\r
-\r
-    @Autowired\r
-    private ITermService termService;\r
-\r
-    /* (non-Javadoc)\r
-     * @see eu.etaxonomy.cdm.remote.controller.BaseListController#setService(eu.etaxonomy.cdm.api.service.IService)\r
-     */\r
-    @Override\r
-    @Autowired\r
-    public void setService(IDescriptionService service) {\r
-        this.service = service;\r
-    }\r
-\r
-    @InitBinder\r
-    @Override\r
-    public void initBinder(WebDataBinder binder) {\r
-        super.initBinder(binder);\r
-        binder.registerCustomEditor(DefinedTermBaseList.class, new TermBaseListPropertyEditor<Feature>(termService));\r
-    }\r
-    /**\r
-    *\r
-    * @param queryString\r
-    * @param type\r
-    * @param pageSize\r
-    * @param pageNumber\r
-    * @param matchMode\r
-    * @param request\r
-    * @param response\r
-    * @return\r
-    * @throws IOException\r
-    */\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
-           @RequestParam(value = "pageSize", required = false) Integer pageSize,\r
-           @RequestParam(value = "pageNumber", required = false) Integer pageNumber,\r
-           @RequestParam(value = "matchMode", required = false) MatchMode matchMode,\r
-           HttpServletRequest request,\r
-           HttpServletResponse response\r
-           )\r
-            throws IOException {\r
-\r
-       logger.info("doFindDescriptionElements : " + request.getRequestURI() + "?" + request.getQueryString() );\r
-\r
-       PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);\r
-       pagerParams.normalizeAndValidate(response);\r
-\r
-       Pager<DescriptionElementBase> pager = service.searchElements(type, queryString, pageSize, pageNumber, null, getInitializationStrategy());\r
-\r
-       return pager;\r
-   }\r
-\r
-   /**\r
-    * Requires the query parameter "descriptionType" to be present\r
-    *\r
-    * @param features\r
-    * @param descriptionType\r
-    * @param type\r
-    * @param pageSize\r
-    * @param pageNumber\r
-    * @param request\r
-    * @param response\r
-    * @return\r
-    * @throws IOException\r
-    */\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
-           @RequestParam(value = "type", required = false) Class<? extends DescriptionElementBase> type,\r
-           @RequestParam(value = "pageSize", required = false) Integer pageSize,\r
-           @RequestParam(value = "pageNumber", required = false) Integer pageNumber, HttpServletRequest request,\r
-           HttpServletResponse response) throws IOException {\r
-\r
-       logger.info("doPageDescriptionElementsByFeature : " + requestPathAndQuery(request));\r
-\r
-       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(), DESCRIPTION_ELEMENT_INIT_STRATEGY);\r
-\r
-       return pager;\r
-   }\r
-\r
-   /**\r
-    * Requires the query parameter "taxon"  to be present\r
-    *\r
-    * @param taxon_uuid\r
-    * @param features\r
-    * @param type\r
-    * @param pageSize\r
-    * @param pageNumber\r
-    * @param request\r
-    * @param response\r
-    * @return\r
-    * @throws IOException\r
-    */\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
-           @RequestParam(value = "type", required = false) Class<T> type,\r
-           @RequestParam(value = "pageSize", required = false) Integer pageSize,\r
-           @RequestParam(value = "pageNumber", required = false) Integer pageNumber, HttpServletRequest request,\r
-           HttpServletResponse response) throws IOException {\r
-\r
-       logger.info("getDescriptionElementsForTaxon : " + requestPathAndQuery(request));\r
-\r
-       PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber);\r
-       pagerParams.normalizeAndValidate(response);\r
-\r
-       Taxon taxon = null;\r
-       if( taxon_uuid!= null){\r
-           try {\r
-               taxon = (Taxon) taxonService.load(taxon_uuid);\r
-           } catch (Exception e) {\r
-               HttpStatusMessage.UUID_NOT_FOUND.send(response);\r
-           }\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
+/**
+ * Copyright (C) 2009 EDIT European Distributed Institute of Taxonomy
+ * http://www.e-taxonomy.eu
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 See LICENSE.TXT at the top of this package for the full license terms.
+ */
+
+package eu.etaxonomy.cdm.remote.controller;
+
+import io.swagger.annotations.Api;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ *
+ * @author a.kohlbecker
+ * @since Jun 25, 2013
+ *
+ */
+@Controller
+@Api("portal_description")
+@RequestMapping(value = {"/portal/description"})
+public class DescriptionListPortalController extends DescriptionListController {
+
+   public static final Logger logger = Logger.getLogger(DescriptionListPortalController.class);
+
+    protected static final List<String> DESCRIPTION_INIT_STRATEGY = Arrays.asList(new String []{
+            "$",
+            "elements.$",
+            "elements.annotations",
+            "elements.markers",
+            "elements.stateData.$",
+            "elements.sources.citation.authorship",
+            "elements.sources.nameUsedInSource",
+            "elements.multilanguageText",
+            "elements.media",
+            "elements.kindOfUnit"
+    });
+
+
+    protected static final List<String> DISTRIBUTION_INFO_INIT_STRATEGY = Arrays.asList(new String []{
+            "sources.citation.authorship.$",
+            "sources.nameUsedInSource",
+            "annotations"
+    });
+
+
+    public DescriptionListPortalController() {
+        super();
+        setInitializationStrategy(DESCRIPTION_INIT_STRATEGY);
+    }
+
+    @Override
+    protected List<String> getDescriptionInfoInitStrategy(){
+        return DISTRIBUTION_INFO_INIT_STRATEGY;
+    }
+
+}