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;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
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;
+import eu.etaxonomy.cdm.model.common.MarkerType;
import eu.etaxonomy.cdm.model.description.CategoricalData;
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;
@Autowired
private IFeatureTreeService featureTreeService;
+ @Autowired
+ private ITermService termService;
- public DescriptionController(){
- super();
- }
+
+ @Autowired
+ private IEditGeoService geoService;
protected static final List<String> TAXONDESCRIPTION_INIT_STRATEGY = Arrays.asList(new String []{
"$",
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)
return mv;
}
+ /**
+ * @param taxonUuid
+ * @param parts
+ * possible values: condensedStatusString, tree, mapUriParams,
+ * elements,
+ * @param subAreaPreference
+ * @param statusOrderPreference
+ * @param hideMarkedAreasList
+ * @param omitLevels
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws JsonMappingException
+ * @throws JsonParseException
+ */
+ @RequestMapping(value = "/description/distributionInfoFor/{uuid}", method = RequestMethod.GET)
+ public ModelAndView doGetDistributionInfo(
+ @PathVariable("uuid") UUID taxonUuid,
+ @RequestParam("part") Set<InfoPart> partSet,
+ @RequestParam(value = "subAreaPreference", required = false) boolean subAreaPreference,
+ @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) throws JsonParseException, JsonMappingException, IOException {
+
+ logger.debug("doGetDistributionInfo() - " + requestPathAndQuery(request));
+
+ ModelAndView mv = new ModelAndView();
+
+ Set<MarkerType> hideMarkedAreas = null;
+ if(hideMarkedAreasList != null){
+ hideMarkedAreas = hideMarkedAreasList.asSet();
+ }
+
+ EnumSet<InfoPart> parts = EnumSet.copyOf(partSet);
+
+ Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceTermColors = EditGeoServiceUtilities.buildStatusColorMap(statusColorsString, termService);
+
+ DistributionInfoDTO dto = geoService.composeDistributionInfoFor(parts, taxonUuid, subAreaPreference, statusOrderPreference,
+ hideMarkedAreas, omitLevels, presenceAbsenceTermColors, LocaleContext.getLanguages(), getInitializationStrategy());
+
+ mv.addObject(dto);
+
+ return mv;
+ }
+
+
}
\ No newline at end of file