From ecfed1132de691df3a87b922722d40adc6fda9df Mon Sep 17 00:00:00 2001 From: Vera Clemens Date: Thu, 3 Sep 2026 17:48:59 +0200 Subject: [PATCH 1/3] feat: add dataset relations support --- conf/solr/schema.xml | 1 + doc/sphinx-guides/source/api/native-api.rst | 269 +++- .../relationTypes/relationTypeAllFields.json | 10 + scripts/api/data/role-curator.json | 1 + scripts/api/data/role-editor.json | 1 + scripts/api/data/role-manager.json | 1 + .../edu/harvard/iq/dataverse/Dataset.java | 11 +- .../harvard/iq/dataverse/DatasetVersion.java | 25 +- .../dataverse/DatasetVersionDifference.java | 38 + .../iq/dataverse/EjbDataverseEngine.java | 18 + .../iq/dataverse/api/AbstractApiBean.java | 87 +- .../iq/dataverse/api/DatasetRelations.java | 321 ++++ .../harvard/iq/dataverse/api/Datasets.java | 47 +- .../dataverse/api/dto/DatasetRelationDTO.java | 59 + .../api/imports/ImportGenericServiceBean.java | 13 +- .../api/imports/ImportServiceBean.java | 16 +- .../dataverse/authorization/Permission.java | 3 +- .../datasetrelation/DatasetRelation.java | 144 ++ .../DatasetRelationAlgorithm.java | 51 + .../DatasetRelationIndexing.java | 71 + .../DatasetRelationServiceBean.java | 227 +++ .../datasetrelation/DatasetRelationType.java | 147 ++ .../DatasetRelationTypeException.java | 16 + .../DatasetRelationTypeServiceBean.java | 155 ++ .../ExternalDatasetRelation.java | 77 + .../InternalDatasetRelation.java | 67 + .../SqlDirectDatasetRelationAlgorithm.java | 380 +++++ .../engine/command/CommandContext.java | 7 +- .../impl/CreateDatasetRelationCommand.java | 53 + .../CreateDatasetRelationTypeCommand.java | 47 + .../impl/DeleteDatasetRelationCommand.java | 40 + .../DeleteDatasetRelationTypeCommand.java | 50 + .../command/impl/DestroyDatasetCommand.java | 4 + .../FinalizeDatasetPublicationCommand.java | 10 +- .../impl/ReplaceDatasetRelationsCommand.java | 77 + .../impl/UpdateDatasetVersionCommand.java | 2 +- ...ateDatasetVersionWithRelationsCommand.java | 70 + ...dateDefaultDatasetRelationTypeCommand.java | 32 + .../pidproviders/doi/XmlMetadataTemplate.java | 64 +- .../iq/dataverse/search/IndexServiceBean.java | 6 +- .../iq/dataverse/search/SearchFields.java | 2 + .../iq/dataverse/search/SolrSearchResult.java | 14 +- .../search/SolrSearchServiceBean.java | 2 + .../iq/dataverse/util/json/JsonParser.java | 77 +- .../iq/dataverse/util/json/JsonPrinter.java | 122 +- src/main/java/propertyFiles/Bundle.properties | 32 + .../migration/V6.X.0.Y-dataset-relations.sql | 42 + .../dataverse/api/DatasetRelationTypesIT.java | 281 ++++ .../iq/dataverse/api/DatasetRelationsIT.java | 1306 +++++++++++++++++ .../edu/harvard/iq/dataverse/api/UtilIT.java | 141 ++ .../DatasetRelationIndexingTest.java | 85 ++ .../iq/dataverse/engine/PermissionTest.java | 4 + .../dataverse/engine/TestCommandContext.java | 12 + .../export/SchemaDotOrgExporterTest.java | 4 +- .../dataverse/feedback/FeedbackUtilTest.java | 8 +- .../doi/datacite/XmlMetadataTemplateTest.java | 16 + .../search/IndexServiceBeanTest.java | 2 + .../dataverse/util/json/JsonParserTest.java | 24 +- .../dataverse/util/json/JsonPrinterTest.java | 82 +- tests/integration-tests.txt | 2 +- tests/performance/relations/README.md | 58 + tests/performance/relations/cleanup.sh | 23 + tests/performance/relations/cleanup.sql | 26 + tests/performance/relations/explain-list.sql | 113 ++ tests/performance/relations/explain.sh | 27 + tests/performance/relations/measure-list.sh | 80 + .../relations/seed-internal-relations.sql | 143 ++ tests/performance/relations/seed.sh | 125 ++ 68 files changed, 5472 insertions(+), 99 deletions(-) create mode 100644 scripts/api/data/relationTypes/relationTypeAllFields.json create mode 100644 src/main/java/edu/harvard/iq/dataverse/api/DatasetRelations.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/api/dto/DatasetRelationDTO.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/datasetrelation/DatasetRelation.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/datasetrelation/DatasetRelationAlgorithm.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/datasetrelation/DatasetRelationIndexing.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/datasetrelation/DatasetRelationServiceBean.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/datasetrelation/DatasetRelationType.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/datasetrelation/DatasetRelationTypeException.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/datasetrelation/DatasetRelationTypeServiceBean.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/datasetrelation/ExternalDatasetRelation.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/datasetrelation/InternalDatasetRelation.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/datasetrelation/SqlDirectDatasetRelationAlgorithm.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDatasetRelationCommand.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDatasetRelationTypeCommand.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DeleteDatasetRelationCommand.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DeleteDatasetRelationTypeCommand.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/engine/command/impl/ReplaceDatasetRelationsCommand.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetVersionWithRelationsCommand.java create mode 100644 src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDefaultDatasetRelationTypeCommand.java create mode 100644 src/main/resources/db/migration/V6.X.0.Y-dataset-relations.sql create mode 100644 src/test/java/edu/harvard/iq/dataverse/api/DatasetRelationTypesIT.java create mode 100644 src/test/java/edu/harvard/iq/dataverse/api/DatasetRelationsIT.java create mode 100644 src/test/java/edu/harvard/iq/dataverse/datasetrelation/DatasetRelationIndexingTest.java create mode 100644 tests/performance/relations/README.md create mode 100755 tests/performance/relations/cleanup.sh create mode 100644 tests/performance/relations/cleanup.sql create mode 100644 tests/performance/relations/explain-list.sql create mode 100755 tests/performance/relations/explain.sh create mode 100755 tests/performance/relations/measure-list.sh create mode 100644 tests/performance/relations/seed-internal-relations.sql create mode 100755 tests/performance/relations/seed.sh diff --git a/conf/solr/schema.xml b/conf/solr/schema.xml index 4d65b378485..b9d6f02bbd3 100644 --- a/conf/solr/schema.xml +++ b/conf/solr/schema.xml @@ -243,6 +243,7 @@ +