Merge branch 'master' into abcd
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / DescriptionPortalController.java
index 8babc465f1fae330f31f20c9e30206117fa3fdbc..a6979d58e00a58405b0f1ae90bc0334dea692fe4 100644 (file)
 \r
 package eu.etaxonomy.cdm.remote.controller;\r
 \r
+import java.awt.Color;\r
 import java.io.IOException;\r
 import java.util.Arrays;\r
 import java.util.Collection;\r
 import java.util.EnumSet;\r
 import java.util.HashSet;\r
 import java.util.List;\r
+import java.util.Map;\r
 import java.util.Set;\r
 import java.util.UUID;\r
 \r
 import javax.servlet.http.HttpServletRequest;\r
 import javax.servlet.http.HttpServletResponse;\r
 \r
+import org.codehaus.jackson.JsonParseException;\r
+import org.codehaus.jackson.map.JsonMappingException;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Controller;\r
 import org.springframework.transaction.annotation.Transactional;\r
@@ -33,6 +37,8 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;\r
 import org.springframework.web.servlet.ModelAndView;\r
 \r
+import com.wordnik.swagger.annotations.Api;\r
+\r
 import eu.etaxonomy.cdm.api.service.DistributionTree;\r
 import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
 import eu.etaxonomy.cdm.api.service.ITermService;\r
@@ -40,12 +46,15 @@ import eu.etaxonomy.cdm.api.service.dto.DistributionInfoDTO;
 import eu.etaxonomy.cdm.api.service.dto.DistributionInfoDTO.InfoPart;\r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
 import eu.etaxonomy.cdm.api.utility.DescriptionUtility;\r
+import eu.etaxonomy.cdm.ext.geo.CondensedDistributionRecipe;\r
+import eu.etaxonomy.cdm.ext.geo.EditGeoServiceUtilities;\r
 import eu.etaxonomy.cdm.ext.geo.IEditGeoService;\r
 import eu.etaxonomy.cdm.model.common.Annotation;\r
 import eu.etaxonomy.cdm.model.common.Marker;\r
 import eu.etaxonomy.cdm.model.common.MarkerType;\r
 import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
 import eu.etaxonomy.cdm.remote.editor.DefinedTermBaseList;\r
@@ -67,6 +76,7 @@ import eu.etaxonomy.cdm.remote.l10n.LocaleContext;
  *\r
  */\r
 @Controller\r
+@Api("portal_description")\r
 @Transactional(readOnly=true)\r
 @RequestMapping(value = {\r
             "/portal/description/{uuid}",\r
@@ -80,26 +90,31 @@ public class DescriptionPortalController extends BaseController<DescriptionBase,
             "elements.$",\r
             "elements.multilanguageText.*",\r
             "elements.annotations",\r
-            "elements.sources.citation.authorTeam.$",\r
+            "elements.sources.citation.authorship.$",\r
             "elements.sources.nameUsedInSource",\r
             "elements.area.level",\r
             "elements.modifyingText",\r
             "elements.stateData.*",\r
+            "elements.statisticalValues.*",\r
+            "elements.unit",\r
             "elements.media",\r
+            "elements.kindOfUnit"\r
+\r
     });\r
 \r
     protected static final List<String> ORDERED_DISTRIBUTION_INIT_STRATEGY = Arrays.asList(new String []{\r
             "elements.$",\r
             "elements.annotations",\r
             "elements.markers",\r
-            "elements.sources.citation.authorTeam.$",\r
+            "elements.sources.citation.authorship.$",\r
             "elements.sources.nameUsedInSource",\r
             "elements.area.level",\r
     });\r
 \r
     protected static final List<String> DISTRIBUTION_INFO_INIT_STRATEGY = Arrays.asList(new String []{\r
-            "sources.citation.authorTeam.$",\r
-            "sources.nameUsedInSource"\r
+            "sources.citation.authorship.$",\r
+            "sources.nameUsedInSource",\r
+            "annotations"\r
     });\r
 \r
     @Autowired\r
@@ -132,7 +147,7 @@ public class DescriptionPortalController extends BaseController<DescriptionBase,
         this.service = service;\r
     }\r
 \r
-    @RequestMapping(value = "/portal/descriptionElement/{descriptionelement_uuid}/annotation", method = RequestMethod.GET)\r
+    @RequestMapping(value = "//portal/descriptionElement/{descriptionelement_uuid}/annotation", method = RequestMethod.GET) // mapped as absolute path, see CdmAntPathMatcher\r
     public Pager<Annotation> getAnnotations(\r
             @PathVariable("descriptionelement_uuid") UUID uuid,\r
             HttpServletRequest request,\r
@@ -163,7 +178,7 @@ public class DescriptionPortalController extends BaseController<DescriptionBase,
      * @param response\r
      * @return\r
      */\r
-    @RequestMapping(value = "/portal/description/{uuid_list}/DistributionTree", method = RequestMethod.GET)\r
+    @RequestMapping(value = "//portal/description/{uuid_list}/DistributionTree", method = RequestMethod.GET) // mapped as absolute path, see CdmAntPathMatcher\r
     public DistributionTree doGetOrderedDistributionsB(\r
             @PathVariable("uuid_list") UuidList descriptionUuidList,\r
             @RequestParam(value = "subAreaPreference", required = false) boolean subAreaPreference,\r
@@ -198,28 +213,37 @@ public class DescriptionPortalController extends BaseController<DescriptionBase,
     /**\r
      * @param taxonUuid\r
      * @param parts\r
-     *            possible values: condensedStatusString, tree, mapUriParams,\r
+     *            possible values: condensedStatus, tree, mapUriParams,\r
      *            elements,\r
      * @param subAreaPreference\r
      * @param statusOrderPreference\r
      * @param hideMarkedAreasList\r
+     * @param recipe\r
+     *  The recipe for creating the condensed distribution status\r
      * @param omitLevels\r
      * @param request\r
      * @param response\r
      * @return\r
+     * @throws IOException\r
+     * @throws JsonMappingException\r
+     * @throws JsonParseException\r
      */\r
-    @RequestMapping(value = "/portal/description/distributionInfoFor/{uuid}", method = RequestMethod.GET)\r
+    @RequestMapping(value = "//portal/description/distributionInfoFor/{uuid}", method = RequestMethod.GET) // mapped as absolute path, see CdmAntPathMatcher\r
     public ModelAndView doGetDistributionInfo(\r
             @PathVariable("uuid") UUID taxonUuid,\r
             @RequestParam("part") Set<InfoPart> partSet,\r
             @RequestParam(value = "subAreaPreference", required = false) boolean subAreaPreference,\r
             @RequestParam(value = "statusOrderPreference", required = false) boolean statusOrderPreference,\r
             @RequestParam(value = "hideMarkedAreas", required = false) DefinedTermBaseList<MarkerType> hideMarkedAreasList,\r
+            @RequestParam(value = "fallbackAreaMarkerType", required = false) MarkerType fallbackAreaMarkerType,\r
             @RequestParam(value = "omitLevels", required = false) Set<NamedAreaLevel> omitLevels,\r
+            @RequestParam(value = "statusColors", required = false) String statusColorsString,\r
+            @RequestParam(value = "recipe", required = false, defaultValue="EuroPlusMed") CondensedDistributionRecipe recipe,\r
+\r
             HttpServletRequest request,\r
-            HttpServletResponse response) {\r
+            HttpServletResponse response) throws JsonParseException, JsonMappingException, IOException {\r
 \r
-            logger.debug("doGetDistributionInfo() - " + requestPathAndQuery(request));\r
+            logger.info("doGetDistributionInfo() - " + requestPathAndQuery(request));\r
 \r
             ModelAndView mv = new ModelAndView();\r
 \r
@@ -230,8 +254,10 @@ public class DescriptionPortalController extends BaseController<DescriptionBase,
 \r
             EnumSet<InfoPart> parts = EnumSet.copyOf(partSet);\r
 \r
+            Map<PresenceAbsenceTerm, Color> presenceAbsenceTermColors = EditGeoServiceUtilities.buildStatusColorMap(statusColorsString, termService);\r
+\r
             DistributionInfoDTO dto = geoService.composeDistributionInfoFor(parts, taxonUuid, subAreaPreference, statusOrderPreference,\r
-                    hideMarkedAreas, omitLevels, LocaleContext.getLanguages(), DISTRIBUTION_INFO_INIT_STRATEGY);\r
+                    hideMarkedAreas, fallbackAreaMarkerType, omitLevels, presenceAbsenceTermColors, LocaleContext.getLanguages(), DISTRIBUTION_INFO_INIT_STRATEGY, recipe);\r
 \r
             mv.addObject(dto);\r
 \r