From a0a7c8d05bf5fd0416a48a6052d87c987603312f Mon Sep 17 00:00:00 2001 From: Thibault Coupin Date: Mon, 3 Oct 2022 09:26:24 +0200 Subject: [PATCH 01/21] Harvest: map publisher tag to distributorName --- .../db/migration/V5.12.0.1__8739-publisher-during-harvesting.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/main/resources/db/migration/V5.12.0.1__8739-publisher-during-harvesting.sql diff --git a/src/main/resources/db/migration/V5.12.0.1__8739-publisher-during-harvesting.sql b/src/main/resources/db/migration/V5.12.0.1__8739-publisher-during-harvesting.sql new file mode 100644 index 00000000000..c4dbd901181 --- /dev/null +++ b/src/main/resources/db/migration/V5.12.0.1__8739-publisher-during-harvesting.sql @@ -0,0 +1 @@ +update foreignmetadatafieldmapping set datasetfieldname = 'distributorName' where foreignfieldxpath = ':publisher'; From d92d048354d19ca58665f0db6fd0cb673dd6f985 Mon Sep 17 00:00:00 2001 From: plecor <146710476+plecor@users.noreply.github.com> Date: Thu, 2 May 2024 13:40:00 +0200 Subject: [PATCH 02/21] Rename migration file --- ...vesting.sql => V6.2.0.2__8739-publisher-during-harvesting.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V5.12.0.1__8739-publisher-during-harvesting.sql => V6.2.0.2__8739-publisher-during-harvesting.sql} (100%) diff --git a/src/main/resources/db/migration/V5.12.0.1__8739-publisher-during-harvesting.sql b/src/main/resources/db/migration/V6.2.0.2__8739-publisher-during-harvesting.sql similarity index 100% rename from src/main/resources/db/migration/V5.12.0.1__8739-publisher-during-harvesting.sql rename to src/main/resources/db/migration/V6.2.0.2__8739-publisher-during-harvesting.sql From d6a6e56df7bae324e95c25e7a2b0de5f6d273aa1 Mon Sep 17 00:00:00 2001 From: plecor <146710476+plecor@users.noreply.github.com> Date: Tue, 14 May 2024 15:31:20 +0200 Subject: [PATCH 03/21] Add use case to HarvestingClientsIT --- .../edu/harvard/iq/dataverse/api/HarvestingClientsIT.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/test/java/edu/harvard/iq/dataverse/api/HarvestingClientsIT.java b/src/test/java/edu/harvard/iq/dataverse/api/HarvestingClientsIT.java index 340eab161bb..5020e37edb8 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/HarvestingClientsIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/HarvestingClientsIT.java @@ -299,6 +299,11 @@ private void harvestingClientRun(boolean allowHarvestingMissingCVV) throws Inte } // verify count after collecting global ids assertEquals(expectedNumberOfSetsHarvested, jsonPath.getInt("data.total_count")); + + // ensure the publisher name is present in the harvested dataset citation + Response harvestedDataverse = given().get(ARCHIVE_URL + "/api/dataverses/1"); + String harvestedDataverseName = harvestedDataverse.getBody().jsonPath().getString("data.name"); + assertTrue(jsonPath.getString("data.items[0].citation").contains(harvestedDataverseName)); // Fail if it hasn't completed in maxWait seconds assertTrue(i < maxWait); From 64b69b94a7677d927c81b30f1a9cf43b470412eb Mon Sep 17 00:00:00 2001 From: plecor <146710476+plecor@users.noreply.github.com> Date: Tue, 14 May 2024 15:50:19 +0200 Subject: [PATCH 04/21] Add release note --- doc/release-notes/8739-publisher-during-harvesting.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/release-notes/8739-publisher-during-harvesting.md diff --git a/doc/release-notes/8739-publisher-during-harvesting.md b/doc/release-notes/8739-publisher-during-harvesting.md new file mode 100644 index 00000000000..602b2cf34d6 --- /dev/null +++ b/doc/release-notes/8739-publisher-during-harvesting.md @@ -0,0 +1 @@ +The publisher value of harvested datasets is now attributed to the dataset's distributor instead of its producer. This change affects all newly harvested datasets. For more information, see #8739 \ No newline at end of file From 5dfb01ef58f11dbac8ed4153e265e606b55fef0c Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 14 May 2024 13:55:24 -0400 Subject: [PATCH 05/21] add change in behavior to new harvesting client changlog #8739 --- doc/sphinx-guides/source/admin/harvestclients.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/sphinx-guides/source/admin/harvestclients.rst b/doc/sphinx-guides/source/admin/harvestclients.rst index 59fc4dc2c64..1e45fd06fc8 100644 --- a/doc/sphinx-guides/source/admin/harvestclients.rst +++ b/doc/sphinx-guides/source/admin/harvestclients.rst @@ -47,3 +47,8 @@ What if a Run Fails? Each harvesting client run logs a separate file per run to the app server's default logging directory (``/usr/local/payara6/glassfish/domains/domain1/logs/`` unless you've changed it). Look for filenames in the format ``harvest_TARGET_YYYY_MM_DD_timestamp.log`` to get a better idea of what's going wrong. Note that you'll want to run a minimum of Dataverse Software 4.6, optimally 4.18 or beyond, for the best OAI-PMH interoperability. + +Harvesting Client Changelog +--------------------------- + +- As of Dataverse 6.3, the publisher value of harvested datasets is now attributed to the dataset's distributor instead of its producer. This change affects all newly harvested datasets. For more information, see https://github.com/IQSS/dataverse/pull/9013 From 09fd6c1bd75d0d25e67f730342f98a897579f954 Mon Sep 17 00:00:00 2001 From: Pierre Le Corre <146710476+plecor@users.noreply.github.com> Date: Tue, 3 Dec 2024 16:44:35 +0100 Subject: [PATCH 06/21] Update doc/sphinx-guides/source/admin/harvestclients.rst Co-authored-by: Philip Durbin --- doc/sphinx-guides/source/admin/harvestclients.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/admin/harvestclients.rst b/doc/sphinx-guides/source/admin/harvestclients.rst index 1e45fd06fc8..3c4c0957c2b 100644 --- a/doc/sphinx-guides/source/admin/harvestclients.rst +++ b/doc/sphinx-guides/source/admin/harvestclients.rst @@ -51,4 +51,4 @@ Note that you'll want to run a minimum of Dataverse Software 4.6, optimally 4.18 Harvesting Client Changelog --------------------------- -- As of Dataverse 6.3, the publisher value of harvested datasets is now attributed to the dataset's distributor instead of its producer. This change affects all newly harvested datasets. For more information, see https://github.com/IQSS/dataverse/pull/9013 +- As of Dataverse 6.6, the publisher value of harvested datasets is now attributed to the dataset's distributor instead of its producer. This change affects all newly harvested datasets. For more information, see https://github.com/IQSS/dataverse/pull/9013 From 8b273e8bedebd2930e687a1d783dbea8739adf82 Mon Sep 17 00:00:00 2001 From: Pierre Le Corre <146710476+plecor@users.noreply.github.com> Date: Tue, 3 Dec 2024 16:44:58 +0100 Subject: [PATCH 07/21] Update doc/release-notes/8739-publisher-during-harvesting.md Co-authored-by: Philip Durbin --- doc/release-notes/8739-publisher-during-harvesting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/release-notes/8739-publisher-during-harvesting.md b/doc/release-notes/8739-publisher-during-harvesting.md index 602b2cf34d6..05dcc53ac7d 100644 --- a/doc/release-notes/8739-publisher-during-harvesting.md +++ b/doc/release-notes/8739-publisher-during-harvesting.md @@ -1 +1 @@ -The publisher value of harvested datasets is now attributed to the dataset's distributor instead of its producer. This change affects all newly harvested datasets. For more information, see #8739 \ No newline at end of file +The publisher value of harvested datasets is now attributed to the dataset's distributor instead of its producer. This change affects all newly harvested datasets. For more information, see [the guides](https://dataverse-guide--9013.org.readthedocs.build/en/9013/admin/harvestclients.html#harvesting-client-changelog), #8739, and #9013. \ No newline at end of file From bc33fbfa2cc52353f7a0da0c58a6af0dcb87216f Mon Sep 17 00:00:00 2001 From: Pierre Le Corre <146710476+plecor@users.noreply.github.com> Date: Tue, 3 Dec 2024 16:47:57 +0100 Subject: [PATCH 08/21] Rename migration script --- ...vesting.sql => V6.4.0.1__8739-publisher-during-harvesting.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V6.2.0.2__8739-publisher-during-harvesting.sql => V6.4.0.1__8739-publisher-during-harvesting.sql} (100%) diff --git a/src/main/resources/db/migration/V6.2.0.2__8739-publisher-during-harvesting.sql b/src/main/resources/db/migration/V6.4.0.1__8739-publisher-during-harvesting.sql similarity index 100% rename from src/main/resources/db/migration/V6.2.0.2__8739-publisher-during-harvesting.sql rename to src/main/resources/db/migration/V6.4.0.1__8739-publisher-during-harvesting.sql From 409822ee4399b0d9a8e6f1e9627b01dc237f930a Mon Sep 17 00:00:00 2001 From: stevenferey Date: Wed, 4 Dec 2024 15:04:24 +0100 Subject: [PATCH 09/21] Add Move Dataverse Collection --- .../10304-add-move-dataverse-collection.md | 5 + ...age.java => DashboardDatasetmovePage.java} | 23 +-- .../dashboard/DashboardDataversemovePage.java | 175 ++++++++++++++++++ .../command/impl/MoveDatasetCommand.java | 8 +- src/main/java/propertyFiles/Bundle.properties | 72 ++++--- ...move.xhtml => dashboard-datasetmove.xhtml} | 46 ++--- src/main/webapp/dashboard-dataversemove.xhtml | 140 ++++++++++++++ src/main/webapp/dashboard.xhtml | 17 +- 8 files changed, 413 insertions(+), 73 deletions(-) create mode 100644 doc/release-notes/10304-add-move-dataverse-collection.md rename src/main/java/edu/harvard/iq/dataverse/dashboard/{DashboardDatamovePage.java => DashboardDatasetmovePage.java} (90%) create mode 100644 src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java rename src/main/webapp/{dashboard-datamove.xhtml => dashboard-datasetmove.xhtml} (86%) create mode 100644 src/main/webapp/dashboard-dataversemove.xhtml diff --git a/doc/release-notes/10304-add-move-dataverse-collection.md b/doc/release-notes/10304-add-move-dataverse-collection.md new file mode 100644 index 00000000000..75237743ed7 --- /dev/null +++ b/doc/release-notes/10304-add-move-dataverse-collection.md @@ -0,0 +1,5 @@ +### Move a collection from the dashboard + +It is possible for a Dataverse administrator to move a collection from the Dataverse dashboard. + +For more information, see #10304. \ No newline at end of file diff --git a/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDatamovePage.java b/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDatasetmovePage.java similarity index 90% rename from src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDatamovePage.java rename to src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDatasetmovePage.java index 6fc80312bf5..e3c1a2ad84e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDatamovePage.java +++ b/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDatasetmovePage.java @@ -33,8 +33,8 @@ import jakarta.servlet.http.HttpServletRequest; @ViewScoped -@Named("DashboardDatamovePage") -public class DashboardDatamovePage implements java.io.Serializable { +@Named("DashboardDatasetmovePage") +public class DashboardDatasetmovePage implements java.io.Serializable { @Inject DataverseSession session; @@ -53,7 +53,7 @@ public class DashboardDatamovePage implements java.io.Serializable { @PersistenceContext(unitName = "VDCNet-ejbPU") private EntityManager em; - private static final Logger logger = Logger.getLogger(DashboardDatamovePage.class.getCanonicalName()); + private static final Logger logger = Logger.getLogger(DashboardDatasetmovePage.class.getCanonicalName()); private AuthenticatedUser authUser = null; @@ -122,8 +122,8 @@ public String init() { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, - BundleUtil.getStringFromBundle("dashboard.card.datamove.manage"), - BundleUtil.getStringFromBundle("dashboard.card.datamove.message", Arrays.asList(settingsWrapper.getGuidesBaseUrl(), settingsWrapper.getGuidesVersion())))); + BundleUtil.getStringFromBundle("dashboard.card.datasetmove.manage"), + BundleUtil.getStringFromBundle("dashboard.card.datasetmove.message", Arrays.asList(settingsWrapper.getGuidesBaseUrl(), settingsWrapper.getGuidesVersion())))); return null; } @@ -163,7 +163,7 @@ public void move(){ logger.info("Moved " + dsPersistentId + " from " + srcAlias + " to " + dstAlias); - JsfHelper.addSuccessMessage(BundleUtil.getStringFromBundle("dashboard.card.datamove.message.success", arguments)); + JsfHelper.addSuccessMessage(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.message.success", arguments)); } catch (CommandException e) { logger.log(Level.SEVERE,"Unable to move "+ dsPersistentId + " from " + srcAlias + " to " + dstAlias, e); @@ -172,23 +172,18 @@ public void move(){ String guidesBaseUrl = settingsWrapper.getGuidesBaseUrl(); String version = settingsWrapper.getGuidesVersion(); // Suggest using the API to force the move. - arguments.add(BundleUtil.getStringFromBundle("dashboard.card.datamove.dataset.command.error.unforced.suggestForce", Arrays.asList(guidesBaseUrl, version))); + arguments.add(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.dataset.command.error.unforced.suggestForce", Arrays.asList(guidesBaseUrl, version))); } else { String emptyStringNoDetails = ""; arguments.add(emptyStringNoDetails); } FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, - BundleUtil.getStringFromBundle("dashboard.card.datamove.message.failure.summary"), - BundleUtil.getStringFromBundle("dashboard.card.datamove.message.failure.details", arguments))); + BundleUtil.getStringFromBundle("dashboard.card.datasetmove.message.failure.summary"), + BundleUtil.getStringFromBundle("dashboard.card.datasetmove.message.failure.details", arguments))); } } - public String getDataverseCount() { - long count = em.createQuery("SELECT count(dv) FROM Dataverse dv", Long.class).getSingleResult(); - return NumberFormat.getInstance().format(count); - } - public String getDatasetCount() { long count = em.createQuery("SELECT count(ds) FROM Dataset ds", Long.class).getSingleResult(); return NumberFormat.getInstance().format(count); diff --git a/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java b/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java new file mode 100644 index 00000000000..df821dc953a --- /dev/null +++ b/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java @@ -0,0 +1,175 @@ +package edu.harvard.iq.dataverse.dashboard; + +import edu.harvard.iq.dataverse.Dataset; +import edu.harvard.iq.dataverse.DatasetServiceBean; +import edu.harvard.iq.dataverse.Dataverse; +import edu.harvard.iq.dataverse.DataverseServiceBean; +import edu.harvard.iq.dataverse.DataverseSession; +import edu.harvard.iq.dataverse.EjbDataverseEngine; +import edu.harvard.iq.dataverse.PermissionsWrapper; +import edu.harvard.iq.dataverse.SettingsWrapper; +import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; +import edu.harvard.iq.dataverse.engine.command.DataverseRequest; +import edu.harvard.iq.dataverse.engine.command.exception.CommandException; +import edu.harvard.iq.dataverse.engine.command.exception.UnforcedCommandException; +import edu.harvard.iq.dataverse.engine.command.impl.MoveDatasetCommand; +import edu.harvard.iq.dataverse.engine.command.impl.MoveDataverseCommand; +import edu.harvard.iq.dataverse.util.BundleUtil; +import edu.harvard.iq.dataverse.util.JsfHelper; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import jakarta.ejb.EJB; +import jakarta.faces.application.FacesMessage; +import jakarta.faces.component.UIInput; +import jakarta.faces.context.FacesContext; +import jakarta.faces.view.ViewScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.servlet.http.HttpServletRequest; + +@ViewScoped +@Named("DashboardDataversemovePage") +public class DashboardDataversemovePage implements java.io.Serializable { + + @Inject + DataverseSession session; + @Inject + PermissionsWrapper permissionsWrapper; + @EJB + EjbDataverseEngine commandEngine; + + //@EJB + //DatasetServiceBean datasetService; + @EJB + DataverseServiceBean dataverseService; + @Inject + SettingsWrapper settingsWrapper; + + @PersistenceContext(unitName = "VDCNet-ejbPU") + private EntityManager em; + + private static final Logger logger = Logger.getLogger(DashboardDataversemovePage.class.getCanonicalName()); + + private AuthenticatedUser authUser = null; + + // source dataverse + + public UIInput getSelectedSourceDataverseMenu() { + return selectedSourceDataverseMenu; + } + + public void setSelectedSourceDataverseMenu(UIInput selectedSourceDataverseMenu) { + this.selectedSourceDataverseMenu = selectedSourceDataverseMenu; + } + + UIInput selectedSourceDataverseMenu; + + public Dataverse getSelectedSourceDataverse() { + return selectedSourceDataverse; + } + + public void setSelectedSourceDataverse(Dataverse selectedSourceDataverse) { + this.selectedSourceDataverse = selectedSourceDataverse; + } + + private Dataverse selectedSourceDataverse; + + // destination dataverse + + public UIInput getSelectedDataverseMenu() { + return selectedDataverseMenu; + } + + public void setSelectedDataverseMenu(UIInput selectedDataverseMenu) { + this.selectedDataverseMenu = selectedDataverseMenu; + } + + UIInput selectedDataverseMenu; + + public Dataverse getSelectedDestinationDataverse() { + return selectedDestinationDataverse; + } + + public void setSelectedDestinationDataverse(Dataverse selectedDestinationDataverse) { + this.selectedDestinationDataverse = selectedDestinationDataverse; + } + + private Dataverse selectedDestinationDataverse; + + public List completeSelectedDataverse(String query) { + return dataverseService.filterByAliasQuery(query); + } + + public String init() { + + if ((session.getUser() != null) && (session.getUser().isAuthenticated()) && (session.getUser().isSuperuser())) { + authUser = (AuthenticatedUser) session.getUser(); + // initialize components, if any need it + } else { + return permissionsWrapper.notAuthorized(); + // redirect to login OR give some type of ‘you must be logged in' message + } + + FacesContext.getCurrentInstance().addMessage(null, + new FacesMessage(FacesMessage.SEVERITY_INFO, + BundleUtil.getStringFromBundle("dashboard.card.dataversemove.message.summary"), + BundleUtil.getStringFromBundle("dashboard.card.dataversemove.message.detail", Arrays.asList(settingsWrapper.getGuidesBaseUrl(), settingsWrapper.getGuidesVersion())))); + return null; + } + + public void move(){ + Dataverse dvSource = selectedSourceDataverse; + String srcAlias = dvSource!=null?dvSource.getAlias():null; + + Dataverse target = selectedDestinationDataverse; + String dstAlias = target!=null?target.getAlias():null; + + if (dvSource == null || target == null) { + // Move only works if both inputs are correct + // But if these inputs are required, we should never get here + // Since we never get here, we aren't bothering to move this English to the bundle. + FacesContext.getCurrentInstance().addMessage(null, + new FacesMessage("Please specify all fields")); + return; + } + + // construct arguments for message + List arguments = new ArrayList<>(); + arguments.add(dvSource!=null?dvSource.getName():"-"); + arguments.add(target!=null?target.getName():"-"); + + // copied logic from Dataverse API move + //Command requires Super user - it will be tested by the command + try { + HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); + DataverseRequest dataverseRequest = new DataverseRequest(authUser, httpServletRequest); + commandEngine.submit(new MoveDataverseCommand( + dataverseRequest, dvSource, target, false + )); + + logger.info("Moved " + srcAlias + " to " + dstAlias); + + JsfHelper.addSuccessMessage(BundleUtil.getStringFromBundle("dashboard.card.dataversemove.message.success", arguments)); + } + catch (CommandException e) { + logger.log(Level.SEVERE,"Unable to move "+ srcAlias + " to " + dstAlias, e); + arguments.add(e.getLocalizedMessage()); + FacesContext.getCurrentInstance().addMessage(null, + new FacesMessage(FacesMessage.SEVERITY_ERROR, + BundleUtil.getStringFromBundle("dashboard.card.dataversemove.message.failure.summary"), + BundleUtil.getStringFromBundle("dashboard.card.dataversemove.message.failure.details", arguments))); + } + } + + public String getDataverseCount() { + long count = em.createQuery("SELECT count(dv) FROM Dataverse dv", Long.class).getSingleResult(); + return NumberFormat.getInstance().format(count); + } + +} diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java index bee5dc648b9..9cf1dbc61de 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java @@ -72,13 +72,13 @@ public void executeImpl(CommandContext ctxt) throws CommandException { // validate the move makes sense if (moved.getOwner().equals(destination)) { - throw new IllegalCommandException(BundleUtil.getStringFromBundle("dashboard.card.datamove.dataset.command.error.targetDataverseSameAsOriginalDataverse"), this); + throw new IllegalCommandException(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.dataset.command.error.targetDataverseSameAsOriginalDataverse"), this); } // if dataset is published make sure that its target is published if (moved.isReleased() && !destination.isReleased()){ - throw new IllegalCommandException(BundleUtil.getStringFromBundle("dashboard.card.datamove.dataset.command.error.targetDataverseUnpublishedDatasetPublished", Arrays.asList(destination.getDisplayName())), this); + throw new IllegalCommandException(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.dataset.command.error.targetDataverseUnpublishedDatasetPublished", Arrays.asList(destination.getDisplayName())), this); } //if the datasets guestbook is not contained in the new dataverse then remove it @@ -130,10 +130,10 @@ public void executeImpl(CommandContext ctxt) throws CommandException { if (removeGuestbook || removeLinkDs) { StringBuilder errorString = new StringBuilder(); if (removeGuestbook) { - errorString.append(BundleUtil.getStringFromBundle("dashboard.card.datamove.dataset.command.error.unforced.datasetGuestbookNotInTargetDataverse")); + errorString.append(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.dataset.command.error.unforced.datasetGuestbookNotInTargetDataverse")); } if (removeLinkDs) { - errorString.append(BundleUtil.getStringFromBundle("dashboard.card.datamove.dataset.command.error.unforced.linkedToTargetDataverseOrOneOfItsParents")); + errorString.append(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.dataset.command.error.unforced.linkedToTargetDataverseOrOneOfItsParents")); } throw new UnforcedCommandException(errorString.toString(), this); } diff --git a/src/main/java/propertyFiles/Bundle.properties b/src/main/java/propertyFiles/Bundle.properties index c47356008ff..009d43ae8c1 100644 --- a/src/main/java/propertyFiles/Bundle.properties +++ b/src/main/java/propertyFiles/Bundle.properties @@ -542,6 +542,7 @@ dashboard.card.harvestingserver.sets={0, choice, 0#Sets|1#Set|2#Sets} dashboard.card.harvestingserver.btn.manage=Manage Server dashboard.card.metadataexport.header=Metadata Export dashboard.card.metadataexport.message=Dataset metadata export is only available through the {0} API. Learn more in the {0} {1}API Guide{2}. +dashboard.card.datamove=Data #harvestclients.xhtml harvestclients.title=Manage Harvesting Clients @@ -747,32 +748,51 @@ dashboard.list_users.toggleSuperuser.confirmationText.remove=Are you sure you wa dashboard.list_users.api.auth.invalid_apikey=The API key is invalid. dashboard.list_users.api.auth.not_superuser=Forbidden. You must be a superuser. -#dashboard-datamove.xhtml -dashboard.card.datamove=Data -dashboard.card.datamove.header=Dashboard - Move Data -dashboard.card.datamove.manage=Move Data -dashboard.card.datamove.message=Manage and curate your installation by moving datasets from one host dataverse to another. See also Managing Datasets and Dataverses in the Admin Guide. -dashboard.card.datamove.selectdataset.header=Dataset to Move -dashboard.card.datamove.newdataverse.header=New Host Dataverse -dashboard.card.datamove.dataset.label=Dataset -dashboard.card.datamove.dataverse.label=Dataverse -dashboard.card.datamove.confirm.dialog=Are you sure want to move this dataset? -dashboard.card.datamove.confirm.yes=Yes, Move Data -dashboard.card.datamove.message.success=The dataset "{0}" ({1}) has been successfully moved to {2}. -dashboard.card.datamove.message.failure.summary=Failed to moved dataset -dashboard.card.datamove.message.failure.details=The dataset "{0}" ({1}) could not be moved to {2}. {3}{4} -dashboard.card.datamove.dataverse.placeholder=Enter Dataverse Identifier... -dashboard.card.datamove.dataverse.menu.header=Dataverse Name (Affiliate), Identifier -dashboard.card.datamove.dataverse.menu.invalidMsg=No matches found -dashboard.card.datamove.dataset.placeholder=Enter Dataset Persistent ID, doi:... -dashboard.card.datamove.dataset.menu.header=Dataset Persistent ID, Title, Host Dataverse Identifier -dashboard.card.datamove.dataset.menu.invalidMsg=No matches found -dashboard.card.datamove.dataset.command.error.targetDataverseUnpublishedDatasetPublished=A published dataset may not be moved to an unpublished dataverse. You can retry the move after publishing {0}. -dashboard.card.datamove.dataset.command.error.targetDataverseSameAsOriginalDataverse=This dataset is already in this dataverse. -dashboard.card.datamove.dataset.command.error.unforced.datasetGuestbookNotInTargetDataverse=The guestbook would be removed from this dataset if you moved it because the guestbook is not in the new host dataverse. -dashboard.card.datamove.dataset.command.error.unforced.linkedToTargetDataverseOrOneOfItsParents=This dataset is linked to the new host dataverse or one of its parents. This move would remove the link to this dataset. -dashboard.card.datamove.dataset.command.error.unforced.suggestForce=Forcing this move is currently only available via API. Please see "Move a Dataset" under Managing Datasets and Dataverses in the Admin Guide for details. -dashboard.card.datamove.dataset.command.error.indexingProblem=Dataset could not be moved. Indexing failed. +#dashboard-datasetmove.xhtml +dashboard.card.datasetmove.header=Dashboard - Move Data +dashboard.card.datasetmove.manage=Move Dataset +dashboard.card.datasetmove.message=Manage and curate your installation by moving datasets from one host dataverse to another. See also Managing Datasets and Dataverses in the Admin Guide. +dashboard.card.datasetmove.selectdataset.header=Dataset to Move +dashboard.card.datasetmove.newdataverse.header=New Host Dataverse +dashboard.card.datasetmove.dataset.label=Dataset +dashboard.card.datasetmove.dataverse.label=Dataverse +dashboard.card.datasetmove.confirm.dialog=Are you sure want to move this dataset? +dashboard.card.datasetmove.confirm.yes=Yes, Move Dataset +dashboard.card.datsetamove.message.success=The dataset "{0}" ({1}) has been successfully moved to {2}. +dashboard.card.datasetmove.message.failure.summary=Failed to moved dataset +dashboard.card.datasetmove.message.failure.details=The dataset "{0}" ({1}) could not be moved to {2}. {3}{4} +dashboard.card.datasetmove.dataverse.placeholder=Enter Dataverse Identifier... +dashboard.card.datasetmove.dataverse.menu.header=Dataverse Name (Affiliate), Identifier +dashboard.card.datasetmove.dataverse.menu.invalidMsg=No matches found +dashboard.card.datasetmove.dataset.placeholder=Enter Dataset Persistent ID, doi:... +dashboard.card.datasetmove.dataset.menu.header=Dataset Persistent ID, Title, Host Dataverse Identifier +dashboard.card.datasetmove.dataset.menu.invalidMsg=No matches found +dashboard.card.datasetmove.dataset.command.error.targetDataverseUnpublishedDatasetPublished=A published dataset may not be moved to an unpublished dataverse. You can retry the move after publishing {0}. +dashboard.card.datasetmove.dataset.command.error.targetDataverseSameAsOriginalDataverse=This dataset is already in this dataverse. +dashboard.card.datasetmove.dataset.command.error.unforced.datasetGuestbookNotInTargetDataverse=The guestbook would be removed from this dataset if you moved it because the guestbook is not in the new host dataverse. +dashboard.card.datasetmove.dataset.command.error.unforced.linkedToTargetDataverseOrOneOfItsParents=This dataset is linked to the new host dataverse or one of its parents. This move would remove the link to this dataset. +dashboard.card.datasetmove.dataset.command.error.unforced.suggestForce=Forcing this move is currently only available via API. Please see "Move a Dataset" under Managing Datasets and Dataverses in the Admin Guide for details. + +#dashboard-dataversemove.xhtml +dashboard.card.dataversemove.header=Dashboard - Move Data +dashboard.card.dataversemove.manage=Move Collection +dashboard.card.dataversemove.message.summary=Move Dataverse Collection +dashboard.card.dataversemove.message.detail=Manage and curate your installation by moving a dataverse collection from one host dataverse collection to another. See also Managing Datasets and Dataverses in the Admin Guide. +dashboard.card.dataversemove.selectdataverse.header=Dataverse to Move +dashboard.card.dataversemove.newdataverse.header=New Host Dataverse +dashboard.card.dataversemove.dataverse.label=Dataverse +dashboard.card.dataversemove.confirm.dialog=Are you sure want to move this dataverse? +dashboard.card.dataversemove.confirm.yes=Yes, Move Dataverse +dashboard.card.dataversemove.message.success=The dataverse "{0}" has been successfully moved to {1}. +dashboard.card.dataversemove.message.failure.summary=Failed to moved dataverse +dashboard.card.dataversemove.message.failure.details=The dataverse "{0}" could not be moved to {1}. {2} +dashboard.card.dataversemove.dataverse.placeholder=Enter Dataverse Identifier... +dashboard.card.dataversemove.dataverse.menu.header=Dataverse Name (Affiliate), Identifier +dashboard.card.dataversemove.dataverse.menu.invalidMsg=No matches found +dashboard.card.dataversemove.dataset.command.error.targetDataverseUnpublishedDatasetPublished=A published dataset may not be moved to an unpublished dataverse. You can retry the move after publishing {0}. +dashboard.card.dataversemove.dataset.command.error.targetDataverseSameAsOriginalDataverse=This dataset is already in this dataverse. +dashboard.card.dataversemove.dataset.command.error.unforced.datasetGuestbookNotInTargetDataverse=The guestbook would be removed from this dataset if you moved it because the guestbook is not in the new host dataverse. +dashboard.card.dataversemove.dataset.command.error.unforced.linkedToTargetDataverseOrOneOfItsParents=This dataset is linked to the new host dataverse or one of its parents. This move would remove the link to this dataset. #MailServiceBean.java notification.email.create.dataverse.subject={0}: Your dataverse has been created diff --git a/src/main/webapp/dashboard-datamove.xhtml b/src/main/webapp/dashboard-datasetmove.xhtml similarity index 86% rename from src/main/webapp/dashboard-datamove.xhtml rename to src/main/webapp/dashboard-datasetmove.xhtml index 7f8365c9be3..96d9d401412 100644 --- a/src/main/webapp/dashboard-datamove.xhtml +++ b/src/main/webapp/dashboard-datasetmove.xhtml @@ -13,40 +13,40 @@ - + - + - +
-
#{bundle['dashboard.card.datamove.selectdataset.header']}
+
#{bundle['dashboard.card.datasetmove.selectdataset.header']}
@@ -70,26 +70,26 @@
-
#{bundle['dashboard.card.datamove.newdataverse.header']}
+
#{bundle['dashboard.card.datasetmove.newdataverse.header']}
@@ -127,12 +127,12 @@
- -

#{bundle['dashboard.card.datamove.confirm.dialog']}

+ +

#{bundle['dashboard.card.datasetmove.confirm.dialog']}

- +
+
+ + + + + + diff --git a/src/main/webapp/dashboard.xhtml b/src/main/webapp/dashboard.xhtml index 5a72b52937b..f5b0536509d 100644 --- a/src/main/webapp/dashboard.xhtml +++ b/src/main/webapp/dashboard.xhtml @@ -129,18 +129,23 @@

#{bundle['dashboard.card.datamove']}

- -

#{bundle['dataverses']}

+ +

#{bundle['datasets']}

- -

#{bundle['datasets']}

+ +

#{bundle['dataverses']}

- From 2c847be97bf6f25a187857585f3184a6451be3fd Mon Sep 17 00:00:00 2001 From: stevenferey Date: Wed, 4 Dec 2024 15:42:04 +0100 Subject: [PATCH 10/21] remove unused import --- .../iq/dataverse/dashboard/DashboardDataversemovePage.java | 7 ------- .../dataverse/engine/command/impl/MoveDatasetCommand.java | 2 -- .../engine/command/impl/MoveDataverseCommand.java | 3 --- 3 files changed, 12 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java b/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java index df821dc953a..152d38c25e7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java +++ b/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java @@ -1,7 +1,5 @@ package edu.harvard.iq.dataverse.dashboard; -import edu.harvard.iq.dataverse.Dataset; -import edu.harvard.iq.dataverse.DatasetServiceBean; import edu.harvard.iq.dataverse.Dataverse; import edu.harvard.iq.dataverse.DataverseServiceBean; import edu.harvard.iq.dataverse.DataverseSession; @@ -11,8 +9,6 @@ import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; import edu.harvard.iq.dataverse.engine.command.DataverseRequest; import edu.harvard.iq.dataverse.engine.command.exception.CommandException; -import edu.harvard.iq.dataverse.engine.command.exception.UnforcedCommandException; -import edu.harvard.iq.dataverse.engine.command.impl.MoveDatasetCommand; import edu.harvard.iq.dataverse.engine.command.impl.MoveDataverseCommand; import edu.harvard.iq.dataverse.util.BundleUtil; import edu.harvard.iq.dataverse.util.JsfHelper; @@ -43,9 +39,6 @@ public class DashboardDataversemovePage implements java.io.Serializable { PermissionsWrapper permissionsWrapper; @EJB EjbDataverseEngine commandEngine; - - //@EJB - //DatasetServiceBean datasetService; @EJB DataverseServiceBean dataverseService; @Inject diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java index 9cf1dbc61de..b6a2793b8e0 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java @@ -10,7 +10,6 @@ import edu.harvard.iq.dataverse.DatasetLock; import edu.harvard.iq.dataverse.Dataverse; import edu.harvard.iq.dataverse.Guestbook; -import edu.harvard.iq.dataverse.authorization.DataverseRole; import edu.harvard.iq.dataverse.authorization.Permission; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; import edu.harvard.iq.dataverse.engine.command.AbstractVoidCommand; @@ -27,7 +26,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.logging.Level; import java.util.logging.Logger; /** diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDataverseCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDataverseCommand.java index ea38f5a7af7..c8b59b1818a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDataverseCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDataverseCommand.java @@ -10,7 +10,6 @@ import edu.harvard.iq.dataverse.Template; import edu.harvard.iq.dataverse.authorization.Permission; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; -import edu.harvard.iq.dataverse.batch.util.LoggingUtil; import edu.harvard.iq.dataverse.engine.command.AbstractVoidCommand; import edu.harvard.iq.dataverse.engine.command.CommandContext; import edu.harvard.iq.dataverse.engine.command.DataverseRequest; @@ -20,14 +19,12 @@ import edu.harvard.iq.dataverse.engine.command.exception.IllegalCommandException; import edu.harvard.iq.dataverse.engine.command.exception.PermissionException; import edu.harvard.iq.dataverse.util.BundleUtil; -import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.logging.Logger; -import org.apache.solr.client.solrj.SolrServerException; /** * A command to move a {@link Dataverse} between two {@link Dataverse}s. From b94d53fe1a5fe7a861fb0b5c4b180d76625b40dd Mon Sep 17 00:00:00 2001 From: Pierre Le Corre <146710476+plecor@users.noreply.github.com> Date: Wed, 4 Dec 2024 17:32:54 +0100 Subject: [PATCH 11/21] Improve release note --- doc/release-notes/8739-publisher-during-harvesting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/release-notes/8739-publisher-during-harvesting.md b/doc/release-notes/8739-publisher-during-harvesting.md index 05dcc53ac7d..3e1555396c0 100644 --- a/doc/release-notes/8739-publisher-during-harvesting.md +++ b/doc/release-notes/8739-publisher-during-harvesting.md @@ -1 +1 @@ -The publisher value of harvested datasets is now attributed to the dataset's distributor instead of its producer. This change affects all newly harvested datasets. For more information, see [the guides](https://dataverse-guide--9013.org.readthedocs.build/en/9013/admin/harvestclients.html#harvesting-client-changelog), #8739, and #9013. \ No newline at end of file +The publisher value of harvested datasets is now attributed to the dataset's distributor instead of its producer. This improves the citation associated with these datasets, but the change only affects newly harvested datasets. All datasets should be re-harvested if you wish to pick up this change on already harvested datasets. For more information, see [the guides](https://dataverse-guide--9013.org.readthedocs.build/en/9013/admin/harvestclients.html#harvesting-client-changelog), #8739, and #9013. \ No newline at end of file From b23d82b00d9797779d6771c6061cf1c1deec1cb9 Mon Sep 17 00:00:00 2001 From: Pierre Le Corre <146710476+plecor@users.noreply.github.com> Date: Thu, 5 Dec 2024 09:53:25 +0100 Subject: [PATCH 12/21] Rename migration file --- ...6.4.0.1__8739-publisher-during-harvesting.sql => V6.5.0.1.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V6.4.0.1__8739-publisher-during-harvesting.sql => V6.5.0.1.sql} (100%) diff --git a/src/main/resources/db/migration/V6.4.0.1__8739-publisher-during-harvesting.sql b/src/main/resources/db/migration/V6.5.0.1.sql similarity index 100% rename from src/main/resources/db/migration/V6.4.0.1__8739-publisher-during-harvesting.sql rename to src/main/resources/db/migration/V6.5.0.1.sql From c8499ba9553ac46cf3adc56d1b9e56f0c781d30f Mon Sep 17 00:00:00 2001 From: Pierre Le Corre <146710476+plecor@users.noreply.github.com> Date: Mon, 9 Dec 2024 16:52:09 +0100 Subject: [PATCH 13/21] Applies sql change to upsert script --- .../db/migration/afterMigrate__1-7256-upsert-referenceData.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/db/migration/afterMigrate__1-7256-upsert-referenceData.sql b/src/main/resources/db/migration/afterMigrate__1-7256-upsert-referenceData.sql index 07e9b2c6266..f63fedba02f 100644 --- a/src/main/resources/db/migration/afterMigrate__1-7256-upsert-referenceData.sql +++ b/src/main/resources/db/migration/afterMigrate__1-7256-upsert-referenceData.sql @@ -31,7 +31,7 @@ INSERT INTO foreignmetadatafieldmapping (id, foreignfieldxpath, datasetfieldname (15, 'affiliation', 'authorAffiliation', TRUE, 3, 1 ), (16, ':contributor', 'contributorName', FALSE, NULL, 1 ), (17, 'type', 'contributorType', TRUE, 16, 1 ), - (18, ':publisher', 'producerName', FALSE, NULL, 1 ), + (18, ':publisher', 'distributorName', FALSE, NULL, 1 ), (19, ':language', 'language', FALSE, NULL, 1 ) ON CONFLICT DO NOTHING; From 2415ed711ae68428a61e09d3751ed18d586b408e Mon Sep 17 00:00:00 2001 From: Pierre Le Corre <146710476+plecor@users.noreply.github.com> Date: Tue, 7 Jan 2025 08:32:15 +0100 Subject: [PATCH 14/21] Add comment to sql file --- src/main/resources/db/migration/V6.5.0.2.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/db/migration/V6.5.0.2.sql b/src/main/resources/db/migration/V6.5.0.2.sql index c4dbd901181..e2814139e3d 100644 --- a/src/main/resources/db/migration/V6.5.0.2.sql +++ b/src/main/resources/db/migration/V6.5.0.2.sql @@ -1 +1,2 @@ +-- #8739 map publisher tag to distributorName when harvesting update foreignmetadatafieldmapping set datasetfieldname = 'distributorName' where foreignfieldxpath = ':publisher'; From b1db18e6ddfe480af331788f7131053919948739 Mon Sep 17 00:00:00 2001 From: Pierre Le Corre <146710476+plecor@users.noreply.github.com> Date: Wed, 8 Jan 2025 08:29:06 +0100 Subject: [PATCH 15/21] Update Dataverse version in changelog Co-authored-by: Omer Fahim --- doc/sphinx-guides/source/admin/harvestclients.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/admin/harvestclients.rst b/doc/sphinx-guides/source/admin/harvestclients.rst index 41348cc9774..38a00d6921c 100644 --- a/doc/sphinx-guides/source/admin/harvestclients.rst +++ b/doc/sphinx-guides/source/admin/harvestclients.rst @@ -51,7 +51,7 @@ Note that you'll want to run a minimum of Dataverse Software 4.6, optimally 4.18 Harvesting Client Changelog --------------------------- -- As of Dataverse 6.6, the publisher value of harvested datasets is now attributed to the dataset's distributor instead of its producer. This change affects all newly harvested datasets. For more information, see https://github.com/IQSS/dataverse/pull/9013 +- As of Dataverse 6.5, the publisher value of harvested datasets is now attributed to the dataset's distributor instead of its producer. This change affects all newly harvested datasets. For more information, see https://github.com/IQSS/dataverse/pull/9013 Harvesting Non-OAI-PMH ~~~~~~~~~~~~~~~~~~~~~~ From c9ddbca8f81311c8beaf6a68608e46b158249e4f Mon Sep 17 00:00:00 2001 From: stevenferey Date: Wed, 8 Jan 2025 17:08:19 +0100 Subject: [PATCH 16/21] refactorings and improvements --- .../10304-add-move-dataverse-collection.md | 2 +- .../edu/harvard/iq/dataverse/Dataset.java | 2 + .../iq/dataverse/DatasetServiceBean.java | 8 ++ .../edu/harvard/iq/dataverse/Dataverse.java | 3 +- .../iq/dataverse/DataverseServiceBean.java | 8 ++ ...age.java => DashboardMoveDatasetPage.java} | 37 ++++----- ...e.java => DashboardMoveDataversePage.java} | 31 +++---- .../command/impl/MoveDatasetCommand.java | 8 +- src/main/java/propertyFiles/Bundle.properties | 82 +++++++++---------- src/main/webapp/dashboard-datasetmove.xhtml | 58 ++++++------- src/main/webapp/dashboard-dataversemove.xhtml | 46 +++++------ src/main/webapp/dashboard.xhtml | 10 +-- 12 files changed, 150 insertions(+), 145 deletions(-) rename src/main/java/edu/harvard/iq/dataverse/dashboard/{DashboardDatasetmovePage.java => DashboardMoveDatasetPage.java} (81%) rename src/main/java/edu/harvard/iq/dataverse/dashboard/{DashboardDataversemovePage.java => DashboardMoveDataversePage.java} (82%) diff --git a/doc/release-notes/10304-add-move-dataverse-collection.md b/doc/release-notes/10304-add-move-dataverse-collection.md index 75237743ed7..1ddeb526c61 100644 --- a/doc/release-notes/10304-add-move-dataverse-collection.md +++ b/doc/release-notes/10304-add-move-dataverse-collection.md @@ -1,5 +1,5 @@ ### Move a collection from the dashboard -It is possible for a Dataverse administrator to move a collection from the Dataverse dashboard. +In addition to the api [Move a Dataverse Collection](https://guides.dataverse.org/en/latest/admin/dataverses-datasets.html#move-a-dataverse-collection), it is now possible for a Dataverse administrator to move a collection from the Dataverse dashboard. For more information, see #10304. \ No newline at end of file diff --git a/src/main/java/edu/harvard/iq/dataverse/Dataset.java b/src/main/java/edu/harvard/iq/dataverse/Dataset.java index 78579b1de21..79c64d03d60 100644 --- a/src/main/java/edu/harvard/iq/dataverse/Dataset.java +++ b/src/main/java/edu/harvard/iq/dataverse/Dataset.java @@ -68,6 +68,8 @@ query = "SELECT o FROM Dataset o WHERE o.creator.id=:creatorId"), @NamedQuery(name = "Dataset.findByReleaseUserId", query = "SELECT o FROM Dataset o WHERE o.releaseUser.id=:releaseUserId"), + @NamedQuery(name = "Dataset.countAll", + query = "SELECT COUNT(ds) FROM Dataset ds") }) /* diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java index e519614ba55..9a8c43668cb 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java @@ -1092,4 +1092,12 @@ public List getVersionStates(long id) { } } + /** + * Returns the total number of Datasets. + * @return the number of datasets in the database + */ + public long getDatasetCount() { + return em.createNamedQuery("Dataset.countAll", Long.class).getSingleResult(); + } + } diff --git a/src/main/java/edu/harvard/iq/dataverse/Dataverse.java b/src/main/java/edu/harvard/iq/dataverse/Dataverse.java index 1f11725e581..0ed1fb5c9d7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/Dataverse.java +++ b/src/main/java/edu/harvard/iq/dataverse/Dataverse.java @@ -54,7 +54,8 @@ @NamedQuery(name = "Dataverse.findByReleaseUserId", query="select object(o) from Dataverse as o where o.releaseUser.id =:releaseUserId order by o.name"), @NamedQuery(name = "Dataverse.filterByAlias", query="SELECT dv FROM Dataverse dv WHERE LOWER(dv.alias) LIKE :alias order by dv.alias"), @NamedQuery(name = "Dataverse.filterByAliasNameAffiliation", query="SELECT dv FROM Dataverse dv WHERE (LOWER(dv.alias) LIKE :alias) OR (LOWER(dv.name) LIKE :name) OR (LOWER(dv.affiliation) LIKE :affiliation) order by dv.alias"), - @NamedQuery(name = "Dataverse.filterByName", query="SELECT dv FROM Dataverse dv WHERE LOWER(dv.name) LIKE :name order by dv.alias") + @NamedQuery(name = "Dataverse.filterByName", query="SELECT dv FROM Dataverse dv WHERE LOWER(dv.name) LIKE :name order by dv.alias"), + @NamedQuery(name = "Dataverse.countAll", query = "SELECT COUNT(dv) FROM Dataverse dv") }) @Entity @Table(indexes = {@Index(columnList="defaultcontributorrole_id") diff --git a/src/main/java/edu/harvard/iq/dataverse/DataverseServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DataverseServiceBean.java index 91b15f77111..c407aeb294f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DataverseServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DataverseServiceBean.java @@ -1219,4 +1219,12 @@ public void disableStorageQuota(StorageQuota storageQuota) { em.flush(); } } + + /** + * Returns the total number of Dataverses + * @return the number of dataverse in the database + */ + public long getDataverseCount() { + return em.createNamedQuery("Dataverse.countAll", Long.class).getSingleResult(); + } } diff --git a/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDatasetmovePage.java b/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardMoveDatasetPage.java similarity index 81% rename from src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDatasetmovePage.java rename to src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardMoveDatasetPage.java index e3c1a2ad84e..b1333b02a46 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDatasetmovePage.java +++ b/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardMoveDatasetPage.java @@ -28,13 +28,11 @@ import jakarta.faces.view.ViewScoped; import jakarta.inject.Inject; import jakarta.inject.Named; -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; import jakarta.servlet.http.HttpServletRequest; @ViewScoped -@Named("DashboardDatasetmovePage") -public class DashboardDatasetmovePage implements java.io.Serializable { +@Named("DashboardMoveDatasetPage") +public class DashboardMoveDatasetPage implements java.io.Serializable { @Inject DataverseSession session; @@ -49,11 +47,8 @@ public class DashboardDatasetmovePage implements java.io.Serializable { DataverseServiceBean dataverseService; @Inject SettingsWrapper settingsWrapper; - - @PersistenceContext(unitName = "VDCNet-ejbPU") - private EntityManager em; - private static final Logger logger = Logger.getLogger(DashboardDatasetmovePage.class.getCanonicalName()); + private static final Logger logger = Logger.getLogger(DashboardMoveDatasetPage.class.getCanonicalName()); private AuthenticatedUser authUser = null; @@ -122,18 +117,18 @@ public String init() { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, - BundleUtil.getStringFromBundle("dashboard.card.datasetmove.manage"), - BundleUtil.getStringFromBundle("dashboard.card.datasetmove.message", Arrays.asList(settingsWrapper.getGuidesBaseUrl(), settingsWrapper.getGuidesVersion())))); + BundleUtil.getStringFromBundle("dashboard.card.move.dataset.manage"), + BundleUtil.getStringFromBundle("dashboard.move.dataset.message", Arrays.asList(settingsWrapper.getGuidesBaseUrl(), settingsWrapper.getGuidesVersion())))); return null; } public void move(){ Dataset ds = selectedSourceDataset; - String dsPersistentId = ds!=null?ds.getGlobalId().asString():null; - String srcAlias = ds!=null?ds.getOwner().getAlias():null; + String dsPersistentId = ds != null ? ds.getGlobalId().asString() : null; + String srcAlias = ds != null ? ds.getOwner().getAlias() : null; Dataverse target = selectedDestinationDataverse; - String dstAlias = target!=null?target.getAlias():null; + String dstAlias = target != null ? target.getAlias() : null; if (ds == null || target == null) { // Move only works if both inputs are correct @@ -148,9 +143,9 @@ public void move(){ // construct arguments for message List arguments = new ArrayList<>(); - arguments.add(ds!=null?ds.getDisplayName():"-"); - arguments.add(dsPersistentId!=null?dsPersistentId:"-"); - arguments.add(target!=null?target.getName():"-"); + arguments.add(ds != null ? ds.getDisplayName() : "-"); + arguments.add(dsPersistentId != null ? dsPersistentId : "-"); + arguments.add(target != null ? target.getName() : "-"); // copied logic from Datasets API move //Command requires Super user - it will be tested by the command @@ -163,7 +158,7 @@ public void move(){ logger.info("Moved " + dsPersistentId + " from " + srcAlias + " to " + dstAlias); - JsfHelper.addSuccessMessage(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.message.success", arguments)); + JsfHelper.addSuccessMessage(BundleUtil.getStringFromBundle("dashboard.move.dataset.message.success", arguments)); } catch (CommandException e) { logger.log(Level.SEVERE,"Unable to move "+ dsPersistentId + " from " + srcAlias + " to " + dstAlias, e); @@ -172,20 +167,20 @@ public void move(){ String guidesBaseUrl = settingsWrapper.getGuidesBaseUrl(); String version = settingsWrapper.getGuidesVersion(); // Suggest using the API to force the move. - arguments.add(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.dataset.command.error.unforced.suggestForce", Arrays.asList(guidesBaseUrl, version))); + arguments.add(BundleUtil.getStringFromBundle("dashboard.move.dataset.command.error.unforced.suggestForce", Arrays.asList(guidesBaseUrl, version))); } else { String emptyStringNoDetails = ""; arguments.add(emptyStringNoDetails); } FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, - BundleUtil.getStringFromBundle("dashboard.card.datasetmove.message.failure.summary"), - BundleUtil.getStringFromBundle("dashboard.card.datasetmove.message.failure.details", arguments))); + BundleUtil.getStringFromBundle("dashboard.move.dataset.message.failure.summary"), + BundleUtil.getStringFromBundle("dashboard.move.dataset.message.failure.details", arguments))); } } public String getDatasetCount() { - long count = em.createQuery("SELECT count(ds) FROM Dataset ds", Long.class).getSingleResult(); + long count = datasetService.getDatasetCount(); return NumberFormat.getInstance().format(count); } diff --git a/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java b/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardMoveDataversePage.java similarity index 82% rename from src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java rename to src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardMoveDataversePage.java index 152d38c25e7..ad67379cf69 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardDataversemovePage.java +++ b/src/main/java/edu/harvard/iq/dataverse/dashboard/DashboardMoveDataversePage.java @@ -25,13 +25,11 @@ import jakarta.faces.view.ViewScoped; import jakarta.inject.Inject; import jakarta.inject.Named; -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; import jakarta.servlet.http.HttpServletRequest; @ViewScoped -@Named("DashboardDataversemovePage") -public class DashboardDataversemovePage implements java.io.Serializable { +@Named("DashboardMoveDataversePage") +public class DashboardMoveDataversePage implements java.io.Serializable { @Inject DataverseSession session; @@ -43,11 +41,8 @@ public class DashboardDataversemovePage implements java.io.Serializable { DataverseServiceBean dataverseService; @Inject SettingsWrapper settingsWrapper; - - @PersistenceContext(unitName = "VDCNet-ejbPU") - private EntityManager em; - private static final Logger logger = Logger.getLogger(DashboardDataversemovePage.class.getCanonicalName()); + private static final Logger logger = Logger.getLogger(DashboardMoveDataversePage.class.getCanonicalName()); private AuthenticatedUser authUser = null; @@ -111,17 +106,17 @@ public String init() { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, - BundleUtil.getStringFromBundle("dashboard.card.dataversemove.message.summary"), - BundleUtil.getStringFromBundle("dashboard.card.dataversemove.message.detail", Arrays.asList(settingsWrapper.getGuidesBaseUrl(), settingsWrapper.getGuidesVersion())))); + BundleUtil.getStringFromBundle("dashboard.card.move.dataverse.message.summary"), + BundleUtil.getStringFromBundle("dashboard.card.move.dataverse.message.detail", Arrays.asList(settingsWrapper.getGuidesBaseUrl(), settingsWrapper.getGuidesVersion())))); return null; } public void move(){ Dataverse dvSource = selectedSourceDataverse; - String srcAlias = dvSource!=null?dvSource.getAlias():null; + String srcAlias = dvSource != null ? dvSource.getAlias() : null; Dataverse target = selectedDestinationDataverse; - String dstAlias = target!=null?target.getAlias():null; + String dstAlias = target !=null ? target.getAlias() : null; if (dvSource == null || target == null) { // Move only works if both inputs are correct @@ -134,8 +129,8 @@ public void move(){ // construct arguments for message List arguments = new ArrayList<>(); - arguments.add(dvSource!=null?dvSource.getName():"-"); - arguments.add(target!=null?target.getName():"-"); + arguments.add(dvSource !=null ? dvSource.getName() : "-"); + arguments.add(target != null ? target.getName() : "-"); // copied logic from Dataverse API move //Command requires Super user - it will be tested by the command @@ -148,20 +143,20 @@ public void move(){ logger.info("Moved " + srcAlias + " to " + dstAlias); - JsfHelper.addSuccessMessage(BundleUtil.getStringFromBundle("dashboard.card.dataversemove.message.success", arguments)); + JsfHelper.addSuccessMessage(BundleUtil.getStringFromBundle("dashboard.card.move.dataverse.message.success", arguments)); } catch (CommandException e) { logger.log(Level.SEVERE,"Unable to move "+ srcAlias + " to " + dstAlias, e); arguments.add(e.getLocalizedMessage()); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, - BundleUtil.getStringFromBundle("dashboard.card.dataversemove.message.failure.summary"), - BundleUtil.getStringFromBundle("dashboard.card.dataversemove.message.failure.details", arguments))); + BundleUtil.getStringFromBundle("dashboard.card.move.dataverse.message.failure.summary"), + BundleUtil.getStringFromBundle("dashboard.card.move.dataverse.message.failure.details", arguments))); } } public String getDataverseCount() { - long count = em.createQuery("SELECT count(dv) FROM Dataverse dv", Long.class).getSingleResult(); + long count = dataverseService.getDataverseCount(); return NumberFormat.getInstance().format(count); } diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java index b6a2793b8e0..1c3a62ec6de 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommand.java @@ -70,13 +70,13 @@ public void executeImpl(CommandContext ctxt) throws CommandException { // validate the move makes sense if (moved.getOwner().equals(destination)) { - throw new IllegalCommandException(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.dataset.command.error.targetDataverseSameAsOriginalDataverse"), this); + throw new IllegalCommandException(BundleUtil.getStringFromBundle("dashboard.move.dataset.command.error.targetDataverseSameAsOriginalDataverse"), this); } // if dataset is published make sure that its target is published if (moved.isReleased() && !destination.isReleased()){ - throw new IllegalCommandException(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.dataset.command.error.targetDataverseUnpublishedDatasetPublished", Arrays.asList(destination.getDisplayName())), this); + throw new IllegalCommandException(BundleUtil.getStringFromBundle("dashboard.move.dataset.command.error.targetDataverseUnpublishedDatasetPublished", Arrays.asList(destination.getDisplayName())), this); } //if the datasets guestbook is not contained in the new dataverse then remove it @@ -128,10 +128,10 @@ public void executeImpl(CommandContext ctxt) throws CommandException { if (removeGuestbook || removeLinkDs) { StringBuilder errorString = new StringBuilder(); if (removeGuestbook) { - errorString.append(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.dataset.command.error.unforced.datasetGuestbookNotInTargetDataverse")); + errorString.append(BundleUtil.getStringFromBundle("dashboard.move.dataset.command.error.unforced.datasetGuestbookNotInTargetDataverse")); } if (removeLinkDs) { - errorString.append(BundleUtil.getStringFromBundle("dashboard.card.datasetmove.dataset.command.error.unforced.linkedToTargetDataverseOrOneOfItsParents")); + errorString.append(BundleUtil.getStringFromBundle("dashboard.move.dataset.command.error.unforced.linkedToTargetDataverseOrOneOfItsParents")); } throw new UnforcedCommandException(errorString.toString(), this); } diff --git a/src/main/java/propertyFiles/Bundle.properties b/src/main/java/propertyFiles/Bundle.properties index 009d43ae8c1..c0479c78426 100644 --- a/src/main/java/propertyFiles/Bundle.properties +++ b/src/main/java/propertyFiles/Bundle.properties @@ -542,7 +542,9 @@ dashboard.card.harvestingserver.sets={0, choice, 0#Sets|1#Set|2#Sets} dashboard.card.harvestingserver.btn.manage=Manage Server dashboard.card.metadataexport.header=Metadata Export dashboard.card.metadataexport.message=Dataset metadata export is only available through the {0} API. Learn more in the {0} {1}API Guide{2}. -dashboard.card.datamove=Data +dashboard.card.move.data=Data +dashboard.card.move.dataset.manage=Move Dataset +dashboard.card.move.dataverse.manage=Move Collection #harvestclients.xhtml harvestclients.title=Manage Harvesting Clients @@ -749,50 +751,44 @@ dashboard.list_users.api.auth.invalid_apikey=The API key is invalid. dashboard.list_users.api.auth.not_superuser=Forbidden. You must be a superuser. #dashboard-datasetmove.xhtml -dashboard.card.datasetmove.header=Dashboard - Move Data -dashboard.card.datasetmove.manage=Move Dataset -dashboard.card.datasetmove.message=Manage and curate your installation by moving datasets from one host dataverse to another. See also Managing Datasets and Dataverses in the Admin Guide. -dashboard.card.datasetmove.selectdataset.header=Dataset to Move -dashboard.card.datasetmove.newdataverse.header=New Host Dataverse -dashboard.card.datasetmove.dataset.label=Dataset -dashboard.card.datasetmove.dataverse.label=Dataverse -dashboard.card.datasetmove.confirm.dialog=Are you sure want to move this dataset? -dashboard.card.datasetmove.confirm.yes=Yes, Move Dataset -dashboard.card.datsetamove.message.success=The dataset "{0}" ({1}) has been successfully moved to {2}. -dashboard.card.datasetmove.message.failure.summary=Failed to moved dataset -dashboard.card.datasetmove.message.failure.details=The dataset "{0}" ({1}) could not be moved to {2}. {3}{4} -dashboard.card.datasetmove.dataverse.placeholder=Enter Dataverse Identifier... -dashboard.card.datasetmove.dataverse.menu.header=Dataverse Name (Affiliate), Identifier -dashboard.card.datasetmove.dataverse.menu.invalidMsg=No matches found -dashboard.card.datasetmove.dataset.placeholder=Enter Dataset Persistent ID, doi:... -dashboard.card.datasetmove.dataset.menu.header=Dataset Persistent ID, Title, Host Dataverse Identifier -dashboard.card.datasetmove.dataset.menu.invalidMsg=No matches found -dashboard.card.datasetmove.dataset.command.error.targetDataverseUnpublishedDatasetPublished=A published dataset may not be moved to an unpublished dataverse. You can retry the move after publishing {0}. -dashboard.card.datasetmove.dataset.command.error.targetDataverseSameAsOriginalDataverse=This dataset is already in this dataverse. -dashboard.card.datasetmove.dataset.command.error.unforced.datasetGuestbookNotInTargetDataverse=The guestbook would be removed from this dataset if you moved it because the guestbook is not in the new host dataverse. -dashboard.card.datasetmove.dataset.command.error.unforced.linkedToTargetDataverseOrOneOfItsParents=This dataset is linked to the new host dataverse or one of its parents. This move would remove the link to this dataset. -dashboard.card.datasetmove.dataset.command.error.unforced.suggestForce=Forcing this move is currently only available via API. Please see "Move a Dataset" under Managing Datasets and Dataverses in the Admin Guide for details. +dashboard.move.dataset.header=Dashboard - Move Data +dashboard.move.dataset.message=Manage and curate your installation by moving datasets from one host dataverse to another. See also Managing Datasets and Dataverses in the Admin Guide. +dashboard.move.dataset.selectdataset.header=Dataset to Move +dashboard.move.dataset.newdataverse.header=New Host Dataverse +dashboard.move.dataset.dataset.label=Dataset +dashboard.move.dataset.dataverse.label=Dataverse +dashboard.move.dataset.confirm.dialog=Are you sure want to move this dataset? +dashboard.move.dataset.confirm.yes=Yes, Move Dataset +dashboard.move.dataset.message.success=The dataset "{0}" ({1}) has been successfully moved to {2}. +dashboard.move.dataset.message.failure.summary=Failed to moved dataset +dashboard.move.dataset.message.failure.details=The dataset "{0}" ({1}) could not be moved to {2}. {3}{4} +dashboard.move.dataset.dataverse.placeholder=Enter Dataverse Identifier... +dashboard.move.dataset.dataverse.menu.header=Dataverse Name (Affiliate), Identifier +dashboard.move.dataset.dataverse.menu.invalidMsg=No matches found +dashboard.move.dataset.placeholder=Enter Dataset Persistent ID, doi:... +dashboard.move.dataset.menu.header=Dataset Persistent ID, Title, Host Dataverse Identifier +dashboard.move.dataset.menu.invalidMsg=No matches found +dashboard.move.dataset.command.error.targetDataverseUnpublishedDatasetPublished=A published dataset may not be moved to an unpublished dataverse. You can retry the move after publishing {0}. +dashboard.move.dataset.command.error.targetDataverseSameAsOriginalDataverse=This dataset is already in this dataverse. +dashboard.move.dataset.command.error.unforced.datasetGuestbookNotInTargetDataverse=The guestbook would be removed from this dataset if you moved it because the guestbook is not in the new host dataverse. +dashboard.move.dataset.command.error.unforced.linkedToTargetDataverseOrOneOfItsParents=This dataset is linked to the new host dataverse or one of its parents. This move would remove the link to this dataset. +dashboard.move.dataset.command.error.unforced.suggestForce=Forcing this move is currently only available via API. Please see "Move a Dataset" under Managing Datasets and Dataverses in the Admin Guide for details. #dashboard-dataversemove.xhtml -dashboard.card.dataversemove.header=Dashboard - Move Data -dashboard.card.dataversemove.manage=Move Collection -dashboard.card.dataversemove.message.summary=Move Dataverse Collection -dashboard.card.dataversemove.message.detail=Manage and curate your installation by moving a dataverse collection from one host dataverse collection to another. See also Managing Datasets and Dataverses in the Admin Guide. -dashboard.card.dataversemove.selectdataverse.header=Dataverse to Move -dashboard.card.dataversemove.newdataverse.header=New Host Dataverse -dashboard.card.dataversemove.dataverse.label=Dataverse -dashboard.card.dataversemove.confirm.dialog=Are you sure want to move this dataverse? -dashboard.card.dataversemove.confirm.yes=Yes, Move Dataverse -dashboard.card.dataversemove.message.success=The dataverse "{0}" has been successfully moved to {1}. -dashboard.card.dataversemove.message.failure.summary=Failed to moved dataverse -dashboard.card.dataversemove.message.failure.details=The dataverse "{0}" could not be moved to {1}. {2} -dashboard.card.dataversemove.dataverse.placeholder=Enter Dataverse Identifier... -dashboard.card.dataversemove.dataverse.menu.header=Dataverse Name (Affiliate), Identifier -dashboard.card.dataversemove.dataverse.menu.invalidMsg=No matches found -dashboard.card.dataversemove.dataset.command.error.targetDataverseUnpublishedDatasetPublished=A published dataset may not be moved to an unpublished dataverse. You can retry the move after publishing {0}. -dashboard.card.dataversemove.dataset.command.error.targetDataverseSameAsOriginalDataverse=This dataset is already in this dataverse. -dashboard.card.dataversemove.dataset.command.error.unforced.datasetGuestbookNotInTargetDataverse=The guestbook would be removed from this dataset if you moved it because the guestbook is not in the new host dataverse. -dashboard.card.dataversemove.dataset.command.error.unforced.linkedToTargetDataverseOrOneOfItsParents=This dataset is linked to the new host dataverse or one of its parents. This move would remove the link to this dataset. +dashboard.card.move.dataverse.header=Dashboard - Move Data +dashboard.card.move.dataverse.message.summary=Move Dataverse Collection +dashboard.card.move.dataverse.message.detail=Manage and curate your installation by moving a dataverse collection from one host dataverse collection to another. See also Managing Datasets and Dataverses in the Admin Guide. +dashboard.card.move.dataverse.selectdataverse.header=Dataverse to Move +dashboard.card.move.dataverse.newdataverse.header=New Host Dataverse +dashboard.card.move.dataverse.label=Dataverse +dashboard.card.move.dataverse.confirm.dialog=Are you sure want to move this dataverse? +dashboard.card.move.dataverse.confirm.yes=Yes, Move Dataverse +dashboard.card.move.dataverse.message.success=The dataverse "{0}" has been successfully moved to {1}. +dashboard.card.move.dataverse.message.failure.summary=Failed to moved dataverse +dashboard.card.move.dataverse.message.failure.details=The dataverse "{0}" could not be moved to {1}. {2} +dashboard.card.move.dataverse.placeholder=Enter Dataverse Identifier... +dashboard.card.move.dataverse.menu.header=Dataverse Name (Affiliate), Identifier +dashboard.card.move.dataverse.menu.invalidMsg=No matches found #MailServiceBean.java notification.email.create.dataverse.subject={0}: Your dataverse has been created diff --git a/src/main/webapp/dashboard-datasetmove.xhtml b/src/main/webapp/dashboard-datasetmove.xhtml index 96d9d401412..ded02badef5 100644 --- a/src/main/webapp/dashboard-datasetmove.xhtml +++ b/src/main/webapp/dashboard-datasetmove.xhtml @@ -13,40 +13,40 @@ - + - + - + - +
-
#{bundle['dashboard.card.datasetmove.selectdataset.header']}
+
#{bundle['dashboard.move.dataset.selectdataset.header']}
@@ -70,26 +70,26 @@
-
#{bundle['dashboard.card.datasetmove.newdataverse.header']}
+
#{bundle['dashboard.move.dataset.newdataverse.header']}
@@ -113,12 +113,12 @@
+ oncomplete="if (args && !args.validationFailed) PF('datasetmoveConfirmation').show();"> - +
@@ -68,26 +68,26 @@
-
#{bundle['dashboard.card.dataversemove.newdataverse.header']}
+
#{bundle['dashboard.card.move.dataverse.newdataverse.header']}
@@ -120,12 +120,12 @@
- -

#{bundle['dashboard.card.dataversemove.confirm.dialog']}

+ +

#{bundle['dashboard.card.move.dataverse.confirm.dialog']}

-
diff --git a/src/main/webapp/dashboard.xhtml b/src/main/webapp/dashboard.xhtml index f8bdafe875b..5f083a7455f 100644 --- a/src/main/webapp/dashboard.xhtml +++ b/src/main/webapp/dashboard.xhtml @@ -140,12 +140,12 @@ From a2c63e226a064a5481f5b8ec7007431910cb9c76 Mon Sep 17 00:00:00 2001 From: stevenferey Date: Fri, 10 Jan 2025 16:25:31 +0100 Subject: [PATCH 18/21] Adaptations of language keys --- src/main/java/propertyFiles/Bundle.properties | 16 ++++++++-------- src/main/webapp/dashboard-movedataverse.xhtml | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/propertyFiles/Bundle.properties b/src/main/java/propertyFiles/Bundle.properties index 7a05abeb311..a87bbc760fc 100644 --- a/src/main/java/propertyFiles/Bundle.properties +++ b/src/main/java/propertyFiles/Bundle.properties @@ -760,12 +760,12 @@ dashboard.list_users.api.auth.not_superuser=Forbidden. You must be a superuser. #dashboard-movedataset.xhtml dashboard.move.dataset.header=Dashboard - Move Data dashboard.move.dataset.message=Manage and curate your installation by moving datasets from one host dataverse to another. See also Managing Datasets and Dataverses in the Admin Guide. -dashboard.move.dataset.selectdataset.header=Dataset to Move -dashboard.move.dataset.newdataverse.header=New Host Dataverse +dashboard.move.dataset.selectdataset.header=Dataset to move +dashboard.move.dataset.newdataverse.header=New dataverse collection host dashboard.move.dataset.dataset.label=Dataset dashboard.move.dataset.dataverse.label=Dataverse -dashboard.move.dataset.confirm.dialog=Are you sure want to move this dataset? -dashboard.move.dataset.confirm.yes=Yes, Move Dataset +dashboard.move.dataset.confirm.dialog=Are you sure you want to move this dataset? +dashboard.move.dataset.confirm.yes=Yes, move this dataset dashboard.move.dataset.message.success=The dataset "{0}" ({1}) has been successfully moved to {2}. dashboard.move.dataset.message.failure.summary=Failed to moved dataset dashboard.move.dataset.message.failure.details=The dataset "{0}" ({1}) could not be moved to {2}. {3}{4} @@ -785,11 +785,11 @@ dashboard.move.dataset.command.error.unforced.suggestForce=Forcing this move is dashboard.move.dataverse.header=Dashboard - Move Data dashboard.move.dataverse.message.summary=Move Dataverse Collection dashboard.move.dataverse.message.detail=Manage and curate your installation by moving a dataverse collection from one host dataverse collection to another. See also Managing Datasets and Dataverses in the Admin Guide. -dashboard.move.dataverse.selectdataverse.header=Dataverse to Move -dashboard.move.dataverse.newdataverse.header=New Host Dataverse +dashboard.move.dataverse.selectdataverse.header=Dataverse collection to move +dashboard.move.dataverse.newdataverse.header=New dataverse collection host dashboard.move.dataverse.label=Dataverse -dashboard.move.dataverse.confirm.dialog=Are you sure want to move this dataverse? -dashboard.move.dataverse.confirm.yes=Yes, Move Dataverse +dashboard.move.dataverse.confirm.dialog=Are you sure you want to move this dataverse collection? +dashboard.move.dataverse.confirm.yes=Yes, move this collection dashboard.move.dataverse.message.success=The dataverse "{0}" has been successfully moved to {1}. dashboard.move.dataverse.message.failure.summary=Failed to moved dataverse dashboard.move.dataverse.message.failure.details=The dataverse "{0}" could not be moved to {1}. {2} diff --git a/src/main/webapp/dashboard-movedataverse.xhtml b/src/main/webapp/dashboard-movedataverse.xhtml index 81a5d774994..ef54e21145d 100644 --- a/src/main/webapp/dashboard-movedataverse.xhtml +++ b/src/main/webapp/dashboard-movedataverse.xhtml @@ -16,7 +16,7 @@ - + @@ -120,7 +120,7 @@
- +

#{bundle['dashboard.move.dataverse.confirm.dialog']}

Date: Wed, 22 Jan 2025 17:21:29 +0100 Subject: [PATCH 19/21] =?UTF-8?q?=E2=80=8BLabel=20adaptation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/propertyFiles/Bundle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/propertyFiles/Bundle.properties b/src/main/java/propertyFiles/Bundle.properties index a87bbc760fc..89a6e61d3d8 100644 --- a/src/main/java/propertyFiles/Bundle.properties +++ b/src/main/java/propertyFiles/Bundle.properties @@ -544,7 +544,7 @@ dashboard.card.metadataexport.header=Metadata Export dashboard.card.metadataexport.message=Dataset metadata export is only available through the {0} API. Learn more in the {0} {1}API Guide{2}. dashboard.card.move.data=Data dashboard.card.move.dataset.manage=Move Dataset -dashboard.card.move.dataverse.manage=Move Collection +dashboard.card.move.dataverse.manage=Move Dataverse #harvestclients.xhtml harvestclients.title=Manage Harvesting Clients From bff877b022a7d885e06e042d1ca20585b664ccac Mon Sep 17 00:00:00 2001 From: stevenferey Date: Wed, 22 Jan 2025 17:27:57 +0100 Subject: [PATCH 20/21] =?UTF-8?q?=E2=80=8BAdaptation=20of=20the=20error=20?= =?UTF-8?q?message=20in=20case=20of=20forced=20collection=20move=20require?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/propertyFiles/Bundle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/propertyFiles/Bundle.properties b/src/main/java/propertyFiles/Bundle.properties index 89a6e61d3d8..0ba6dda70b7 100644 --- a/src/main/java/propertyFiles/Bundle.properties +++ b/src/main/java/propertyFiles/Bundle.properties @@ -2805,7 +2805,7 @@ dataverses.api.delete.featured.collections.successful=Featured dataverses have b dataverses.api.move.dataverse.error.metadataBlock=Dataverse metadata block is not in target dataverse. dataverses.api.move.dataverse.error.dataverseLink=Dataverse is linked to target dataverse or one of its parents. dataverses.api.move.dataverse.error.datasetLink=Dataset is linked to target dataverse or one of its parents. -dataverses.api.move.dataverse.error.forceMove=Please use the parameter ?forceMove=true to complete the move. This will remove anything from the dataverse that is not compatible with the target dataverse. +dataverses.api.move.dataverse.error.forceMove=Please use the API and see "Move a Dataverse Collection" with the parameter ?forceMove=true to complete the move. This will remove anything from the dataverse that is not compatible with the target dataverse. dataverses.api.create.dataset.error.mustIncludeVersion=Please provide initial version in the dataset json dataverses.api.create.dataset.error.superuserFiles=Only a superuser may add files via this api dataverses.api.create.dataset.error.mustIncludeAuthorName=Please provide author name in the dataset json From acda4587df7cf7fa176be8adbfb5070c467bf074 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 22 Jan 2025 13:57:12 -0500 Subject: [PATCH 21/21] bump sql script version #8739 --- src/main/resources/db/migration/{V6.5.0.2.sql => V6.5.0.3.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V6.5.0.2.sql => V6.5.0.3.sql} (100%) diff --git a/src/main/resources/db/migration/V6.5.0.2.sql b/src/main/resources/db/migration/V6.5.0.3.sql similarity index 100% rename from src/main/resources/db/migration/V6.5.0.2.sql rename to src/main/resources/db/migration/V6.5.0.3.sql