From 1ab994e113571bcc149a02817da701ecf2fc111a Mon Sep 17 00:00:00 2001 From: Steven Ferey Date: Tue, 26 Aug 2025 17:37:38 +0200 Subject: [PATCH] Added a control to publishing a Dataset and cleaning the dataversesubjects table having a controlledvocabularyvalue_id corresponding to N/A --- .../impl/FinalizeDatasetPublicationCommand.java | 14 +++++++++----- src/main/resources/db/migration/V6.7.1.2.sql | 2 ++ 2 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/db/migration/V6.7.1.2.sql diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java index d4bc6b83613..1ef68ae4853 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java @@ -334,12 +334,16 @@ private void updateParentDataversesSubjectsField(Dataset savedDataset, CommandCo while (dv != null) { boolean newSubjectsAdded = false; for (ControlledVocabularyValue cvv : dsf.getControlledVocabularyValues()) { - if (!dv.getDataverseSubjects().contains(cvv)) { - logger.fine("dv "+dv.getAlias()+" does not have subject "+cvv.getStrValue()); - newSubjectsAdded = true; - dv.getDataverseSubjects().add(cvv); + if (!cvv.getStrValue().equals(DatasetField.NA_VALUE)) { + if (!dv.getDataverseSubjects().contains(cvv)) { + logger.fine("dv "+dv.getAlias()+" does not have subject "+cvv.getStrValue()); + newSubjectsAdded = true; + dv.getDataverseSubjects().add(cvv); + } else { + logger.fine("dv "+dv.getAlias()+" already has subject "+cvv.getStrValue()); + } } else { - logger.fine("dv "+dv.getAlias()+" already has subject "+cvv.getStrValue()); + logger.fine("Subject is not recognized : " + cvv.getStrValue()); } } if (newSubjectsAdded) { diff --git a/src/main/resources/db/migration/V6.7.1.2.sql b/src/main/resources/db/migration/V6.7.1.2.sql new file mode 100644 index 00000000000..3ef3c6483e8 --- /dev/null +++ b/src/main/resources/db/migration/V6.7.1.2.sql @@ -0,0 +1,2 @@ +-- remove dataversesubjects entries with a controlledvocabularyvalue_id matching "N/A" +DELETE FROM dataversesubjects WHERE controlledvocabularyvalue_id = 1 ; \ No newline at end of file