- merge update from trunk
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / DescriptionController.java
index e0ace7e194959dd4556350506ae1652621b387e8..b201928fb04bc0f40d6d29c0b15064720c97b13b 100644 (file)
 
 package eu.etaxonomy.cdm.remote.controller;
 
+import java.awt.Color;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.EnumSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.WebDataBinder;
@@ -32,9 +36,11 @@ import org.springframework.web.servlet.ModelAndView;
 
 import eu.etaxonomy.cdm.api.service.IDescriptionService;
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
+import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.api.service.dto.DistributionInfoDTO;
 import eu.etaxonomy.cdm.api.service.dto.DistributionInfoDTO.InfoPart;
 import eu.etaxonomy.cdm.api.service.pager.Pager;
+import eu.etaxonomy.cdm.ext.geo.EditGeoServiceUtilities;
 import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.Language;
@@ -44,12 +50,14 @@ import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
 import eu.etaxonomy.cdm.model.description.StateData;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
 import eu.etaxonomy.cdm.remote.editor.DefinedTermBaseList;
 import eu.etaxonomy.cdm.remote.editor.NamedAreaLevelPropertyEditor;
+import eu.etaxonomy.cdm.remote.editor.TermBaseListPropertyEditor;
 import eu.etaxonomy.cdm.remote.editor.UUIDListPropertyEditor;
 import eu.etaxonomy.cdm.remote.editor.UuidList;
 import eu.etaxonomy.cdm.remote.l10n.LocaleContext;
@@ -68,6 +76,10 @@ public class DescriptionController extends BaseController<DescriptionBase, IDesc
     @Autowired
     private IFeatureTreeService featureTreeService;
 
+    @Autowired
+    private ITermService termService;
+
+
     @Autowired
     private IEditGeoService geoService;
 
@@ -86,6 +98,7 @@ public class DescriptionController extends BaseController<DescriptionBase, IDesc
         super.initBinder(binder);
         binder.registerCustomEditor(UuidList.class, new UUIDListPropertyEditor());
         binder.registerCustomEditor(NamedAreaLevel.class, new NamedAreaLevelPropertyEditor());
+        binder.registerCustomEditor(DefinedTermBaseList.class, new TermBaseListPropertyEditor<MarkerType>(termService));
     }
 
     /* (non-Javadoc)
@@ -248,6 +261,9 @@ public class DescriptionController extends BaseController<DescriptionBase, IDesc
      * @param request
      * @param response
      * @return
+     * @throws IOException
+     * @throws JsonMappingException
+     * @throws JsonParseException
      */
     @RequestMapping(value = "/description/distributionInfoFor/{uuid}", method = RequestMethod.GET)
     public ModelAndView doGetDistributionInfo(
@@ -257,8 +273,9 @@ public class DescriptionController extends BaseController<DescriptionBase, IDesc
             @RequestParam(value = "statusOrderPreference", required = false) boolean statusOrderPreference,
             @RequestParam(value = "hideMarkedAreas", required = false) DefinedTermBaseList<MarkerType> hideMarkedAreasList,
             @RequestParam(value = "omitLevels", required = false) Set<NamedAreaLevel> omitLevels,
+            @RequestParam(value = "statusColors", required = false) String statusColorsString,
             HttpServletRequest request,
-            HttpServletResponse response) {
+            HttpServletResponse response) throws JsonParseException, JsonMappingException, IOException {
 
             logger.debug("doGetDistributionInfo() - " + requestPathAndQuery(request));
 
@@ -271,12 +288,15 @@ public class DescriptionController extends BaseController<DescriptionBase, IDesc
 
             EnumSet<InfoPart> parts = EnumSet.copyOf(partSet);
 
+            Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceTermColors = EditGeoServiceUtilities.buildStatusColorMap(statusColorsString, termService);
+
             DistributionInfoDTO dto = geoService.composeDistributionInfoFor(parts, taxonUuid, subAreaPreference, statusOrderPreference,
-                    hideMarkedAreas, omitLevels, LocaleContext.getLanguages());
+                    hideMarkedAreas, omitLevels, presenceAbsenceTermColors, LocaleContext.getLanguages(), getInitializationStrategy());
 
             mv.addObject(dto);
 
             return mv;
     }
 
+
 }
\ No newline at end of file