From ae7dc487b3abd0a309b0a3e3340883aae493c22c Mon Sep 17 00:00:00 2001
From: Jesper Zedlitz <jesper@zedlitz.de>
Date: Mon, 20 Jan 2025 12:08:21 +0100
Subject: [PATCH] 'ignoreSeriesWithoutDistribution' was too lenient.

It must only ignore empty series not empty datasets.
---
 .../opendata/csw2dcat/MDMetadata2Dataset.java      | 14 ++++++++++++--
 .../d3c6c074-4d69-4b1f-9efb-dbd9644f82c0.xml       |  2 +-
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/landsh/opendata/csw2dcat/MDMetadata2Dataset.java b/src/main/java/de/landsh/opendata/csw2dcat/MDMetadata2Dataset.java
index de58981..dc61715 100644
--- a/src/main/java/de/landsh/opendata/csw2dcat/MDMetadata2Dataset.java
+++ b/src/main/java/de/landsh/opendata/csw2dcat/MDMetadata2Dataset.java
@@ -846,6 +846,16 @@ public class MDMetadata2Dataset {
 
     }
 
+    private boolean isDatasetSeries(Element metadata) {
+        final Element scopeCode = (Element) metadata.selectSingleNode("gmd:hierarchyLevel/gmd:MD_ScopeCode");
+        return scopeCode != null && "series".equals(scopeCode.attributeValue("codeListValue"));
+    }
+
+    private boolean isDataService(Element metadata) {
+        final Element scopeCode = (Element) metadata.selectSingleNode("gmd:hierarchyLevel/gmd:MD_ScopeCode");
+        return scopeCode != null && "service".equals(scopeCode.attributeValue("codeListValue"));
+    }
+
     /**
      * Convert a gmd:MD_Metadata {@link Element} into a DCAT-AP.de compliant dcat:Dataset {@link Resource}.
      */
@@ -864,7 +874,7 @@ public class MDMetadata2Dataset {
         final Element scopeCode = (Element) metadata.selectSingleNode("gmd:hierarchyLevel/gmd:MD_ScopeCode");
         if (scopeCode == null) {
             log.warn("MD_Metadata without MD_ScopeCode.");
-        } else if ("service".equals(scopeCode.attributeValue("codeListValue"))) {
+        } else if ( isDataService(metadata) ){
             return null;
         }
 
@@ -967,7 +977,7 @@ public class MDMetadata2Dataset {
             }
         }
 
-        if (settings.ignoreSeriesWithoutDistribution && !dataset.hasProperty(DCAT.distribution)) {
+        if (settings.ignoreSeriesWithoutDistribution && isDatasetSeries(metadata) && !dataset.hasProperty(DCAT.distribution)) {
             // Geo series might not have a download option or a couple service (which is totally valid). If configured,
             // this kind of series will be ignored.
             dataset.removeProperties();
diff --git a/src/test/resources/d3c6c074-4d69-4b1f-9efb-dbd9644f82c0.xml b/src/test/resources/d3c6c074-4d69-4b1f-9efb-dbd9644f82c0.xml
index 8eeef8a..14c1b76 100644
--- a/src/test/resources/d3c6c074-4d69-4b1f-9efb-dbd9644f82c0.xml
+++ b/src/test/resources/d3c6c074-4d69-4b1f-9efb-dbd9644f82c0.xml
@@ -19,7 +19,7 @@
     </gmd:characterSet>
     <gmd:hierarchyLevel>
       <gmd:MD_ScopeCode codeList="http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ScopeCode"
-      codeListValue="dataset">dataset</gmd:MD_ScopeCode>
+      codeListValue="series">series</gmd:MD_ScopeCode>
     </gmd:hierarchyLevel>
     <gmd:contact>
       <gmd:CI_ResponsibleParty uuid="75C5BEAC-2CB6-49D1-8AFC-CFC6390CECE9">
-- 
GitLab