ref #10324 allow absent terms for geographic TaxonNodeFilter
authorAndreas Müller <a.mueller@bgbm.org>
Thu, 13 Jul 2023 08:43:17 +0000 (10:43 +0200)
committerAndreas Müller <a.mueller@bgbm.org>
Thu, 13 Jul 2023 08:44:17 +0000 (10:44 +0200)
cdmlib-model/src/main/java/eu/etaxonomy/cdm/filter/TaxonNodeFilter.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeFilterDaoHibernateImpl.java

index d98247ede75946392efba5d3a30eff5e83095dbe..b1f8aa4925abf47e208a1b2298b778a6554a1c8e 100644 (file)
@@ -43,6 +43,8 @@ public class TaxonNodeFilter implements Serializable{
     private List<LogicFilter<NamedArea>> areaFilter = new ArrayList<>();
     private List<LogicFilter<PresenceAbsenceTerm>> distributionStatusFilter = new ArrayList<>();
 
+    private boolean includeAbsentDistributions = false;
+
     private boolean includeRootNodes = false;
 
     private boolean includeUnpublished = false;
@@ -379,6 +381,14 @@ public class TaxonNodeFilter implements Serializable{
         this.orderBy = orderBy;
     }
 
+    public boolean isIncludeAbsentDistributions() {
+        return includeAbsentDistributions;
+    }
+
+    public void setIncludeAbsentDistributions(boolean includeAbsentDistributions) {
+        this.includeAbsentDistributions = includeAbsentDistributions;
+    }
+
 // ************************** toString *********************************/
 
     @Override
index d9f3bfd428b638349f13321a78eb68212037c243..cc377b9dea051af1b10888bc3154fab6a86ec7c8 100644 (file)
@@ -149,10 +149,13 @@ public class TaxonNodeFilterDaoHibernateImpl
             areaIds = getChildAreasRecursively(singleFilter.getUuid());
             String op = isFirst ? "" : op2Hql(singleFilter.getOperator());
             result = String.format("(%s%s(" + DESCRIPTION_ELEMENTS + ".feature.uuid='" + DISTRIBUTION_FEATURE_UUID + "' "
-                    + " AND " + DESCRIPTION_ELEMENTS + ".area.id in (%s)))"
-                    + " AND " + DESCRIPTION_ELEMENTS + ".status.absenceTerm = %s " ,
-                    result, op, StringUtils.collectionToCommaDelimitedString(areaIds),
-                    HQL_FALSE);
+                    + " AND " + DESCRIPTION_ELEMENTS + ".area.id in (%s))",
+                    result, op, StringUtils.collectionToCommaDelimitedString(areaIds)
+                    );
+            if (!filter.isIncludeAbsentDistributions()) {
+                result +=  " AND " + DESCRIPTION_ELEMENTS + ".status.absenceTerm = " + HQL_FALSE;
+            }
+            result += ")";
             isFirst = false;
         }
         return result;