From 189e43a06a67ec2abfb095715c206df141a1c849 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Wed, 15 May 2024 16:10:55 -0400 Subject: [PATCH] use merged dataset everywhere --- .../command/impl/DestroyDatasetCommand.java | 47 ++++++++++--------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DestroyDatasetCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DestroyDatasetCommand.java index b768e74dbe3..70519670ef7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DestroyDatasetCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/DestroyDatasetCommand.java @@ -70,11 +70,30 @@ protected void executeImpl(CommandContext ctxt) throws CommandException { doomed.setThumbnailFile(null); final Dataset managedDoomed = ctxt.em().merge(doomed); + + if (!managedDoomed.isHarvested()) { + GlobalId pid = managedDoomed.getGlobalId(); + if (pid != null) { + PidProvider pidProvider = PidUtil.getPidProvider(pid.getProviderId()); + try { + if (pidProvider.alreadyRegistered(managedDoomed)) { + pidProvider.deleteIdentifier(managedDoomed); + for (DataFile df : managedDoomed.getFiles()) { + pidProvider.deleteIdentifier(df); + } + } + } catch (Exception e) { + logger.log(Level.WARNING, "Identifier deletion was not successful:", e.getMessage()); + } + } + } + logger.info("After PIDs"); + // files need to iterate through and remove 'by hand' to avoid // optimistic lock issues... (plus the physical files need to be // deleted too!) - Iterator dfIt = doomed.getFiles().iterator(); + Iterator dfIt = managedDoomed.getFiles().iterator(); while (dfIt.hasNext()){ DataFile df = dfIt.next(); // Gather potential Solr IDs of files. As of this writing deaccessioned files are never indexed. @@ -91,40 +110,24 @@ protected void executeImpl(CommandContext ctxt) throws CommandException { } //also, lets delete the uploaded thumbnails! - if (!doomed.isHarvested()) { - deleteDatasetLogo(doomed); + if (!managedDoomed.isHarvested()) { + deleteDatasetLogo(managedDoomed); } logger.info("Before getting RAs"); // ASSIGNMENTS - for (RoleAssignment ra : ctxt.roles().directRoleAssignments(doomed)) { + for (RoleAssignment ra : ctxt.roles().directRoleAssignments(managedDoomed)) { ctxt.em().remove(ra); } logger.info("After getting RAs"); // ROLES - for (DataverseRole ra : ctxt.roles().findByOwnerId(doomed.getId())) { + for (DataverseRole ra : ctxt.roles().findByOwnerId(managedDoomed.getId())) { ctxt.em().remove(ra); } logger.info("After getting DRs"); - if (!doomed.isHarvested()) { - GlobalId pid = doomed.getGlobalId(); - if (pid != null) { - PidProvider pidProvider = PidUtil.getPidProvider(pid.getProviderId()); - try { - if (pidProvider.alreadyRegistered(doomed)) { - pidProvider.deleteIdentifier(doomed); - for (DataFile df : doomed.getFiles()) { - pidProvider.deleteIdentifier(df); - } - } - } catch (Exception e) { - logger.log(Level.WARNING, "Identifier deletion was not successful:", e.getMessage()); - } - } - } - logger.info("After PIDs"); + toReIndex = managedDoomed.getOwner(); logger.info("Removing dataset");