ref #10334 add getDistributionServiceRequestParameterString(taxonDescriptions, ...)
authorAndreas Müller <a.mueller@bgbm.org>
Thu, 18 Jan 2024 17:38:01 +0000 (18:38 +0100)
committerAndreas Müller <a.mueller@bgbm.org>
Thu, 18 Jan 2024 17:38:01 +0000 (18:38 +0100)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/geo/DistributionServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/geo/IDistributionService.java

index c6e5c1a0f956c6b520a02cc8eb93ffd05a33aa9c..ce08ffa9885e45c13c749706624311029c6a52f2 100644 (file)
@@ -45,9 +45,11 @@ import eu.etaxonomy.cdm.format.description.distribution.CondensedDistributionCon
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.MarkerType;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Distribution;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
@@ -280,6 +282,53 @@ public class DistributionServiceImpl implements IDistributionService {
         areaMapping.set(area, geoServiceArea);
     }
 
+    @Override
+    public String getDistributionServiceRequestParameterString(List<TaxonDescription> taxonDescriptions,
+            boolean subAreaPreference,
+            boolean statusOrderPreference,
+            Set<MarkerType> hideMarkedAreas,
+            Map<PresenceAbsenceTerm, Color> presenceAbsenceTermColors,
+            List<Language> langs,
+            boolean includeUnpublished) {
+
+        Set<Feature> features = new HashSet<>();
+        features.add(Feature.DISTRIBUTION()); //for now only this one
+        Set<Distribution> distributions = getDistributionsOf(taxonDescriptions, features, includeUnpublished);
+
+        String uriParams = getDistributionServiceRequestParameterString(distributions,
+                subAreaPreference,
+                statusOrderPreference,
+                hideMarkedAreas,
+                presenceAbsenceTermColors,
+                langs);
+
+        return uriParams;
+    }
+
+    private Set<Distribution> getDistributionsOf(List<TaxonDescription> taxonDescriptions, Set<Feature> features, boolean includeUnpublished) {
+        Set<Distribution> result = new HashSet<>();
+
+        for (TaxonDescription taxonDescription : taxonDescriptions) {
+            List<Distribution> distributions;
+            if (taxonDescription.getId() > 0){
+                distributions = dao.getDescriptionElements(taxonDescription,
+                        null, features, Distribution.class, includeUnpublished, null, null, null);
+            }else{
+                distributions = new ArrayList<>();
+                for (DescriptionElementBase deb : taxonDescription.getElements()){
+                    if (deb.isInstanceOf(Distribution.class)){
+                        if (features == null || features.isEmpty()
+                                || features.contains(deb.getFeature())) {
+                            distributions.add(CdmBase.deproxy(deb, Distribution.class));
+                        }
+                    }
+                }
+            }
+            result.addAll(distributions);
+        }
+        return result;
+    }
+
     @Override
     public String getDistributionServiceRequestParameterString(
             Set<Distribution> distributions,
index ed8147aad934c2c8411f9fbce56725580c34d57c..43eecc9f48abff65bbc43b919e0399831ca454c1 100644 (file)
@@ -29,6 +29,7 @@ import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.MarkerType;
 import eu.etaxonomy.cdm.model.description.Distribution;
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.term.TermTree;
 
@@ -89,6 +90,11 @@ public interface IDistributionService {
      */
     public void setMapping(NamedArea area, GeoServiceArea geoServiceArea);
 
+    public String getDistributionServiceRequestParameterString(List<TaxonDescription> taxonDescriptions,
+            boolean subAreaPreference, boolean statusOrderPreference, Set<MarkerType> hideMarkedAreas,
+            Map<PresenceAbsenceTerm, Color> presenceAbsenceTermColors, List<Language> langs,
+            boolean includeUnpublished);
+
     /**
      *
      * @param distributions