From 118b1600651e416302b1705826e611be85e349b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Wed, 22 Nov 2023 10:15:22 +0100 Subject: [PATCH 01/81] Update version to 4.2.8-SNAPSHOT --- cachingxslt/pom.xml | 2 +- common/pom.xml | 2 +- core/pom.xml | 2 +- csw-server/pom.xml | 2 +- docs/manual/pom.xml | 2 +- docs/pom.xml | 2 +- doi/pom.xml | 2 +- domain/pom.xml | 2 +- es/es-dashboards/pom.xml | 2 +- es/pom.xml | 2 +- estest/pom.xml | 2 +- events/pom.xml | 2 +- harvesters/pom.xml | 2 +- healthmonitor/pom.xml | 2 +- index/pom.xml | 2 +- inspire-atom/pom.xml | 2 +- jmeter/pom.xml | 2 +- listeners/pom.xml | 2 +- messaging/pom.xml | 2 +- oaipmh/pom.xml | 2 +- pom.xml | 2 +- release/build.properties | 4 ++-- release/pom.xml | 2 +- schemas-test/pom.xml | 2 +- schemas/csw-record/pom.xml | 2 +- schemas/dublin-core/pom.xml | 2 +- schemas/iso19110/pom.xml | 2 +- schemas/iso19115-3.2018/pom.xml | 2 +- schemas/iso19139/pom.xml | 2 +- schemas/pom.xml | 2 +- schemas/schema-core/pom.xml | 2 +- sde/pom.xml | 2 +- services/pom.xml | 2 +- slave/pom.xml | 2 +- web-ui/pom.xml | 2 +- web/pom.xml | 2 +- .../webResources/WEB-INF/config-db/database_migration.xml | 5 +++++ .../WEB-INF/classes/setup/sql/data/data-db-default.sql | 4 ++-- .../classes/setup/sql/migrate/v428/migrate-default.sql | 2 ++ workers/camelPeriodicProducer/pom.xml | 2 +- workers/pom.xml | 2 +- workers/wfsfeature-harvester/pom.xml | 2 +- wro4j/pom.xml | 2 +- 43 files changed, 50 insertions(+), 43 deletions(-) create mode 100644 web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/v428/migrate-default.sql diff --git a/cachingxslt/pom.xml b/cachingxslt/pom.xml index 429bf32d75..fd64faf004 100644 --- a/cachingxslt/pom.xml +++ b/cachingxslt/pom.xml @@ -31,7 +31,7 @@ org.geonetwork-opensource geonetwork - 4.2.7-0 + 4.2.8-SNAPSHOT diff --git a/common/pom.xml b/common/pom.xml index 9e50bdc43e..de1ee141b9 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -31,7 +31,7 @@ org.geonetwork-opensource geonetwork - 4.2.7-0 + 4.2.8-SNAPSHOT diff --git a/core/pom.xml b/core/pom.xml index 8d21391c5a..cd6733b16e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -27,7 +27,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/csw-server/pom.xml b/csw-server/pom.xml index f4d8d74dfa..95ac6c53f3 100644 --- a/csw-server/pom.xml +++ b/csw-server/pom.xml @@ -27,7 +27,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/docs/manual/pom.xml b/docs/manual/pom.xml index 7e67f1e75a..bc7d16f82b 100644 --- a/docs/manual/pom.xml +++ b/docs/manual/pom.xml @@ -27,7 +27,7 @@ gn-docs org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 gn-guide diff --git a/docs/pom.xml b/docs/pom.xml index 3cebbe22e1..bd1830b81d 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -27,7 +27,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 gn-docs diff --git a/doi/pom.xml b/doi/pom.xml index bd411a10b3..67ae65a4ca 100644 --- a/doi/pom.xml +++ b/doi/pom.xml @@ -28,7 +28,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/domain/pom.xml b/domain/pom.xml index 02ba1d5279..925ab84a0c 100644 --- a/domain/pom.xml +++ b/domain/pom.xml @@ -27,7 +27,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/es/es-dashboards/pom.xml b/es/es-dashboards/pom.xml index 15f6025ae1..ba57773cd7 100644 --- a/es/es-dashboards/pom.xml +++ b/es/es-dashboards/pom.xml @@ -28,7 +28,7 @@ gn-es org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT diff --git a/es/pom.xml b/es/pom.xml index c54ad9b22b..0f3f352653 100644 --- a/es/pom.xml +++ b/es/pom.xml @@ -5,7 +5,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 gn-es diff --git a/estest/pom.xml b/estest/pom.xml index 1a01de7b7b..31ac01feba 100644 --- a/estest/pom.xml +++ b/estest/pom.xml @@ -5,7 +5,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/events/pom.xml b/events/pom.xml index aa99936f67..c5772ad1ca 100644 --- a/events/pom.xml +++ b/events/pom.xml @@ -28,7 +28,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT GeoNetwork Events diff --git a/harvesters/pom.xml b/harvesters/pom.xml index d31d481b1b..97b5561b0b 100644 --- a/harvesters/pom.xml +++ b/harvesters/pom.xml @@ -27,7 +27,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/healthmonitor/pom.xml b/healthmonitor/pom.xml index a29d5a0330..8651fdb4e6 100644 --- a/healthmonitor/pom.xml +++ b/healthmonitor/pom.xml @@ -27,7 +27,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/index/pom.xml b/index/pom.xml index 4f69049511..cf46136efe 100644 --- a/index/pom.xml +++ b/index/pom.xml @@ -5,7 +5,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 gn-index diff --git a/inspire-atom/pom.xml b/inspire-atom/pom.xml index 5bab54ceac..a5f9dc6de5 100644 --- a/inspire-atom/pom.xml +++ b/inspire-atom/pom.xml @@ -28,7 +28,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/jmeter/pom.xml b/jmeter/pom.xml index 52221c9286..82a2f0c4e1 100644 --- a/jmeter/pom.xml +++ b/jmeter/pom.xml @@ -29,7 +29,7 @@ org.geonetwork-opensource geonetwork - 4.2.7-0 + 4.2.8-SNAPSHOT diff --git a/listeners/pom.xml b/listeners/pom.xml index 918875c73d..4964369d33 100644 --- a/listeners/pom.xml +++ b/listeners/pom.xml @@ -28,7 +28,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT GeoNetwork Events diff --git a/messaging/pom.xml b/messaging/pom.xml index ee7e53d763..c83a2c545c 100644 --- a/messaging/pom.xml +++ b/messaging/pom.xml @@ -5,7 +5,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/oaipmh/pom.xml b/oaipmh/pom.xml index e018bd922b..8e3fde8477 100644 --- a/oaipmh/pom.xml +++ b/oaipmh/pom.xml @@ -30,7 +30,7 @@ org.geonetwork-opensource geonetwork - 4.2.7-0 + 4.2.8-SNAPSHOT diff --git a/pom.xml b/pom.xml index ddab87a1fc..b6f74d563d 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ org.geonetwork-opensource geonetwork pom - 4.2.7-0 + 4.2.8-SNAPSHOT GeoNetwork opensource GeoNetwork opensource is a standards based, Free and Open Source catalog application to manage spatially referenced diff --git a/release/build.properties b/release/build.properties index 399f1119ca..509406397a 100644 --- a/release/build.properties +++ b/release/build.properties @@ -5,8 +5,8 @@ homepage=https://geonetwork-opensource.org supportEmail=geonetwork-users@lists.sourceforge.net # Application version properties -version=4.2.7 -subVersion=0 +version=4.2.8 +subVersion=SNAPSHOT # Java runtime properties javaVersion=1.8.0 diff --git a/release/pom.xml b/release/pom.xml index 1955bbecdd..34409e262c 100644 --- a/release/pom.xml +++ b/release/pom.xml @@ -7,7 +7,7 @@ org.geonetwork-opensource geonetwork - 4.2.7-0 + 4.2.8-SNAPSHOT gn-release diff --git a/schemas-test/pom.xml b/schemas-test/pom.xml index 0d743084a7..77bf7006bf 100644 --- a/schemas-test/pom.xml +++ b/schemas-test/pom.xml @@ -27,7 +27,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 jar diff --git a/schemas/csw-record/pom.xml b/schemas/csw-record/pom.xml index de021bd5ed..b17d2ef112 100644 --- a/schemas/csw-record/pom.xml +++ b/schemas/csw-record/pom.xml @@ -5,7 +5,7 @@ gn-schemas org.geonetwork-opensource.schemas - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 gn-schema-csw-record diff --git a/schemas/dublin-core/pom.xml b/schemas/dublin-core/pom.xml index da16be4037..c7d6bac80e 100644 --- a/schemas/dublin-core/pom.xml +++ b/schemas/dublin-core/pom.xml @@ -5,7 +5,7 @@ gn-schemas org.geonetwork-opensource.schemas - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/schemas/iso19110/pom.xml b/schemas/iso19110/pom.xml index d08e10a1e4..8ab8a54eb2 100644 --- a/schemas/iso19110/pom.xml +++ b/schemas/iso19110/pom.xml @@ -28,7 +28,7 @@ gn-schemas org.geonetwork-opensource.schemas - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/schemas/iso19115-3.2018/pom.xml b/schemas/iso19115-3.2018/pom.xml index 549706be2f..b953893c4e 100644 --- a/schemas/iso19115-3.2018/pom.xml +++ b/schemas/iso19115-3.2018/pom.xml @@ -6,7 +6,7 @@ gn-schemas org.geonetwork-opensource.schemas - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/schemas/iso19139/pom.xml b/schemas/iso19139/pom.xml index 09140f4109..fd282ff4fd 100644 --- a/schemas/iso19139/pom.xml +++ b/schemas/iso19139/pom.xml @@ -5,7 +5,7 @@ gn-schemas org.geonetwork-opensource.schemas - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/schemas/pom.xml b/schemas/pom.xml index 431508ba18..2e013844c4 100644 --- a/schemas/pom.xml +++ b/schemas/pom.xml @@ -28,7 +28,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/schemas/schema-core/pom.xml b/schemas/schema-core/pom.xml index e0a766a4e9..c0adafe898 100644 --- a/schemas/schema-core/pom.xml +++ b/schemas/schema-core/pom.xml @@ -28,7 +28,7 @@ gn-schemas org.geonetwork-opensource.schemas - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/sde/pom.xml b/sde/pom.xml index 33ef5021bb..f324b16b47 100644 --- a/sde/pom.xml +++ b/sde/pom.xml @@ -30,7 +30,7 @@ org.geonetwork-opensource geonetwork - 4.2.7-0 + 4.2.8-SNAPSHOT diff --git a/services/pom.xml b/services/pom.xml index cea7d399e3..36c4370419 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -27,7 +27,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/slave/pom.xml b/slave/pom.xml index 013179fc72..96265c4300 100644 --- a/slave/pom.xml +++ b/slave/pom.xml @@ -28,7 +28,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT GeoNetwork Slave diff --git a/web-ui/pom.xml b/web-ui/pom.xml index 303fe90555..371df56061 100644 --- a/web-ui/pom.xml +++ b/web-ui/pom.xml @@ -30,7 +30,7 @@ org.geonetwork-opensource geonetwork - 4.2.7-0 + 4.2.8-SNAPSHOT org.geonetwork-opensource diff --git a/web/pom.xml b/web/pom.xml index 78a0aa0837..3b267df10c 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -30,7 +30,7 @@ org.geonetwork-opensource geonetwork - 4.2.7-0 + 4.2.8-SNAPSHOT diff --git a/web/src/main/webResources/WEB-INF/config-db/database_migration.xml b/web/src/main/webResources/WEB-INF/config-db/database_migration.xml index 898b37df28..52895f4c9c 100644 --- a/web/src/main/webResources/WEB-INF/config-db/database_migration.xml +++ b/web/src/main/webResources/WEB-INF/config-db/database_migration.xml @@ -369,5 +369,10 @@ WEB-INF/classes/setup/sql/migrate/v427/migrate- + + + WEB-INF/classes/setup/sql/migrate/v428/migrate- + + diff --git a/web/src/main/webapp/WEB-INF/classes/setup/sql/data/data-db-default.sql b/web/src/main/webapp/WEB-INF/classes/setup/sql/data/data-db-default.sql index d9836f92e3..9f998738e4 100644 --- a/web/src/main/webapp/WEB-INF/classes/setup/sql/data/data-db-default.sql +++ b/web/src/main/webapp/WEB-INF/classes/setup/sql/data/data-db-default.sql @@ -574,8 +574,8 @@ INSERT INTO Operations (id, name) VALUES (6,'featured'); INSERT INTO Settings (name, value, datatype, position, internal) VALUES ('system/site/name', 'My GeoNetwork catalogue', 0, 110, 'n'); INSERT INTO Settings (name, value, datatype, position, internal) VALUES ('system/site/siteId', '', 0, 120, 'n'); INSERT INTO Settings (name, value, datatype, position, internal) VALUES ('system/site/organization', 'My organization', 0, 130, 'n'); -INSERT INTO Settings (name, value, datatype, position, internal) VALUES ('system/platform/version', '4.2.7', 0, 150, 'n'); -INSERT INTO Settings (name, value, datatype, position, internal) VALUES ('system/platform/subVersion', '0', 0, 160, 'n'); +INSERT INTO Settings (name, value, datatype, position, internal) VALUES ('system/platform/version', '4.2.8', 0, 150, 'n'); +INSERT INTO Settings (name, value, datatype, position, internal) VALUES ('system/platform/subVersion', 'SNAPSHOT', 0, 160, 'n'); INSERT INTO Settings (name, value, datatype, position, internal) VALUES ('system/site/svnUuid', '', 0, 170, 'y'); INSERT INTO Settings (name, value, datatype, position, internal) VALUES ('system/server/host', 'localhost', 0, 210, 'n'); diff --git a/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/v428/migrate-default.sql b/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/v428/migrate-default.sql new file mode 100644 index 0000000000..eb0df0bac3 --- /dev/null +++ b/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/v428/migrate-default.sql @@ -0,0 +1,2 @@ +UPDATE Settings SET value='4.2.8' WHERE name='system/platform/version'; +UPDATE Settings SET value='SNAPSHOT' WHERE name='system/platform/subVersion'; diff --git a/workers/camelPeriodicProducer/pom.xml b/workers/camelPeriodicProducer/pom.xml index 069fcb0027..222b3dc14d 100644 --- a/workers/camelPeriodicProducer/pom.xml +++ b/workers/camelPeriodicProducer/pom.xml @@ -5,7 +5,7 @@ gn-workers org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/workers/pom.xml b/workers/pom.xml index 4359e6cc4f..f5ba631712 100644 --- a/workers/pom.xml +++ b/workers/pom.xml @@ -28,7 +28,7 @@ geonetwork org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/workers/wfsfeature-harvester/pom.xml b/workers/wfsfeature-harvester/pom.xml index ec78ac6143..beaee338b6 100644 --- a/workers/wfsfeature-harvester/pom.xml +++ b/workers/wfsfeature-harvester/pom.xml @@ -28,7 +28,7 @@ gn-workers org.geonetwork-opensource - 4.2.7-0 + 4.2.8-SNAPSHOT 4.0.0 diff --git a/wro4j/pom.xml b/wro4j/pom.xml index a278131b75..4aa39e2cf2 100644 --- a/wro4j/pom.xml +++ b/wro4j/pom.xml @@ -7,7 +7,7 @@ org.geonetwork-opensource geonetwork - 4.2.7-0 + 4.2.8-SNAPSHOT From cdc41248c800c3cb5296c05c3725c525cf273db9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Wed, 22 Nov 2023 15:44:19 +0100 Subject: [PATCH 02/81] [BP] Docs / Fix the mike version to 2.0.0 and change the parameter --no-redirect to --alias-type=copy (changed in mike 2.0.0) (#7507) --- .github/workflows/docs.yml | 4 ++-- docs/manual/requirements.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c9bc76806f..c386a57359 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -33,9 +33,9 @@ jobs: if: ${{ github.event_name == 'pull_request' }} working-directory: docs/manual run: | - mike deploy --title "4.2 Stable" --no-redirect --update-aliases 4.2 stable + mike deploy --title "4.2 Stable" --alias-type=copy --update-aliases 4.2 stable - name: deploy 4.2 docs to gh-pages branch if: ${{ github.event_name != 'pull_request' }} working-directory: docs/manual run: | - mike deploy --push --title "4.2 Stable" --no-redirect --update-aliases 4.2 stable + mike deploy --push --title "4.2 Stable" --alias-type=copy --update-aliases 4.2 stable diff --git a/docs/manual/requirements.txt b/docs/manual/requirements.txt index 589348b4bc..a3fae0623c 100644 --- a/docs/manual/requirements.txt +++ b/docs/manual/requirements.txt @@ -2,4 +2,4 @@ mkdocs-material mkdocs-static-i18n>=1.0.5 mkdocs-include-markdown-plugin mkdocs-exclude -mike +mike==2.0.0 From 48aaf02417a26b260a30eafde7517963e25935e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Thu, 23 Nov 2023 12:06:01 +0100 Subject: [PATCH 03/81] [BP] CSW Harvester / Don't set a default search filter field (#7494) --- .../catalog/components/admin/harvester/HarvesterDirective.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-ui/src/main/resources/catalog/components/admin/harvester/HarvesterDirective.js b/web-ui/src/main/resources/catalog/components/admin/harvester/HarvesterDirective.js index 280dd13061..3ca1261b83 100644 --- a/web-ui/src/main/resources/catalog/components/admin/harvester/HarvesterDirective.js +++ b/web-ui/src/main/resources/catalog/components/admin/harvester/HarvesterDirective.js @@ -430,7 +430,7 @@ } scope.harvester.filters.push({ - field: scope.cswCriteriaTranslated[0], + field: "", operator: "LIKE", value: "", condition: condition From 6d8b1fe78f2b977239e6fc2e6676afde41ebf789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Prunayre?= Date: Thu, 23 Nov 2023 12:07:19 +0100 Subject: [PATCH 04/81] [BP] Harvesting / WFS / Cleaning comment (#7504) Was related to an issue on QGIS server side. --- .../harvester/wfsfeatures/worker/EsWFSFeatureIndexer.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/workers/wfsfeature-harvester/src/main/java/org/fao/geonet/harvester/wfsfeatures/worker/EsWFSFeatureIndexer.java b/workers/wfsfeature-harvester/src/main/java/org/fao/geonet/harvester/wfsfeatures/worker/EsWFSFeatureIndexer.java index 9c7cf43290..1123638358 100644 --- a/workers/wfsfeature-harvester/src/main/java/org/fao/geonet/harvester/wfsfeatures/worker/EsWFSFeatureIndexer.java +++ b/workers/wfsfeature-harvester/src/main/java/org/fao/geonet/harvester/wfsfeatures/worker/EsWFSFeatureIndexer.java @@ -288,13 +288,6 @@ public CompletableFuture indexFeatures(Exchange exchange) throws Exception long begin = System.currentTimeMillis(); String epsg = "urn:ogc:def:crs:OGC:1.3:CRS84"; - // TODO: With QGIS server, this can be required - // for proper coordinate ordering. - // Not 100% sure if it always apply or related only - // to Ifremer setup - // if (strategyId.contains("qgis")) { - // epsg = "EPSG:4326"; - // } for (String featureType : resolvedTypeNames) { SimpleFeatureCollection fc = wfs.getFeatureSource(featureType).getFeatures(); From 49ce6248c1657680bbd9910bbbf98b50fa1a2067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Thu, 23 Nov 2023 12:09:33 +0100 Subject: [PATCH 05/81] [BP] Fix indexing of iso19110 metadata with cardinalities composed of multiple ranges (#7486) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix indexing of iso19110 metadata with cardinalities with multiple ranges * Update schemas/iso19110/src/main/plugin/iso19110/index-fields/index.xsl Co-authored-by: François Prunayre --------- Co-authored-by: François Prunayre --- .../src/main/plugin/iso19110/index-fields/index.xsl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/schemas/iso19110/src/main/plugin/iso19110/index-fields/index.xsl b/schemas/iso19110/src/main/plugin/iso19110/index-fields/index.xsl index 8eef33934d..1706f2d20b 100644 --- a/schemas/iso19110/src/main/plugin/iso19110/index-fields/index.xsl +++ b/schemas/iso19110/src/main/plugin/iso19110/index-fields/index.xsl @@ -118,7 +118,12 @@ "link": "", "type": "" - ,"cardinality": "" + + + , + + + ,"cardinality": "" From 045cd1736df5d319aa5710a92c0c0056e1caf166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Prunayre?= Date: Thu, 30 Nov 2023 10:05:01 +0100 Subject: [PATCH 06/81] [BP] Elasticsearch / Update to 7.17.15 (#7368) * Elasticsearch / Update to 7.17.13. * Elasticsearch / Update to 7.17.15. --- .../main/java/org/fao/geonet/kernel/search/EsSearchManager.java | 2 +- index/src/main/java/org/fao/geonet/index/es/EsRestClient.java | 2 +- pom.xml | 2 +- .../harvester/wfsfeatures/worker/EsWFSFeatureIndexer.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java b/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java index e07c3dfb48..a0c6ee6755 100644 --- a/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java @@ -47,7 +47,7 @@ import org.elasticsearch.client.indices.CreateIndexRequest; import org.elasticsearch.client.indices.CreateIndexResponse; import org.elasticsearch.client.indices.GetIndexRequest; -import org.elasticsearch.common.xcontent.XContentType; +import org.elasticsearch.xcontent.XContentType; import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.elasticsearch.index.reindex.DeleteByQueryRequest; import org.elasticsearch.script.Script; diff --git a/index/src/main/java/org/fao/geonet/index/es/EsRestClient.java b/index/src/main/java/org/fao/geonet/index/es/EsRestClient.java index 9837d551f1..f4486d6dc1 100644 --- a/index/src/main/java/org/fao/geonet/index/es/EsRestClient.java +++ b/index/src/main/java/org/fao/geonet/index/es/EsRestClient.java @@ -53,7 +53,7 @@ import org.elasticsearch.client.core.MainResponse; import org.elasticsearch.client.indices.AnalyzeRequest; import org.elasticsearch.client.indices.AnalyzeResponse; -import org.elasticsearch.common.xcontent.XContentType; +import org.elasticsearch.xcontent.XContentType; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryStringQueryBuilder; diff --git a/pom.xml b/pom.xml index b6f74d563d..1980b4a324 100644 --- a/pom.xml +++ b/pom.xml @@ -1492,7 +1492,7 @@ 8080 8090 - 7.15.1 + 7.17.15 linux-x86_64 tar.gz http diff --git a/workers/wfsfeature-harvester/src/main/java/org/fao/geonet/harvester/wfsfeatures/worker/EsWFSFeatureIndexer.java b/workers/wfsfeature-harvester/src/main/java/org/fao/geonet/harvester/wfsfeatures/worker/EsWFSFeatureIndexer.java index 1123638358..8c937a4649 100644 --- a/workers/wfsfeature-harvester/src/main/java/org/fao/geonet/harvester/wfsfeatures/worker/EsWFSFeatureIndexer.java +++ b/workers/wfsfeature-harvester/src/main/java/org/fao/geonet/harvester/wfsfeatures/worker/EsWFSFeatureIndexer.java @@ -39,7 +39,7 @@ import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.RequestOptions; -import org.elasticsearch.common.xcontent.XContentType; +import org.elasticsearch.xcontent.XContentType; import org.elasticsearch.rest.RestStatus; import org.fao.geonet.harvester.wfsfeatures.model.WFSHarvesterParameter; import org.fao.geonet.index.es.EsRestClient; From d8e753da4a3cb0fdc896ed3ed53127a497dca1b2 Mon Sep 17 00:00:00 2001 From: Ian Date: Thu, 30 Nov 2023 08:16:29 -0400 Subject: [PATCH 07/81] [BP] Fix some cases that were not considering both message and description when displaying errors. (#7517) --- .../resources/catalog/components/search/mdview/mdviewModule.js | 2 +- .../catalog/components/search/resultsview/SelectionDirective.js | 2 +- .../validationtools/GnmdInspireValidationDirective.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web-ui/src/main/resources/catalog/components/search/mdview/mdviewModule.js b/web-ui/src/main/resources/catalog/components/search/mdview/mdviewModule.js index a243036000..f0c1229100 100644 --- a/web-ui/src/main/resources/catalog/components/search/mdview/mdviewModule.js +++ b/web-ui/src/main/resources/catalog/components/search/mdview/mdviewModule.js @@ -196,7 +196,7 @@ // Data needs improvements // See https://github.com/geonetwork/core-geonetwork/issues/723 gnAlertService.addAlert({ - msg: reason.data.description, + msg: reason.data.message || reason.data.description, type: "danger" }); } diff --git a/web-ui/src/main/resources/catalog/components/search/resultsview/SelectionDirective.js b/web-ui/src/main/resources/catalog/components/search/resultsview/SelectionDirective.js index f9f16d196e..3f645d03f9 100644 --- a/web-ui/src/main/resources/catalog/components/search/resultsview/SelectionDirective.js +++ b/web-ui/src/main/resources/catalog/components/search/resultsview/SelectionDirective.js @@ -96,7 +96,7 @@ }, function (r) { gnAlertService.addAlert({ - msg: r.data.description, + msg: r.data.message || r.data.description, delay: 20000, type: "danger" }); diff --git a/web-ui/src/main/resources/catalog/components/validationtools/GnmdInspireValidationDirective.js b/web-ui/src/main/resources/catalog/components/validationtools/GnmdInspireValidationDirective.js index 7f40ff3a3a..41aff20e78 100644 --- a/web-ui/src/main/resources/catalog/components/validationtools/GnmdInspireValidationDirective.js +++ b/web-ui/src/main/resources/catalog/components/validationtools/GnmdInspireValidationDirective.js @@ -143,7 +143,7 @@ }); } else { gnAlertService.addAlert({ - msg: error.data.description, + msg: error.data.message || error.data.description, type: "danger" }); } From c8f6325137c4858685c828b48ee580f5a5ca849d Mon Sep 17 00:00:00 2001 From: Ian Date: Thu, 30 Nov 2023 08:48:41 -0400 Subject: [PATCH 08/81] [BP] When getting locale message, default locale to LocaleContextHolder when locale is null (#7516) --- .../main/java/org/fao/geonet/languages/LocaleMessages.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/fao/geonet/languages/LocaleMessages.java b/core/src/main/java/org/fao/geonet/languages/LocaleMessages.java index 5626099003..69c31cc491 100644 --- a/core/src/main/java/org/fao/geonet/languages/LocaleMessages.java +++ b/core/src/main/java/org/fao/geonet/languages/LocaleMessages.java @@ -33,6 +33,7 @@ import org.fao.geonet.utils.Log; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.BeanFactoryAnnotationUtils; +import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.support.ResourceBundleMessageSource; import com.google.common.collect.BiMap; @@ -57,16 +58,16 @@ public static String getMessageForLocale(String messageKey, Locale locale, Strin * * @param messageKey message key to use when retrieving the value from the properties file. * @param args Argument that may be supplied to the messagekey string - * @param locale locale to use when getting the message key + * @param locale locale to use when getting the message key. If null then it will default to locale context holder. * @param resourceBundleBeanQualifier resource bundle qualifier to use when getting ResourceBundleMessageSource bean * @return message */ public static String getMessageForLocale(String messageKey, Object[] args, Locale locale, String resourceBundleBeanQualifier) { - if (!StringUtils.isEmpty(messageKey) && locale !=null) { + if (!StringUtils.isEmpty(messageKey)) { ResourceBundleMessageSource resourceBundleMessageSource = getResourceBundleMessageSource(resourceBundleBeanQualifier); if (resourceBundleMessageSource != null) { - return resourceBundleMessageSource.getMessage(messageKey, args, locale); + return resourceBundleMessageSource.getMessage(messageKey, args, locale == null ? LocaleContextHolder.getLocale() : locale); } } // If we could not find the ResourceBundleMessageSource or the messageKey was in an invalid format then lets return the original key as the message. From 44055177c21d9e5cddfbf9004f6848d15f030dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Thu, 30 Nov 2023 16:29:26 +0100 Subject: [PATCH 09/81] [BP] Fix language for region picker directives (#7495) --- .../catalog/components/common/map/partials/drawbbox.html | 2 +- .../resources/catalog/components/utility/UtilityDirective.js | 4 ++++ .../catalog/components/utility/partials/regionpicker.html | 1 + .../resources/catalog/templates/admin/harvest/type/csw.html | 3 ++- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/web-ui/src/main/resources/catalog/components/common/map/partials/drawbbox.html b/web-ui/src/main/resources/catalog/components/common/map/partials/drawbbox.html index 7babe4d873..f0aa3ebda3 100644 --- a/web-ui/src/main/resources/catalog/components/common/map/partials/drawbbox.html +++ b/web-ui/src/main/resources/catalog/components/common/map/partials/drawbbox.html @@ -3,7 +3,7 @@
-
+
diff --git a/web-ui/src/main/resources/catalog/components/utility/UtilityDirective.js b/web-ui/src/main/resources/catalog/components/utility/UtilityDirective.js index 561023e5b4..7ee5f238fb 100644 --- a/web-ui/src/main/resources/catalog/components/utility/UtilityDirective.js +++ b/web-ui/src/main/resources/catalog/components/utility/UtilityDirective.js @@ -482,6 +482,8 @@ var addGeonames = !attrs["disableGeonames"]; scope.regionTypes = []; + scope.lang = attrs["lang"]; + function setDefault() { var defaultThesaurus = attrs["default"]; for (t in scope.regionTypes) { @@ -736,6 +738,8 @@ } }); } + scope.lang = attrs["lang"]; + scope.$watch("regionType", function (val) { if (scope.regionType) { if (scope.regionType.id == "geonames") { diff --git a/web-ui/src/main/resources/catalog/components/utility/partials/regionpicker.html b/web-ui/src/main/resources/catalog/components/utility/partials/regionpicker.html index 19c941aab1..4e6b1bb255 100644 --- a/web-ui/src/main/resources/catalog/components/utility/partials/regionpicker.html +++ b/web-ui/src/main/resources/catalog/components/utility/partials/regionpicker.html @@ -18,6 +18,7 @@ class="form-control" autocomplete="off" data-gn-region-picker-input="" + data-lang="{{lang}}" placeholder="{{'chooseRegion' | translate}}" /> diff --git a/web-ui/src/main/resources/catalog/templates/admin/harvest/type/csw.html b/web-ui/src/main/resources/catalog/templates/admin/harvest/type/csw.html index 4be559ffff..cdf833727d 100644 --- a/web-ui/src/main/resources/catalog/templates/admin/harvest/type/csw.html +++ b/web-ui/src/main/resources/catalog/templates/admin/harvest/type/csw.html @@ -94,6 +94,7 @@ data-ng-model="harvesterSelected.searches[0][c].value"/> --> +
From 1019cba2c03fadf6cc03a69e4096578078e4f87e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Fri, 1 Dec 2023 12:05:08 +0100 Subject: [PATCH 10/81] [BP] Remote INSPIRE Atom Feeds harvester - Remove duplicates by dataset identifier (#7491) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remote INSPIRE Atom Feeds harvester - Remove duplicates by dataset identifier, that could be obtained from datasets referenced by different service feeds * Fix sonarlint warnings --------- Co-authored-by: Juan Luis Rodríguez --- .../harvester/InspireAtomHarvester.java | 166 +++++------------- 1 file changed, 43 insertions(+), 123 deletions(-) diff --git a/inspire-atom/src/main/java/org/fao/geonet/inspireatom/harvester/InspireAtomHarvester.java b/inspire-atom/src/main/java/org/fao/geonet/inspireatom/harvester/InspireAtomHarvester.java index 6379dbf6e8..7954f45fd6 100644 --- a/inspire-atom/src/main/java/org/fao/geonet/inspireatom/harvester/InspireAtomHarvester.java +++ b/inspire-atom/src/main/java/org/fao/geonet/inspireatom/harvester/InspireAtomHarvester.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2010 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -50,6 +50,10 @@ import java.util.*; +import static java.util.Comparator.comparing; +import static java.util.stream.Collectors.collectingAndThen; +import static java.util.stream.Collectors.toCollection; + /** * Class to harvest the Atom documents referenced in the iso19139 in the catalog. @@ -67,14 +71,14 @@ public class InspireAtomHarvester { /** * Constructor. * - * @param geonetGontext GeoNetwork context. + * @param geonetContext GeoNetwork context. */ - public InspireAtomHarvester(final GeonetContext geonetGontext) { - this.gc = geonetGontext; + public InspireAtomHarvester(final GeonetContext geonetContext) { + this.gc = geonetContext; } /** - * Process the metadata to check if have an atom document referenced. In this case, the atom + * Process the metadata to check if it has an atom document referenced. In this case, the atom * document is retrieved and stored in the metadata table. */ public final Element harvest() { @@ -89,7 +93,7 @@ public final Element harvest() { String atomProtocol = sm.getValue(Settings.SYSTEM_INSPIRE_ATOM_PROTOCOL); // Using index information, as type is only available in index and not in database. - // If retrieved from database retrieves all iso19139 metadata and should apply for each result an xslt process + // If retrieved from database retrieves all iso19139 metadata and should apply for each result a xslt process // to identify if a service or dataset (slow process) List iso19139Metadata = InspireAtomUtil.searchMetadataByTypeAndProtocol(ServiceContext.get(), @@ -142,7 +146,7 @@ public final Element harvest() { * @param metadataId Metadata identifier */ public final void harvestServiceMetadata(final ServiceContext context, final String metadataId) { - Logger logger = Log.createLogger(Geonet.ATOM); + Logger localLogger = Log.createLogger(Geonet.ATOM); final InspireAtomFeedRepository repository = context.getBean(InspireAtomFeedRepository.class); DataManager dataMan = context.getBean(DataManager.class); @@ -150,27 +154,27 @@ public final void harvestServiceMetadata(final ServiceContext context, final Str final IMetadataUtils metadataUtils = gc.getBean(IMetadataUtils.class); AbstractMetadata iso19139Metadata = metadataUtils.findOne( - Specification.where((Specification) MetadataSpecs.isType(MetadataType.METADATA)) - .and((Specification) MetadataSpecs.isIso19139Schema()) - .and((Specification) MetadataSpecs.hasMetadataId(Integer.parseInt(metadataId)))); + Specification.where((Specification) MetadataSpecs.isType(MetadataType.METADATA)) + .and((Specification) MetadataSpecs.isIso19139Schema()) + .and((Specification) MetadataSpecs.hasMetadataId(Integer.parseInt(metadataId)))); Element result = new Element("response"); try { - logger.info("ATOM feed harvest started for metadata: " + metadataId); + localLogger.info("ATOM feed harvest started for metadata: " + metadataId); // Value used in metadata editor for online resources to identify an INSPIRE atom resource String atomProtocol = sm.getValue(Settings.SYSTEM_INSPIRE_ATOM_PROTOCOL); // Removes all atom information from existing metadata. Harvester will reload with updated information - logger.info("ATOM feed harvest: remove existing metadata feed"); + localLogger.info("ATOM feed harvest: remove existing metadata feed"); repository.deleteAll(InspireAtomFeedSpecs.hasMetadataId(Integer.parseInt(metadataId))); - dataMan.indexMetadata(Arrays.asList(new String[]{metadataId})); + dataMan.indexMetadata(Arrays.asList(metadataId)); // Process service metadata feeds // datasetsInformation stores the dataset information for identifier and namespace for the services feed. // This information is not available in the datasets feeds - logger.info("ATOM feed harvest: processing service metadata feeds"); + localLogger.info("ATOM feed harvest: processing service metadata feeds"); // Retrieve the service metadata referencing atom feed document Map serviceMetadataWithAtomFeed = @@ -180,13 +184,13 @@ public final void harvestServiceMetadata(final ServiceContext context, final Str processServiceMetadataFeeds(dataMan, serviceMetadataWithAtomFeed, result); // Process dataset metadata feeds related to the service metadata - logger.info("ATOM feed harvest for metadata: " + metadataId + ", processing dataset metadata feeds"); - processDatasetsMetadataFeeds(context, dataMan, datasetsInformation, result); + localLogger.info("ATOM feed harvest for metadata: " + metadataId + ", processing dataset metadata feeds"); + processDatasetsMetadataFeeds(dataMan, datasetsInformation, result); - logger.info("ATOM feed harvest finished for metadata: " + metadataId); + localLogger.info("ATOM feed harvest finished for metadata: " + metadataId); } catch (Exception x) { - logger.error("ATOM feed harvest error: " + x.getMessage()); - logger.error(x); + localLogger.error("ATOM feed harvest error: " + x.getMessage()); + localLogger.error(x); } } @@ -194,13 +198,13 @@ public final void harvestServiceMetadata(final ServiceContext context, final Str /** * Process service metadata feeds. * - * @return a Map with the datasets referenced in the service feeds (dataset-id, + * @return a List with the datasets referenced in the service feeds (dataset-id, * dataset-namespace). The namespace is only available in the service feeds. Dataset feeds seem * not containing this information. */ private List processServiceMetadataFeeds(final DataManager dataMan, - final Map serviceMetadataWithAtomFeeds, - Element result) + final Map serviceMetadataWithAtomFeeds, + Element result) throws Exception { List datasetsInformation = new ArrayList<>(); @@ -217,7 +221,7 @@ private List processServiceMetadataFeeds(final DataManager data try { String atomUrl = entry.getValue(); - logger.info("Processing feed (" + i++ + "/"+ total + ") for service metadata with uuid:" + metadataUuid); + logger.info("Processing feed (" + i++ + "/" + total + ") for service metadata with uuid:" + metadataUuid); logger.info("Atom feed Url for service metadata (" + metadataUuid + "): " + atomUrl); String atomFeedDocument = InspireAtomUtil.retrieveRemoteAtomFeedDocument(gc, atomUrl); @@ -240,12 +244,12 @@ private List processServiceMetadataFeeds(final DataManager data repository.save(inspireAtomFeed); // Index the metadata to store the atom feed information in the index - dataMan.indexMetadata(Arrays.asList(new String[]{metadataId})); + dataMan.indexMetadata(Arrays.asList(metadataId)); // Extract datasets information (identifier, namespace) from the service feed: // The namespace is only available in service feed and no in dataset feeds. - // Also NGR metadata uses MD_Identifier instead of RS_Identifier so lacks of this information + // Also, NGR metadata uses MD_Identifier instead of RS_Identifier so lacks of this information logger.debug("Extract datasets information (identifier, namespace) from service atom feed (" + atomUrl + ")"); datasetsInformation.addAll(InspireAtomUtil.extractRelatedDatasetsInfoFromServiceFeed(atomFeedDocument, dataMan)); @@ -261,31 +265,21 @@ private List processServiceMetadataFeeds(final DataManager data } } - return datasetsInformation; + // Remove duplicates by dataset identifier, that could be obtained from datasets referenced by different service feeds + return datasetsInformation.stream() + .collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparing(DatasetFeedInfo::getIdentifier))), + ArrayList::new)); } - /** - * Process dataset metadata feeds. - */ - private void processDatasetsMetadataFeeds(final DataManager dataMan, - final List datasetsFeedInformation, - Element result) - throws Exception { - - processDatasetsMetadataFeeds(ServiceContext.get(), dataMan, datasetsFeedInformation, result); - } - /** * Process the feeds for a set datasets related to a service metadata. * * @param datasetsFeedInformation Datasets map (datasetid, namespace) */ - private void processDatasetsMetadataFeeds(final ServiceContext context, - final DataManager dataMan, + private void processDatasetsMetadataFeeds(final DataManager dataMan, final List datasetsFeedInformation, - final Element result) - throws Exception { + final Element result) { final InspireAtomFeedRepository repository = gc.getBean(InspireAtomFeedRepository.class); @@ -293,7 +287,7 @@ private void processDatasetsMetadataFeeds(final ServiceContext context, long i = 1; // Process the metadata retrieving the atom feed content and store it in the catalog. - for(DatasetFeedInfo datasetFeedInfo: datasetsFeedInformation) { + for (DatasetFeedInfo datasetFeedInfo : datasetsFeedInformation) { String metadataUuid = ""; try { @@ -303,15 +297,18 @@ private void processDatasetsMetadataFeeds(final ServiceContext context, String atomUrl = datasetFeedInfo.feedUrl; - logger.info("Processing feed (" + i++ + "/"+ total + ") for dataset metadata with uuid:" + metadataUuid + ", feed url: " + atomUrl); + logger.info("Processing feed (" + i++ + "/" + total + ") for dataset metadata with uuid:" + + metadataUuid + ", feed url: " + atomUrl); if (StringUtils.isEmpty(metadataUuid)) { - logger.warning("Metadata with dataset identifier (" + datasetFeedInfo.identifier + ") is not available. Skip dataset feed processing"); + logger.warning("Metadata with dataset identifier (" + datasetFeedInfo.identifier + + ") is not available. Skip dataset feed processing"); continue; } if (!atomUrl.toLowerCase().endsWith(".xml")) { - logger.warning("Atom feed Document (" + atomUrl + ") for dataset metadata (" + metadataUuid + ") is not a valid feed"); + logger.warning("Atom feed Document (" + atomUrl + ") for dataset metadata (" + metadataUuid + + ") is not a valid feed"); continue; } @@ -340,7 +337,7 @@ private void processDatasetsMetadataFeeds(final ServiceContext context, repository.save(inspireAtomFeed); // Index the metadata to store the atom feed information in the index - dataMan.indexMetadata(Arrays.asList(new String[]{metadataId})); + dataMan.indexMetadata(Arrays.asList(metadataId)); result.addContent(new Element("feed").setAttribute("uuid", metadataUuid) .setAttribute("feed", atomUrl).setAttribute("status", "ok")); } catch (Exception ex) { @@ -351,81 +348,4 @@ private void processDatasetsMetadataFeeds(final ServiceContext context, } } } - - - /** - * Process the feeds for a set datasets related to a service metadata. - * - */ - private void processDatasetsMetadataFeedsForService(final ServiceContext context, - final DataManager dataMan, - final List datasetsFeedInformation, - final Element result) - throws Exception { - - // Retrieve the metadata referencing atom feed documents. - - // Value used in metadata editor for online resources to identify an INSPIRE atom resource - String atomProtocol = gc.getBean(SettingManager.class).getValue("system/inspire/atomProtocol"); - - final InspireAtomFeedRepository repository = gc.getBean(InspireAtomFeedRepository.class); - - // Process the metadata retrieving the atom feed content and store it in the catalog. - for(DatasetFeedInfo datasetFeedInfo: datasetsFeedInformation) { - String atomDatasetId = datasetFeedInfo.identifier; - String metadataUuid = ""; - - try { - metadataUuid = InspireAtomUtil.retrieveDatasetUuidFromIdentifier( - gc.getBean(EsSearchManager.class), atomDatasetId); - - String atomDatasetNs = datasetFeedInfo.namespace; - logger.debug("Dataset, id=" + atomDatasetId + ", namespace=" + atomDatasetNs); - - if (StringUtils.isEmpty(metadataUuid)) { - logger.warning("Can't find dataset metadata with datasetIdCode:" + atomDatasetId); - continue; - } - - logger.info("Processing feed for dataset metadata with uuid:" + metadataUuid); - - String metadataId = dataMan.getMetadataId(metadataUuid); - - // Get the atom feed url for the dataset - String atomUrl = datasetFeedInfo.feedUrl; - logger.debug("Dataset, feedurl=" + atomUrl); - - // Retrieve the atom document and store it. - String atomFeedDocument = InspireAtomUtil.retrieveRemoteAtomFeedDocument(gc, atomUrl); - logger.debug("Dataset feed: " + atomFeedDocument); - - Element atomDoc = Xml.loadString(atomFeedDocument, false); - - // Skip document if not a feed - if (!atomDoc.getNamespace().equals(Geonet.Namespaces.ATOM)) { - logger.warning("Atom feed Document (" + atomUrl + ") for dataset metadata (" + metadataUuid + ") is not a valid feed"); - continue; - } - - InspireAtomFeed inspireAtomFeed = InspireAtomFeed.build(atomDoc); - inspireAtomFeed.setMetadataId(Integer.parseInt(metadataId)); - inspireAtomFeed.setAtomDatasetid(atomDatasetId); - inspireAtomFeed.setAtomDatasetns(atomDatasetNs); - inspireAtomFeed.setAtomUrl(atomUrl); - inspireAtomFeed.setAtom(atomFeedDocument); - - repository.save(inspireAtomFeed); - - // Index the metadata to store the atom feed information in the index - dataMan.indexMetadata(Arrays.asList(new String[]{metadataId})); - - result.addContent(new Element("feed").setAttribute("uuid", metadataUuid).setAttribute("feed", atomUrl).setAttribute("status", "ok")); - } catch (Exception ex) { - // Log exception and continue processing the other metadata - logger.error("Failed to process atom feed for dataset metadata: " + metadataUuid + " " + ex.getMessage()); - result.addContent(new Element("feed").setAttribute("uuid", metadataUuid).setAttribute("error", ex.getMessage()).setAttribute("status", "error")); - - } - } - } } From 37c4a0b1defc70948b8c7836a5c360a8602dc9b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Fri, 1 Dec 2023 14:01:44 +0100 Subject: [PATCH 11/81] [BP] INSPIRE Atom Search - add missing filter by feed dataset identifiers (#7492) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * INSPIRE Atom Search - add missing filter by feed dataset identifiers * Fix sonarlint warnings and format code --------- Co-authored-by: Juan Luis Rodríguez --- .../services/inspireatom/AtomSearch.java | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomSearch.java b/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomSearch.java index b88a509687..cd1e247b53 100644 --- a/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomSearch.java +++ b/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomSearch.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -30,9 +30,11 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jeeves.server.context.ServiceContext; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.text.StringEscapeUtils; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.search.SearchHit; import org.fao.geonet.api.ApiUtils; +import org.fao.geonet.api.exception.FeatureNotEnabledException; import org.fao.geonet.api.tools.i18n.LanguageUtils; import org.fao.geonet.constants.Geonet; import org.fao.geonet.domain.InspireAtomFeed; @@ -58,9 +60,9 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.stream.Collectors; import static org.fao.geonet.kernel.search.EsFilterBuilder.buildPermissionsFilter; import static org.fao.geonet.kernel.search.EsSearchManager.FIELDLIST_CORE; @@ -108,25 +110,26 @@ public class AtomSearch { @ApiResponse(responseCode = "204", description = "Not authenticated.") }) @ResponseStatus(OK) - @ResponseBody public Element feeds( @Parameter( description = "fileIdentifier", required = false) @RequestParam(defaultValue = "") - String fileIdentifier, + String fileIdentifier, @Parameter(hidden = true) - HttpServletRequest request) throws Exception { + HttpServletRequest request) throws Exception { ServiceContext context = ApiUtils.createServiceContext(request); boolean inspireEnable = sm.getValueAsBool(Settings.SYSTEM_INSPIRE_ENABLE); if (!inspireEnable) { Log.info(Geonet.ATOM, "Inspire is disabled"); - throw new Exception("Inspire is disabled"); + throw new FeatureNotEnabledException("Inspire is disabled"); } - List datasetIdentifiers = new ArrayList<>(); + List datasetIdentifiers; + + String datasetIdentifiersFilter = ""; // If fileIdentifier is provided search only in the related datasets if (StringUtils.isNotEmpty(fileIdentifier)) { @@ -142,9 +145,12 @@ public Element feeds( // Retrieve the datasets related to the service metadata datasetIdentifiers = InspireAtomUtil.extractRelatedDatasetsIdentifiers(schema, md, dm); - // Add query filter / TODO Migrate ? - // String values = Joiner.on(" or ").join(datasetIdentifiers); - // params.addContent(new Element("identifier").setText(values)); + String datasets = datasetIdentifiers.stream().map(StringEscapeUtils::escapeJson) + .collect(Collectors.joining("\",\"", "\"", "\"")); + + datasetIdentifiersFilter = String.format(", {\"terms\": {\n" + + " \"resourceIdentifier.code\": [%s]\n" + + " }}", datasets); } String privilegesFilter = buildPermissionsFilter(context); @@ -161,11 +167,11 @@ public Element feeds( " \"query_string\": {" + " \"query\": \"%s\"" + " }" + - " }]" + + " }%s]" + " }" + "}"; ObjectMapper objectMapper = new ObjectMapper(); - JsonNode esJsonQuery = objectMapper.readTree(String.format(jsonQuery, privilegesFilter)); + JsonNode esJsonQuery = objectMapper.readTree(String.format(jsonQuery, privilegesFilter, datasetIdentifiersFilter)); final SearchResponse result = searchMan.query( esJsonQuery, @@ -202,19 +208,18 @@ public Element feeds( @ApiResponse(responseCode = "204", description = "Not authenticated.") }) @ResponseStatus(OK) - @ResponseBody public String feedsAsHtml( @Parameter( description = "fileIdentifier", required = false) @RequestParam(defaultValue = "") - String fileIdentifier, + String fileIdentifier, @Parameter(hidden = true) - HttpServletRequest request) throws Exception { + HttpServletRequest request) throws Exception { Element feeds = feeds(fileIdentifier, request); Locale locale = languageUtils.parseAcceptLanguage(request.getLocales()); - String language = isoLanguagesMapper.iso639_2T_to_iso639_2B(locale.getISO3Language()); + String language = IsoLanguagesMapper.iso639_2T_to_iso639_2B(locale.getISO3Language()); language = XslUtil.twoCharLangCode(language, "eng").toLowerCase(); return new XsltResponseWriter(null, "atom-feeds") From cc1a79f8109f0befdc1e0432117e74c750586f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Fri, 1 Dec 2023 15:44:46 +0100 Subject: [PATCH 12/81] [BP] Validation of INSPIRE ATOM services to return API exceptions instead of error 400 (#7490) --- .../geonet/services/inspireatom/AtomDescribe.java | 11 +++++++++++ .../fao/geonet/services/inspireatom/AtomGetData.java | 12 ++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomDescribe.java b/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomDescribe.java index 97ac43a914..97091e008e 100644 --- a/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomDescribe.java +++ b/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomDescribe.java @@ -50,6 +50,7 @@ import org.jdom.Element; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; +import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -138,6 +139,16 @@ public Element describeResource( throw new Exception("Inspire is disabled"); } + if (StringUtils.isEmpty(fileIdentifier)) { + if (StringUtils.isEmpty(spatial_dataset_identifier_code)) { + throw new MissingServletRequestParameterException("spatial_dataset_identifier_code", "String"); + } + + if (StringUtils.isEmpty(spatial_dataset_identifier_namespace)) { + throw new MissingServletRequestParameterException("spatial_dataset_identifier_namespace", "String"); + } + } + Element response = StringUtils.isEmpty(fileIdentifier) ? processDatasetFeed(spatial_dataset_identifier_code, spatial_dataset_identifier_namespace, context) diff --git a/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomGetData.java b/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomGetData.java index 05fdd089b8..a9133fe38a 100644 --- a/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomGetData.java +++ b/inspire-atom/src/main/java/org/fao/geonet/services/inspireatom/AtomGetData.java @@ -91,18 +91,18 @@ public class AtomGetData { public Element downloadResource( @Parameter( description = "spatial_dataset_identifier_code", - required = false) - @RequestParam(defaultValue = "") + required = true) + @RequestParam String spatial_dataset_identifier_code, @Parameter( description = "spatial_dataset_identifier_namespace", - required = false) - @RequestParam(defaultValue = "") + required = true) + @RequestParam String spatial_dataset_identifier_namespace, @Parameter( description = "crs", - required = false) - @RequestParam(defaultValue = "") + required = true) + @RequestParam String crs, @Parameter(hidden = true) HttpServletRequest request, From 7d60ec67260bf04b2019f68071801e7a8594735a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Thu, 30 Nov 2023 11:42:28 +0100 Subject: [PATCH 13/81] [BP] Metadata indexing / Escape website and logo information for contacts --- .../src/main/plugin/iso19115-3.2018/index-fields/index.xsl | 4 ++-- .../iso19139/src/main/plugin/iso19139/index-fields/index.xsl | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index.xsl b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index.xsl index 42fb609862..9c137f61f4 100644 --- a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index.xsl +++ b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index.xsl @@ -1359,8 +1359,8 @@ "role":"", "email":"", - "website":"", - "logo":"", + "website":"", + "logo":"", "individual":"", "position":"", "phone":"", diff --git a/schemas/iso19139/src/main/plugin/iso19139/index-fields/index.xsl b/schemas/iso19139/src/main/plugin/iso19139/index-fields/index.xsl index 0c7495d2a9..6ed7ba342b 100644 --- a/schemas/iso19139/src/main/plugin/iso19139/index-fields/index.xsl +++ b/schemas/iso19139/src/main/plugin/iso19139/index-fields/index.xsl @@ -1215,8 +1215,8 @@ "role":"", "email":"", - "website":"", - "logo":"", + "website":"", + "logo":"", "individual":"", "position":"", "phone":"", From d1cdd18b5bcdded83ba0fa225285dfdfdfea8877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Mon, 4 Dec 2023 10:58:08 +0100 Subject: [PATCH 14/81] [BP] Search / Add option to show less facet values (#7497) * Add option to show less facet values * Add option to show less facet values - add additional styling --- .../components/elasticsearch/EsFacet.js | 6 +++++ .../directives/FacetDirective.js | 6 +++++ .../directives/partials/facets.html | 11 +++++++++- .../searchmanager/SearchFormDirective.js | 22 +++++++++++++++++++ .../resources/catalog/style/gn_search.less | 3 ++- 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/web-ui/src/main/resources/catalog/components/elasticsearch/EsFacet.js b/web-ui/src/main/resources/catalog/components/elasticsearch/EsFacet.js index 8944549af1..7322804396 100644 --- a/web-ui/src/main/resources/catalog/components/elasticsearch/EsFacet.js +++ b/web-ui/src/main/resources/catalog/components/elasticsearch/EsFacet.js @@ -83,6 +83,9 @@ } } }; + this.getDefaultSize = function () { + return DEFAULT_SIZE; + }; this.buildDefaultQuery = function (query, size) { return { script_fields: defaultScriptedFields, @@ -392,6 +395,9 @@ facetModel.type = "terms"; facetModel.size = reqAgg.terms.size; facetModel.more = respAgg.sum_other_doc_count > 0; + facetModel.less = + respAgg.buckets && + respAgg.buckets.length > Math.min(reqAgg.terms.size, DEFAULT_SIZE); facetModel.includeFilter = reqAgg.terms.include !== undefined; facetModel.excludeFilter = reqAgg.terms.exclude !== undefined; var esFacet = this; diff --git a/web-ui/src/main/resources/catalog/components/elasticsearch/directives/FacetDirective.js b/web-ui/src/main/resources/catalog/components/elasticsearch/directives/FacetDirective.js index f4e48934d3..bae90be49a 100644 --- a/web-ui/src/main/resources/catalog/components/elasticsearch/directives/FacetDirective.js +++ b/web-ui/src/main/resources/catalog/components/elasticsearch/directives/FacetDirective.js @@ -101,6 +101,12 @@ }); }; + FacetsController.prototype.loadLessTerms = function (facet) { + this.searchCtrl.loadLessTerms(facet).then(function (terms) { + angular.copy(terms, facet); + }); + }; + FacetsController.prototype.filterTerms = function (facet) { if (facet.meta && facet.meta.filterByTranslation) { var match = []; diff --git a/web-ui/src/main/resources/catalog/components/elasticsearch/directives/partials/facets.html b/web-ui/src/main/resources/catalog/components/elasticsearch/directives/partials/facets.html index 6b9eff7841..c3805b6b5a 100644 --- a/web-ui/src/main/resources/catalog/components/elasticsearch/directives/partials/facets.html +++ b/web-ui/src/main/resources/catalog/components/elasticsearch/directives/partials/facets.html @@ -136,12 +136,21 @@ more + | + + less + diff --git a/web-ui/src/main/resources/catalog/components/search/searchmanager/SearchFormDirective.js b/web-ui/src/main/resources/catalog/components/search/searchmanager/SearchFormDirective.js index 79a61720f5..528734fca2 100644 --- a/web-ui/src/main/resources/catalog/components/search/searchmanager/SearchFormDirective.js +++ b/web-ui/src/main/resources/catalog/components/search/searchmanager/SearchFormDirective.js @@ -544,6 +544,28 @@ ); }; + this.loadLessTerms = function (facet, moreItemsNumber) { + var request = gnESService.generateEsRequest( + $scope.finalParams, + $scope.searchObj.state, + $scope.searchObj.configId, + $scope.searchObj.filters + ); + + var itemsToRequest = facet.items.length - (moreItemsNumber || 20); + if (itemsToRequest <= 0) { + itemsToRequest = gnESFacet.getDefaultSize(); + } + return gnESClient.getTermsParamsWithNewSizeOrFilter( + request.query, + facet.key, + facet.config, + itemsToRequest, + facet.include || undefined, + facet.exclude || undefined + ); + }; + this.filterTerms = function (facet) { var request = gnESService.generateEsRequest( $scope.finalParams, diff --git a/web-ui/src/main/resources/catalog/style/gn_search.less b/web-ui/src/main/resources/catalog/style/gn_search.less index 3ef31cfb22..990fb699d5 100644 --- a/web-ui/src/main/resources/catalog/style/gn_search.less +++ b/web-ui/src/main/resources/catalog/style/gn_search.less @@ -124,7 +124,8 @@ color: @brand-primary; } } - .gn-facet-more { + .gn-facet-more, + .gn-facet-less { margin-left: 15px; } .gn-facet-input-group { From 0c3b4055a3d58e655a51ce56b77ef48c3fc61c41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Tue, 5 Dec 2023 07:53:46 +0100 Subject: [PATCH 15/81] [BP] Metadata workflow / Record view / reload the page with the approved version when cancelling a working copy (#7503) * Metadata workflow / Record view / reload the page with the approved version when cancelling a working copy, instead of redirecting to the search results * Metadata workflow / Record view / reload the page with the approved version when cancelling a working copy - fix confirmation message to display the metadata title --- .../metadataactions/MetadataActionService.js | 6 +++- .../components/search/mdview/mdviewModule.js | 35 +++++++++++++++++-- .../resources/catalog/locales/ca-core.json | 4 +-- .../resources/catalog/locales/cs-core.json | 4 +-- .../resources/catalog/locales/da-core.json | 4 +-- .../resources/catalog/locales/de-core.json | 4 +-- .../resources/catalog/locales/en-core.json | 2 +- .../resources/catalog/locales/es-core.json | 4 +-- .../resources/catalog/locales/fi-core.json | 4 +-- .../resources/catalog/locales/fr-core.json | 4 +-- .../resources/catalog/locales/is-core.json | 4 +-- .../resources/catalog/locales/it-core.json | 4 +-- .../resources/catalog/locales/ko-core.json | 4 +-- .../resources/catalog/locales/nl-core.json | 4 +-- .../resources/catalog/locales/pt-core.json | 4 +-- .../resources/catalog/locales/ru-core.json | 4 +-- .../resources/catalog/locales/sk-core.json | 4 +-- .../resources/catalog/locales/sv-core.json | 4 +-- .../resources/catalog/locales/zh-core.json | 4 +-- .../templates/recordView/recordView.html | 26 +++++++++----- 20 files changed, 88 insertions(+), 45 deletions(-) diff --git a/web-ui/src/main/resources/catalog/components/metadataactions/MetadataActionService.js b/web-ui/src/main/resources/catalog/components/metadataactions/MetadataActionService.js index a76b43e8c6..84a9d9a249 100644 --- a/web-ui/src/main/resources/catalog/components/metadataactions/MetadataActionService.js +++ b/web-ui/src/main/resources/catalog/components/metadataactions/MetadataActionService.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -293,6 +293,10 @@ return deferred.promise; }; + this.cancelWorkingCopy = function (md) { + return gnMetadataManager.remove(md.id); + }; + this.getMetadataIdToEdit = function (md) { if (!md) return; diff --git a/web-ui/src/main/resources/catalog/components/search/mdview/mdviewModule.js b/web-ui/src/main/resources/catalog/components/search/mdview/mdviewModule.js index f0c1229100..f4ec405e09 100644 --- a/web-ui/src/main/resources/catalog/components/search/mdview/mdviewModule.js +++ b/web-ui/src/main/resources/catalog/components/search/mdview/mdviewModule.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -59,6 +59,7 @@ "$rootScope", "$filter", "gnUtilityService", + "$window", function ( $scope, $http, @@ -77,7 +78,8 @@ gnConfigService, $rootScope, $filter, - gnUtilityService + gnUtilityService, + $window ) { $scope.formatter = gnSearchSettings.formatter; $scope.gnMetadataActions = gnMetadataActions; @@ -203,6 +205,35 @@ ); }; + $scope.cancelWorkingCopy = function (md) { + return gnMetadataActions.cancelWorkingCopy(md).then( + function (data) { + gnAlertService.addAlert({ + msg: $translate.instant("metadataRemoved", { + title: md.resourceTitle + }), + type: "success" + }); + + // Set a timeout to reload the page, to display the alert + $window.setTimeout(function () { + $window.location.href = $location + .absUrl() + .replace("/metadraf/", "/metadata/"); + $window.location.reload(); + }, 500); + }, + function (reason) { + // Data needs improvements + // See https://github.com/geonetwork/core-geonetwork/issues/723 + gnAlertService.addAlert({ + msg: reason.data.description, + type: "danger" + }); + } + ); + }; + /** * Scroll to an element in the page using it's ID * diff --git a/web-ui/src/main/resources/catalog/locales/ca-core.json b/web-ui/src/main/resources/catalog/locales/ca-core.json index 505934e42f..bb65545c74 100644 --- a/web-ui/src/main/resources/catalog/locales/ca-core.json +++ b/web-ui/src/main/resources/catalog/locales/ca-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Categories updated.", "warnPublishDraft": "When publishing records with workflow enabled, the status will change to 'Approve'. Are you sure you want to continue?", "cancelWorkingCopy": "Cancel working copy", - "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{resourceTitle}}'?", "workingCopy": "Working copy", "onTheWeb": "More online information", "pdfReportTocTitle": "Contents", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/cs-core.json b/web-ui/src/main/resources/catalog/locales/cs-core.json index f665ee61ab..ee9bb7b2a9 100644 --- a/web-ui/src/main/resources/catalog/locales/cs-core.json +++ b/web-ui/src/main/resources/catalog/locales/cs-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Kategorie aktualizovány.", "warnPublishDraft": "Při publikování záznamů s povoleným pracovním postupem se stav změní na 'Schválit'. Jste si jistý, že chcete pokračovat?", "cancelWorkingCopy": "Zrušit pracovní kopii", - "deleteWorkingCopyRecordConfirm": "Opravdu chcete odstranit pracovní kopii '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Opravdu chcete odstranit pracovní kopii '{{resourceTitle}}'?", "workingCopy": "Pracovní kopie", "onTheWeb": "Více online informací", "pdfReportTocTitle": "Obsah", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Prohlížející nemůže zrušit publikování metadat", "reviewerNotAllowedPublishUnpublish": "Prohlížející nemá oprávnění publikovat/zrušit publikování metadat", "missingTitle": "Chybí název" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/da-core.json b/web-ui/src/main/resources/catalog/locales/da-core.json index 5b409eb93e..6b4e63e6d6 100644 --- a/web-ui/src/main/resources/catalog/locales/da-core.json +++ b/web-ui/src/main/resources/catalog/locales/da-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Kategorier opdateret.", "warnPublishDraft": "Når du udgiver poster med workflow aktiveret, ændres status til 'Godkend'. Er du sikker på, at du vil fortsætte?", "cancelWorkingCopy": "Annuller arbejdskopi", - "deleteWorkingCopyRecordConfirm": "Vil du virkelig fjerne arbejdskopien '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Vil du virkelig fjerne arbejdskopien '{{resourceTitle}}'?", "workingCopy": "Arbejdskopi", "onTheWeb": "Mere online information", "pdfReportTocTitle": "Indhold", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/de-core.json b/web-ui/src/main/resources/catalog/locales/de-core.json index 95fba7a1ff..2517a991a7 100644 --- a/web-ui/src/main/resources/catalog/locales/de-core.json +++ b/web-ui/src/main/resources/catalog/locales/de-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Kategorien aktualisiert.", "warnPublishDraft": "Wenn Sie Datensätze mit aktiviertem Workflow veröffentlichen, ändert sich der Status in 'genehmigt'. Sind Sie sicher, dass Sie fortfahren möchten?", "cancelWorkingCopy": "Arbeitskopie abbrechen", - "deleteWorkingCopyRecordConfirm": "Möchten Sie die Arbeitskopie '{{title}}' wirklich entfernen?", + "deleteWorkingCopyRecordConfirm": "Möchten Sie die Arbeitskopie '{{resourceTitle}}' wirklich entfernen?", "workingCopy": "Arbeitskopie", "onTheWeb": "Weiterführende Online-Informationen", "pdfReportTocTitle": "Inhalte", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/en-core.json b/web-ui/src/main/resources/catalog/locales/en-core.json index dcb6c08026..b5266b8574 100644 --- a/web-ui/src/main/resources/catalog/locales/en-core.json +++ b/web-ui/src/main/resources/catalog/locales/en-core.json @@ -544,7 +544,7 @@ "categoriesUpdated": "Categories updated.", "warnPublishDraft": "When publishing records with workflow enabled, the status will change to 'Approve'. Are you sure you want to continue?", "cancelWorkingCopy": "Cancel working copy", - "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{resourceTitle}}'?", "workingCopy": "Working copy", "onTheWeb": "More online information", "pdfReportTocTitle": "Contents", diff --git a/web-ui/src/main/resources/catalog/locales/es-core.json b/web-ui/src/main/resources/catalog/locales/es-core.json index 4519514f41..7ff51fa85d 100644 --- a/web-ui/src/main/resources/catalog/locales/es-core.json +++ b/web-ui/src/main/resources/catalog/locales/es-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Categorías actualizadas.", "warnPublishDraft": "Al publicar registros con el flujo de trabajo habilitado, el estado cambiará a 'Approve'. Estás seguro de que quieres continuar?", "cancelWorkingCopy": "Cancelar copia de trabajo", - "deleteWorkingCopyRecordConfirm": "¿Realmente desea eliminar la copia de trabajo '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "¿Realmente desea eliminar la copia de trabajo '{{resourceTitle}}'?", "workingCopy": "Copia de trabajo", "onTheWeb": "Más información en línea", "pdfReportTocTitle": "Contenido", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/fi-core.json b/web-ui/src/main/resources/catalog/locales/fi-core.json index 7ad904e7a9..6bb2fe99ad 100644 --- a/web-ui/src/main/resources/catalog/locales/fi-core.json +++ b/web-ui/src/main/resources/catalog/locales/fi-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Categories updated.", "warnPublishDraft": "When publishing records with workflow enabled, the status will change to 'Approve'. Are you sure you want to continue?", "cancelWorkingCopy": "Cancel working copy", - "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{resourceTitle}}'?", "workingCopy": "Working copy", "onTheWeb": "More online information", "pdfReportTocTitle": "Contents", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/fr-core.json b/web-ui/src/main/resources/catalog/locales/fr-core.json index c7492a7c51..9a8d54c872 100644 --- a/web-ui/src/main/resources/catalog/locales/fr-core.json +++ b/web-ui/src/main/resources/catalog/locales/fr-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Catégorie mise à jour.", "warnPublishDraft": "Lors de la publication d'une fiche ayant un statut brouillon, le statut passera à approuvé. Voulez-vous continuer ?", "cancelWorkingCopy": "Annuler la copie de travail", - "deleteWorkingCopyRecordConfirm": "Voulez-vous vraiment supprimer la copie de travail ?", + "deleteWorkingCopyRecordConfirm": "Voulez-vous vraiment supprimer la copie de travail '{{ resourceTitle}}' ?", "workingCopy": "Brouillon", "onTheWeb": "Plus d'information en ligne", "pdfReportTocTitle": "Titre de la table des matières", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Les relecteurs ne sont pas autorisés à dépublier des fiches", "reviewerNotAllowedPublishUnpublish": "Les relecteurs ne sont pas autorisés à publier/dépublier des fiches", "missingTitle": "Titre manquant" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/is-core.json b/web-ui/src/main/resources/catalog/locales/is-core.json index 047b14a7eb..6cab643fdb 100644 --- a/web-ui/src/main/resources/catalog/locales/is-core.json +++ b/web-ui/src/main/resources/catalog/locales/is-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Flokkar uppfærðir.", "warnPublishDraft": "Þegar færslur eru birtar með vinnuflæði virkt, mun staðan breytast yfir í 'Samþykkt. Ertu viss um að þú viljir halda áfram?", "cancelWorkingCopy": "Hætta við vinnuafrit", - "deleteWorkingCopyRecordConfirm": "Ertu viss um að þú viljir fjarlægja vinnuafritið '{{titill}}'?", + "deleteWorkingCopyRecordConfirm": "Ertu viss um að þú viljir fjarlægja vinnuafritið '{{resourceTitle}}'?", "workingCopy": "Vinnuafrit", "onTheWeb": "More online information", "pdfReportTocTitle": "Contents", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/it-core.json b/web-ui/src/main/resources/catalog/locales/it-core.json index c7c85a7f90..0fb2eda8ca 100644 --- a/web-ui/src/main/resources/catalog/locales/it-core.json +++ b/web-ui/src/main/resources/catalog/locales/it-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Categories updated.", "warnPublishDraft": "When publishing records with workflow enabled, the status will change to 'Approve'. Are you sure you want to continue?", "cancelWorkingCopy": "Cancel working copy", - "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{resourceTitle}}'?", "workingCopy": "Working copy", "onTheWeb": "More online information", "pdfReportTocTitle": "Contents", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/ko-core.json b/web-ui/src/main/resources/catalog/locales/ko-core.json index 9ff3ab75e3..adb124f10d 100644 --- a/web-ui/src/main/resources/catalog/locales/ko-core.json +++ b/web-ui/src/main/resources/catalog/locales/ko-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "카테고리를 갱신하였습니다.", "warnPublishDraft": "When publishing records with workflow enabled, the status will change to 'Approve'. Are you sure you want to continue?", "cancelWorkingCopy": "Cancel working copy", - "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{resourceTitle}}'?", "workingCopy": "Working copy", "onTheWeb": "More online information", "pdfReportTocTitle": "Contents", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/nl-core.json b/web-ui/src/main/resources/catalog/locales/nl-core.json index c23c85edd5..b275fa8b9e 100644 --- a/web-ui/src/main/resources/catalog/locales/nl-core.json +++ b/web-ui/src/main/resources/catalog/locales/nl-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Categoriën geupdated.", "warnPublishDraft": "Wanneer de workflow is geactiveerd en de records worden gepubliceerd dan veranderd de status in 'Goedgekeurd'. Doorgaan?", "cancelWorkingCopy": "Annuleer concept versie", - "deleteWorkingCopyRecordConfirm": "Weet je zeker dat je de concept versie '{{title}}' wilt verwijderen?", + "deleteWorkingCopyRecordConfirm": "Weet je zeker dat je de concept versie '{{resourceTitle}}' wilt verwijderen?", "workingCopy": "Concept versie", "onTheWeb": "Meer informatie online", "pdfReportTocTitle": "Inhoudsopgave", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/pt-core.json b/web-ui/src/main/resources/catalog/locales/pt-core.json index 648ec0d756..d2d690cc81 100644 --- a/web-ui/src/main/resources/catalog/locales/pt-core.json +++ b/web-ui/src/main/resources/catalog/locales/pt-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Categorias atualizadas.", "warnPublishDraft": "Ao publicar um registro com o fluxo de trabalho habilitado, o status vai automaticamente ser alterado para Aprovado. Tem certeza que deseja continuar?", "cancelWorkingCopy": "Cancelar Cópia de Trabalho", - "deleteWorkingCopyRecordConfirm": "Você realmente deseja remover a Cópia de Trabalho '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Você realmente deseja remover a Cópia de Trabalho '{{resourceTitle}}'?", "workingCopy": "Cópia de Trabalho", "onTheWeb": "Mais informações online", "pdfReportTocTitle": "Contents", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/ru-core.json b/web-ui/src/main/resources/catalog/locales/ru-core.json index ac3e2f1e0a..3458ed754e 100644 --- a/web-ui/src/main/resources/catalog/locales/ru-core.json +++ b/web-ui/src/main/resources/catalog/locales/ru-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Categories updated.", "warnPublishDraft": "When publishing records with workflow enabled, the status will change to 'Approve'. Are you sure you want to continue?", "cancelWorkingCopy": "Cancel working copy", - "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{resourceTitle}}'?", "workingCopy": "Working copy", "onTheWeb": "More online information", "pdfReportTocTitle": "Содержание", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/sk-core.json b/web-ui/src/main/resources/catalog/locales/sk-core.json index 56ca3c9ab7..0cbec7d899 100644 --- a/web-ui/src/main/resources/catalog/locales/sk-core.json +++ b/web-ui/src/main/resources/catalog/locales/sk-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Categories updated.", "warnPublishDraft": "When publishing records with workflow enabled, the status will change to 'Approve'. Are you sure you want to continue?", "cancelWorkingCopy": "Cancel working copy", - "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{resourceTitle}}'?", "workingCopy": "Working copy", "onTheWeb": "More online information", "pdfReportTocTitle": "Contents", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/sv-core.json b/web-ui/src/main/resources/catalog/locales/sv-core.json index 05d323c210..a0a080ae11 100644 --- a/web-ui/src/main/resources/catalog/locales/sv-core.json +++ b/web-ui/src/main/resources/catalog/locales/sv-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "Uppdatareade kategorier.", "warnPublishDraft": "När du publicerar poster med arbetsflöde aktiverat kommer status att ändras till 'Godkänn'. Är du säker på att du vill fortsätta?", "cancelWorkingCopy": "Avbryt arbetskopian", - "deleteWorkingCopyRecordConfirm": "Vill du verkligen ta bort arbetskopian '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Vill du verkligen ta bort arbetskopian '{{resourceTitle}}'?", "workingCopy": "Arbetskopia", "onTheWeb": "Mer information online", "pdfReportTocTitle": "Innehåll", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/locales/zh-core.json b/web-ui/src/main/resources/catalog/locales/zh-core.json index 6d5239cc33..0897110161 100644 --- a/web-ui/src/main/resources/catalog/locales/zh-core.json +++ b/web-ui/src/main/resources/catalog/locales/zh-core.json @@ -546,7 +546,7 @@ "categoriesUpdated": "分类已更新。", "warnPublishDraft": "When publishing records with workflow enabled, the status will change to 'Approve'. Are you sure you want to continue?", "cancelWorkingCopy": "Cancel working copy", - "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{title}}'?", + "deleteWorkingCopyRecordConfirm": "Do you really want to remove the working copy '{{resourceTitle}}'?", "workingCopy": "Working copy", "onTheWeb": "More online information", "pdfReportTocTitle": "Contents", @@ -578,4 +578,4 @@ "reviewerNotAllowedUnpublish": "Reviewer not allowed to un-publish the metadata", "reviewerNotAllowedPublishUnpublish": "Reviewer not allowed to publish / un-publish the metadata", "missingTitle": "Missing title" -} \ No newline at end of file +} diff --git a/web-ui/src/main/resources/catalog/views/default/templates/recordView/recordView.html b/web-ui/src/main/resources/catalog/views/default/templates/recordView/recordView.html index c48b511710..0f84a95c23 100644 --- a/web-ui/src/main/resources/catalog/views/default/templates/recordView/recordView.html +++ b/web-ui/src/main/resources/catalog/views/default/templates/recordView/recordView.html @@ -99,12 +99,26 @@ + + + + + cancelWorkingCopy - From 945b5081bba29f7c4498a120ee7e8b447fa488a8 Mon Sep 17 00:00:00 2001 From: Joachim Nielandt Date: Mon, 20 Nov 2023 10:31:30 +0100 Subject: [PATCH 16/81] [BP] consistent styling of recordgroup label --- .../catalog/components/utility/partials/recordOriginLogo.html | 2 +- .../catalog/views/default/templates/recordView/metadata.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web-ui/src/main/resources/catalog/components/utility/partials/recordOriginLogo.html b/web-ui/src/main/resources/catalog/components/utility/partials/recordOriginLogo.html index 325a9cef76..f0d39d5f20 100644 --- a/web-ui/src/main/resources/catalog/components/utility/partials/recordOriginLogo.html +++ b/web-ui/src/main/resources/catalog/components/utility/partials/recordOriginLogo.html @@ -12,5 +12,5 @@ aria-label="{{'sourceCatalog' | translate}}" class="gn-source-logo" /> - {{recordGroup.label | gnLocalized}} + {{recordGroup.label | gnLocalized}} diff --git a/web-ui/src/main/resources/catalog/views/default/templates/recordView/metadata.html b/web-ui/src/main/resources/catalog/views/default/templates/recordView/metadata.html index a3aa4c34bf..794e3cec55 100644 --- a/web-ui/src/main/resources/catalog/views/default/templates/recordView/metadata.html +++ b/web-ui/src/main/resources/catalog/views/default/templates/recordView/metadata.html @@ -42,7 +42,7 @@

metadataLanguage

- sourceCatalog: +

sourceCatalog

: From d6e4f4bec322d962533763bbff619288b3e53097 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Tue, 5 Dec 2023 13:32:49 +0100 Subject: [PATCH 17/81] [BP] Reset user password dialog - don't display the field to request the old password for administrators - unify UI check with backend check (#7510) --- .../main/resources/catalog/templates/admin/usergroup/users.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-ui/src/main/resources/catalog/templates/admin/usergroup/users.html b/web-ui/src/main/resources/catalog/templates/admin/usergroup/users.html index c45f10d165..3f59389df6 100644 --- a/web-ui/src/main/resources/catalog/templates/admin/usergroup/users.html +++ b/web-ui/src/main/resources/catalog/templates/admin/usergroup/users.html @@ -545,7 +545,7 @@

UserAdmin

From 5c185e50b561ef01ab1c9b6a6b0d7a6bfc439fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Wed, 6 Dec 2023 07:27:41 +0100 Subject: [PATCH 18/81] [BP] Fix check to verify if a group has enabled the workflow, checking if the workflow is also enabled (#7535) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix check to verify if a group has enabled the workflow, checking if the workflow is also enabled * Add more tests --------- Co-authored-by: Juan Luis Rodríguez --- .../org/fao/geonet/util/WorkflowUtil.java | 68 ++++++++------- .../org/fao/geonet/util/WorkflowUtilTest.java | 84 +++++++++++++++++++ 2 files changed, 121 insertions(+), 31 deletions(-) create mode 100644 core/src/test/java/org/fao/geonet/util/WorkflowUtilTest.java diff --git a/core/src/main/java/org/fao/geonet/util/WorkflowUtil.java b/core/src/main/java/org/fao/geonet/util/WorkflowUtil.java index 123b455919..7e3f372c72 100644 --- a/core/src/main/java/org/fao/geonet/util/WorkflowUtil.java +++ b/core/src/main/java/org/fao/geonet/util/WorkflowUtil.java @@ -1,29 +1,25 @@ -//============================================================================= -//=== -//=== ThreadUtils -//=== -//============================================================================= -//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the -//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) -//=== and United Nations Environment Programme (UNEP) -//=== -//=== This program is free software; you can redistribute it and/or modify -//=== it under the terms of the GNU General Public License as published by -//=== the Free Software Foundation; either version 2 of the License, or (at -//=== your option) any later version. -//=== -//=== This program is distributed in the hope that it will be useful, but -//=== WITHOUT ANY WARRANTY; without even the implied warranty of -//=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -//=== General Public License for more details. -//=== -//=== You should have received a copy of the GNU General Public License -//=== along with this program; if not, write to the Free Software -//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -//=== -//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, -//=== Rome - Italy. email: geonetwork@osgeo.org -//============================================================================= +/* + * Copyright (C) 2001-2023 Food and Agriculture Organization of the + * United Nations (FAO-UN), United Nations World Food Programme (WFP) + * and United Nations Environment Programme (UNEP) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, + * Rome - Italy. email: geonetwork@osgeo.org + */ package org.fao.geonet.util; @@ -38,14 +34,27 @@ public class WorkflowUtil { /** - * Checks if a group has the workflow enabled. + * Avoid creation of new instances of this utility class making its constructor private. + */ + private WorkflowUtil() { + + } + + /** + * Checks if the workflow is enabled and a group has the workflow enabled. * * @param groupName Group name - * @return + * @return {@code true} if the workflow is enabled and it has been enabled for all groups or the group name matches + * the regular expression in {@link Settings#METADATA_WORKFLOW_DRAFT_WHEN_IN_GROUP}. False otherwise. */ public static boolean isGroupWithEnabledWorkflow(String groupName) { SettingManager settingManager = ApplicationContextHolder.get().getBean(SettingManager.class); + boolean isWorkflowEnabled = settingManager.getValueAsBool(Settings.METADATA_WORKFLOW_ENABLE); + if (!isWorkflowEnabled) { + return false; + } + String groupMatchingRegex = settingManager.getValue(Settings.METADATA_WORKFLOW_DRAFT_WHEN_IN_GROUP); if (!StringUtils.isEmpty(groupMatchingRegex)) { @@ -56,7 +65,4 @@ public static boolean isGroupWithEnabledWorkflow(String groupName) { return false; } } - - - } diff --git a/core/src/test/java/org/fao/geonet/util/WorkflowUtilTest.java b/core/src/test/java/org/fao/geonet/util/WorkflowUtilTest.java new file mode 100644 index 0000000000..85b907d279 --- /dev/null +++ b/core/src/test/java/org/fao/geonet/util/WorkflowUtilTest.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2001-2023 Food and Agriculture Organization of the + * United Nations (FAO-UN), United Nations World Food Programme (WFP) + * and United Nations Environment Programme (UNEP) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, + * Rome - Italy. email: geonetwork@osgeo.org + */ + +package org.fao.geonet.util; + +import org.fao.geonet.AbstractCoreIntegrationTest; +import org.fao.geonet.kernel.setting.SettingManager; +import org.fao.geonet.kernel.setting.Settings; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.junit.Assert.*; + +public class WorkflowUtilTest extends AbstractCoreIntegrationTest { + @Autowired + SettingManager settingManager; + + @Test + public void testWorkflowDisabled() { + settingManager.setValue(Settings.METADATA_WORKFLOW_ENABLE, false); + assertFalse(WorkflowUtil.isGroupWithEnabledWorkflow("sample")); + } + + @Test + public void testWorkflowDisabledAndEnabledAllGroups() { + settingManager.setValue(Settings.METADATA_WORKFLOW_ENABLE, false); + settingManager.setValue(Settings.METADATA_WORKFLOW_DRAFT_WHEN_IN_GROUP, ".*"); + assertFalse(WorkflowUtil.isGroupWithEnabledWorkflow("sample")); + } + + @Test + public void testWorkflowDisabledAndEnabledInGroupList() { + settingManager.setValue(Settings.METADATA_WORKFLOW_ENABLE, false); + settingManager.setValue(Settings.METADATA_WORKFLOW_DRAFT_WHEN_IN_GROUP, "sample|test"); + assertFalse(WorkflowUtil.isGroupWithEnabledWorkflow("sample")); + + settingManager.setValue(Settings.METADATA_WORKFLOW_DRAFT_WHEN_IN_GROUP, "sam*|test"); + assertFalse(WorkflowUtil.isGroupWithEnabledWorkflow("sample")); + } + + @Test + public void testWorkflowEnabledAllGroups() { + settingManager.setValue(Settings.METADATA_WORKFLOW_ENABLE, true); + settingManager.setValue(Settings.METADATA_WORKFLOW_DRAFT_WHEN_IN_GROUP, ".*"); + assertTrue(WorkflowUtil.isGroupWithEnabledWorkflow("sample")); + } + + @Test + public void testWorkflowEnabledInGroupList() { + settingManager.setValue(Settings.METADATA_WORKFLOW_ENABLE, true); + settingManager.setValue(Settings.METADATA_WORKFLOW_DRAFT_WHEN_IN_GROUP, "sample|test"); + assertTrue(WorkflowUtil.isGroupWithEnabledWorkflow("sample")); + + settingManager.setValue(Settings.METADATA_WORKFLOW_DRAFT_WHEN_IN_GROUP, "sam*|test"); + assertTrue(WorkflowUtil.isGroupWithEnabledWorkflow("sample")); + } + + @Test + public void testWorkflowEnabledNotInGroupList() { + settingManager.setValue(Settings.METADATA_WORKFLOW_ENABLE, true); + settingManager.setValue(Settings.METADATA_WORKFLOW_DRAFT_WHEN_IN_GROUP, "test"); + assertFalse(WorkflowUtil.isGroupWithEnabledWorkflow("sample")); + } +} From d5d43fde96f6e769641831e8f1d712cea010f32b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Thu, 7 Dec 2023 13:15:35 +0100 Subject: [PATCH 19/81] [BP] INSPIRE Validator - exception handling improvements (#7519) Refactor of the INSPIRE Validator backend code to improve the exception handling. Previously some exceptions were not reported properly to the user. For example, if the upload of a file to validate returned an error, due to the validator not working properly (for example, returning an error 503), the user got an unclear error message. Additionally this commit contains some fixes to Sonarlint warnings --- .../geonet/api/GlobalExceptionController.java | 2 + .../geonet/api/processing/ValidateApi.java | 6 +- .../api/records/InspireValidationApi.java | 40 ++-- .../validator}/InspireValidationRunnable.java | 26 ++- .../validator/InspireValidatorException.java | 80 +++++++ .../validator}/InspireValidatorUtils.java | 204 +++++++++--------- .../MInspireEtfValidateProcess.java | 66 +++--- .../resources/config-spring-geonetwork.xml | 2 +- .../editing/InspireValidatorUtilsTest.java | 1 + .../GnmdInspireValidationDirective.js | 4 +- .../templates/recordView/metadata.html | 3 +- 11 files changed, 262 insertions(+), 172 deletions(-) rename services/src/main/java/org/fao/geonet/{api/records => inspire/validator}/InspireValidationRunnable.java (75%) create mode 100644 services/src/main/java/org/fao/geonet/inspire/validator/InspireValidatorException.java rename services/src/main/java/org/fao/geonet/{api/records/editing => inspire/validator}/InspireValidatorUtils.java (78%) rename services/src/main/java/org/fao/geonet/{api/processing => inspire/validator}/MInspireEtfValidateProcess.java (87%) diff --git a/services/src/main/java/org/fao/geonet/api/GlobalExceptionController.java b/services/src/main/java/org/fao/geonet/api/GlobalExceptionController.java index fc2f4efc25..e7a89ad1ec 100644 --- a/services/src/main/java/org/fao/geonet/api/GlobalExceptionController.java +++ b/services/src/main/java/org/fao/geonet/api/GlobalExceptionController.java @@ -34,6 +34,7 @@ import org.fao.geonet.exceptions.ServiceNotAllowedEx; import org.fao.geonet.exceptions.UserNotFoundEx; import org.fao.geonet.exceptions.XSDValidationErrorEx; +import org.fao.geonet.inspire.validator.InspireValidatorException; import org.fao.geonet.utils.Log; import org.json.JSONException; import org.springframework.beans.factory.annotation.Autowired; @@ -164,6 +165,7 @@ public ApiError maxFileExceededHandler(final Exception exception) { @ExceptionHandler({ HttpMessageNotReadableException.class, Exception.class, + InspireValidatorException.class, RuntimeException.class }) public ApiError runtimeExceptionHandler(final Exception exception, final HttpServletRequest request) { diff --git a/services/src/main/java/org/fao/geonet/api/processing/ValidateApi.java b/services/src/main/java/org/fao/geonet/api/processing/ValidateApi.java index 4feae35781..56734ce5db 100644 --- a/services/src/main/java/org/fao/geonet/api/processing/ValidateApi.java +++ b/services/src/main/java/org/fao/geonet/api/processing/ValidateApi.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -37,12 +37,13 @@ import org.fao.geonet.api.ApiUtils; import org.fao.geonet.api.processing.report.SimpleMetadataProcessingReport; import org.fao.geonet.api.processing.report.registry.IProcessingReportRegistry; -import org.fao.geonet.api.records.editing.InspireValidatorUtils; +import org.fao.geonet.inspire.validator.InspireValidatorUtils; import org.fao.geonet.domain.AbstractMetadata; import org.fao.geonet.domain.MetadataValidation; import org.fao.geonet.domain.Pair; import org.fao.geonet.domain.SchematronRequirement; import org.fao.geonet.events.history.RecordValidationTriggeredEvent; +import org.fao.geonet.inspire.validator.MInspireEtfValidateProcess; import org.fao.geonet.kernel.AccessManager; import org.fao.geonet.kernel.DataManager; import org.fao.geonet.kernel.SchemaManager; @@ -55,7 +56,6 @@ import org.fao.geonet.utils.Xml; import org.jdom.Element; import org.jdom.Namespace; -import org.jdom.Text; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.http.HttpStatus; diff --git a/services/src/main/java/org/fao/geonet/api/records/InspireValidationApi.java b/services/src/main/java/org/fao/geonet/api/records/InspireValidationApi.java index cf54416b94..9e3a015780 100644 --- a/services/src/main/java/org/fao/geonet/api/records/InspireValidationApi.java +++ b/services/src/main/java/org/fao/geonet/api/records/InspireValidationApi.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -33,11 +33,11 @@ import org.apache.http.HttpStatus; import org.fao.geonet.ApplicationContextHolder; import org.fao.geonet.NodeInfo; -import org.fao.geonet.api.API; import org.fao.geonet.api.ApiParams; import org.fao.geonet.api.ApiUtils; import org.fao.geonet.api.exception.ResourceNotFoundException; -import org.fao.geonet.api.records.editing.InspireValidatorUtils; +import org.fao.geonet.inspire.validator.InspireValidationRunnable; +import org.fao.geonet.inspire.validator.InspireValidatorUtils; import org.fao.geonet.api.records.formatters.FormatType; import org.fao.geonet.api.records.formatters.FormatterApi; import org.fao.geonet.api.records.formatters.FormatterWidth; @@ -52,7 +52,6 @@ import org.fao.geonet.kernel.SchemaManager; import org.fao.geonet.kernel.setting.SettingManager; import org.fao.geonet.kernel.setting.Settings; -import org.fao.geonet.repository.MetadataValidationRepository; import org.fao.geonet.repository.SourceRepository; import org.fao.geonet.schema.iso19139.ISO19139Namespaces; import org.fao.geonet.util.ThreadPool; @@ -126,8 +125,7 @@ public class InspireValidationApi { @io.swagger.v3.oas.annotations.Operation( summary = "Get test suites available.", description = "TG13, TG2, ...") - @RequestMapping(value = "/{metadataUuid}/validate/inspire/testsuites", - method = RequestMethod.GET, + @GetMapping(value = "/{metadataUuid}/validate/inspire/testsuites", produces = { MediaType.APPLICATION_JSON_VALUE }) @@ -154,8 +152,7 @@ Map getTestSuites( + "An INSPIRE endpoint must be configured in Settings. " + "This activates an asyncronous process, this method does not return any report. " + "This method returns an id to be used to get the report.") - @RequestMapping(value = "/{metadataUuid}/validate/inspire", - method = RequestMethod.PUT, + @PutMapping(value = "/{metadataUuid}/validate/inspire", produces = { MediaType.TEXT_PLAIN_VALUE }) @@ -205,16 +202,16 @@ String validateRecordForInspire( String schema = metadata.getDataInfo().getSchemaId(); if (!schema.matches(supportedSchemaRegex)) { response.setStatus(HttpStatus.SC_NOT_ACCEPTABLE); - return String.format("INSPIRE validator does not support records in schema '%'. Schema must match expression '%' and have an ISO19139 formatter.", + return String.format("INSPIRE validator does not support records in schema '%s'. Schema must match expression '%s' and have an ISO19139 formatter.", schema, supportedSchemaRegex); } String id = String.valueOf(metadata.getId()); - String URL = settingManager.getValue(Settings.SYSTEM_INSPIRE_REMOTE_VALIDATION_URL); - String URL_QUERY = settingManager.getValue(Settings.SYSTEM_INSPIRE_REMOTE_VALIDATION_URL_QUERY); - if (StringUtils.isEmpty(URL_QUERY)) { - URL_QUERY = URL; + String inspireValidatorUrl = settingManager.getValue(Settings.SYSTEM_INSPIRE_REMOTE_VALIDATION_URL); + String inspireValidatorQueryUrl = settingManager.getValue(Settings.SYSTEM_INSPIRE_REMOTE_VALIDATION_URL_QUERY); + if (StringUtils.isEmpty(inspireValidatorQueryUrl)) { + inspireValidatorQueryUrl = inspireValidatorUrl; } ServiceContext context = ApiUtils.createServiceContext(request); @@ -268,7 +265,7 @@ String validateRecordForInspire( InputStream metadataToTest = convertElement2InputStream(md); - testId = inspireValidatorUtils.submitFile(context, URL, URL_QUERY, metadataToTest, testsuite, metadata.getUuid()); + testId = inspireValidatorUtils.submitFile(context, inspireValidatorUrl, inspireValidatorQueryUrl, metadataToTest, testsuite, metadata.getUuid()); } else { String portal = NodeInfo.DEFAULT_NODE; if (!NodeInfo.DEFAULT_NODE.equals(mode)) { @@ -288,10 +285,10 @@ String validateRecordForInspire( portal, ISO19139Namespaces.GMD.getURI(), metadataUuid); - testId = inspireValidatorUtils.submitUrl(context, URL, URL_QUERY, getRecordByIdUrl, testsuite, metadata.getUuid()); + testId = inspireValidatorUtils.submitUrl(context, inspireValidatorUrl, inspireValidatorQueryUrl, getRecordByIdUrl, testsuite, metadata.getUuid()); } - threadPool.runTask(new InspireValidationRunnable(context, URL, testId, metadata.getId())); + threadPool.runTask(new InspireValidationRunnable(context, inspireValidatorUrl, testId, metadata.getId())); return testId; } @@ -313,8 +310,7 @@ private InputStream convertElement2InputStream(Element md) description = "User MUST be able to edit the record to validate it. " + "An INSPIRE endpoint must be configured in Settings. " + "If the process is complete an object with status is returned. ") - @RequestMapping(value = "/{testId}/validate/inspire", - method = RequestMethod.GET, + @GetMapping(value = "/{testId}/validate/inspire", produces = { MediaType.APPLICATION_JSON_VALUE } @@ -341,15 +337,15 @@ Map checkValidation( HttpSession session ) throws Exception { - String URL = settingManager.getValue(Settings.SYSTEM_INSPIRE_REMOTE_VALIDATION_URL); + String inspireValidatorUrl = settingManager.getValue(Settings.SYSTEM_INSPIRE_REMOTE_VALIDATION_URL); ServiceContext context = ApiUtils.createServiceContext(request); try { - if (inspireValidatorUtils.isReady(context, URL, testId)) { + if (inspireValidatorUtils.isReady(context, inspireValidatorUrl, testId)) { Map values = new HashMap<>(); - values.put("status", inspireValidatorUtils.isPassed(context, URL, testId)); - values.put("report", inspireValidatorUtils.getReportUrl(URL, testId)); + values.put("status", inspireValidatorUtils.isPassed(context, inspireValidatorUrl, testId)); + values.put("report", inspireValidatorUtils.getReportUrl(inspireValidatorUrl, testId)); response.setStatus(HttpStatus.SC_OK); return values; diff --git a/services/src/main/java/org/fao/geonet/api/records/InspireValidationRunnable.java b/services/src/main/java/org/fao/geonet/inspire/validator/InspireValidationRunnable.java similarity index 75% rename from services/src/main/java/org/fao/geonet/api/records/InspireValidationRunnable.java rename to services/src/main/java/org/fao/geonet/inspire/validator/InspireValidationRunnable.java index 7413f2f115..ab8d64557b 100644 --- a/services/src/main/java/org/fao/geonet/api/records/InspireValidationRunnable.java +++ b/services/src/main/java/org/fao/geonet/inspire/validator/InspireValidationRunnable.java @@ -1,10 +1,32 @@ -package org.fao.geonet.api.records; +/* + * Copyright (C) 2001-2023 Food and Agriculture Organization of the + * United Nations (FAO-UN), United Nations World Food Programme (WFP) + * and United Nations Environment Programme (UNEP) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, + * Rome - Italy. email: geonetwork@osgeo.org + */ +package org.fao.geonet.inspire.validator; import jeeves.server.context.ServiceContext; import jeeves.transaction.TransactionManager; import jeeves.transaction.TransactionTask; import org.fao.geonet.ApplicationContextHolder; -import org.fao.geonet.api.records.editing.InspireValidatorUtils; +import org.fao.geonet.inspire.validator.InspireValidatorUtils; import org.fao.geonet.domain.MetadataValidation; import org.fao.geonet.domain.MetadataValidationId; import org.fao.geonet.domain.MetadataValidationStatus; diff --git a/services/src/main/java/org/fao/geonet/inspire/validator/InspireValidatorException.java b/services/src/main/java/org/fao/geonet/inspire/validator/InspireValidatorException.java new file mode 100644 index 0000000000..7d42bd91f4 --- /dev/null +++ b/services/src/main/java/org/fao/geonet/inspire/validator/InspireValidatorException.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2001-2023 Food and Agriculture Organization of the + * United Nations (FAO-UN), United Nations World Food Programme (WFP) + * and United Nations Environment Programme (UNEP) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, + * Rome - Italy. email: geonetwork@osgeo.org + */ + +package org.fao.geonet.inspire.validator; + +import org.fao.geonet.exceptions.LocalizedException; + +import java.util.Locale; + +public class InspireValidatorException extends LocalizedException { + public InspireValidatorException() { + super(); + } + + public InspireValidatorException(String message) { + super(message); + } + + public InspireValidatorException(String message, Throwable cause) { + super(message, cause); + } + + public InspireValidatorException(Throwable cause) { + super(cause); + } + + protected String getResourceBundleBeanQualifier() { + return "apiMessages"; + } + + @Override + public InspireValidatorException withMessageKey(String messageKey) { + super.withMessageKey(messageKey); + return this; + } + + @Override + public InspireValidatorException withMessageKey(String messageKey, Object[] messageKeyArgs) { + super.withMessageKey(messageKey, messageKeyArgs); + return this; + } + + @Override + public InspireValidatorException withDescriptionKey(String descriptionKey) { + super.withDescriptionKey(descriptionKey); + return this; + } + + @Override + public InspireValidatorException withDescriptionKey(String descriptionKey, Object[] descriptionKeyArgs) { + super.withDescriptionKey(descriptionKey, descriptionKeyArgs); + return this; + } + + @Override + public InspireValidatorException withLocale(Locale locale) { + super.withLocale(locale); + return this; + } +} diff --git a/services/src/main/java/org/fao/geonet/api/records/editing/InspireValidatorUtils.java b/services/src/main/java/org/fao/geonet/inspire/validator/InspireValidatorUtils.java similarity index 78% rename from services/src/main/java/org/fao/geonet/api/records/editing/InspireValidatorUtils.java rename to services/src/main/java/org/fao/geonet/inspire/validator/InspireValidatorUtils.java index 8eab1aa74c..c996c49f20 100644 --- a/services/src/main/java/org/fao/geonet/api/records/editing/InspireValidatorUtils.java +++ b/services/src/main/java/org/fao/geonet/inspire/validator/InspireValidatorUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -21,7 +21,7 @@ * Rome - Italy. email: geonetwork@osgeo.org */ -package org.fao.geonet.api.records.editing; +package org.fao.geonet.inspire.validator; import com.google.common.base.Function; import com.google.common.io.CharStreams; @@ -29,6 +29,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; import org.apache.http.client.methods.*; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; @@ -59,6 +60,7 @@ import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -84,62 +86,62 @@ public class InspireValidatorUtils { /** * The Constant USER_AGENT. */ - private final static String USER_AGENT = "Mozilla/5.0"; + private static final String USER_AGENT = "Mozilla/5.0"; /** * The Constant ACCEPT. */ - private final static String ACCEPT = "application/json"; + private static final String ACCEPT = "application/json"; /** * The Constant CheckStatus_URL. */ - private final static String CheckStatus_URL = "/v2/status"; + private static final String CHECKSTATUS_URL = "/v2/status"; /** * The Constant ExecutableTestSuites_URL. */ - private final static String ExecutableTestSuites_URL = "/v2/ExecutableTestSuites"; + private static final String EXECUTABLETESTSUITES_URL = "/v2/ExecutableTestSuites"; /** * The Constant TestObjects_URL. */ - private final static String TestObjects_URL = "/v2/TestObjects"; + private static final String TESTOBJECTS_URL = "/v2/TestObjects"; /** * The Constant TestRuns_URL. */ - private final static String TestRuns_URL = "/v2/TestRuns"; + private static final String TESTRUNS_URL = "/v2/TestRuns"; /** * Test status PASSED. */ - public final static String TEST_STATUS_PASSED = "PASSED"; + public static final String TEST_STATUS_PASSED = "PASSED"; /** * Test status FAILED. */ - public final static String TEST_STATUS_FAILED = "FAILED"; + public static final String TEST_STATUS_FAILED = "FAILED"; /** * Test status PASSED_MANUAL. */ - public final static String TEST_STATUS_PASSED_MANUAL = "PASSED_MANUAL"; + public static final String TEST_STATUS_PASSED_MANUAL = "PASSED_MANUAL"; /** * Test status UNDEFINED. */ - public final static String TEST_STATUS_UNDEFINED = "UNDEFINED"; + public static final String TEST_STATUS_UNDEFINED = "UNDEFINED"; /** * Test status NOT_APPLICABLE. */ - public final static String TEST_STATUS_NOT_APPLICABLE = "NOT_APPLICABLE"; + public static final String TEST_STATUS_NOT_APPLICABLE = "NOT_APPLICABLE"; /** * Test status INTERNAL_ERROR. */ - public final static String TEST_STATUS_INTERNAL_ERROR = "INTERNAL_ERROR"; + public static final String TEST_STATUS_INTERNAL_ERROR = "INTERNAL_ERROR"; @Value("#{validatorAdditionalConfig['defaultTestSuite']}") public String defaultTestSuite; @@ -170,7 +172,7 @@ public void setTestsuites(Map testsuites) { this.testsuites = testsuites; } - public Map getTestsuites() { + public Map getTestsuites() { return testsuites; } @@ -178,7 +180,7 @@ public void setTestsuitesConditions(Map testsuitesConditions) { this.testsuitesConditions = testsuitesConditions; } - public Map getTestsuitesConditions() { + public Map getTestsuitesConditions() { return testsuitesConditions; } @@ -208,18 +210,18 @@ public InspireValidatorUtils() { * @return true, if successful * @throws IOException */ - public boolean checkServiceStatus(ServiceContext context, String endPoint) throws IOException { - HttpGet request = new HttpGet(StringUtils.removeEnd(endPoint, "/") + CheckStatus_URL); + public boolean checkServiceStatus(ServiceContext context, String endPoint) { + HttpGet request = new HttpGet(StringUtils.removeEnd(endPoint, "/") + CHECKSTATUS_URL); // add request header request.addHeader("User-Agent", USER_AGENT); request.addHeader("Accept", ACCEPT); try (ClientHttpResponse response = this.execute(context, request)) { - if (response.getStatusCode().value() == 200) { + if (response.getStatusCode().value() == HttpStatus.SC_OK) { return true; } else { - Log.warning(Log.SERVICE, "INSPIRE service not available: " + endPoint + CheckStatus_URL); + Log.warning(Log.SERVICE, "INSPIRE service not available: " + endPoint + CHECKSTATUS_URL); return false; } } catch (Exception e) { @@ -235,9 +237,9 @@ public boolean checkServiceStatus(ServiceContext context, String endPoint) throw * @param xml the xml * @return the string */ - private String uploadMetadataFile(ServiceContext context, String endPoint, InputStream xml) { + private String uploadMetadataFile(ServiceContext context, String endPoint, InputStream xml) throws InspireValidatorException { - HttpPost request = new HttpPost(StringUtils.removeEnd(endPoint, "/") + TestObjects_URL + "?action=upload"); + HttpPost request = new HttpPost(StringUtils.removeEnd(endPoint, "/") + TESTOBJECTS_URL + "?action=upload"); request.addHeader("User-Agent", USER_AGENT); request.addHeader("Accept", ACCEPT); @@ -254,20 +256,22 @@ private String uploadMetadataFile(ServiceContext context, String endPoint, Input response = this.execute(context, request); - if (response.getStatusCode().value() == 200) { + if (response.getStatusCode().value() == HttpStatus.SC_OK) { new BasicResponseHandler(); String body = CharStreams.toString(new InputStreamReader(response.getBody())); JSONObject jsonRoot = new JSONObject(body); return jsonRoot.getJSONObject("testObject").getString("id"); } else { - Log.warning(Log.SERVICE, - "WARNING: INSPIRE service HTTP response: " + response.getStatusCode().value() + " for " + TestObjects_URL); - return null; + Log.error(Log.SERVICE, + "INSPIRE service HTTP response: " + response.getStatusCode().value() + " for " + TESTOBJECTS_URL); + throw new InspireValidatorException(String.format("INSPIRE service - error uploading file: %s, error code: %d", response.getStatusText(), response.getStatusCode().value())); } + } catch (InspireValidatorException e) { + throw e; } catch (Exception e) { Log.error(Log.SERVICE, "Error calling INSPIRE service: " + endPoint, e); - return null; + throw new InspireValidatorException(String.format("Error calling INSPIRE service: %s, %s", endPoint, e.getMessage())); } finally { IOUtils.closeQuietly(response); } @@ -285,18 +289,15 @@ private List getTests(ServiceContext context, String endPoint, String te testsuite = getDefaultTestSuite(); } - HttpGet request = new HttpGet(StringUtils.removeEnd(endPoint, "/") + ExecutableTestSuites_URL); + HttpGet request = new HttpGet(StringUtils.removeEnd(endPoint, "/") + EXECUTABLETESTSUITES_URL); request.addHeader("User-Agent", USER_AGENT); request.addHeader("Accept", ACCEPT); - ClientHttpResponse response = null; - try { + try(ClientHttpResponse response = this.execute(context, request)) { String[] tests = testsuites.get(testsuite); - response = this.execute(context, request); - - if (response.getStatusCode().value() == 200) { + if (response.getStatusCode().value() == HttpStatus.SC_OK) { List testList = new ArrayList<>(); @@ -326,14 +327,12 @@ private List getTests(ServiceContext context, String endPoint, String te return testList; } else { Log.warning(Log.SERVICE, - "WARNING: INSPIRE service HTTP response: " + response.getStatusCode().value() + " for " + ExecutableTestSuites_URL); - return null; + "WARNING: INSPIRE service HTTP response: " + response.getStatusCode().value() + " for " + EXECUTABLETESTSUITES_URL); + return Collections.emptyList(); } } catch (Exception e) { Log.error(Log.SERVICE, "Exception in INSPIRE service: " + endPoint, e); - return null; - } finally { - IOUtils.closeQuietly(response); + return Collections.emptyList(); } } @@ -348,9 +347,9 @@ private List getTests(ServiceContext context, String endPoint, String te * @throws IOException Signals that an I/O exception has occurred. * @throws JSONException the JSON exception */ - private String testRun(ServiceContext context, String endPoint, String fileId, List testList, String testTitle) throws JSONException, IOException { + private String testRun(ServiceContext context, String endPoint, String fileId, List testList, String testTitle) throws InspireValidatorException { - HttpPost request = new HttpPost(StringUtils.removeEnd(endPoint, "/") + TestRuns_URL); + HttpPost request = new HttpPost(StringUtils.removeEnd(endPoint, "/") + TESTRUNS_URL); request.setHeader("Content-type", ACCEPT); request.addHeader("User-Agent", USER_AGENT); request.addHeader("Accept", ACCEPT); @@ -387,9 +386,10 @@ private String testRun(ServiceContext context, String endPoint, String fileId, L StringEntity entity = new StringEntity(json.toString()); request.setEntity(entity); + response = this.execute(context, request); - if (response.getStatusCode().value() == 201) { + if (response.getStatusCode().value() == HttpStatus.SC_CREATED) { String body = CharStreams.toString(new InputStreamReader(response.getBody())); @@ -400,8 +400,8 @@ private String testRun(ServiceContext context, String endPoint, String fileId, L return testId; } else { Log.warning(Log.SERVICE, - "WARNING: INSPIRE service HTTP response: " + response.getStatusCode().value() + " for " + TestRuns_URL); - throw new IOException(String.format("Error while creating test on validator side. Status is: %d (%s). Error: %s", + "WARNING: INSPIRE service HTTP response: " + response.getStatusCode().value() + " for " + TESTRUNS_URL); + throw new InspireValidatorException(String.format("Error while creating test on validator side. Status is: %d (%s). Error: %s", response.getStatusCode().value(), response.getStatusText(), response.getBody() != null @@ -409,9 +409,11 @@ private String testRun(ServiceContext context, String endPoint, String fileId, L )); } + } catch (InspireValidatorException e) { + throw e; } catch (Exception e) { Log.error(Log.SERVICE, "Exception in INSPIRE service: " + endPoint, e); - throw e; + throw new InspireValidatorException(String.format("Error calling INSPIRE service: %s, %s", endPoint, e.getMessage())); } finally { IOUtils.closeQuietly(response); } @@ -436,19 +438,19 @@ private void addApiKey(HttpRequestBase request) { * @return true, if is ready * @throws Exception */ - public boolean isReady(ServiceContext context, String endPoint, String testId) throws Exception { + public boolean isReady(ServiceContext context, String endPoint, String testId) throws ResourceNotFoundException, InspireValidatorException { if (testId == null) { return false; } - HttpGet request = new HttpGet(StringUtils.removeEnd(endPoint, "/") + TestRuns_URL + "/" + testId + "/progress"); + HttpGet request = new HttpGet(StringUtils.removeEnd(endPoint, "/") + TESTRUNS_URL + "/" + testId + "/progress"); request.addHeader("User-Agent", USER_AGENT); request.addHeader("Accept", ACCEPT); addApiKey(request); try (ClientHttpResponse response = this.execute(context, request)) { - if (response.getStatusCode().value() == 200) { + if (response.getStatusCode().value() == HttpStatus.SC_OK) { String body = CharStreams.toString(new InputStreamReader(response.getBody())); JSONObject jsonRoot = new JSONObject(body); @@ -456,22 +458,19 @@ public boolean isReady(ServiceContext context, String endPoint, String testId) t // Completed when estimated number of Test Steps is equal to completed Test Steps // Somehow this condition is necessary but not sufficient // so another check on real value of test is evaluated - return jsonRoot.getInt("val") == jsonRoot.getInt("max") & isPassed(context, endPoint, testId) != null; - - } else if (response.getStatusCode().value() == 404) { - + return jsonRoot.getInt("val") == jsonRoot.getInt("max") && isPassed(context, endPoint, testId) != null; + } else if (response.getStatusCode().value() == HttpStatus.SC_NOT_FOUND) { throw new ResourceNotFoundException("Test not found"); - } else { Log.warning(Log.SERVICE, - "WARNING: INSPIRE service HTTP response: " + response.getStatusCode().value() + " for " + TestRuns_URL + "WARNING: INSPIRE service HTTP response: " + response.getStatusCode().value() + " for " + TESTRUNS_URL + "?view=progress"); } } catch (ResourceNotFoundException e) { throw e; } catch (Exception e) { Log.error(Log.SERVICE, "Exception in INSPIRE service: " + endPoint, e); - throw e; + throw new InspireValidatorException(String.format("Exception in INSPIRE service: %s, %s", endPoint, e)); } return false; @@ -485,22 +484,20 @@ public boolean isReady(ServiceContext context, String endPoint, String testId) t * @return the string * @throws Exception */ - public String isPassed(ServiceContext context, String endPoint, String testId) throws Exception { + public String isPassed(ServiceContext context, String endPoint, String testId) throws InspireValidatorException { if (testId == null) { - throw new Exception(""); + throw new InspireValidatorException(String.format("Exception in INSPIRE service: %s, test not provided", endPoint)); } - HttpGet request = new HttpGet(StringUtils.removeEnd(endPoint, "/") + TestRuns_URL + "/" + testId); + HttpGet request = new HttpGet(StringUtils.removeEnd(endPoint, "/") + TESTRUNS_URL + "/" + testId); request.addHeader("User-Agent", USER_AGENT); request.addHeader("Accept", ACCEPT); addApiKey(request); try (ClientHttpResponse response = this.execute(context, request)) { - - if (response.getStatusCode().value() == 200) { - + if (response.getStatusCode().value() == HttpStatus.SC_OK) { String body = CharStreams.toString(new InputStreamReader(response.getBody())); JSONObject jsonRoot = new JSONObject(body); @@ -511,19 +508,16 @@ public String isPassed(ServiceContext context, String endPoint, String testId) t } catch (JSONException e) { return null; } - - } else if (response.getStatusCode().value() == 404) { - + } else if (response.getStatusCode().value() == HttpStatus.SC_NOT_FOUND) { throw new ResourceNotFoundException("Test not found"); - } else { Log.warning(Log.SERVICE, - "WARNING: INSPIRE service HTTP response: " + response.getStatusCode().value() + " for " + TestRuns_URL + "WARNING: INSPIRE service HTTP response: " + response.getStatusCode().value() + " for " + TESTRUNS_URL + "?view=progress"); } } catch (Exception e) { Log.error(Log.SERVICE, "Exception in INSPIRE service: " + endPoint, e); - throw e; + throw new InspireValidatorException(String.format("Exception in INSPIRE service: %s, %s", endPoint, e)); } return null; @@ -538,7 +532,7 @@ public String isPassed(ServiceContext context, String endPoint, String testId) t */ public String getReportUrl(String endPoint, String testId) { - return endPoint + TestRuns_URL + "/" + testId + ".html"; + return endPoint + TESTRUNS_URL + "/" + testId + ".html"; } /** @@ -550,7 +544,7 @@ public String getReportUrl(String endPoint, String testId) { */ public static String getReportUrlJSON(String endPoint, String testId) { - return endPoint + TestRuns_URL + "/" + testId + ".json"; + return endPoint + TESTRUNS_URL + "/" + testId + ".json"; } /** @@ -562,35 +556,35 @@ public static String getReportUrlJSON(String endPoint, String testId) { */ public static String getReportUrlXML(String endPoint, String testId) { - return endPoint + TestRuns_URL + "/" + testId + ".xml"; + return endPoint + TESTRUNS_URL + "/" + testId + ".xml"; } /** * Submit file to the external ETF validator. * - * @param record the record + * @param metadataRecord the metadata record * @param testsuite * @return the string * @throws IOException Signals that an I/O exception has occurred. * @throws JSONException the JSON exception */ - public String submitFile(ServiceContext context, String serviceEndpoint, String serviceQueryEndpoint, InputStream record, String testsuite, String testTitle) - throws IOException, JSONException { + public String submitFile(ServiceContext context, String serviceEndpoint, String serviceQueryEndpoint, InputStream metadataRecord, String testsuite, String testTitle) + throws InspireValidatorException { if (checkServiceStatus(context, serviceQueryEndpoint)) { // Get the tests to execute List tests = getTests(context, serviceQueryEndpoint, testsuite); // Upload file to test - String testFileId = uploadMetadataFile(context, serviceQueryEndpoint, record); + String testFileId = uploadMetadataFile(context, serviceQueryEndpoint, metadataRecord); if (testFileId == null) { Log.error(Log.SERVICE, "File not valid.", new IllegalArgumentException()); return null; } - if (tests == null || tests.size() == 0) { + if (tests.isEmpty()) { Log.error(Log.SERVICE, - "Default test sequence not supported. Check org.fao.geonet.api.records.editing.InspireValidatorUtils.TESTS_TO_RUN_TG13.", + "Default test sequence not supported. Check org.fao.geonet.inspire.validator.InspireValidatorUtils.TESTS_TO_RUN_TG13.", new Exception()); return null; } @@ -598,9 +592,8 @@ public String submitFile(ServiceContext context, String serviceEndpoint, String return testRun(context, serviceEndpoint, testFileId, tests, testTitle); } else { - ServiceNotFoundEx ex = new ServiceNotFoundEx(serviceEndpoint); - Log.error(Log.SERVICE, "Service unavailable.", ex); - throw ex; + Log.error(Log.SERVICE, String.format("INSPIRE service end-point unavailable: %s", serviceEndpoint), new InspireValidatorException()); + throw new InspireValidatorException(String.format("INSPIRE service end-point unavailable: %s", serviceEndpoint)); } } @@ -613,32 +606,28 @@ public String submitFile(ServiceContext context, String serviceEndpoint, String * @throws JSONException the JSON exception */ public String submitUrl(ServiceContext context, String serviceEndpoint, String serviceEndpointQuery, String getRecordById, String testsuite, String testTitle) - throws IOException, JSONException { + throws InspireValidatorException { - try { - if (checkServiceStatus(context, serviceEndpointQuery)) { - // Get the tests to execute - List tests = getTests(context, serviceEndpoint, testsuite); - if (tests == null || tests.size() == 0) { - Log.error(Log.SERVICE, - "Default test sequence not supported. Check org.fao.geonet.api.records.editing.InspireValidatorUtils.TESTS_TO_RUN_TG13.", - new Exception()); - return null; - } - // Return test id from Inspire service - return testRun(context, serviceEndpoint, getRecordById, tests, testTitle); - - } else { - ServiceNotFoundEx ex = new ServiceNotFoundEx(serviceEndpoint); - Log.error(Log.SERVICE, "Service unavailable.", ex); - throw ex; + if (checkServiceStatus(context, serviceEndpointQuery)) { + // Get the tests to execute + List tests = getTests(context, serviceEndpoint, testsuite); + if (tests.isEmpty()) { + Log.error(Log.SERVICE, + "Default test sequence not supported. Check org.fao.geonet.inspire.validator.InspireValidatorUtils.TESTS_TO_RUN_TG13.", + new Exception()); + return null; } - } finally { - // client.close(); + // Return test id from Inspire service + return testRun(context, serviceEndpoint, getRecordById, tests, testTitle); + + } else { + ServiceNotFoundEx ex = new ServiceNotFoundEx(serviceEndpoint); + Log.error(Log.SERVICE, "Service unavailable.", ex); + throw ex; } } - public String retrieveReport(ServiceContext context, String endPoint) throws Exception { + public String retrieveReport(ServiceContext context, String endPoint) throws InspireValidatorException { HttpGet request = new HttpGet(endPoint); @@ -650,11 +639,12 @@ public String retrieveReport(ServiceContext context, String endPoint) throws Exc return IOUtils.toString(response.getBody(), StandardCharsets.UTF_8.name()); } catch (Exception e) { Log.warning(Log.SERVICE, "Error calling INSPIRE service to retrieve the result report: " + endPoint, e); - throw e; + throw new InspireValidatorException(String.format("Error calling INSPIRE service to retrieve the result report: %s, %s", endPoint, e.getMessage())); } } - public void waitUntilReady(ServiceContext context, String endPoint, String testId) throws Exception { + public void waitUntilReady(ServiceContext context, String endPoint, String testId) throws + ResourceNotFoundException, InterruptedException, InspireValidatorException { int checkCounter = 1; while (checkCounter++ <= maxNumberOfEtfChecks) { @@ -665,7 +655,7 @@ public void waitUntilReady(ServiceContext context, String endPoint, String testI Thread.sleep(intervalBetweenEtfChecks); } - throw new Exception("ETF validation task hasn't finish after " + maxNumberOfEtfChecks + " checks."); + throw new InspireValidatorException(String.format("ETF validation task hasn't finish after %d checks.", maxNumberOfEtfChecks)); } /** @@ -710,12 +700,12 @@ public MetadataValidationStatus calculateValidationStatus(String validationStatu * @return */ public Map calculateTestsuitesToApply(String schemaid, IMetadataSchemaUtils metadataSchemaUtils) { - Map testsuitesConditions = getTestsuitesConditions(); + Map allTestsuitesConditions = getTestsuitesConditions(); // Check for rules for the schema - Map testsuitesConditionsForSchema = testsuitesConditions.entrySet().stream() + Map testsuitesConditionsForSchema = allTestsuitesConditions.entrySet().stream() .filter(x -> x.getKey().split("::")[0].equalsIgnoreCase(schemaid)) - .collect(Collectors.toMap(map -> map.getKey().split("::")[1], map -> map.getValue())); + .collect(Collectors.toMap(map -> map.getKey().split("::")[1], Map.Entry::getValue)); // If no rules found, check the rules in the dependencies of the schema if (testsuitesConditionsForSchema.isEmpty()) { @@ -732,9 +722,9 @@ public Map calculateTestsuitesToApply(String schemaid, IMetadata schemasProcessed.add(schemaDependsOn); String schemaDependsOnFilter = schemaDependsOn; - testsuitesConditionsForSchema = testsuitesConditions.entrySet().stream() + testsuitesConditionsForSchema = allTestsuitesConditions.entrySet().stream() .filter(x -> x.getKey().split("::")[0].equalsIgnoreCase(schemaDependsOnFilter)) - .collect(Collectors.toMap(map -> map.getKey().split("::")[1], map -> map.getValue())); + .collect(Collectors.toMap(map -> map.getKey().split("::")[1], Map.Entry::getValue)); conditionsFound = !testsuitesConditionsForSchema.isEmpty(); diff --git a/services/src/main/java/org/fao/geonet/api/processing/MInspireEtfValidateProcess.java b/services/src/main/java/org/fao/geonet/inspire/validator/MInspireEtfValidateProcess.java similarity index 87% rename from services/src/main/java/org/fao/geonet/api/processing/MInspireEtfValidateProcess.java rename to services/src/main/java/org/fao/geonet/inspire/validator/MInspireEtfValidateProcess.java index 9f640f7e80..07c1faf1c7 100644 --- a/services/src/main/java/org/fao/geonet/api/processing/MInspireEtfValidateProcess.java +++ b/services/src/main/java/org/fao/geonet/inspire/validator/MInspireEtfValidateProcess.java @@ -1,13 +1,11 @@ -package org.fao.geonet.api.processing; +package org.fao.geonet.inspire.validator; import jeeves.server.context.ServiceContext; import jeeves.transaction.TransactionManager; import jeeves.transaction.TransactionTask; import org.apache.commons.lang.StringUtils; -import org.apache.http.HttpStatus; import org.fao.geonet.NodeInfo; import org.fao.geonet.api.API; -import org.fao.geonet.api.records.editing.InspireValidatorUtils; import org.fao.geonet.api.records.formatters.FormatType; import org.fao.geonet.api.records.formatters.FormatterApi; import org.fao.geonet.api.records.formatters.FormatterWidth; @@ -48,8 +46,8 @@ public class MInspireEtfValidateProcess implements SelfNaming { private final ApplicationContext appContext; private final ServiceContext serviceContext; - private final String URL; - private final String URL_QUERY; + private final String url; + private final String urlQuery; private ObjectName probeName; private int metadataToAnalyseCount = -1; @@ -62,11 +60,11 @@ public class MInspireEtfValidateProcess implements SelfNaming { public MInspireEtfValidateProcess(String catalogueId, - String URL, String URL_QUERY, + String url, String urlQuery, ServiceContext serviceContext, ApplicationContext appContext) { - this.URL = URL; - this.URL_QUERY = URL_QUERY; + this.url = url; + this.urlQuery = urlQuery; this.serviceContext = serviceContext; this.appContext = appContext; @@ -151,9 +149,9 @@ public void processMetadata(Set uuids, String mode) throws Exception { continue; } - for (AbstractMetadata record : metadataRepository.findAllByUuid(uuid)) { + for (AbstractMetadata metadataRecord : metadataRepository.findAllByUuid(uuid)) { try { - if (!accessManager.canEdit(serviceContext, String.valueOf(record.getId()))) { + if (!accessManager.canEdit(serviceContext, String.valueOf(metadataRecord.getId()))) { metadataAnalysed++; metadataNotAllowed++; } else { @@ -162,11 +160,11 @@ public void processMetadata(Set uuids, String mode) throws Exception { public Object doInTransaction(TransactionStatus transaction) throws Throwable { // Evaluate test conditions for INSPIRE test suites to apply to the metadata Map testsuiteConditions = - inspireValidatorUtils.calculateTestsuitesToApply(record.getDataInfo().getSchemaId(), metadataSchemaUtils); + inspireValidatorUtils.calculateTestsuitesToApply(metadataRecord.getDataInfo().getSchemaId(), metadataSchemaUtils); boolean reindexMetadata = false; - String mdToValidate = retrieveMetadataToValidate(context, record); + String mdToValidate = retrieveMetadataToValidate(context, metadataRecord); try { boolean inspireMetadata = false; @@ -176,12 +174,12 @@ public Object doInTransaction(TransactionStatus transaction) throws Throwable { boolean applyCondition = false; try { // Checks the condition in the original record - applyCondition = Xml.selectBoolean(record.getXmlData(false), + applyCondition = Xml.selectBoolean(metadataRecord.getXmlData(false), entry.getValue(), - schemaManager.getSchema(record.getDataInfo().getSchemaId()).getNamespaces()); + schemaManager.getSchema(metadataRecord.getDataInfo().getSchemaId()).getNamespaces()); } catch (Exception ex) { Log.error(API.LOG_MODULE_NAME, String.format("Error checking INSPIRE rule %s to apply to metadata: %s", - entry.getKey(), record.getUuid()), ex); + entry.getKey(), metadataRecord.getUuid()), ex); } if (applyCondition) { @@ -189,8 +187,8 @@ public Object doInTransaction(TransactionStatus transaction) throws Throwable { String testId = null; String getRecordByIdUrl = null; if (StringUtils.isEmpty(mode)) { - testId = inspireValidatorUtils.submitFile(serviceContext, URL, URL_QUERY, - new ByteArrayInputStream(mdToValidate.getBytes()), entry.getKey(), record.getUuid()); + testId = inspireValidatorUtils.submitFile(serviceContext, url, urlQuery, + new ByteArrayInputStream(mdToValidate.getBytes()), entry.getKey(), metadataRecord.getUuid()); } else { String portal = null; if (!NodeInfo.DEFAULT_NODE.equals(mode)) { @@ -213,25 +211,25 @@ public Object doInTransaction(TransactionStatus transaction) throws Throwable { appContext.getBean(SettingManager.class).getBaseURL(), portal, ISO19139Namespaces.GMD.getURI(), - record.getUuid()); - testId = inspireValidatorUtils.submitUrl(serviceContext, URL, URL_QUERY, getRecordByIdUrl, entry.getKey(), record.getUuid()); + metadataRecord.getUuid()); + testId = inspireValidatorUtils.submitUrl(serviceContext, url, urlQuery, getRecordByIdUrl, entry.getKey(), metadataRecord.getUuid()); } } if (testId != null) { - inspireValidatorUtils.waitUntilReady(serviceContext, URL, testId); + inspireValidatorUtils.waitUntilReady(serviceContext, url, testId); - String reportUrl = inspireValidatorUtils.getReportUrl(URL, testId); - String reportXmlUrl = InspireValidatorUtils.getReportUrlXML(URL, testId); + String reportUrl = inspireValidatorUtils.getReportUrl(url, testId); + String reportXmlUrl = InspireValidatorUtils.getReportUrlXML(url, testId); String reportXml = inspireValidatorUtils.retrieveReport(serviceContext, reportXmlUrl); - String validationStatus = inspireValidatorUtils.isPassed(serviceContext, URL, testId); + String validationStatus = inspireValidatorUtils.isPassed(serviceContext, url, testId); MetadataValidationStatus metadataValidationStatus = inspireValidatorUtils.calculateValidationStatus(validationStatus); MetadataValidation metadataValidation = new MetadataValidation() - .setId(new MetadataValidationId(record.getId(), "inspire")) + .setId(new MetadataValidationId(metadataRecord.getId(), "inspire")) .setStatus(metadataValidationStatus).setRequired(false) .setReportUrl(reportUrl).setReportContent(reportXml); @@ -252,7 +250,7 @@ public Object doInTransaction(TransactionStatus transaction) throws Throwable { metadataNotInspire++; MetadataValidation metadataValidation = new MetadataValidation() - .setId(new MetadataValidationId(record.getId(), "inspire")) + .setId(new MetadataValidationId(metadataRecord.getId(), "inspire")) .setStatus(MetadataValidationStatus.DOES_NOT_APPLY).setRequired(false); metadataValidationRepository.save(metadataValidation); @@ -265,14 +263,14 @@ public Object doInTransaction(TransactionStatus transaction) throws Throwable { } if (reindexMetadata) { - dataManager.indexMetadata(new ArrayList<>(Arrays.asList(record.getId() + ""))); + dataManager.indexMetadata(new ArrayList<>(Arrays.asList(metadataRecord.getId() + ""))); } } catch (Exception ex) { metadataAnalysedInError++; Log.error(API.LOG_MODULE_NAME, String.format("Error validating metadata %s in INSPIRE validator: %s", - record.getUuid(), ex.getMessage()), ex); + metadataRecord.getUuid(), ex.getMessage()), ex); } metadataAnalysed++; @@ -286,7 +284,7 @@ public Object doInTransaction(TransactionStatus transaction) throws Throwable { metadataAnalysedInError++; Log.error(API.LOG_MODULE_NAME, String.format("Error validating metadata %s in INSPIRE validator: %s", - record.getUuid(), ex.getMessage()), ex); + metadataRecord.getUuid(), ex.getMessage()), ex); } @@ -306,15 +304,15 @@ private final void runInNewTransaction(String name, TransactionTask tran * otherwise if not available an iso19139 formatter returns null. * * @param context - * @param record + * @param metadataRecord * @return Metadata to validate or null if can't be converted to iso19139 format. */ - private String retrieveMetadataToValidate(ServiceContext context, AbstractMetadata record) { + private String retrieveMetadataToValidate(ServiceContext context, AbstractMetadata metadataRecord) { String mdToValidate = null; - if (!record.getDataInfo().getSchemaId().equals(ISO19139SchemaPlugin.IDENTIFIER)) { + if (!metadataRecord.getDataInfo().getSchemaId().equals(ISO19139SchemaPlugin.IDENTIFIER)) { try { - Key key = new Key(record.getId(), "eng", FormatType.xml, "iso19139", true, FormatterWidth._100); + Key key = new Key(metadataRecord.getId(), "eng", FormatType.xml, "iso19139", true, FormatterWidth._100); final FormatterApi.FormatMetadata formatMetadata = new FormatterApi().new FormatMetadata(context, key, null); @@ -323,10 +321,10 @@ private String retrieveMetadataToValidate(ServiceContext context, AbstractMetada } catch (Exception ex) { Log.error(API.LOG_MODULE_NAME, String.format("Error converting metadata %s to ISO19139 for INSPIRE validator: %s", - record.getUuid(), ex.getMessage()), ex); + metadataRecord.getUuid(), ex.getMessage()), ex); } } else { - mdToValidate = record.getData(); + mdToValidate = metadataRecord.getData(); } return mdToValidate; diff --git a/services/src/main/resources/config-spring-geonetwork.xml b/services/src/main/resources/config-spring-geonetwork.xml index e5baa797a3..33f965c8d9 100644 --- a/services/src/main/resources/config-spring-geonetwork.xml +++ b/services/src/main/resources/config-spring-geonetwork.xml @@ -64,7 +64,7 @@ diff --git a/services/src/test/java/org/fao/geonet/api/records/editing/InspireValidatorUtilsTest.java b/services/src/test/java/org/fao/geonet/api/records/editing/InspireValidatorUtilsTest.java index 77805a1a41..07d95187e8 100644 --- a/services/src/test/java/org/fao/geonet/api/records/editing/InspireValidatorUtilsTest.java +++ b/services/src/test/java/org/fao/geonet/api/records/editing/InspireValidatorUtilsTest.java @@ -3,6 +3,7 @@ import jeeves.server.context.ServiceContext; import org.fao.geonet.api.exception.ResourceNotFoundException; import org.fao.geonet.domain.MetadataValidationStatus; +import org.fao.geonet.inspire.validator.InspireValidatorUtils; import org.fao.geonet.services.AbstractServiceIntegrationTest; import org.junit.Before; import org.junit.Ignore; diff --git a/web-ui/src/main/resources/catalog/components/validationtools/GnmdInspireValidationDirective.js b/web-ui/src/main/resources/catalog/components/validationtools/GnmdInspireValidationDirective.js index 41aff20e78..8c9a7e601b 100644 --- a/web-ui/src/main/resources/catalog/components/validationtools/GnmdInspireValidationDirective.js +++ b/web-ui/src/main/resources/catalog/components/validationtools/GnmdInspireValidationDirective.js @@ -108,7 +108,7 @@ }).then( function mySucces(response) { if (angular.isDefined(response.data) && response.data != null) { - scope.checkInBackgroud(response.data); + scope.checkInBackground(response.data); } else { scope.isDownloadingRecord = false; scope.isDownloadedRecord = false; @@ -165,7 +165,7 @@ scope.md = new Metadata(data.metadata[0]); }); } - scope.checkInBackgroud = function (token) { + scope.checkInBackground = function (token) { scope.stop = undefined; if (token === "") { gnAlertService.addAlert({ diff --git a/web-ui/src/main/resources/catalog/views/default/templates/recordView/metadata.html b/web-ui/src/main/resources/catalog/views/default/templates/recordView/metadata.html index 794e3cec55..4860f4d3eb 100644 --- a/web-ui/src/main/resources/catalog/views/default/templates/recordView/metadata.html +++ b/web-ui/src/main/resources/catalog/views/default/templates/recordView/metadata.html @@ -42,7 +42,8 @@

metadataLanguage

-

sourceCatalog

: +

sourceCatalog

+ : From e504ac93ef8b3dafe1d63c19de766c7c98b92974 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Dec 2023 07:32:03 +0000 Subject: [PATCH 20/81] [BP] Bump actions/setup-python from 4 to 5 (#7543) Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/docs.yml | 2 +- .github/workflows/linux.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c386a57359..932b045527 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -22,7 +22,7 @@ jobs: with: fetch-depth: 0 - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.x - name: mkdocs install diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 5e41c788bf..7188051244 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -28,7 +28,7 @@ jobs: java-version: ${{ matrix.jdk }} cache: 'maven' - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.x - name: mkdocs install From b76e777c847ab4120670b6ba1c68fec6c91e7c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Thu, 7 Dec 2023 13:43:13 +0100 Subject: [PATCH 21/81] [BP] OpenId / Use the user profile configured locally if the configuration option OPENIDCONNECT_USERPROFILEUPDATEENABLED is disabled (#7445) * OpenId / Use the user profile configured locally if the configuration option OPENIDCONNECT_USERPROFILEUPDATEENABLED is disabled * OpenId / Use the user profile configured locally if the configuration option OPENIDCONNECT_USERPROFILEUPDATEENABLED is disabled - additional change required * OpenId / Use the user local authorities if the configuration option OPENIDCONNECT_USERPROFILEUPDATEENABLED is disabled --- .../GeonetworkOidcUserService.java | 25 ++++++++++++++++++- .../OidcUser2GeonetworkUser.java | 23 ++++++++++++++--- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/GeonetworkOidcUserService.java b/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/GeonetworkOidcUserService.java index 504c0a8fac..97a7b91763 100644 --- a/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/GeonetworkOidcUserService.java +++ b/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/GeonetworkOidcUserService.java @@ -22,9 +22,11 @@ */ package org.fao.geonet.kernel.security.openidconnect; +import org.fao.geonet.kernel.security.GeonetworkAuthenticationProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.hierarchicalroles.RoleHierarchy; import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService; import org.springframework.security.oauth2.core.OAuth2AuthenticationException; @@ -55,12 +57,33 @@ public class GeonetworkOidcUserService extends OidcUserService { @Autowired RoleHierarchy roleHierarchy; + @Autowired + GeonetworkAuthenticationProvider geonetworkAuthenticationProvider; + + @Autowired + protected SimpleOidcUserFactory simpleOidcUserFactory; + @Override public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2AuthenticationException { OidcUser user = super.loadUser(userRequest); + Collection authorities; + + if (!oidcConfiguration.isUpdateProfile()) { + // Retrieve the authorities from the local user + try { + SimpleOidcUser simpleUser = simpleOidcUserFactory.create(user.getAttributes()); + UserDetails userDetails = geonetworkAuthenticationProvider.loadUserByUsername(simpleUser.getUsername()); + + authorities = userDetails.getAuthorities(); + } catch (Exception ex) { + authorities = createAuthorities(user); + } + } else { + authorities = createAuthorities(user); + } + OidcUserInfo userInfo = user.getUserInfo(); - Collection authorities = createAuthorities(user); //get the user name from a specific attribute (if specified) or use default. String userNameAttributeName = userRequest.getClientRegistration() diff --git a/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/OidcUser2GeonetworkUser.java b/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/OidcUser2GeonetworkUser.java index 3c0cf6f3d7..34a8c813d5 100644 --- a/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/OidcUser2GeonetworkUser.java +++ b/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/OidcUser2GeonetworkUser.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Food and Agriculture Organization of the + * Copyright (C) 2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -76,6 +76,12 @@ public UserDetails getUserDetails(Map attributes, boolean withDbUpdate) throws E if (!StringUtils.hasText(simpleUser.getUsername())) return null; + if (!oidcConfiguration.isUpdateProfile()) { + // SimpleOidcUser.updateUser assigns the user profile to the OpenId user profile, unless + // SimpleOidcUser.profile is empty. Force the empty value, to avoid the assignment. + simpleUser.setProfile(""); + } + User user; boolean newUserFlag = false; try { @@ -90,8 +96,9 @@ public UserDetails getUserDetails(Map attributes, boolean withDbUpdate) throws E simpleUser.updateUser(user); // copy attributes from the IDToken to the GN user Map> profileGroups = oidcRoleProcessor.getProfileGroups(attributes); - user.setProfile(oidcRoleProcessor.getProfile(attributes)); - + if (newUserFlag || oidcConfiguration.isUpdateProfile()) { + user.setProfile(oidcRoleProcessor.getProfile(attributes)); + } //Apply changes to database is required. if (withDbUpdate) { @@ -124,6 +131,12 @@ public UserDetails getUserDetails(OidcIdToken idToken, Map attributes, boolean w if (!StringUtils.hasText(simpleUser.getUsername())) return null; + if (!oidcConfiguration.isUpdateProfile()) { + // SimpleOidcUser.updateUser assigns the user profile to the OpenId user profile, unless + // SimpleOidcUser.profile is empty. Force the empty value, to avoid the assignment. + simpleUser.setProfile(""); + } + User user; boolean newUserFlag = false; try { @@ -138,7 +151,9 @@ public UserDetails getUserDetails(OidcIdToken idToken, Map attributes, boolean w simpleUser.updateUser(user); // copy attributes from the IDToken to the GN user Map> profileGroups = oidcRoleProcessor.getProfileGroups(idToken); - user.setProfile(oidcRoleProcessor.getProfile(idToken)); + if (newUserFlag || oidcConfiguration.isUpdateProfile()) { + user.setProfile(oidcRoleProcessor.getProfile(idToken)); + } //Apply changes to database is required. From 082ac0356b2881aca53ab8025a8cf52724b6fb78 Mon Sep 17 00:00:00 2001 From: Jeroen Ticheler Date: Fri, 8 Dec 2023 00:53:07 +0100 Subject: [PATCH 22/81] Edited small typos and text. Some link fixes. Signed-off-by: ticheler --- README.md | 4 +- SECURITY.md | 6 +- docs/README.md | 7 +- docs/manual/LICENSE | 319 ++++++++++++++++++ docs/manual/README.md | 20 +- docs/manual/docs/help/index.md | 2 +- docs/manual/docs/help/map/index.md | 2 +- docs/manual/docs/overview/about.md | 2 +- docs/manual/docs/overview/authors.md | 4 +- .../deleting-metadata.md | 2 +- .../editing-metadata.md | 16 +- .../describing-information/index.md | 6 +- .../managing-templates.md | 2 +- docs/manual/mkdocs.yml | 4 +- 14 files changed, 357 insertions(+), 39 deletions(-) create mode 100644 docs/manual/LICENSE diff --git a/README.md b/README.md index 6e2d522512..f0f8913e1f 100644 --- a/README.md +++ b/README.md @@ -19,11 +19,11 @@ User documentation is managed in the [geonetwork/doc](https://github.com/geonetwork/doc) repository covering all releases of GeoNetwork. -The `docs` folder includes [geonetwork/doc](https://github.com/geonetwork/doc) as a git submodule. This documentation is compiled into html pages during a release for publishing on the [geonetwork-opensource.org](http://geonetwork-opensource.org) website. +The `docs` folder includes [geonetwork/doc](https://github.com/geonetwork/doc) as a git submodule. This documentation is compiled into html pages during a release for publishing on the [geonetwork-opensource.org](https://www.geonetwork-opensource.org) website. Developer documentation located in README.md files in the code-base: * General documentation for the project as a whole is in this README.md -* [Software Development Documentation](/software_development/) provides instructions for setting up a development environment, building Geonetwork, compiling user documentation, and making a releases +* [Software Development Documentation](/software_development/) provides instructions for setting up a development environment, building GeoNetwork, compiling user documentation, and making a releases * Module specific documentation can be found in each module (assuming there is module specific documentation required) diff --git a/SECURITY.md b/SECURITY.md index 35bf244af0..a59360428c 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,17 +2,17 @@ The GeoNetwork community takes the security of the software and all services based on the software product seriously. On this page you can find the versions for which the community provides security patches. -If you believe you have found a security vulnerability in the software or an implementation of the software, please report it to geonetwork@osgeo.org as described below. Do not publish the vulnerability in any public forums (such as twitter, email list or issue tracker). +If you believe you have found a security vulnerability in the software or an implementation of the software, please report it to geonetwork@osgeo.org as described below. Do not publish the vulnerability in any public forums (such as Twitter/X, email list or issue tracker). ## Supported Versions Each GeoNetwork release is supported with bug fixes for a limited period, with patch releases made approximately every three to six months. -- We recommend to update to latest incremental release as soon as possible to address security vulnarabilities. +- We recommend to update to latest incremental release as soon as possible to address security vulnerabilities. - Some overlap is provided when major versions are announced with both a current version and a maintenance version being made available to provide time for organizations to upgrade. | Version | Supported | Comment | -| ----------- | ------------------ |------------------------ | +|-------------|--------------------|-------------------------| | 4.2.x | :white_check_mark: | Current version | | 4.0.x | :white_check_mark: | Maintenance version | | 3.12.x | :white_check_mark: | Maintenance version | diff --git a/docs/README.md b/docs/README.md index d97e063a28..67dc7dd700 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,11 +1,10 @@ # Documentation - This module contains: -* `manual` in Markdown format for mkdocs -* `manuals` in RST format for sphinx-build (vai https://github.com/geonetwork/doc) +* `manual` in Markdown format for MkDocs +* `manuals` in RST format for sphinx-build (via https://github.com/geonetwork/doc) - Legacy * Change logs txt files * [copyright.txt](copyright.txt) Copyright template * `licenses` for library * Utility folder with scripts to generate extra docs -* `translate` python module for help with sphinx-build to mkdocs +* `translate` python module for help with Sphinx-build migration to MkDocs diff --git a/docs/manual/LICENSE b/docs/manual/LICENSE new file mode 100644 index 0000000000..1d658d6d37 --- /dev/null +++ b/docs/manual/LICENSE @@ -0,0 +1,319 @@ +Creative Commons Legal Code + +Attribution 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined above) for the purposes of this + License. + c. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + d. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + e. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + f. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + g. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + h. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + i. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(b), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(b), as requested. + b. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Section 3(b), in the case of an Adaptation, + a credit identifying the use of the Work in the Adaptation (e.g., + "French translation of the Work by Original Author," or "Screenplay + based on original Work by Original Author"). The credit required by + this Section 4 (b) may be implemented in any reasonable manner; + provided, however, that in the case of a Adaptation or Collection, at + a minimum such credit will appear, if a credit for all contributing + authors of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits for the + other contributing authors. For the avoidance of doubt, You may only + use the credit required by this Section for the purpose of attribution + in the manner set out above and, by exercising Your rights under this + License, You may not implicitly or explicitly assert or imply any + connection with, sponsorship or endorsement by the Original Author, + Licensor and/or Attribution Parties, as appropriate, of You or Your + use of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + c. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of this License. + + Creative Commons may be contacted at http://creativecommons.org/. diff --git a/docs/manual/README.md b/docs/manual/README.md index 67b9ce2ffc..6a32791b9e 100644 --- a/docs/manual/README.md +++ b/docs/manual/README.md @@ -1,12 +1,12 @@ -# Geonetwork Manual and Help +# GeoNetwork Manual and Help -Documentation for GeoNetwork opensource is available via https://geonetwork-opensource.org. +Documentation for GeoNetwork opensource is available via https://docs.geonetwork-opensource.org. -This documentation is written under the creative commons license [Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)](LICENSE.md). +This documentation is written under the Creative Commons license [Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)](LICENSE). Reference: -* [Documentation Writing Guide](docs/devel/docs/docs.md) +* [Documentation Writing Guide](docs/devel/docs/index.md) ## Communication @@ -14,9 +14,9 @@ The [project issue tracker](https://github.com/geonetwork/core-geonetwork/issues ## Material for MkDocs -Documentation is [mkdocs-material](https://squidfunk.github.io/mkdocs-material/) which is a Markdown documentation framework written on top of [MkDocs](https://www.mkdocs.org/). +Documentation is [MkDocs-material](https://squidfunk.github.io/mkdocs-material/) which is a Markdown documentation framework written on top of [MkDocs](https://www.mkdocs.org/). -If you are using python3: +If you are using Python3: 1. Install using ``pip3`` and build: @@ -45,7 +45,7 @@ If you are using python3: ### VirtualEnv -If you use a python virtual environment: +If you use a Python virtual environment: 1. Activate virtual environment: @@ -65,9 +65,9 @@ If you use a python virtual environment: ### Docker -If you are not familiar with python the mkdocs-material website has instructions for docker: +If you are not familiar with Python the MkDocs-material website has instructions for Docker: -1. Run mkdocs in Docker environment: +1. Run MkDocs in Docker environment: ``` docker pull squidfunk/mkdocs-material @@ -90,7 +90,7 @@ If you are not familiar with python the mkdocs-material website has instructions 3. Both ``install`` and ``deploy`` are skipped (so ``mvn clean install`` is fine). -4. Use default profile to only build the default english docs: +4. Use default profile to only build the default English docs: ``` mvn install -Pdefault diff --git a/docs/manual/docs/help/index.md b/docs/manual/docs/help/index.md index 70324d5ce0..08d050fa24 100644 --- a/docs/manual/docs/help/index.md +++ b/docs/manual/docs/help/index.md @@ -6,7 +6,7 @@ This catalogue lists records of available datasets. The catalogue uses ***GeoNetwork*** technology for listing, searching and reviewing records. -GeoNetwork is a catalog application to manage spatially referenced resources. It provides powerful metadata editing and search functions as well as an interactive web map viewer. GeoNetwork is widely used as the foundation of Spatial Data Infrastructures world wide. +GeoNetwork is a catalog application to manage spatially referenced resources. It provides powerful metadata editing and search functions as well as an interactive web map viewer. GeoNetwork is widely used as the foundation of Spatial Data Infrastructures worldwide. !!! info "Reference" diff --git a/docs/manual/docs/help/map/index.md b/docs/manual/docs/help/map/index.md index f996b73cc5..474b3fc0a3 100644 --- a/docs/manual/docs/help/map/index.md +++ b/docs/manual/docs/help/map/index.md @@ -31,7 +31,7 @@ The map viewer has a number of features to explore the data: * Location search including searching for your current position. ![Map viewer](img/map.png) - *Mapviewer* + *Map viewer* ## Add layers diff --git a/docs/manual/docs/overview/about.md b/docs/manual/docs/overview/about.md index 3737502a22..967fa95ba8 100644 --- a/docs/manual/docs/overview/about.md +++ b/docs/manual/docs/overview/about.md @@ -1,6 +1,6 @@ # About -GeoNetwork-opensource is a catalog allowing visitors to search and discover spatial information. Visitors are can the included map viewer to preview datasets interactively. +GeoNetwork opensource is a catalog allowing visitors to search and discover spatial information. Visitors are can the included map viewer to preview datasets interactively. GeoNetwork provides the tools to managing spatially referenced resources including record editing. diff --git a/docs/manual/docs/overview/authors.md b/docs/manual/docs/overview/authors.md index 8cba5d77de..1623ec8417 100644 --- a/docs/manual/docs/overview/authors.md +++ b/docs/manual/docs/overview/authors.md @@ -8,14 +8,13 @@ In brief the committee votes on proposals on the geonetwork-dev mailinglist. Pro ### Members of the Project Steering Committee -- Emanuele Tajariol - Florent Gravin - Francois Prunayre - Jeroen Ticheler - Chair +- Jo Cook - Jose Garcia - Paul van Genuchten - Simon Pigot -- Jo Cook ### Former members of the PSC @@ -23,6 +22,7 @@ In brief the committee votes on proposals on the geonetwork-dev mailinglist. Pro - Archie Warnock - Patrizia Monteduro - Jesse Eichar +- Emanuele Tajariol ## Committers diff --git a/docs/manual/docs/user-guide/describing-information/deleting-metadata.md b/docs/manual/docs/user-guide/describing-information/deleting-metadata.md index b3f5ee3a16..0839fdd02b 100644 --- a/docs/manual/docs/user-guide/describing-information/deleting-metadata.md +++ b/docs/manual/docs/user-guide/describing-information/deleting-metadata.md @@ -1,6 +1,6 @@ # Deleting a record -User must have editing privileges to be able to remove a record. This topic describes the various ways to delete a record. +The user must have editing privileges to be able to remove a record. This topic describes the various ways to delete a record. There are different ways to remove a record: diff --git a/docs/manual/docs/user-guide/describing-information/editing-metadata.md b/docs/manual/docs/user-guide/describing-information/editing-metadata.md index e9d92133c9..c5c89b5276 100644 --- a/docs/manual/docs/user-guide/describing-information/editing-metadata.md +++ b/docs/manual/docs/user-guide/describing-information/editing-metadata.md @@ -4,7 +4,7 @@ This topic describes how to use the metadata editor. ## Using the editor toolbar -The top tool bar provides the main editor actions: +The top toolbar provides the most important functionality available to the editor: ![](img/editor-toolbar.png) @@ -12,26 +12,26 @@ From left to right: - Set metadata categories - Set metadata group -- Advanced features (eg. versioning) +- Advanced features (e.g. versioning) - `Validate` to run metadata validation - `Cancel` to cancel all changes made since the beginning of the editing session - `Save & Close` to save and close the editor -- `Save` to save the metadata or the template. The drowdown also allows to set if the edits are minor or not (ie. the change date of the metadata will not be updated if case of minor edits). +- `Save` to save the metadata or the template. The dropdown also allows to set if the edits are minor or not (i.e. the change date of the metadata will not be updated if case of minor edits). - Change view mode for the editor form, enable tooltips or switch to advanced editor mode ## Navigating the form -To describe the resource, an editor can use the form, which provides different views. By default the editor provides: +To describe the resource, an editor can use the form, which provides different views. By default, the editor provides: -- a `simple view` displaying all fields from the metadata -- a `full view` based on the metadata standard and providing access to all descriptors from the standards -- an `XML view` displaying the record as an XML document +- a `Default` view displaying all fields from the metadata +- an `Advanced` view based on the metadata standard and providing access to all descriptors from the metadata standard in use +- an `XML` view displaying the record as an XML document To switch from one view to another, use the following menu: ![](img/view-mode.png) -Once the view is selected, the editor can browse the list of fields to populate. He can also use the scroll-spy on the lower right corner to quickly access a section. +Once the view is selected, the editor can browse the list of fields to populate. He can also use the scroll-spy in the lower right corner to quickly access a section. ![](img/scoll-spy.png) diff --git a/docs/manual/docs/user-guide/describing-information/index.md b/docs/manual/docs/user-guide/describing-information/index.md index 42a2d6a620..8808d7a1ec 100644 --- a/docs/manual/docs/user-guide/describing-information/index.md +++ b/docs/manual/docs/user-guide/describing-information/index.md @@ -2,11 +2,11 @@ This section describes how to catalog resources. First, user needs to choose a standard to use. In general, the following rules apply: -- [Dublin core](https://dublincore.org/) usually used for opendata portal, referencing publication, report, \... +- [Dublin core](https://dublincore.org/) usually used for open data portal, referencing publication, report, \... - [ISO 19115/119/139](https://www.iso.org/iso/en/home/store/catalogue_tc/catalogue_detail.htm?csnumber=32557) used for spatial resources (eg. datasets, services, maps) - [ISO 19110](https://www.iso.org/iso/en/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=39965) used for feature attribute table -The editor form provides uploading of data, graphics, documents, pdf files and any other content type. It supports among other: +The editor form provides uploading of data, graphics, documents, pdf files and any other content type. It supports among others: - full standard support - multilingual metadata editing, @@ -27,4 +27,4 @@ The editor form provides uploading of data, graphics, documents, pdf files and a - [Multilingual editing](multilingual-editing.md) - [Describing resources for the INSPIRE directive](inspire-editing.md) -Based on user profiles (see [Creating user](../../administrator-guide/managing-users-and-groups/creating-user.md)), a dashboard provides easy access to their informations and tasks. +Based on user profiles (see [Creating user](../../administrator-guide/managing-users-and-groups/creating-user.md)), a dashboard provides easy access to their information and tasks. diff --git a/docs/manual/docs/user-guide/describing-information/managing-templates.md b/docs/manual/docs/user-guide/describing-information/managing-templates.md index e3c14f7c1e..76a4285751 100644 --- a/docs/manual/docs/user-guide/describing-information/managing-templates.md +++ b/docs/manual/docs/user-guide/describing-information/managing-templates.md @@ -1,6 +1,6 @@ # Managing templates {#creating-templates} -Templates are metadata records that you can use for describing new resources. This topic describes how to load and manage templates. +Templates are metadata records that you can use as the starting point to describe new resources. This topic describes how to load and manage templates. ## Creating and managing templates diff --git a/docs/manual/mkdocs.yml b/docs/manual/mkdocs.yml index 6f8ee8b6de..282212a274 100644 --- a/docs/manual/mkdocs.yml +++ b/docs/manual/mkdocs.yml @@ -63,11 +63,11 @@ plugins: name: English build: true default: true - site_name: 'GeoNetwork Opensource (EN)' + site_name: 'GeoNetwork opensource (EN)' - locale: fr name: Français build: !ENV [FRENCH,true] - site_name: 'GeoNetwork Opensource (FR)' + site_name: 'GeoNetwork opensource (FR)' site_description: Catalogue GeoNetwork pour répertorier, rechercher et examiner les enregistrements. nav_translations: Home: Home From 465e08ce00c62831cb8975e961ef2ee95810ea08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Mon, 11 Dec 2023 13:02:49 +0100 Subject: [PATCH 23/81] [BP] Use Apache Commons Text library to escape JSON content in xslt processing (#7525) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use Apache Commons Text library to escape JSON content in xslt processing * Maintain compatibility with plugins using the old funciton Backport of https://github.com/geonetwork/core-geonetwork/pull/7525 Co-authored-by: Jose García --------- Co-authored-by: Juan Luis Rodríguez --- .../java/org/fao/geonet/util/XslUtil.java | 9 ++- .../plugin/dublin-core/index-fields/index.xsl | 22 +++--- .../plugin/iso19110/index-fields/index.xsl | 32 ++++---- .../jsonld/iso19115-3.2018-to-jsonld.xsl | 10 +-- .../index-fields/index-subtemplate.xsl | 22 +++--- .../iso19115-3.2018/index-fields/index.xsl | 74 +++++++++---------- .../iso19115-3.2018/layout/utility-tpl.xsl | 5 +- .../formatter/jsonld/iso19139-to-jsonld.xsl | 10 +-- .../index-fields/index-subtemplate.xsl | 16 ++-- .../plugin/iso19139/index-fields/index.xsl | 57 +++++++------- .../plugin/iso19139/layout/utility-tpl.xsl | 5 +- .../main/webapp/xslt/common/index-utils.xsl | 73 +++++++++--------- 12 files changed, 172 insertions(+), 163 deletions(-) diff --git a/core/src/main/java/org/fao/geonet/util/XslUtil.java b/core/src/main/java/org/fao/geonet/util/XslUtil.java index 4ac4474571..c228cae3f7 100644 --- a/core/src/main/java/org/fao/geonet/util/XslUtil.java +++ b/core/src/main/java/org/fao/geonet/util/XslUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2020 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -39,6 +39,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang.NotImplementedException; import org.apache.commons.lang.StringUtils; +import org.apache.commons.text.StringEscapeUtils; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; @@ -469,7 +470,7 @@ public static String getNodeId() { return ApplicationContextHolder.get().getBean(org.fao.geonet.NodeInfo.class).getId(); } - + public static String getNodeLogo(String key) { Optional source = getSource(key); return source.isPresent() ? source.get().getLogo() : ""; @@ -1706,4 +1707,8 @@ private static List buildRecordLink(SearchHits hits, String type) { }); return listOfLinks; } + + public static String escapeForJson(String value) { + return StringEscapeUtils.escapeJson(value); + } } diff --git a/schemas/dublin-core/src/main/plugin/dublin-core/index-fields/index.xsl b/schemas/dublin-core/src/main/plugin/dublin-core/index-fields/index.xsl index 2f87019176..ad96831b55 100644 --- a/schemas/dublin-core/src/main/plugin/dublin-core/index-fields/index.xsl +++ b/schemas/dublin-core/src/main/plugin/dublin-core/index-fields/index.xsl @@ -71,7 +71,7 @@ - + - + - + - + - + - + @@ -187,7 +187,7 @@ - "default": + "default": @@ -206,7 +206,7 @@ - "default": + "default": @@ -227,8 +227,8 @@ { "protocol":"", - "urlObject":{"default": ""}, - "nameObject":{"default": ""}, + "urlObject":{"default": ""}, + "nameObject":{"default": ""}, "descriptionObject":{"default": ""}, "function": "" } diff --git a/schemas/iso19110/src/main/plugin/iso19110/index-fields/index.xsl b/schemas/iso19110/src/main/plugin/iso19110/index-fields/index.xsl index 1706f2d20b..c2d2e3913d 100644 --- a/schemas/iso19110/src/main/plugin/iso19110/index-fields/index.xsl +++ b/schemas/iso19110/src/main/plugin/iso19110/index-fields/index.xsl @@ -50,7 +50,7 @@ [ { - "typeName" : "", - "definition" :"", - "code" :"", + "typeName" : "", + "definition" :"", + "code" :"", "isAbstract" :"", - "aliases" : "" + "aliases" : "" diff --git a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index-subtemplate.xsl b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index-subtemplate.xsl index f27d590d5b..15ccf36492 100644 --- a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index-subtemplate.xsl +++ b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index-subtemplate.xsl @@ -113,13 +113,13 @@ then concat(' (', $contactInfo, ')') else ''"/> { - "default": "" ,"lang": "": "" } @@ -128,7 +128,7 @@ {"common": ""} + select="util:escapeForJson(normalize-space(.))"/>"} { - "default": "" + "default": "" ,"lang": "" + ]/@value"/>": "" } @@ -168,7 +168,7 @@ { - "default": "" } @@ -191,9 +191,9 @@ { "default": "" } @@ -217,7 +217,7 @@ select="string-join(mco:useLimitations/*/text(), ', ')"/> { - "default": " { - "default": "" @@ -250,7 +250,7 @@ {"common": ""} + select="util:escapeForJson(normalize-space(.))"/>"} diff --git a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index.xsl b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index.xsl index 9c137f61f4..b22db06f50 100644 --- a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index.xsl +++ b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/index-fields/index.xsl @@ -920,10 +920,10 @@ { - "code": "", - "codeSpace": "", - "name": "", - "url": "" + "code": "", + "codeSpace": "", + "name": "", + "url": "" } @@ -954,7 +954,7 @@ { - "title": "", + "title": "", "date": "", @@ -962,7 +962,7 @@ "link": "", - "explanation": "", + "explanation": "", "pass": "" } @@ -1002,11 +1002,11 @@ [ { - "typeName" : "", - "definition" :"", - "code" :"", + "typeName" : "", + "definition" :"", + "code" :"", "isAbstract" :"", - "aliases" : "" + "aliases" : "" - {"name": "", - "definition": "", - "code": "", + {"name": "", + "definition": "", + "code": "", "link": "", "type": "" - ,"cardinality": "" + ,"cardinality": "" ,"values": [ { - "label": "", - "code": "", - "definition": ""} + "label": "", + "code": "", + "definition": ""} , ] @@ -1069,9 +1069,9 @@ { - "protocol": "", - "function": "", "urlObject": , - "applicationProfile": "" } @@ -1122,14 +1122,14 @@ { - "name": "", + "name": "", - "description": "", + "description": "", - "value": "", + "value": "", - "unit": "", + "unit": "", "type": "" } @@ -1181,11 +1181,11 @@ { - "protocol":"", + "protocol":"", "mimeType":"", "urlObject": , "function":"", - "applicationProfile":"", + "applicationProfile":"", "group": } @@ -1358,18 +1358,18 @@ 'organisation', $organisationName, $languages, true())"/>, "role":"", - "email":"", - "website":"", - "logo":"", - "individual":"", - "position":"", - "phone":"", - "address":"" + "email":"", + "website":"", + "logo":"", + "individual":"", + "position":"", + "phone":"", + "address":"" ,"identifiers":[ { - "code": "", + "code": "", "codeSpace": "", "link": "" } @@ -1474,7 +1474,7 @@ - + diff --git a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/layout/utility-tpl.xsl b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/layout/utility-tpl.xsl index 59a5bfde47..2022184aca 100644 --- a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/layout/utility-tpl.xsl +++ b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/layout/utility-tpl.xsl @@ -19,6 +19,7 @@ xmlns:gco="http://standards.iso.org/iso/19115/-3/gco/1.0" xmlns:gfc="http://standards.iso.org/iso/19110/gfc/1.1" xmlns:gn-fn-index="http://geonetwork-opensource.org/xsl/functions/index" + xmlns:util="java:org.fao.geonet.util.XslUtil" xmlns:gn="http://www.fao.org/geonetwork" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="#all"> @@ -40,8 +41,8 @@ [ { - "value": "WWW:DOWNLOAD:", - "label": ""} + "value": "WWW:DOWNLOAD:", + "label": ""} , ] diff --git a/schemas/iso19139/src/main/plugin/iso19139/formatter/jsonld/iso19139-to-jsonld.xsl b/schemas/iso19139/src/main/plugin/iso19139/formatter/jsonld/iso19139-to-jsonld.xsl index 310d01c6bb..20e654c1f7 100644 --- a/schemas/iso19139/src/main/plugin/iso19139/formatter/jsonld/iso19139-to-jsonld.xsl +++ b/schemas/iso19139/src/main/plugin/iso19139/formatter/jsonld/iso19139-to-jsonld.xsl @@ -248,9 +248,9 @@ { "@type":"DataDownload", - "contentUrl":"" + "contentUrl":"" , - "encodingFormat":"" + "encodingFormat":"" , "name": { , diff --git a/schemas/iso19139/src/main/plugin/iso19139/index-fields/index-subtemplate.xsl b/schemas/iso19139/src/main/plugin/iso19139/index-fields/index-subtemplate.xsl index d63dd1ce1a..7c27ca271e 100644 --- a/schemas/iso19139/src/main/plugin/iso19139/index-fields/index-subtemplate.xsl +++ b/schemas/iso19139/src/main/plugin/iso19139/index-fields/index-subtemplate.xsl @@ -90,12 +90,12 @@ then concat(' (', $contactInfo, ')') else ''"/> { - "default": "" ,"lang": "": "" } @@ -122,11 +122,11 @@ |gmd:description/gmd:PT_FreeText/*/gmd:LocalisedCharacterString[. != ''] )[1])"/> { - "default": "" + "default": "" ,"lang": "" + ]/@value"/>": "" } @@ -136,7 +136,7 @@ select="concat('S:', .//gmd:southBoundLatitude/*/text(), ', W:', .//gmd:westBoundLongitude/*/text(), ', N:', .//gmd:northBoundLatitude/*/text(), ', E:',.//gmd:eastBoundLongitude/*/text())"/> { - "default": "" + "default": "" } @@ -153,7 +153,7 @@ then gmd:name/gco:CharacterString else concat(gmd:name/gco:CharacterString, ' ', gmd:version/gco:CharacterString)"/> { - "default": "" + "default": "" } @@ -168,7 +168,7 @@ string-join(gmd:MD_LegalConstraints/gmd:otherConstraints/*/text(), ', '))"/> { - "default": "" + "default": "" } @@ -181,7 +181,7 @@ { - "default": "" + "default": "" } diff --git a/schemas/iso19139/src/main/plugin/iso19139/index-fields/index.xsl b/schemas/iso19139/src/main/plugin/iso19139/index-fields/index.xsl index 6ed7ba342b..e9ad83d265 100644 --- a/schemas/iso19139/src/main/plugin/iso19139/index-fields/index.xsl +++ b/schemas/iso19139/src/main/plugin/iso19139/index-fields/index.xsl @@ -335,7 +335,7 @@ { - "code": "", + "code": "", "codeSpace": "", "link": "" } @@ -866,10 +866,10 @@ { - "code": "", - "codeSpace": "", - "name": "", - "url": "" + "code": "", + "codeSpace": "", + "name": "", + "url": "" } @@ -899,7 +899,7 @@ { - "title": "", + "title": "", "date": "", @@ -907,7 +907,7 @@ "link": "", - "explanation": "", + "explanation": "", "pass": "" } @@ -934,7 +934,7 @@ then 'remote' else 'catalog'"/>", "to": "", - "title": "", + "title": "", "url": "" } @@ -957,7 +957,7 @@ then 'remote' else 'catalog'"/>", "to": "", - "title": "", + "title": "", "url": "" } @@ -976,14 +976,14 @@ { - "name": "", + "name": "", - "description": "", + "description": "", - "value": "", + "value": "", - "unit": "", + "unit": "", "type": "" } @@ -1028,7 +1028,7 @@ + select="util:escapeForJson((gmd:name/*/text())[1])"/> @@ -1045,13 +1045,13 @@ { - "protocol":"", + "protocol":"", "mimeType":"", - "urlObject":{"default": ""}, + "urlObject":{"default": ""}, "nameObject": , @@ -1061,7 +1061,7 @@ 'description', gmd:description, $allLanguages, true())"/>, "function":"", - "applicationProfile":"", + "applicationProfile":"", "group": } - + @@ -1214,13 +1214,14 @@ 'organisation', $organisationName, $languages, true())"/>, "role":"", - "email":"", - "website":"", - "logo":"", - "individual":"", - "position":"", - "phone":"", - "address":"" + "email":"", + "website":"", + "logo":"", + "individual":"", + "position":"", + "phone":"", + "address":"" + } @@ -1317,7 +1318,7 @@ - + diff --git a/schemas/iso19139/src/main/plugin/iso19139/layout/utility-tpl.xsl b/schemas/iso19139/src/main/plugin/iso19139/layout/utility-tpl.xsl index 02b3303886..6eac79b2bf 100644 --- a/schemas/iso19139/src/main/plugin/iso19139/layout/utility-tpl.xsl +++ b/schemas/iso19139/src/main/plugin/iso19139/layout/utility-tpl.xsl @@ -29,6 +29,7 @@ xmlns:gmx="http://www.isotc211.org/2005/gmx" xmlns:gn-fn-index="http://geonetwork-opensource.org/xsl/functions/index" xmlns:gn="http://www.fao.org/geonetwork" + xmlns:util="java:org.fao.geonet.util.XslUtil" version="2.0" exclude-result-prefixes="#all"> @@ -47,8 +48,8 @@ [ { - "value": "WWW:DOWNLOAD:", - "label": ""} + "value": "WWW:DOWNLOAD:", + "label": ""} , ] diff --git a/web/src/main/webapp/xslt/common/index-utils.xsl b/web/src/main/webapp/xslt/common/index-utils.xsl index e6e25d9c4f..84f0befa19 100644 --- a/web/src/main/webapp/xslt/common/index-utils.xsl +++ b/web/src/main/webapp/xslt/common/index-utils.xsl @@ -150,7 +150,7 @@ "to": "", "url": "", - "title": "", + "title": "", "origin": "" } @@ -245,10 +245,10 @@ + $doubleQuote, util:escapeForJson(.), $doubleQuote)"/> + $doubleQuote, util:escapeForJson(.), $doubleQuote)"/> @@ -256,9 +256,9 @@ + $doubleQuote, util:escapeForJson(.), $doubleQuote)"/> + $doubleQuote, util:escapeForJson(.), $doubleQuote)"/> @@ -287,7 +287,7 @@ select="concat('lang', $elementLanguage3LetterCode)"/> + $doubleQuote, util:escapeForJson(.), $doubleQuote)"/> @@ -296,16 +296,16 @@ + $doubleQuote, util:escapeForJson(.), $doubleQuote)"/> + $doubleQuote, util:escapeForJson(.), $doubleQuote)"/> + $doubleQuote, util:escapeForJson(.), $doubleQuote)"/> @@ -434,12 +434,12 @@ "": { - "id": "", + "id": "", - "title": "", - "theme": "", + "title": "", + "theme": "", - "link": "", + "link": "", "keywords": [ @@ -467,14 +467,14 @@ "default": [ - , + , ], "key": [ - , + , ] @@ -528,16 +528,16 @@ + $doubleQuote, util:escapeForJson($value/@codeListValue), $doubleQuote)"/> + $doubleQuote, util:escapeForJson($translation), $doubleQuote)"/> + $doubleQuote, util:escapeForJson($translation), $doubleQuote)"/> @@ -545,16 +545,16 @@ select="util:getCodelistTranslation( string($codelistType), string($value/@codeListValue), string(.))"/> + $doubleQuote, util:escapeForJson($translation), $doubleQuote)"/> + $doubleQuote, util:escapeForJson(.), $doubleQuote)"/> + $doubleQuote, util:escapeForJson(.), $doubleQuote)"/> @@ -612,7 +612,7 @@ - + @@ -623,7 +623,7 @@ - + @@ -682,19 +682,20 @@ else $fieldName"/> - - - - - - - + + + + + + + + + From e48405f0d1ebbc5a4f73f6e77d3d994b76efa689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Wed, 13 Dec 2023 12:03:24 +0100 Subject: [PATCH 24/81] [BP] Don't display header menu and footer in single metadata PDF export (#7532) * Don't display header menu and footer in single metadata PDF export. Related to #7521 * Don't display header menu and footer in single metadata PDF export / code refactor. Related to #7521 --- .../main/webapp/xslt/skin/default/skin.xsl | 138 +++++++++--------- 1 file changed, 73 insertions(+), 65 deletions(-) diff --git a/web/src/main/webapp/xslt/skin/default/skin.xsl b/web/src/main/webapp/xslt/skin/default/skin.xsl index 880fc066f7..1439b79239 100644 --- a/web/src/main/webapp/xslt/skin/default/skin.xsl +++ b/web/src/main/webapp/xslt/skin/default/skin.xsl @@ -14,6 +14,8 @@ version="2.0" exclude-result-prefixes="#all"> + + @@ -85,61 +87,65 @@ - + - - + -
  • - - - - -
  • -
    +
  • + + + + +
  • + - - - + -
  • - - - -
  • +
  • + + + +
  • +
    - - + + - - + - + + @@ -182,33 +188,35 @@
    - - - + From d6f68d6ef6345f61cbb59b804f8e1ea29085dd60 Mon Sep 17 00:00:00 2001 From: Ian Date: Thu, 14 Dec 2023 06:32:19 -0400 Subject: [PATCH 25/81] [BP] Add ownerId to geonet:info (#7547) It is a more reliable way to identify the exact user. --- core/src/main/java/org/fao/geonet/constants/Edit.java | 1 + .../fao/geonet/kernel/datamanager/base/BaseMetadataManager.java | 1 + 2 files changed, 2 insertions(+) diff --git a/core/src/main/java/org/fao/geonet/constants/Edit.java b/core/src/main/java/org/fao/geonet/constants/Edit.java index d3e6faecc2..5f9560f75e 100644 --- a/core/src/main/java/org/fao/geonet/constants/Edit.java +++ b/core/src/main/java/org/fao/geonet/constants/Edit.java @@ -74,6 +74,7 @@ public static final class Elem { public static final String TITLE = "title"; public static final String IS_HARVESTED = "isHarvested"; public static final String HARVEST_INFO = "harvestInfo"; + public static final String OWNERID = "ownerId"; public static final String OWNERNAME = "ownername"; public static final String GROUPOWNERNAME = "groupOwnerName"; public static final String POPULARITY = "popularity"; diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java index 61ba225106..1593554bdc 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java @@ -867,6 +867,7 @@ private Element buildInfoElem(ServiceContext context, String id, String version) // add owner name java.util.Optional user = userRepository.findById(Integer.parseInt(owner)); if (user.isPresent()) { + addElement(info, Edit.Info.Elem.OWNERID, user.get().getId()); String ownerName = user.get().getName(); addElement(info, Edit.Info.Elem.OWNERNAME, ownerName); } From 8f0438212487ce72e21ceaf79b0587702fad4039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Wed, 6 Dec 2023 11:08:17 +0100 Subject: [PATCH 26/81] [BP] Elasticsearch index creation - log the exception when a parsing error of the index configuration file occurs --- .../geonet/kernel/search/EsSearchManager.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java b/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java index a0c6ee6755..5253317ae8 100644 --- a/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java @@ -35,6 +35,7 @@ import jeeves.server.context.ServiceContext; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; +import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.action.bulk.BulkRequest; @@ -271,11 +272,11 @@ private void createIndex(String indexId, String indexName, boolean dropIndexFirs DeleteIndexRequest request = new DeleteIndexRequest(indexName); AcknowledgedResponse deleteIndexResponse = client.getClient().indices().delete(request, RequestOptions.DEFAULT); if (deleteIndexResponse.isAcknowledged()) { - LOGGER.debug("Index '{}' removed.", new Object[]{indexName}); + LOGGER.debug("Index '{}' removed.", indexName); } } catch (Exception e) { // index does not exist ? - LOGGER.debug("Error during index '{}' removal. Error is: {}", new Object[]{indexName, e.getMessage()}); + LOGGER.debug("Error during index '{}' removal. Error is: {}", indexName, e.getMessage()); } } @@ -304,7 +305,7 @@ private void createIndex(String indexId, String indexName, boolean dropIndexFirs CreateIndexResponse createIndexResponse = client.getClient().indices().create(createIndexRequest, RequestOptions.DEFAULT); if (createIndexResponse.isAcknowledged()) { - LOGGER.debug("Index '{}' created", new Object[]{indexName}); + LOGGER.debug("Index '{}' created", indexName); } else { final String message = String.format("Index '%s' was not created. Error is: %s", indexName, createIndexResponse.toString()); LOGGER.error(message); @@ -317,10 +318,13 @@ private void createIndex(String indexId, String indexName, boolean dropIndexFirs indexName)); } } + } catch (ElasticsearchParseException ex) { + LOGGER.error(ex.getMessage(), ex); + throw new IOException(ex.getMessage()); } catch (Exception cnce) { final String message = String.format("Could not connect to index '%s'. Error is %s. Is the index server up and running?", defaultIndex, cnce.getMessage()); - LOGGER.error(message); + LOGGER.error(message, cnce); throw new IOException(message); } } @@ -444,7 +448,7 @@ private void sendDocumentsToIndex() { } catch (Exception e) { LOGGER.error( "An error occurred while indexing {} documents in current indexing list. Error is {}.", - new Object[]{listOfDocumentsToIndex.size(), e.getMessage()}); + listOfDocumentsToIndex.size(), e.getMessage()); } finally { // TODO: Trigger this async ? documents.keySet().forEach(uuid -> overviewFieldUpdater.process(uuid)); @@ -489,14 +493,14 @@ private void checkIndexResponse(BulkResponse bulkItemResponses, // TODO: Report the JSON which was causing the error ? LOGGER.error("Document with error #{}: {}.", - new Object[]{e.getId(), e.getFailureMessage()}); + e.getId(), e.getFailureMessage()); LOGGER.error(failureDoc); try { listErrorOfDocumentsToIndex.put(e.getId(), mapper.writeValueAsString(docWithErrorInfo)); } catch (JsonProcessingException e1) { LOGGER.error("Generated document for the index is not properly formatted. Check document #{}: {}.", - new Object[]{e.getId(), e1.getMessage()}); + e.getId(), e1.getMessage()); } } }); @@ -505,7 +509,7 @@ private void checkIndexResponse(BulkResponse bulkItemResponses, BulkResponse response = client.bulkRequest(defaultIndex, listErrorOfDocumentsToIndex); if (response.status().getStatus() != 201) { LOGGER.error("Failed to save error documents {}.", - new Object[]{Arrays.toString(errorDocumentIds.toArray())}); + Arrays.toString(errorDocumentIds.toArray())); } } } @@ -636,7 +640,7 @@ public ObjectNode documentToJson(Element xml) { mapper.readTree(node.getText())); } catch (IOException e) { LOGGER.error("Parsing invalid JSON node {} for property {}. Error is: {}", - new Object[]{node.getTextNormalize(), propertyName, e.getMessage()}); + node.getTextNormalize(), propertyName, e.getMessage()); } } else { arrayNode.add( @@ -655,7 +659,7 @@ public ObjectNode documentToJson(Element xml) { doc.set("geom", mapper.readTree(nodeElements.get(0).getTextNormalize())); } catch (IOException e) { LOGGER.error("Parsing invalid geometry for JSON node {}. Error is: {}", - new Object[]{nodeElements.get(0).getTextNormalize(), e.getMessage()}); + nodeElements.get(0).getTextNormalize(), e.getMessage()); } continue; } @@ -668,7 +672,7 @@ public ObjectNode documentToJson(Element xml) { )); } catch (IOException e) { LOGGER.error("Parsing invalid JSON node {} for property {}. Error is: {}", - new Object[]{nodeElements.get(0).getTextNormalize(), propertyName, e.getMessage()}); + nodeElements.get(0).getTextNormalize(), propertyName, e.getMessage()); } } else { doc.put(propertyName, From a9a7f04e6801926538672835b59f310bf6d59d57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Wed, 6 Dec 2023 11:45:47 +0100 Subject: [PATCH 27/81] [BP] Metadata indexing - create an organisation name field that tracks the organisations of the different types of contacts --- .../WEB-INF/data/config/index/records.json | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/web/src/main/webResources/WEB-INF/data/config/index/records.json b/web/src/main/webResources/WEB-INF/data/config/index/records.json index fa8608f361..3bf2ed01f9 100644 --- a/web/src/main/webResources/WEB-INF/data/config/index/records.json +++ b/web/src/main/webResources/WEB-INF/data/config/index/records.json @@ -1053,31 +1053,31 @@ "properties": { "default": { "type": "keyword", - "copy_to": ["any.default"] + "copy_to": ["any.default", "organisationName.default"] }, "langeng": { "type": "keyword", - "copy_to": ["any.langeng"] + "copy_to": ["any.langeng", "organisationName.langeng"] }, "langfre": { "type": "keyword", - "copy_to": ["any.langfre"] + "copy_to": ["any.langfre", "organisationName.langfre"] }, "langger": { "type": "keyword", - "copy_to": ["any.langger"] + "copy_to": ["any.langger", "organisationName.langger"] }, "langita": { "type": "keyword", - "copy_to": ["any.langita"] + "copy_to": ["any.langita", "organisationName.langita"] }, "langdut": { "type": "keyword", - "copy_to": ["any.langdut"] + "copy_to": ["any.langdut", "organisationName.langdut"] }, "langspa": { "type": "keyword", - "copy_to": ["any.langspa"] + "copy_to": ["any.langspa", "organisationName.langspa"] }, "link": { "type": "keyword" @@ -1978,6 +1978,32 @@ } } } + }, + "organisationName": { + "type": "object", + "properties": { + "default": { + "type": "keyword" + }, + "langeng": { + "type": "keyword" + }, + "langfre": { + "type": "keyword" + }, + "langger": { + "type": "keyword" + }, + "langita": { + "type": "keyword" + }, + "langdut": { + "type": "keyword" + }, + "langspa": { + "type": "keyword" + } + } } } } From 57d4786e5e41be36395871c5cb2745d2b1be1413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Fri, 15 Dec 2023 16:03:25 +0100 Subject: [PATCH 28/81] [BP] Documentation / Update Elasticsearch installation page typos and remove the old elastic search documentation. Fixes #7551 (#7555) --- .../docs/install-guide/installing-index.md | 6 +- docs/manual/docs/maintainer-guide/index.md | 1 - .../statistics/img/content-indexing.png | Bin 7469 -> 0 bytes .../statistics/img/kibana-index-1.png | Bin 56234 -> 0 bytes .../statistics/img/kibana-index-2.png | Bin 27474 -> 0 bytes .../img/search-statistics-dashboards.png | Bin 25515 -> 0 bytes .../statistics/img/search-statistics.png | Bin 7379 -> 0 bytes .../docs/maintainer-guide/statistics/index.md | 16 ----- .../statistics/setup-elasticsearch.md | 39 ------------ .../statistics/setup-geonetwork.md | 56 ------------------ .../statistics/setup-kibana.md | 38 ------------ docs/manual/mkdocs.yml | 5 -- 12 files changed, 3 insertions(+), 158 deletions(-) delete mode 100644 docs/manual/docs/maintainer-guide/statistics/img/content-indexing.png delete mode 100644 docs/manual/docs/maintainer-guide/statistics/img/kibana-index-1.png delete mode 100644 docs/manual/docs/maintainer-guide/statistics/img/kibana-index-2.png delete mode 100644 docs/manual/docs/maintainer-guide/statistics/img/search-statistics-dashboards.png delete mode 100644 docs/manual/docs/maintainer-guide/statistics/img/search-statistics.png delete mode 100644 docs/manual/docs/maintainer-guide/statistics/index.md delete mode 100644 docs/manual/docs/maintainer-guide/statistics/setup-elasticsearch.md delete mode 100644 docs/manual/docs/maintainer-guide/statistics/setup-geonetwork.md delete mode 100644 docs/manual/docs/maintainer-guide/statistics/setup-kibana.md diff --git a/docs/manual/docs/install-guide/installing-index.md b/docs/manual/docs/install-guide/installing-index.md index 86154d779b..7369f99540 100644 --- a/docs/manual/docs/install-guide/installing-index.md +++ b/docs/manual/docs/install-guide/installing-index.md @@ -4,7 +4,7 @@ The GeoNetwork search engine is built on top of Elasticsearch. The platform is u ## Manual installation -Download Elasticsearch from and unzip the file. +Download Elasticsearch 7.x (at least `7.9.2`) from and unzip the file. ``` shell wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2.tar.gz @@ -20,7 +20,7 @@ elasticsearch-7.9.2/bin/elasticsearch Stop Elasticsearch using ``` shell -elasticsearch-7.6.2/bin/elasticsearch stop +elasticsearch-7.9.2/bin/elasticsearch stop ``` GeoNetwork will start even if Elasticsearch index is down. A warning will be displayed. Once the Elasticsearch index is up, indices are created if they do not exist. @@ -60,7 +60,7 @@ Access Elasticsearch admin page from . ## Configure connection -Update Elasticsearch connection details in `` `WEB-INF/config.properties ```` and restart the application (see :code:\`web/src/main/webResources/WEB-INF/config.properties``): +Update Elasticsearch connection details in ```WEB-INF/config.properties``` and restart the application: ``` shell es.protocol=http diff --git a/docs/manual/docs/maintainer-guide/index.md b/docs/manual/docs/maintainer-guide/index.md index 9dfe5bcdec..3b829b3d8a 100644 --- a/docs/manual/docs/maintainer-guide/index.md +++ b/docs/manual/docs/maintainer-guide/index.md @@ -4,6 +4,5 @@ For installation instructions, please refer to the [Installation guide](../insta - [Installation](../install-guide/index.md) - [Setup](../administrator-guide/index.md) -- [Setting up search/content statistics](statistics/index.md) - [Production Use](production-use/index.md) - [Updating the application](updating/index.md) diff --git a/docs/manual/docs/maintainer-guide/statistics/img/content-indexing.png b/docs/manual/docs/maintainer-guide/statistics/img/content-indexing.png deleted file mode 100644 index da425d56212df7c1b5a7268386643d26b3e2b0a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7469 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 L(o`&!w+Q|(Fv7Gd diff --git a/docs/manual/docs/maintainer-guide/statistics/img/kibana-index-1.png b/docs/manual/docs/maintainer-guide/statistics/img/kibana-index-1.png deleted file mode 100644 index ea5a99b3f437c11bf0a7a6431619d86c55c47255..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56234 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 diff --git a/docs/manual/docs/maintainer-guide/statistics/img/kibana-index-2.png b/docs/manual/docs/maintainer-guide/statistics/img/kibana-index-2.png deleted file mode 100644 index 3a313fe5d2bb9541f61fcfa5c27cc43e0657af16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27474 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 LNkvXXu0mjf8xvRw diff --git a/docs/manual/docs/maintainer-guide/statistics/img/search-statistics-dashboards.png b/docs/manual/docs/maintainer-guide/statistics/img/search-statistics-dashboards.png deleted file mode 100644 index b45f3bd40b198ff675a4f975a7c233cd6a41535a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25515 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 A*8l(j diff --git a/docs/manual/docs/maintainer-guide/statistics/img/search-statistics.png b/docs/manual/docs/maintainer-guide/statistics/img/search-statistics.png deleted file mode 100644 index e853154aba7247c95ca59c803f779f1821e2fdb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7379 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 diff --git a/docs/manual/docs/maintainer-guide/statistics/index.md b/docs/manual/docs/maintainer-guide/statistics/index.md deleted file mode 100644 index fa8a507097..0000000000 --- a/docs/manual/docs/maintainer-guide/statistics/index.md +++ /dev/null @@ -1,16 +0,0 @@ -# Setting up search/content statistics {#statistics} - -Since GeoNetwork 3.4 search and content statistics are stored in [Elasticsearch](https://www.elastic.co/products/elasticsearch/) using [Kibana](https://www.elastic.co/products/kibana) dashboards to visualize them in the GeoNetwork administration application. - -This guide describes the configuration required to integrate Elasticsearch/Kibana in GeoNetwork to store and visualize the search and content statistics. - -GeoNetwork 3.8.x supports Elasticsearch/Kibana 7.2, other versions may not work properly. - -!!! note - - This guide doesn't provide a production level setup for Elasticsearch/Kibana. Please refer to the Elasticsearch/Kibana documentation to do a proper setup/configuration for a production environment. - - -- [Setup Elasticsearch](setup-elasticsearch.md) -- [Setup Kibana](setup-kibana.md) -- [Setup GeoNetwork](setup-geonetwork.md) diff --git a/docs/manual/docs/maintainer-guide/statistics/setup-elasticsearch.md b/docs/manual/docs/maintainer-guide/statistics/setup-elasticsearch.md deleted file mode 100644 index cdc8074bb9..0000000000 --- a/docs/manual/docs/maintainer-guide/statistics/setup-elasticsearch.md +++ /dev/null @@ -1,39 +0,0 @@ -# Setup Elasticsearch {#statistics_es} - -This section describes how to setup Elasticsearch to be used in GeoNetwork to store the search/content statistics. Note that Geonetwork must have been built with the `es` profile for Elasticsearch to be used. See for details. - -## Installation - -Elasticsearch can be installed manually, or for some operating systems packages are available. - -!!! note - - If installed manually, Elasticsearch must be configured as a service to ensure it starts automatically when the server is started. This is beyond the scope of this guide. - - -To install manually: - -- Download Elasticsearch from . For Geonetwork 3.8.x version 7.2.x is recommended. - -- Unzip the file and copy it, for example, to ``/opt/elasticsearch`` - -- Execute Elastic Search: - - ``` shell - $ cd /opt/elasticsearch/bin - $ ./elasticsearch & - ``` - -- Verify in a browser that Elasticsearch is running: - -## Load indexes - -``` shell -$ cd /tmp -$ curl -O https://raw.githubusercontent.com/geonetwork/core-geonetwork/3.4.x/es/config/features.json -$ curl -X PUT http://localhost:9200/gn-features -d @features.json -$ curl -O https://raw.githubusercontent.com/geonetwork/core-geonetwork/3.4.x/es/config/records.json -$ curl -X PUT http://localhost:9200/gn-records -d @records.json -$ curl -O https://raw.githubusercontent.com/geonetwork/core-geonetwork/3.4.x/es/config/searchlogs.json -$ curl -X PUT http://localhost:9200/gn-searchlogs -d @searchlogs.json -``` diff --git a/docs/manual/docs/maintainer-guide/statistics/setup-geonetwork.md b/docs/manual/docs/maintainer-guide/statistics/setup-geonetwork.md deleted file mode 100644 index c23f21c8a3..0000000000 --- a/docs/manual/docs/maintainer-guide/statistics/setup-geonetwork.md +++ /dev/null @@ -1,56 +0,0 @@ -# Setup GeoNetwork {#statistics_geonetwork} - -!!! note - - GeoNetwork package should be build using the Maven `es` profile in order to be able to configure the search/content statistics to use Elasticsearch/Kibana: - - ``` shell - $ cd GN_SOURCES/ - $ mvn clean install -Penv-prod,es - ``` - - If you're using a development environment, can use the following command from the Geonetwork sources folder: - - ``` shell - $ cd GN_SOURCES/web - $ mvn jetty:run -Penv-dev,es - ``` - - -To setup the search/content statistics in GeoNetwork, do the following steps: - -- Start GeoNetwork. - -- Login as an `or` user and load the templates (). - -- Create some metadata records (optionally you can load the samples). - -- Enable search statistics in the Settings page (). - - ![](img/search-statistics.png) - -- Do some searches in GeoNetwork. - -- Go to `us` in and select Search Statistics`. - - The first time you're prompted to select the Kibana default index. Select `.dashboards`: - - ![](img/kibana-index-1.png) - - and set as default to get it working. - - ![](img/kibana-index-2.png) - -- Reload the page and check the dashboards. - - ![](img/search-statistics-dashboards.png) - -## Content statistics/validation - -Content and validation status statistics are available also from to `us` in , but require to index manually the content in Elasticsearch. This will be improved in future versions. - -- To index the content and validation status in Elasticsearch, go to and select the following option: - - ![](img/content-indexing.png) - -- Access the `cs` and `on` in `us` () diff --git a/docs/manual/docs/maintainer-guide/statistics/setup-kibana.md b/docs/manual/docs/maintainer-guide/statistics/setup-kibana.md deleted file mode 100644 index 7702684725..0000000000 --- a/docs/manual/docs/maintainer-guide/statistics/setup-kibana.md +++ /dev/null @@ -1,38 +0,0 @@ -# Setup Kibana {#statistics_kibana} - -This section describes how to setup Kibana to be used in GeoNetwork to visualize the search/content statistics: - -- Download Kibana from . For Geonetwork 3.8.x version 7.2.x is recommended. - -- Unzip the file, for example to ``/opt/kibana`` - -- Configure Kibana to use it in GeoNetwork: - - ``` shell - $ cd opt/kibana - $ vi config/kibana.yml - server.basePath: "/geonetwork/dashboards" - kibana.index: “.dashboards" - ``` - -- Execute Kibana: - - ``` shell - $ cd /opt/kibana/bin - $ ./kibana & - ``` - - !!! note - - Usually you'll want to configure Kibana to start automatically when the server is startup, this is not covered in this guide. - - -- Verify in a browser that Kibana is running: - -- Kibana should also be visible in Geonetwork at - -## Load Kibana data - -Visit Kibana in a browser using one of the above links and go to 'Saved Objects'. - -Import export.json from diff --git a/docs/manual/mkdocs.yml b/docs/manual/mkdocs.yml index 282212a274..992d24447f 100644 --- a/docs/manual/mkdocs.yml +++ b/docs/manual/mkdocs.yml @@ -322,11 +322,6 @@ nav: - install-guide/logging.md - install-guide/map-print-setup.md - install-guide/loading-samples.md - - 'Setting up search/content statistics': - - maintainer-guide/statistics/index.md - - maintainer-guide/statistics/setup-elasticsearch.md - - maintainer-guide/statistics/setup-kibana.md - - maintainer-guide/statistics/setup-geonetwork.md - maintainer-guide/production-use/index.md - 'Updating the application': maintainer-guide/updating/index.md - 'API': From f1bbadf049fdaae21a5c2000b375a61850c7a397 Mon Sep 17 00:00:00 2001 From: Pietro d'Orio Date: Mon, 18 Dec 2023 15:51:12 +0100 Subject: [PATCH 29/81] [BP] Update iso19139 csw-full.xsl (#7558) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update iso19139 csw-full.xsl This fix resolves ticket #6742 , allowing full compatibility of iso19139-rndt metadata to be displayed via QGIS * Update schemas/iso19139/src/main/plugin/iso19139/present/csw/csw-full.xsl * Update schemas/iso19139/src/main/plugin/iso19139/present/csw/csw-full.xsl --------- Co-authored-by: Jose García --- .../src/main/plugin/iso19139/present/csw/csw-full.xsl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/schemas/iso19139/src/main/plugin/iso19139/present/csw/csw-full.xsl b/schemas/iso19139/src/main/plugin/iso19139/present/csw/csw-full.xsl index c52ab55abe..90ff2e96b5 100644 --- a/schemas/iso19139/src/main/plugin/iso19139/present/csw/csw-full.xsl +++ b/schemas/iso19139/src/main/plugin/iso19139/present/csw/csw-full.xsl @@ -28,6 +28,7 @@ xmlns:dct="http://purl.org/dc/terms/" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gmd="http://www.isotc211.org/2005/gmd" + xmlns:gmx="http://www.isotc211.org/2005/gmx" xmlns:srv="http://www.isotc211.org/2005/srv" xmlns:geonet="http://www.fao.org/geonetwork" xmlns:ows="http://www.opengis.net/ows" @@ -278,10 +279,9 @@ - + - From f5226f7786f6c895fa75937ff27bbf41a4c8cfe9 Mon Sep 17 00:00:00 2001 From: Joachim Nielandt Date: Wed, 6 Dec 2023 14:05:32 +0100 Subject: [PATCH 30/81] [BP] cryptic parse exception --- .../org/fao/geonet/kernel/harvest/harvester/csw/Aligner.java | 2 +- .../fao/geonet/kernel/harvest/harvester/geoPREST/Aligner.java | 2 +- .../fao/geonet/kernel/harvest/harvester/geonet/Aligner.java | 4 ++-- .../fao/geonet/kernel/harvest/harvester/geonet20/Aligner.java | 2 +- .../fao/geonet/kernel/harvest/harvester/oaipmh/Harvester.java | 2 +- .../fao/geonet/kernel/harvest/harvester/webdav/Harvester.java | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/csw/Aligner.java b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/csw/Aligner.java index 3efac1ba79..7a04ec617d 100644 --- a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/csw/Aligner.java +++ b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/csw/Aligner.java @@ -529,7 +529,7 @@ private Element retrieveMetadata(String uuid) { try { Integer groupIdVal = null; if (StringUtils.isNotEmpty(params.getOwnerIdGroup())) { - groupIdVal = Integer.parseInt(params.getOwnerIdGroup()); + groupIdVal = getGroupOwner(); } params.getValidate().validate(dataMan, context, response, groupIdVal); diff --git a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geoPREST/Aligner.java b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geoPREST/Aligner.java index 23600da91b..0a3c5b7bd9 100644 --- a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geoPREST/Aligner.java +++ b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geoPREST/Aligner.java @@ -291,7 +291,7 @@ private Element retrieveMetadata(String uuid) { try { Integer groupIdVal = null; if (StringUtils.isNotEmpty(params.getOwnerIdGroup())) { - groupIdVal = Integer.parseInt(params.getOwnerIdGroup()); + groupIdVal = getGroupOwner(); } params.getValidate().validate(dataMan, context, response, groupIdVal); diff --git a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geonet/Aligner.java b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geonet/Aligner.java index b7f4ac58be..9cf652b1b1 100644 --- a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geonet/Aligner.java +++ b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geonet/Aligner.java @@ -465,7 +465,7 @@ private String addMetadata(RecordInfo ri, Element md, Element info, boolean loca try { Integer groupIdVal = null; if (StringUtils.isNotEmpty(params.getOwnerIdGroup())) { - groupIdVal = Integer.parseInt(params.getOwnerIdGroup()); + groupIdVal = getGroupOwner(); } params.getValidate().validate(dataMan, context, md, groupIdVal); @@ -746,7 +746,7 @@ private void updateMetadata(RecordInfo ri, String id, Element md, try { Integer groupIdVal = null; if (StringUtils.isNotEmpty(params.getOwnerIdGroup())) { - groupIdVal = Integer.parseInt(params.getOwnerIdGroup()); + groupIdVal = getGroupOwner(); } params.getValidate().validate(dataMan, context, md, groupIdVal); diff --git a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geonet20/Aligner.java b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geonet20/Aligner.java index 94cf7c6fa3..93f48ff9a4 100644 --- a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geonet20/Aligner.java +++ b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/geonet20/Aligner.java @@ -369,7 +369,7 @@ private Element getRemoteMetadata(XmlRequest req, String id) throws Exception { try { Integer groupIdVal = null; if (StringUtils.isNotEmpty(params.getOwnerIdGroup())) { - groupIdVal = Integer.parseInt(params.getOwnerIdGroup()); + groupIdVal = getGroupOwner(); } params.getValidate().validate(dataMan, context, md, groupIdVal); diff --git a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/oaipmh/Harvester.java b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/oaipmh/Harvester.java index f9d015b044..e22b3dc96b 100644 --- a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/oaipmh/Harvester.java +++ b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/oaipmh/Harvester.java @@ -472,7 +472,7 @@ private Element retrieveMetadata(XmlRequest transport, RecordInfo ri) { try { Integer groupIdVal = null; if (StringUtils.isNotEmpty(params.getOwnerIdGroup())) { - groupIdVal = Integer.parseInt(params.getOwnerIdGroup()); + groupIdVal = getGroupOwner(); } params.getValidate().validate(dataMan, context, md, groupIdVal); diff --git a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/webdav/Harvester.java b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/webdav/Harvester.java index 2a0ec92c88..789cbc44ba 100644 --- a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/webdav/Harvester.java +++ b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/webdav/Harvester.java @@ -351,7 +351,7 @@ private Element retrieveMetadata(RemoteFile rf) { try { Integer groupIdVal = null; if (StringUtils.isNotEmpty(params.getOwnerIdGroup())) { - groupIdVal = Integer.parseInt(params.getOwnerIdGroup()); + groupIdVal = getGroupOwner(); } params.getValidate().validate(dataMan, context, md, groupIdVal); From 404d768c185aa7b746283ed2102a616a1d67526a Mon Sep 17 00:00:00 2001 From: Joachim Nielandt Date: Fri, 8 Dec 2023 15:05:55 +0100 Subject: [PATCH 31/81] [BP] Visual fix for icon text circles (firefox) --- .../resources/catalog/components/utility/UtilityDirective.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-ui/src/main/resources/catalog/components/utility/UtilityDirective.js b/web-ui/src/main/resources/catalog/components/utility/UtilityDirective.js index 7ee5f238fb..a6607a929c 100644 --- a/web-ui/src/main/resources/catalog/components/utility/UtilityDirective.js +++ b/web-ui/src/main/resources/catalog/components/utility/UtilityDirective.js @@ -1355,7 +1355,7 @@ " " + ' ' + ' {{hasIcon ? '' : org.substr(0, 1).toUpperCase()}}" + "", scope: { From df515eff81e3360dc779909cd15d1833ef4743ee Mon Sep 17 00:00:00 2001 From: Ian Date: Wed, 20 Dec 2023 03:09:11 -0400 Subject: [PATCH 32/81] [BP] Remove ?debug from link to admin dashboard. (#7564) --- .../catalog/components/utility/partials/indexerrorpanel.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-ui/src/main/resources/catalog/components/utility/partials/indexerrorpanel.html b/web-ui/src/main/resources/catalog/components/utility/partials/indexerrorpanel.html index e40fd16ac3..19e95e0343 100644 --- a/web-ui/src/main/resources/catalog/components/utility/partials/indexerrorpanel.html +++ b/web-ui/src/main/resources/catalog/components/utility/partials/indexerrorpanel.html @@ -6,7 +6,7 @@

    indexNotAvailable

    status From 4fb5ed8252dac5448d4d6b492286fc792fa469e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Wed, 20 Dec 2023 14:29:56 +0100 Subject: [PATCH 33/81] [BP] Add German codelist translations for scope code (#7566) --- .../src/main/plugin/iso19139/loc/ger/codelists.xml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/schemas/iso19139/src/main/plugin/iso19139/loc/ger/codelists.xml b/schemas/iso19139/src/main/plugin/iso19139/loc/ger/codelists.xml index a715df4a28..fdf6efea66 100644 --- a/schemas/iso19139/src/main/plugin/iso19139/loc/ger/codelists.xml +++ b/schemas/iso19139/src/main/plugin/iso19139/loc/ger/codelists.xml @@ -1578,26 +1578,25 @@ Publication --> - map - + staticMap - + interactiveMap - + featureCatalog - + From eb0ca1e1508b7fa24b29097dfbcaa390c0d87b7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Thu, 31 Aug 2023 17:25:01 +0200 Subject: [PATCH 34/81] [BP] Display metadata user and group owner in the transfer ownership dialog --- .../catalog/components/catalog/CatalogService.js | 2 +- .../metadataactions/MetadataActionsDirective.js | 15 +++++++++++++++ .../partials/transferownership.html | 9 +++++++++ .../main/resources/catalog/locales/en-core.json | 1 + 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/web-ui/src/main/resources/catalog/components/catalog/CatalogService.js b/web-ui/src/main/resources/catalog/components/catalog/CatalogService.js index b2e18536f0..33423f1d9a 100644 --- a/web-ui/src/main/resources/catalog/components/catalog/CatalogService.js +++ b/web-ui/src/main/resources/catalog/components/catalog/CatalogService.js @@ -792,7 +792,7 @@ return this.ownerId; }, getGroupOwner: function () { - return this.owner; + return this.groupOwner; }, getSchema: function () { return this.schema; diff --git a/web-ui/src/main/resources/catalog/components/metadataactions/MetadataActionsDirective.js b/web-ui/src/main/resources/catalog/components/metadataactions/MetadataActionsDirective.js index 6bad0fd1d7..fa3efe5b6d 100644 --- a/web-ui/src/main/resources/catalog/components/metadataactions/MetadataActionsDirective.js +++ b/web-ui/src/main/resources/catalog/components/metadataactions/MetadataActionsDirective.js @@ -728,6 +728,21 @@ scope.userGroupDefined = false; scope.userGroups = null; + scope.ownerUserName = ""; + scope.ownerGroupName = ""; + + if (ownerId) { + $http.get("../api/users/" + ownerId).then(function (response) { + scope.ownerUserName = response.data.username; + }); + } + + if (groupOwner) { + $http.get("../api/groups/" + groupOwner).then(function (response) { + scope.ownerGroupName = response.data.name; + }); + } + scope.selectGroup = function (group) { scope.selectedGroup = group; }; diff --git a/web-ui/src/main/resources/catalog/components/metadataactions/partials/transferownership.html b/web-ui/src/main/resources/catalog/components/metadataactions/partials/transferownership.html index d9e436dee6..13ce32311c 100644 --- a/web-ui/src/main/resources/catalog/components/metadataactions/partials/transferownership.html +++ b/web-ui/src/main/resources/catalog/components/metadataactions/partials/transferownership.html @@ -1,5 +1,14 @@
    +

    + recordOwner: {{ ownerUserName }} +

    +

    + groupRecordOwner: {{ ownerGroupName }} +

    + +
    + Date: Wed, 17 Jan 2024 18:32:12 +0100 Subject: [PATCH 71/81] Fix the grid on the homepage of the documentation (#7559) * Remove the custom grid styles, the latest version of Material for MkDocs has this as a default option. The minimum version for Material for MkDocs is 9.5, this is added in the `requirements.txt` --- docs/manual/docs/index.fr.md | 78 +++++++++++-------- docs/manual/docs/index.md | 78 +++++++++++-------- .../overrides/assets/stylesheets/extra.css | 42 ---------- docs/manual/requirements.txt | 2 +- 4 files changed, 95 insertions(+), 105 deletions(-) diff --git a/docs/manual/docs/index.fr.md b/docs/manual/docs/index.fr.md index 214738778a..be3ee3f8e1 100644 --- a/docs/manual/docs/index.fr.md +++ b/docs/manual/docs/index.fr.md @@ -9,36 +9,52 @@ Bienvenue à GeoNetwork. Cette documentation est organisée en guides spécifiqu
    -:fontawesome-solid-signs-post: [Vue d'ensemble](overview/index.md) - -: Historique de GeoNetwork, communauté, détails de la licence et derniers changements. - -:fontawesome-solid-circle-info: [Aide en ligne](help/index.md) - -: Aide en ligne pour les visiteurs du catalogue (aucune connexion n'est requise). - -:fontawesome-solid-person-circle-question: [Guide de l'utilisateur](user-guide/index.md) - -: Guide de l'utilisateur opérationnel décrivant l'édition, la révision et la gestion des enregistrements (nécessite une connexion). - -:fontawesome-solid-screwdriver-wrench: [Guide du mainteneur](maintainer-guide/index.md) - -: Instructions d'installation, de configuration et de mise à jour - -:fontawesome-solid-user-graduate: [Tutoriels](tutorials/index.md) - -: Explorer des sujets à l'aide de tutoriels étape par étape - -:fontawesome-solid-plug: [Référence API](api/index.md) - -: Référence API pour les développeurs accédant aux services du catalogue. - -:fontawesome-regular-file-code: [Développement](devel/index.md) - -: Informations sur le développement, la personnalisation de GeoNetwork et la participation au projet GeoNetwork. - -:fontawesome-regular-bookmark: [Annexes](annexes/index.md) - -: Informations de référence +- :fontawesome-solid-signs-post: [Vue d'ensemble](overview/index.md) + + --- + + Historique de GeoNetwork, communauté, détails de la licence et derniers changements. + +- :fontawesome-solid-circle-info: [Aide en ligne](help/index.md) + + --- + + Aide en ligne pour les visiteurs du catalogue (aucune connexion n'est requise). + +- :fontawesome-solid-person-circle-question: [Guide de l'utilisateur](user-guide/index.md) + + --- + + Guide de l'utilisateur opérationnel décrivant l'édition, la révision et la gestion des enregistrements (nécessite une connexion). + +- :fontawesome-solid-screwdriver-wrench: [Guide du mainteneur](maintainer-guide/index.md) + + --- + + Instructions d'installation, de configuration et de mise à jour + +- :fontawesome-solid-user-graduate: [Tutoriels](tutorials/index.md) + + --- + + Explorer des sujets à l'aide de tutoriels étape par étape + +- :fontawesome-solid-plug: [Référence API](api/index.md) + + --- + + Référence API pour les développeurs accédant aux services du catalogue. + +- :fontawesome-regular-file-code: [Développement](devel/index.md) + + --- + + Informations sur le développement, la personnalisation de GeoNetwork et la participation au projet GeoNetwork. + +- :fontawesome-regular-bookmark: [Annexes](annexes/index.md) + + --- + + Informations de référence
    diff --git a/docs/manual/docs/index.md b/docs/manual/docs/index.md index cb1595f866..c9a0bf8e9f 100644 --- a/docs/manual/docs/index.md +++ b/docs/manual/docs/index.md @@ -9,36 +9,52 @@ Welcome to GeoNetwork. This documentation is organized into specific guides targ
    -:fontawesome-solid-signs-post: [Overview](overview/index.md) - -: GeoNetwork background, community, license details, and the latest changes. - -:fontawesome-solid-circle-info: [Online Help](help/index.md) - -: Online help for visitors to the catalogue (no login required). - -:fontawesome-solid-person-circle-question: [User Guide](user-guide/index.md) - -: Operational user-guide describing the editing, review and management of records (requires-login). - -:fontawesome-solid-screwdriver-wrench: [Maintainer Guide](maintainer-guide/index.md) - -: Installation, setup and update instructions - -:fontawesome-solid-user-graduate: [Tutorials](tutorials/index.md) - -: Explore topics using step-by-step tutorials - -:fontawesome-solid-plug: [API Reference](api/index.md) - -: API Reference for developers accecssing catalogue services. - -:fontawesome-regular-file-code: [Development](devel/index.md) - -: Development information on customizing GeoNetwork and taking part in the GeoNetwork project. - -:fontawesome-regular-bookmark: [Annexes](annexes/index.md) - -: Reference information +- :fontawesome-solid-signs-post: [Overview](overview/index.md) + + --- + + GeoNetwork background, community, license details, and the latest changes. + +- :fontawesome-solid-circle-info: [Online Help](help/index.md) + + --- + + Online help for visitors to the catalogue (no login required). + +- :fontawesome-solid-person-circle-question: [User Guide](user-guide/index.md) + + --- + + Operational user-guide describing the editing, review and management of records (requires-login). + +- :fontawesome-solid-screwdriver-wrench: [Maintainer Guide](maintainer-guide/index.md) + + --- + + Installation, setup and update instructions + + - :fontawesome-solid-user-graduate: [Tutorials](tutorials/index.md) + + --- + + Explore topics using step-by-step tutorials + +- :fontawesome-solid-plug: [API Reference](api/index.md) + + --- + + API Reference for developers accecssing catalogue services. + +- :fontawesome-regular-file-code: [Development](devel/index.md) + + --- + + Development information on customizing GeoNetwork and taking part in the GeoNetwork project. + +- :fontawesome-regular-bookmark: [Annexes](annexes/index.md) + + --- + + Reference information
    diff --git a/docs/manual/overrides/assets/stylesheets/extra.css b/docs/manual/overrides/assets/stylesheets/extra.css index 8155e94365..07b39e3452 100644 --- a/docs/manual/overrides/assets/stylesheets/extra.css +++ b/docs/manual/overrides/assets/stylesheets/extra.css @@ -9,48 +9,6 @@ img + em, .browser-border + em, .browser-mockup + em { font-size: 0.75rem; } -/* grid */ -.md-typeset .grid { - column-count: 2; - column-gap: 2em; - margin-bottom: 20px; -} -.md-typeset .grid dl { - display: grid; - grid-template-columns: repeat(auto-fit,minmax(16rem,1fr)); - margin: 0; -} -.md-typeset .grid.cards dt, .md-typeset .grid.cards dd { - border: 0.05rem solid var(--md-default-fg-color--lightest); - border-radius: 0.1rem; - display: block; - margin: 0; - padding: 0.8rem; - transition: border .25s,box-shadow .25s; -} -.md-typeset .grid.cards dt { - font-weight: bold; -} -.md-typeset .grid.cards dt .twemoji { - margin-right: 5px; -} -.md-typeset .grid.cards dd { - margin-bottom: 0.8rem; - margin-top: -1px; -} -.md-typeset .grid.cards dd p { - margin: 0; -} -@media (max-width: 768px) { - .md-typeset .grid dl { - display: inline-block; - margin-bottom: 20px; - } - .md-typeset .grid.cards dt, .md-typeset .grid.cards dd { - width: calc(100vw - 1.2rem - 1.2rem); - } -} - /* definition list used to display general inputs */ .md-typeset dl dd { margin: 10px 0; diff --git a/docs/manual/requirements.txt b/docs/manual/requirements.txt index a3fae0623c..8a3fcb93da 100644 --- a/docs/manual/requirements.txt +++ b/docs/manual/requirements.txt @@ -1,4 +1,4 @@ -mkdocs-material +mkdocs-material>=9.5.3 mkdocs-static-i18n>=1.0.5 mkdocs-include-markdown-plugin mkdocs-exclude From 84f52a5730b140c4d6bd9a4bf361a0320452e61f Mon Sep 17 00:00:00 2001 From: Jody Garnett Date: Wed, 17 Jan 2024 10:27:20 -0800 Subject: [PATCH 72/81] document `backport 4.2.x` label change required for bot Signed-off-by: Jody Garnett --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ab418f3efe..e442c0f229 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,8 +14,8 @@ Thank you for contributing to GeoNetwork: * Before merging a pull request, should be defined the following properties: - Milestone to include the change. - - Add the label `changelog` when the change is relevant to be added to the release changelog file . - - Add the label(s) to the backport to previous branch(es), when the change is a bug fix or if it is a small improvement that may be relevant to the backport. + - Add the label `changelog` when the change is relevant to be added to the release changelog file. + - Add `backport ` to indicate when change is a bug fix or is a small improvement that may be relevant to the backport. * Good housekeeping: Anytime you commit, try and clean the code around it to latest style guide. If you improve a function without comments: add comments. If you modify functionality that does not have tests: write a test. If you fix functionality without documentation: add documentation. From a3654fd985fcccf1dbabd695eee4b90b2bb9d556 Mon Sep 17 00:00:00 2001 From: Jody Garnett Date: Wed, 17 Jan 2024 23:39:43 -0800 Subject: [PATCH 73/81] [BP] unpack schema sample data into folders, produce mef files at build time (#7457) * unpack iso19139 sample data, create mef file at build time Signed-off-by: Jody Garnett * unpack iso19155-3.2018 sample data, create mef file at build time Signed-off-by: Jody Garnett * unpack dublin-core sample data, create mef file at build time Signed-off-by: Jody Garnett --------- Signed-off-by: Jody Garnett --- schemas/dublin-core/pom.xml | 22 + .../src/assembly/schema-plugin.xml | 11 + .../dublin-core/sample-data/dublin-core.mef | Bin 1223 -> 0 bytes .../natural_polar_ecosystems/info.xml | 20 + .../natural_polar_ecosystems/metadata.xml | 21 + .../natural_polar_ecosystems/private/.keepme | 0 .../natural_polar_ecosystems/public/.keepme | 0 schemas/iso19115-3.2018/pom.xml | 23 + .../src/assembly/schema-plugin.xml | 11 + .../0dbac056-cd5a-4c9c-bbec-564e47c4507c.zip | Bin 5150 -> 0 bytes .../sample-data/service_record/info.xml | 28 ++ .../sample-data/service_record/metadata.xml | 471 ++++++++++++++++++ .../service_record/metadata/.keepme | 0 .../service_record/private/.keepme | 0 .../sample-data/service_record/public/.keepme | 0 schemas/iso19139/pom.xml | 39 ++ .../iso19139/src/assembly/schema-plugin.xml | 11 + .../sample-data/basins_in_africa/info.xml | 46 ++ .../sample-data/basins_in_africa/metadata.xml | 337 +++++++++++++ .../basins_in_africa/private/.keepme | 0 .../basins_in_africa/private/basins.zip | Bin 0 -> 109940 bytes .../basins_in_africa/public/.keepme | 0 .../basins_in_africa/public/thumbnail.gif | Bin 0 -> 109796 bytes .../basins_in_africa/public/thumbnail_s.gif | Bin 0 -> 5334 bytes .../iso-19139-basins-in-africa.mef | Bin 229954 -> 0 bytes .../sample-data/iso-19139-physiographic.mef | Bin 117442 -> 0 bytes .../locality_polygons_comprehensive.mef | Bin 6508 -> 0 bytes .../locality_polygons_comprehensive/info.xml | 35 ++ .../metadata.xml | 1 + .../sample-data/photographic_session.mef | Bin 2063 -> 0 bytes .../sample-data/photographic_session/info.xml | 35 ++ .../photographic_session/metadata.xml | 111 +++++ .../sample-data/physiographic/info.xml | 44 ++ .../sample-data/physiographic/metadata.xml | 351 +++++++++++++ .../sample-data/physiographic/private/phy.zip | Bin 0 -> 52999 bytes .../sample-data/physiographic/public/phy.gif | Bin 0 -> 52877 bytes .../physiographic/public/phy_s.gif | Bin 0 -> 6852 bytes .../sample-data/z3950-server-sample.mef | Bin 2194 -> 0 bytes .../sample-data/z3950_server/info.xml | 36 ++ .../sample-data/z3950_server/metadata.xml | 147 ++++++ 40 files changed, 1800 insertions(+) delete mode 100644 schemas/dublin-core/src/main/plugin/dublin-core/sample-data/dublin-core.mef create mode 100644 schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/info.xml create mode 100644 schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/metadata.xml create mode 100644 schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/private/.keepme create mode 100644 schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/public/.keepme delete mode 100644 schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/0dbac056-cd5a-4c9c-bbec-564e47c4507c.zip create mode 100644 schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/info.xml create mode 100644 schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/metadata.xml create mode 100644 schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/metadata/.keepme create mode 100644 schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/private/.keepme create mode 100644 schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/public/.keepme create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/info.xml create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/metadata.xml create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/private/.keepme create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/private/basins.zip create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/public/.keepme create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/public/thumbnail.gif create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/public/thumbnail_s.gif delete mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/iso-19139-basins-in-africa.mef delete mode 100755 schemas/iso19139/src/main/plugin/iso19139/sample-data/iso-19139-physiographic.mef delete mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/locality_polygons_comprehensive.mef create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/locality_polygons_comprehensive/info.xml create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/locality_polygons_comprehensive/metadata.xml delete mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/photographic_session.mef create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/photographic_session/info.xml create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/photographic_session/metadata.xml create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/physiographic/info.xml create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/physiographic/metadata.xml create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/physiographic/private/phy.zip create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/physiographic/public/phy.gif create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/physiographic/public/phy_s.gif delete mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/z3950-server-sample.mef create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/z3950_server/info.xml create mode 100644 schemas/iso19139/src/main/plugin/iso19139/sample-data/z3950_server/metadata.xml diff --git a/schemas/dublin-core/pom.xml b/schemas/dublin-core/pom.xml index c7d6bac80e..c7d84b20c7 100644 --- a/schemas/dublin-core/pom.xml +++ b/schemas/dublin-core/pom.xml @@ -46,6 +46,28 @@ + + maven-antrun-plugin + + + sample-data + compile + + + + + + + + + run + + + + maven-assembly-plugin diff --git a/schemas/dublin-core/src/assembly/schema-plugin.xml b/schemas/dublin-core/src/assembly/schema-plugin.xml index 60537d198c..081cffedf1 100644 --- a/schemas/dublin-core/src/assembly/schema-plugin.xml +++ b/schemas/dublin-core/src/assembly/schema-plugin.xml @@ -11,6 +11,17 @@ src/main/plugin/ true + + dublin-core/sample-data/** + + + + target/sample-data + dublin-core/sample-data + true + + *.mef + diff --git a/schemas/dublin-core/src/main/plugin/dublin-core/sample-data/dublin-core.mef b/schemas/dublin-core/src/main/plugin/dublin-core/sample-data/dublin-core.mef deleted file mode 100644 index 3024aaccda4cec52c5b3207facca84d643683551..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1223 zcmWIWW@Zs#W?ri&85^W7~4oKkBJ?ER3M@2KrP`S>&~UJ z;V$Qr1l5x&mk6BqUb2x(CUK*2^j1w4PQ6Ia>}xYK3>}?WlkS}9n{m@xw=R|4YQ}Ci zWwuvm|Ec71z3UYC^yZuUwm&}v)pQpAmpuFYuJ^e^(|?}+`GqwA6gI$c;9v;fkYff6 z4mjWevT{>P5>paO5<%fJHRN>OZ3BTl(kJY7O0pVX9AwLtIh>ZjlI!GQEm)h6s;^pDv!x<6l7p27ZuX9njw{d%SECF^ZB z-|?<{W&hy$FY7=58}4)b*A83oIIPU>hUfPS2DhbjWw`{-Y@TGv65Kd%jzuLyP;|7wGUE5zgQ| z(6UJ9_lu8#_L-j-x!*s3Zo0N{|CiuEk;NT5qMPd9PN?JOYRqKZni{M8Q=~%Y?2c16 zrd9sxP%T*_=jxko?9#O$Jj|#=$78G5o315G1g>i;HZ6VnT;Du%LcqkX4X-!tkcyg9 zI8Dbl-|~|6Py5TW zVMQBfy~J*rc|siVsY_&gzVhA?nf@W+*9Nc0pR~C-CzVFn9@DwJ;S7V_9qnMFuZ3M% zSsTtwEqyF|x47?It9Qn8-N_HL?;bdq!SiP^_mAzO8xotQ+N_dZJX>I2yd`ksuQTgC`3E1MZ{*%4P*cnPrJ3srt-7b?hJk2B0=Dz^#uRC|^*Tl#`i^ zRU0Fd2s7?{4KZAyVM!y11 + + + 2005-03-31T19:13:30 + 2005-03-31T19:13:30 + dublin-core + false + full + + + + + + + + + + + + diff --git a/schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/metadata.xml b/schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/metadata.xml new file mode 100644 index 0000000000..0b53761a20 --- /dev/null +++ b/schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/metadata.xml @@ -0,0 +1,21 @@ + + + + Natural polar ecosystems + GeoNetwork test user + Antarctic ecosystem + Arctic ecosystem + polar ecosystem + A harmonised database of natural ecosystems in the Circumpolar Arctic, based on published vegetation maps. + GeoNetwork test centre + Unknown + 2000 + Maps and graphics + Web page + 01f8da31-10d7-11da-b569-000f1f1a7b03 + Compiled from published vegetation maps of the 8 circumpolar countries. + en + Unknown + North 90, South -90, East 180, West -180. (Global) + Access constraints: None. Usage constraints: No restrictions + \ No newline at end of file diff --git a/schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/private/.keepme b/schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/private/.keepme new file mode 100644 index 0000000000..e69de29bb2 diff --git a/schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/public/.keepme b/schemas/dublin-core/src/main/plugin/dublin-core/sample-data/natural_polar_ecosystems/public/.keepme new file mode 100644 index 0000000000..e69de29bb2 diff --git a/schemas/iso19115-3.2018/pom.xml b/schemas/iso19115-3.2018/pom.xml index b953893c4e..fe0537e95e 100644 --- a/schemas/iso19115-3.2018/pom.xml +++ b/schemas/iso19115-3.2018/pom.xml @@ -69,6 +69,29 @@ + + maven-antrun-plugin + + + sample-data + compile + + + + + + + + + run + + + + + maven-assembly-plugin diff --git a/schemas/iso19115-3.2018/src/assembly/schema-plugin.xml b/schemas/iso19115-3.2018/src/assembly/schema-plugin.xml index 60537d198c..5783f8780f 100644 --- a/schemas/iso19115-3.2018/src/assembly/schema-plugin.xml +++ b/schemas/iso19115-3.2018/src/assembly/schema-plugin.xml @@ -11,6 +11,17 @@ src/main/plugin/ true + + iso19115-3.2018/sample-data/** + + + + target/sample-data + iso19115-3.2018/sample-data + true + + *.mef + diff --git a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/0dbac056-cd5a-4c9c-bbec-564e47c4507c.zip b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/0dbac056-cd5a-4c9c-bbec-564e47c4507c.zip deleted file mode 100644 index e2fbde2094f83ea39cf1a9f2c00006daab23d2f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5150 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 diff --git a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/info.xml b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/info.xml new file mode 100644 index 0000000000..76d3d431b0 --- /dev/null +++ b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/info.xml @@ -0,0 +1,28 @@ + + + + 2015-05-04T16:34:08 + 2019-12-09T16:45:53 + iso19115-3.2018 + n + 1772 + full + 0 + 0 + 0dbac056-cd5a-4c9c-bbec-564e47c4507c + + + + + + + + + + + + + + + + diff --git a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/metadata.xml b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/metadata.xml new file mode 100644 index 0000000000..e636ba33c1 --- /dev/null +++ b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/metadata.xml @@ -0,0 +1,471 @@ + + + + + + 0dbac056-cd5a-4c9c-bbec-564e47c4507c + + + urn:uuid + + + + + + + + + + + + + + + + + + + + Service + + + + + + + + + + + + Metadata point of contact + + + + + + + helpdesk@my.org + + + + + + + + + + + + + 2019-12-09T16:45:52 + + + + + + + + + + 2019-04-02T12:31:35 + + + + + + + + + + ISO 19115-3 + + + + + + + + + Discovery service for my catalogue (Sample record, please remove!) + + + + + 2015-01-30 + + + + + + + + + + 2015-05-05 + + + + + + + + + + +-- Customize this sample record to describe the Catalogue Service Web (CSW) service of your catalogue --. + +See https://docs.geonetwork-opensource.org/4.4/administrator-guide/configuring-the-catalog/csw-configuration/ + +Access datasets, maps and services from my organisation using the OGC CSW standards. + +This catalogue contains descriptions of GIS resources on the ... region produced and/or maintained by .... + + + + + + + + + + Geo Helpdesk + + + + + + + helpdesk@my.org + + + + + + + + + + + + + ... + + + + + 2.75 + + + 6.50 + + + 49.45 + + + 50.85 + + + + + + + + + infoCatalogueService + + + + + + + + INSPIRE Service taxonomy + + + + + 2010-04-22 + + + + + + + + + + geonetwork.thesaurus.external.theme.inspire-service-taxonomy + + + + + + + + + + + Human health and safety + + + Protected sites + + + + + + + + GEMET - INSPIRE themes, version 1.0 + + + + + 2008-06-01 + + + + + + + + + + geonetwork.thesaurus.external.theme.httpinspireeceuropaeutheme-theme + + + + + + + + + + + Regional + + + + + + + + Spatial scope + + + + + 2019-07-02 + + + + + + + + + + geonetwork.thesaurus.external.theme.httpinspireeceuropaeumetadatacodelistSpatialScope-SpatialScope + + + + + + + + + + + + + + No limitations to public access + + + + + + + Specific use limitation + + + + + + Describe here any use limitation. + + + + + discovery + + + + + + + + GetCapabilities + + + + + + + + http://localhost:8080/geonetwork/srv/eng/csw + + + OGC:CSW + + + + + + + + + + + + + + + + + + + + My organisation + + + + + + + helpdesk@my.org + + + + + + + + + + + + + No restriction. + + + + + + + + + + + http://localhost:8080/geonetwork/srv/eng/csw?SERVICE=CSW&VERSION=2.0.2&REQUEST=GetCapabilities + + + OGC:CSW + + + CSW service URL + + + + + + + + + + + + + + + + + + + + + + + + Service + + + + + + + + + + + + + Commission Regulation (EC) No 976/2009 of 19 October 2009 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards the Network Services + + + + + 2009-10-19 + + + + + + + + + + See the referenced specification + + + + + + + + + + + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services + + + + + 2010-12-08 + + + + + + + + + + See the referenced specification + + + true + + + + + + + + diff --git a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/metadata/.keepme b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/metadata/.keepme new file mode 100644 index 0000000000..e69de29bb2 diff --git a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/private/.keepme b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/private/.keepme new file mode 100644 index 0000000000..e69de29bb2 diff --git a/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/public/.keepme b/schemas/iso19115-3.2018/src/main/plugin/iso19115-3.2018/sample-data/service_record/public/.keepme new file mode 100644 index 0000000000..e69de29bb2 diff --git a/schemas/iso19139/pom.xml b/schemas/iso19139/pom.xml index fd282ff4fd..2d11cf9dcd 100644 --- a/schemas/iso19139/pom.xml +++ b/schemas/iso19139/pom.xml @@ -57,6 +57,45 @@ + + + maven-antrun-plugin + + + sample-data + compile + + + + + + + + + + + + + run + + + + maven-assembly-plugin diff --git a/schemas/iso19139/src/assembly/schema-plugin.xml b/schemas/iso19139/src/assembly/schema-plugin.xml index 60537d198c..80aecf4215 100644 --- a/schemas/iso19139/src/assembly/schema-plugin.xml +++ b/schemas/iso19139/src/assembly/schema-plugin.xml @@ -11,6 +11,17 @@ src/main/plugin/ true + + iso19139/sample-data/** + + + + target/sample-data + iso19139/sample-data + true + + *.mef + diff --git a/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/info.xml b/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/info.xml new file mode 100644 index 0000000000..be1aef3099 --- /dev/null +++ b/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/info.xml @@ -0,0 +1,46 @@ + + + + da165110-88fd-11da-a88f-000d939bc5d8 + 2007-07-19T14:45:07 + 2007-11-06T12:13:00 + iso19139 + false + full + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/metadata.xml b/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/metadata.xml new file mode 100644 index 0000000000..6f6639e92c --- /dev/null +++ b/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/metadata.xml @@ -0,0 +1,337 @@ + + + + da165110-88fd-11da-a88f-000d939bc5d8 + + + eng + + + + + + + + Jippe Hoogeveen + + + FAO - NRCW + + + Technical Officer + + + + + + + + + + + + + + + + + Viale delle Terme di Caracalla + + + Rome + + + + + + 00153 + + + Italy + + + jippe.hoogeveen@fao.org + + + + + + + + + + + + 2007-11-06T12:13:00 + + + ISO 19115:2003/19139 + + + 1.0 + + + + + + + + WGS 1984 + + + + + + + + + + + Hydrological Basins in Africa (Sample record, please remove!) + + + + + 2000-07-19T14:45:00 + + + + + + + + First + + + + + + + + Major hydrological basins and their sub-basins. This dataset divides the African continent according to its hydrological characteristics. +The dataset consists of the following information:- numerical code and name of the major basin (MAJ_BAS and MAJ_NAME); - area of the major basin in square km (MAJ_AREA); - numerical code and name of the sub-basin (SUB_BAS and SUB_NAME); - area of the sub-basin in square km (SUB_AREA); - numerical code of the sub-basin towards which the sub-basin flows (TO_SUBBAS) (the codes -888 and -999 have been assigned respectively to internal sub-basins and to sub-basins draining into the sea) + + + This dataset is developed as part of a GIS-based information system on water resources for the African continent. It has been published in the framework of the AQUASTAT - programme of the Land and Water Division of the Food and Agriculture Organization of the United Nations, as part of FAO Land and Water Digital Media Series #13: "Atlas of Water Resources and Irrigation in Africa". + +For a wider distribution and to support other projects at FAO this map is also distributed in a DVD as part of a publication entitled: "Jenness, J.; Dooley, J.; Aguilar-Manjarrez, J.; Riva, C. African Water Resource Database. GIS-based tools for inland aquatic resource management. 2. Technical manual and workbook. CIFA Technical Paper. No. 33, Part 2. Rome, FAO. 2007. 308 p." + + + + + + + + + + + + + + + http://localhost:8080/geonetwork/srv/api/records/da165110-88fd-11da-a88f-000d939bc5d8/attachments/thumbnail_s.gif + + + Hydrological Basins in Africa (small preview) + + + + + + + http://localhost:8080/geonetwork/srv/api/records/da165110-88fd-11da-a88f-000d939bc5d8/attachments/thumbnail.gif + + + Hydrological Basins in Africa + + + + + + + watersheds + + + river basins + + + water resources + + + hydrology + + + AQUASTAT + + + AWRD + + + + + + + + + + Africa + + + + + + + + + + + + + + + + + + + + + + 5000000 + + + + + + + eng + + + + + + inlandWaters + + + + + + + + 2006-01-01T04:29:00 + 2008-01-08T04:29:00 + + + + + + + + + + + + -17.3 + + + 51.1 + + + -34.6 + + + 38.2 + + + + + + + You can customize the template to suit your needs. You can add and remove fields and fill out default information (e.g. contact details). Fields you can not change in the default view may be accessible in the more comprehensive (and more complex) advanced view. You can even use the XML editor to create custom structures, but they have to be validated by the system, so know what you do :-) + + + + + + + + + ShapeFile + + + Grass Version 6.1 + + + + + + + + + http://www.fao.org/ag/AGL/aglw/aquastat/watresafrica/index.stm + + + WWW:LINK-1.0-http--link + + + + + + Online link to the 'Water Resources and Irrigation in Africa'- website + + + + + + + http://localhost:8080/geonetwork/srv/api/records/da165110-88fd-11da-a88f-000d939bc5d8/attachments/basins.zip + + + WWW:DOWNLOAD-1.0-http--download + + + basins.zip + + + Hydrological basins in Africa (Shapefile Format) + + + + + + + https://data.apps.fao.org/map/gsrv/gsrv1/geonetwork/wms + + + OGC:WMS + + + geonetwork:basins_296 + + + Hydrological basins in Africa + + + + + + + + + + + + + + + + + + + + The linework of the map is obtained by delineating drainage basin boundaries from an hydrologically corrected digital elevation model with a resolution of 1 * 1 km. + + + + + + diff --git a/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/private/.keepme b/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/private/.keepme new file mode 100644 index 0000000000..e69de29bb2 diff --git a/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/private/basins.zip b/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/private/basins.zip new file mode 100644 index 0000000000000000000000000000000000000000..e56056000bf5cc7159348fa75032aff3fa5d5405 GIT binary patch literal 109940 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 sXL? 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 literal 0 HcmV?d00001 diff --git a/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/public/.keepme b/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/public/.keepme new file mode 100644 index 0000000000..e69de29bb2 diff --git a/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/public/thumbnail.gif b/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/public/thumbnail.gif new file mode 100644 index 0000000000000000000000000000000000000000..77efd60a9356369f7fba0bfb3f52dfd55c710bba GIT binary patch literal 109796 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

    L?607Ba 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 literal 0 HcmV?d00001 diff --git a/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/public/thumbnail_s.gif b/schemas/iso19139/src/main/plugin/iso19139/sample-data/basins_in_africa/public/thumbnail_s.gif new file mode 100644 index 0000000000000000000000000000000000000000..4c7876fc7eab5fdfb74f0e5e46437a1a93f0f29e GIT binary patch literal 5334 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 I0RWx<0m%n&6951J literal 0 HcmV?d00001 diff --git a/schemas/iso19139/src/main/plugin/iso19139/sample-data/iso-19139-basins-in-africa.mef b/schemas/iso19139/src/main/plugin/iso19139/sample-data/iso-19139-basins-in-africa.mef deleted file mode 100644 index 156be44779b8bb3f7846846fbf5657c9b750850f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229954 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 F&V?ds;gzC7+y1hY^kW8YZ{b_Z;SZ9cPRq;33 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