From 0ead2c24ff7855396f83f07e724af7ce4b18f7be Mon Sep 17 00:00:00 2001 From: Eryk Kulikowski Date: Fri, 1 Dec 2023 17:24:40 +0100 Subject: [PATCH 01/14] incmoplete metadata label visibility setting --- .../edu/harvard/iq/dataverse/DatasetPage.java | 10 ++++----- .../edu/harvard/iq/dataverse/FilePage.java | 18 ++++++++++----- .../iq/dataverse/mydata/DataRetrieverAPI.java | 17 ++++++++++++-- .../search/SearchIncludeFragment.java | 11 +++++++--- .../iq/dataverse/search/SolrSearchResult.java | 22 +++++++++++++++---- .../iq/dataverse/settings/JvmSettings.java | 1 + src/main/webapp/file.xhtml | 2 +- 7 files changed, 61 insertions(+), 20 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index fc18257196d..7ab24e69152 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -2210,13 +2210,13 @@ private void displayPublishMessage(){ public boolean isValid() { if (valid == null) { - DatasetVersion version = dataset.getLatestVersion(); - if (!version.isDraft()) { + if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL.lookupOptional(Boolean.class).orElse(false))) { + final DatasetVersion newVersion = workingVersion.cloneDatasetVersion(); + newVersion.setDatasetFields(newVersion.initDatasetFields()); + valid = newVersion.isValid(); + } else { valid = true; } - DatasetVersion newVersion = version.cloneDatasetVersion(); - newVersion.setDatasetFields(newVersion.initDatasetFields()); - valid = newVersion.isValid(); } return valid; } diff --git a/src/main/java/edu/harvard/iq/dataverse/FilePage.java b/src/main/java/edu/harvard/iq/dataverse/FilePage.java index bfae80ade27..d9a0fe2d9b0 100644 --- a/src/main/java/edu/harvard/iq/dataverse/FilePage.java +++ b/src/main/java/edu/harvard/iq/dataverse/FilePage.java @@ -31,6 +31,7 @@ import edu.harvard.iq.dataverse.makedatacount.MakeDataCountLoggingServiceBean; import edu.harvard.iq.dataverse.makedatacount.MakeDataCountLoggingServiceBean.MakeDataCountEntry; import edu.harvard.iq.dataverse.privateurl.PrivateUrlServiceBean; +import edu.harvard.iq.dataverse.settings.JvmSettings; import edu.harvard.iq.dataverse.settings.SettingsServiceBean; import edu.harvard.iq.dataverse.util.BundleUtil; import edu.harvard.iq.dataverse.util.FileUtil; @@ -283,13 +284,20 @@ private void displayPublishMessage(){ } } + Boolean valid = null; + public boolean isValid() { - if (!fileMetadata.getDatasetVersion().isDraft()) { - return true; + if (valid == null) { + final DatasetVersion workingVersion = fileMetadata.getDatasetVersion(); + if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL.lookupOptional(Boolean.class).orElse(false))) { + final DatasetVersion newVersion = workingVersion.cloneDatasetVersion(); + newVersion.setDatasetFields(newVersion.initDatasetFields()); + valid = newVersion.isValid(); + } else { + valid = true; + } } - DatasetVersion newVersion = fileMetadata.getDatasetVersion().cloneDatasetVersion(); - newVersion.setDatasetFields(newVersion.initDatasetFields()); - return newVersion.isValid(); + return valid; } private boolean canViewUnpublishedDataset() { diff --git a/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java b/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java index e9898031343..be81de9267d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java +++ b/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java @@ -3,11 +3,13 @@ */ package edu.harvard.iq.dataverse.mydata; +import edu.harvard.iq.dataverse.DatasetServiceBean; import edu.harvard.iq.dataverse.DataverseRoleServiceBean; import edu.harvard.iq.dataverse.DataverseServiceBean; import edu.harvard.iq.dataverse.DataverseSession; import edu.harvard.iq.dataverse.DvObject; import edu.harvard.iq.dataverse.DvObjectServiceBean; +import edu.harvard.iq.dataverse.PermissionsWrapper; import edu.harvard.iq.dataverse.RoleAssigneeServiceBean; import edu.harvard.iq.dataverse.api.auth.AuthRequired; import edu.harvard.iq.dataverse.search.SearchServiceBean; @@ -25,6 +27,7 @@ import edu.harvard.iq.dataverse.search.SearchException; import edu.harvard.iq.dataverse.search.SearchFields; import edu.harvard.iq.dataverse.search.SortBy; +import edu.harvard.iq.dataverse.settings.JvmSettings; import java.util.List; import java.util.Map; @@ -64,7 +67,9 @@ public class DataRetrieverAPI extends AbstractApiBean { private static final String retrieveDataPartialAPIPath = "retrieve"; @Inject - DataverseSession session; + DataverseSession session; + @Inject + PermissionsWrapper permissionsWrapper; @EJB DataverseRoleServiceBean dataverseRoleService; @@ -82,6 +87,8 @@ public class DataRetrieverAPI extends AbstractApiBean { //MyDataQueryHelperServiceBean myDataQueryHelperServiceBean; @EJB GroupServiceBean groupService; + @EJB + DatasetServiceBean datasetService; private List roleList; private DataverseRolePermissionHelper rolePermissionHelper; @@ -482,12 +489,14 @@ private JsonArrayBuilder formatSolrDocs(SolrQueryResponse solrResponse, RoleTagR JsonObjectBuilder myDataCardInfo; JsonArrayBuilder rolesForCard; + DataverseRequest dataverseRequest = createDataverseRequest(authUser); for (SolrSearchResult doc : solrQueryResponse.getSolrSearchResults()){ // ------------------------------------------- // (a) Get core card data from solr // ------------------------------------------- - myDataCardInfo = doc.getJsonForMyData(); + + myDataCardInfo = doc.getJsonForMyData(isValid(doc, dataverseRequest)); if (!doc.getEntity().isInstanceofDataFile()){ String parentAlias = dataverseService.getParentAliasString(doc); @@ -510,4 +519,8 @@ private JsonArrayBuilder formatSolrDocs(SolrQueryResponse solrResponse, RoleTagR return jsonSolrDocsArrayBuilder; } + + private boolean isValid(SolrSearchResult result, DataverseRequest dataverseRequest) { + return result.isValid(x -> permissionsWrapper.canUpdateDataset(dataverseRequest, datasetService.find(x.getEntityId()))); + } } \ No newline at end of file diff --git a/src/main/java/edu/harvard/iq/dataverse/search/SearchIncludeFragment.java b/src/main/java/edu/harvard/iq/dataverse/search/SearchIncludeFragment.java index 2ce06541afa..d0100bd79a4 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/SearchIncludeFragment.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/SearchIncludeFragment.java @@ -22,6 +22,7 @@ import edu.harvard.iq.dataverse.ThumbnailServiceWrapper; import edu.harvard.iq.dataverse.WidgetWrapper; import edu.harvard.iq.dataverse.engine.command.DataverseRequest; +import edu.harvard.iq.dataverse.settings.JvmSettings; import edu.harvard.iq.dataverse.util.BundleUtil; import java.time.LocalDate; import java.util.ArrayList; @@ -351,8 +352,7 @@ The real issue here (https://github.com/IQSS/dataverse/issues/7304) is caused * https://github.com/IQSS/dataverse/issues/84 */ int numRows = 10; - HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); - DataverseRequest dataverseRequest = new DataverseRequest(session.getUser(), httpServletRequest); + DataverseRequest dataverseRequest = getDataverseRequest(); List dataverses = new ArrayList<>(); dataverses.add(dataverse); solrQueryResponse = searchService.search(dataverseRequest, dataverses, queryToPassToSolr, filterQueriesFinal, sortField, sortOrder.toString(), paginationStart, onlyDataRelatedToMe, numRows, false, null, null); @@ -1395,8 +1395,13 @@ public boolean isActivelyEmbargoed(SolrSearchResult result) { } } + private DataverseRequest getDataverseRequest() { + final HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); + return new DataverseRequest(session.getUser(), httpServletRequest); + } + public boolean isValid(SolrSearchResult result) { - return result.isValid(); + return result.isValid(x -> permissionsWrapper.canUpdateDataset(getDataverseRequest(), datasetService.find(x.getEntityId()))); } public enum SortOrder { diff --git a/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java b/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java index 6ad7f9dbbf6..72af8b158dc 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Predicate; import java.util.logging.Logger; import jakarta.json.Json; @@ -26,6 +27,7 @@ import edu.harvard.iq.dataverse.MetadataBlock; import edu.harvard.iq.dataverse.api.Util; import edu.harvard.iq.dataverse.dataset.DatasetThumbnail; +import edu.harvard.iq.dataverse.settings.JvmSettings; import edu.harvard.iq.dataverse.util.DateUtil; import edu.harvard.iq.dataverse.util.json.JsonPrinter; import edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder; @@ -417,7 +419,7 @@ public JsonObject toJsonObject(boolean showRelevance, boolean showEntityIds, boo * * @return */ - public JsonObjectBuilder getJsonForMyData() { + public JsonObjectBuilder getJsonForMyData(boolean isValid) { JsonObjectBuilder myDataJson = json(true, true, true);// boolean showRelevance, boolean showEntityIds, boolean showApiUrls) @@ -425,7 +427,7 @@ public JsonObjectBuilder getJsonForMyData() { .add("is_draft_state", this.isDraftState()).add("is_in_review_state", this.isInReviewState()) .add("is_unpublished_state", this.isUnpublishedState()).add("is_published", this.isPublishedState()) .add("is_deaccesioned", this.isDeaccessionedState()) - .add("is_valid", this.isValid()) + .add("is_valid", isValid) .add("date_to_display_on_card", getDateToDisplayOnCard()); // Add is_deaccessioned attribute, even though MyData currently screens any deaccessioned info out @@ -1265,7 +1267,19 @@ public void setDatasetValid(Boolean datasetValid) { this.datasetValid = datasetValid == null || Boolean.valueOf(datasetValid); } - public boolean isValid() { - return datasetValid; + public boolean isValid(Predicate canUpdateDataset) { + if (this.datasetValid) { + return true; + } + if (!this.getType().equals("datasets")) { + return true; + } + if (this.isDraftState()) { + return false; + } + if (!JvmSettings.UI_SHOW_VALIDITY_LABEL.lookupOptional(Boolean.class).orElse(false)) { + return true; + } + return !canUpdateDataset.test(this); } } diff --git a/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java b/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java index cc3272413c7..9f0371178c0 100644 --- a/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java +++ b/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java @@ -145,6 +145,7 @@ public enum JvmSettings { SCOPE_UI(PREFIX, "ui"), UI_ALLOW_REVIEW_INCOMPLETE(SCOPE_UI, "allow-review-for-incomplete"), UI_SHOW_VALIDITY_FILTER(SCOPE_UI, "show-validity-filter"), + UI_SHOW_VALIDITY_LABEL(SCOPE_UI, "show-label-for-incomplete-when-published"), // NetCDF SETTINGS SCOPE_NETCDF(PREFIX, "netcdf"), diff --git a/src/main/webapp/file.xhtml b/src/main/webapp/file.xhtml index f69b5c35afd..a5218aedaa6 100644 --- a/src/main/webapp/file.xhtml +++ b/src/main/webapp/file.xhtml @@ -76,7 +76,7 @@ - + From 0cd23fbffb0d3c4a75cb3948333d4c71e7e5110e Mon Sep 17 00:00:00 2001 From: Eryk Kulikowski Date: Tue, 5 Dec 2023 18:28:26 +0100 Subject: [PATCH 02/14] added documentation --- ...10116-incomplete-metadata-label-setting.md | 1 + .../source/installation/config.rst | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 doc/release-notes/10116-incomplete-metadata-label-setting.md diff --git a/doc/release-notes/10116-incomplete-metadata-label-setting.md b/doc/release-notes/10116-incomplete-metadata-label-setting.md new file mode 100644 index 00000000000..5fd2de2f287 --- /dev/null +++ b/doc/release-notes/10116-incomplete-metadata-label-setting.md @@ -0,0 +1 @@ +Bug fixed for the ``incomplete metadata`` label being shown for published dataset with incomplete metadata in certain scenarios. This label will now only be shown for draft versions of such datasets. This label can also be made visible for published datasets with the new option ``dataverse.api.show-label-for-incomplete-when-published``, and will be only shown on datasets with incomplete metadata that the logged-in user can edit. diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst index c707daaad07..bc1f01576c9 100644 --- a/doc/sphinx-guides/source/installation/config.rst +++ b/doc/sphinx-guides/source/installation/config.rst @@ -2425,6 +2425,25 @@ Defaults to ``false``. Can also be set via any `supported MicroProfile Config API source`_, e.g. the environment variable ``DATAVERSE_API_ALLOW_INCOMPLETE_METADATA``. Will accept ``[tT][rR][uU][eE]|1|[oO][nN]`` as "true" expressions. +.. _dataverse.api.show-label-for-incomplete-when-published: + +dataverse.api.show-label-for-incomplete-when-published +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +Even when you do not allow incomplete metadata to be saved in dataverse, some metadata may end up being incomplete, e.g., after making a metadata field mandatory. Datasets where that field is +not filled out, become incomplete, and therefore can be labeled with the ``incomplete metadat`` label. By default, this label is only shown for draft datasets. However, in some situations, you +may want to show the label also for published datasets. For example, when an admin needs to have an overview of the datasets that are no longer valid after a metadata fields update, +enabling this option will show the ``incomplete metadata`` labels on published datasets, but only to the users that can edit the specific datasets. Note that you need to reindex the datasets +after changing the metadata definitions. Reindexing will update the labels and other dataset information according to the new situation. + +When enabled, published datasets with incomplete metadata will have an ``incomplete metadata`` label attached to them, but only for the datasets that the user can edit. You can list these datasets, +for example, with the validity of metadata filter shown in "My Data" page that can be turned on by enabling the :ref:`dataverse.ui.show-validity-filter` option. + +Defaults to ``false``. + +Can also be set via any `supported MicroProfile Config API source`_, e.g. the environment variable +``DATAVERSE_API_SHOW_LABEL_FOR_INCOMPLETE_WHEN_PUBLISHED``. Will accept ``[tT][rR][uU][eE]|1|[oO][nN]`` as "true" expressions. + .. _dataverse.signposting.level1-author-limit: dataverse.signposting.level1-author-limit @@ -2475,6 +2494,8 @@ Defaults to ``false``. Can also be set via any `supported MicroProfile Config API source`_, e.g. the environment variable ``DATAVERSE_UI_ALLOW_REVIEW_FOR_INCOMPLETE``. Will accept ``[tT][rR][uU][eE]|1|[oO][nN]`` as "true" expressions. +.. _dataverse.ui.show-validity-filter: + dataverse.ui.show-validity-filter +++++++++++++++++++++++++++++++++ From 02f2edc2fddd3cf0c39ac6bbdb4381ff0b7ae744 Mon Sep 17 00:00:00 2001 From: Eryk Kulikowski Date: Thu, 7 Dec 2023 15:48:24 +0100 Subject: [PATCH 03/14] typo fix --- doc/sphinx-guides/source/installation/config.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst index bc1f01576c9..46a83610871 100644 --- a/doc/sphinx-guides/source/installation/config.rst +++ b/doc/sphinx-guides/source/installation/config.rst @@ -2431,7 +2431,7 @@ dataverse.api.show-label-for-incomplete-when-published ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Even when you do not allow incomplete metadata to be saved in dataverse, some metadata may end up being incomplete, e.g., after making a metadata field mandatory. Datasets where that field is -not filled out, become incomplete, and therefore can be labeled with the ``incomplete metadat`` label. By default, this label is only shown for draft datasets. However, in some situations, you +not filled out, become incomplete, and therefore can be labeled with the ``incomplete metadata`` label. By default, this label is only shown for draft datasets. However, in some situations, you may want to show the label also for published datasets. For example, when an admin needs to have an overview of the datasets that are no longer valid after a metadata fields update, enabling this option will show the ``incomplete metadata`` labels on published datasets, but only to the users that can edit the specific datasets. Note that you need to reindex the datasets after changing the metadata definitions. Reindexing will update the labels and other dataset information according to the new situation. From f6e5db29f0977187128d99f42b32c08c53af5e74 Mon Sep 17 00:00:00 2001 From: Eryk Kulikowski Date: Tue, 19 Dec 2023 16:42:44 +0100 Subject: [PATCH 04/14] option renamed: show-label-for-incomplete-when-published -> show-validity-label-when-published --- .../10116-incomplete-metadata-label-setting.md | 2 +- doc/sphinx-guides/source/installation/config.rst | 6 +++--- src/main/java/edu/harvard/iq/dataverse/DatasetPage.java | 2 +- src/main/java/edu/harvard/iq/dataverse/FilePage.java | 2 +- .../edu/harvard/iq/dataverse/search/SolrSearchResult.java | 2 +- .../java/edu/harvard/iq/dataverse/settings/JvmSettings.java | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/release-notes/10116-incomplete-metadata-label-setting.md b/doc/release-notes/10116-incomplete-metadata-label-setting.md index 5fd2de2f287..970f2c922ae 100644 --- a/doc/release-notes/10116-incomplete-metadata-label-setting.md +++ b/doc/release-notes/10116-incomplete-metadata-label-setting.md @@ -1 +1 @@ -Bug fixed for the ``incomplete metadata`` label being shown for published dataset with incomplete metadata in certain scenarios. This label will now only be shown for draft versions of such datasets. This label can also be made visible for published datasets with the new option ``dataverse.api.show-label-for-incomplete-when-published``, and will be only shown on datasets with incomplete metadata that the logged-in user can edit. +Bug fixed for the ``incomplete metadata`` label being shown for published dataset with incomplete metadata in certain scenarios. This label will now only be shown for draft versions of such datasets. This label can also be made visible for published datasets with the new option ``dataverse.ui.show-validity-label-when-published``, and will be only shown on datasets with incomplete metadata that the logged-in user can edit. diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst index 29e53e80d68..70f35cc8797 100644 --- a/doc/sphinx-guides/source/installation/config.rst +++ b/doc/sphinx-guides/source/installation/config.rst @@ -2444,10 +2444,10 @@ Defaults to ``false``. Can also be set via any `supported MicroProfile Config API source`_, e.g. the environment variable ``DATAVERSE_API_ALLOW_INCOMPLETE_METADATA``. Will accept ``[tT][rR][uU][eE]|1|[oO][nN]`` as "true" expressions. -.. _dataverse.api.show-label-for-incomplete-when-published: +.. _dataverse.ui.show-validity-label-when-published: -dataverse.api.show-label-for-incomplete-when-published -++++++++++++++++++++++++++++++++++++++++++++++++++++++ +dataverse.ui.show-validity-label-when-published ++++++++++++++++++++++++++++++++++++++++++++++++ Even when you do not allow incomplete metadata to be saved in dataverse, some metadata may end up being incomplete, e.g., after making a metadata field mandatory. Datasets where that field is not filled out, become incomplete, and therefore can be labeled with the ``incomplete metadata`` label. By default, this label is only shown for draft datasets. However, in some situations, you diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index 5402ad01cbc..66ade0c621c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -2243,7 +2243,7 @@ private void displayPublishMessage(){ public boolean isValid() { if (valid == null) { - if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL.lookupOptional(Boolean.class).orElse(false))) { + if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(false))) { final DatasetVersion newVersion = workingVersion.cloneDatasetVersion(); newVersion.setDatasetFields(newVersion.initDatasetFields()); valid = newVersion.isValid(); diff --git a/src/main/java/edu/harvard/iq/dataverse/FilePage.java b/src/main/java/edu/harvard/iq/dataverse/FilePage.java index b7afa83aea0..34624154b12 100644 --- a/src/main/java/edu/harvard/iq/dataverse/FilePage.java +++ b/src/main/java/edu/harvard/iq/dataverse/FilePage.java @@ -289,7 +289,7 @@ private void displayPublishMessage(){ public boolean isValid() { if (valid == null) { final DatasetVersion workingVersion = fileMetadata.getDatasetVersion(); - if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL.lookupOptional(Boolean.class).orElse(false))) { + if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(false))) { final DatasetVersion newVersion = workingVersion.cloneDatasetVersion(); newVersion.setDatasetFields(newVersion.initDatasetFields()); valid = newVersion.isValid(); diff --git a/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java b/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java index 72af8b158dc..496ccf33ee3 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java @@ -1277,7 +1277,7 @@ public boolean isValid(Predicate canUpdateDataset) { if (this.isDraftState()) { return false; } - if (!JvmSettings.UI_SHOW_VALIDITY_LABEL.lookupOptional(Boolean.class).orElse(false)) { + if (!JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(false)) { return true; } return !canUpdateDataset.test(this); diff --git a/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java b/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java index 3c1ae689263..7ef2030a616 100644 --- a/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java +++ b/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java @@ -145,7 +145,7 @@ public enum JvmSettings { SCOPE_UI(PREFIX, "ui"), UI_ALLOW_REVIEW_INCOMPLETE(SCOPE_UI, "allow-review-for-incomplete"), UI_SHOW_VALIDITY_FILTER(SCOPE_UI, "show-validity-filter"), - UI_SHOW_VALIDITY_LABEL(SCOPE_UI, "show-label-for-incomplete-when-published"), + UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED(SCOPE_UI, "show-validity-label-when-published"), // NetCDF SETTINGS SCOPE_NETCDF(PREFIX, "netcdf"), From afcbdfede13757fdb16b794a50aa568687a639ac Mon Sep 17 00:00:00 2001 From: Eryk Kullikowski Date: Thu, 2 May 2024 16:27:07 +0200 Subject: [PATCH 05/14] dataset is always checked for validity while indexing, even when already published --- .../iq/dataverse/search/IndexServiceBean.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java index 886326980c2..61aa73cdeff 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java @@ -836,15 +836,9 @@ public SolrInputDocuments toSolrDocs(IndexableDataset indexableDataset, Set Date: Thu, 2 May 2024 16:36:07 +0200 Subject: [PATCH 06/14] fix for collections not showing up when both validity facets (valid and incmoplete) are checked --- .../edu/harvard/iq/dataverse/mydata/MyDataFilterParams.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFilterParams.java b/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFilterParams.java index 2ab248fcc0b..277fa9ee12f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFilterParams.java +++ b/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFilterParams.java @@ -292,7 +292,7 @@ public String getSolrFragmentForPublicationStatus(){ } public String getSolrFragmentForDatasetValidity(){ - if ((this.datasetValidities == null) || (this.datasetValidities.isEmpty())){ + if ((this.datasetValidities == null) || (this.datasetValidities.isEmpty()) || (this.datasetValidities.size() > 1)){ return ""; } From 75e87e4fa45800da4b307fd54f32b7747e244d8c Mon Sep 17 00:00:00 2001 From: Eryk Kullikowski Date: Thu, 2 May 2024 18:16:55 +0200 Subject: [PATCH 07/14] removed unused method --- src/main/java/edu/harvard/iq/dataverse/DatasetPage.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index 090c71b4579..96a8270932c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -2307,10 +2307,6 @@ public boolean isValid() { return valid; } - public boolean isValidOrCanReviewIncomplete() { - return isValid() || JvmSettings.UI_ALLOW_REVIEW_INCOMPLETE.lookupOptional(Boolean.class).orElse(false); - } - private void displayLockInfo(Dataset dataset) { // Various info messages, when the dataset is locked (for various reasons): if (dataset.isLocked() && canUpdateDataset()) { From d4c71964d313090c1e17ebed111a7799d8a44dd7 Mon Sep 17 00:00:00 2001 From: Eryk Kullikowski Date: Thu, 2 May 2024 19:25:10 +0200 Subject: [PATCH 08/14] reverted removing method that is used by the frontend --- src/main/java/edu/harvard/iq/dataverse/DatasetPage.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index 96a8270932c..090c71b4579 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -2307,6 +2307,10 @@ public boolean isValid() { return valid; } + public boolean isValidOrCanReviewIncomplete() { + return isValid() || JvmSettings.UI_ALLOW_REVIEW_INCOMPLETE.lookupOptional(Boolean.class).orElse(false); + } + private void displayLockInfo(Dataset dataset) { // Various info messages, when the dataset is locked (for various reasons): if (dataset.isLocked() && canUpdateDataset()) { From 2ee5bfff71d642b9494d67f14c6da129f89c554b Mon Sep 17 00:00:00 2001 From: Eryk Kullikowski Date: Thu, 2 May 2024 21:32:06 +0200 Subject: [PATCH 09/14] fixed incomplete metadata being indexed as complete in some cases --- .../edu/harvard/iq/dataverse/DatasetPage.java | 2 +- .../harvard/iq/dataverse/DatasetVersion.java | 21 +++++++++++++++++++ .../iq/dataverse/search/IndexServiceBean.java | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index 090c71b4579..0427c38af64 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -2298,7 +2298,7 @@ public boolean isValid() { if (valid == null) { if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(false))) { final DatasetVersion newVersion = workingVersion.cloneDatasetVersion(); - newVersion.setDatasetFields(newVersion.initDatasetFields()); + newVersion.setDatasetFields(newVersion.initDatasetFields(true)); valid = newVersion.isValid(); } else { valid = true; diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java index 5fd963f3931..1f13c8812cc 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java @@ -1585,6 +1585,10 @@ private DatasetField initDatasetField(DatasetField dsf) { } public List initDatasetFields() { + return initDatasetFields(false); + } + + public List initDatasetFields(boolean removeEmptyValues) { //retList - Return List of values List retList = new ArrayList<>(); //Running into null on create new dataset @@ -1605,6 +1609,9 @@ public List initDatasetFields() { for (DatasetField dsf : retList) { if (dsfType.equals(dsf.getDatasetFieldType())) { add = false; + if (removeEmptyValues) { + removeEmptyValues(dsf); + } break; } } @@ -1622,6 +1629,20 @@ public List initDatasetFields() { return retList; } + private void removeEmptyValues(DatasetField dsf) { + if (dsf.getDatasetFieldType().isPrimitive()) { // primitive + final Iterator i = dsf.getDatasetFieldValues().iterator(); + while (i.hasNext()) { + final String v = i.next().getValue(); + if (StringUtils.isBlank(v) || DatasetField.NA_VALUE.equals(v)) { + i.remove(); + } + } + } else { + dsf.getDatasetFieldCompoundValues().forEach(cv -> cv.getChildDatasetFields().forEach(v -> removeEmptyValues(v))); + } + } + /** * For the current server, create link back to this Dataset * diff --git a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java index 61aa73cdeff..7bb72b2875a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java @@ -837,7 +837,7 @@ public SolrInputDocuments toSolrDocs(IndexableDataset indexableDataset, Set Date: Mon, 6 May 2024 14:52:00 +0200 Subject: [PATCH 10/14] fix for permission wrapper not available in mydata -> if it is your data, you are allowed to see incomplete metadata label on published datasets when the flag is enabled --- .../edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java b/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java index c68ef9b7cc9..7cca76d3a45 100644 --- a/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java +++ b/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java @@ -67,8 +67,6 @@ public class DataRetrieverAPI extends AbstractApiBean { @Inject DataverseSession session; - @Inject - PermissionsWrapper permissionsWrapper; @EJB DataverseRoleServiceBean dataverseRoleService; @@ -525,6 +523,6 @@ private JsonArrayBuilder formatSolrDocs(SolrQueryResponse solrResponse, RoleTagR } private boolean isValid(SolrSearchResult result, DataverseRequest dataverseRequest) { - return result.isValid(x -> permissionsWrapper.canUpdateDataset(dataverseRequest, datasetService.find(x.getEntityId()))); + return result.isValid(x -> true); } } \ No newline at end of file From ff4742a5bd6510b39d5459279fe9976c20bf632e Mon Sep 17 00:00:00 2001 From: Eryk Kullikowski Date: Tue, 7 May 2024 13:07:27 +0200 Subject: [PATCH 11/14] unused variable cleanup --- .../edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java b/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java index 7cca76d3a45..9c4000c2008 100644 --- a/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java +++ b/src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java @@ -9,7 +9,6 @@ import edu.harvard.iq.dataverse.DataverseSession; import edu.harvard.iq.dataverse.DvObject; import edu.harvard.iq.dataverse.DvObjectServiceBean; -import edu.harvard.iq.dataverse.PermissionsWrapper; import edu.harvard.iq.dataverse.RoleAssigneeServiceBean; import edu.harvard.iq.dataverse.api.auth.AuthRequired; import edu.harvard.iq.dataverse.search.SearchServiceBean; @@ -27,7 +26,6 @@ import edu.harvard.iq.dataverse.search.SearchException; import edu.harvard.iq.dataverse.search.SearchFields; import edu.harvard.iq.dataverse.search.SortBy; -import edu.harvard.iq.dataverse.settings.JvmSettings; import java.util.List; import java.util.Map; @@ -491,14 +489,13 @@ private JsonArrayBuilder formatSolrDocs(SolrQueryResponse solrResponse, RoleTagR JsonObjectBuilder myDataCardInfo; JsonArrayBuilder rolesForCard; - DataverseRequest dataverseRequest = createDataverseRequest(authUser); for (SolrSearchResult doc : solrQueryResponse.getSolrSearchResults()){ // ------------------------------------------- // (a) Get core card data from solr // ------------------------------------------- - myDataCardInfo = doc.getJsonForMyData(isValid(doc, dataverseRequest)); + myDataCardInfo = doc.getJsonForMyData(isValid(doc)); if (!doc.getEntity().isInstanceofDataFile()){ String parentAlias = dataverseService.getParentAliasString(doc); @@ -522,7 +519,7 @@ private JsonArrayBuilder formatSolrDocs(SolrQueryResponse solrResponse, RoleTagR } - private boolean isValid(SolrSearchResult result, DataverseRequest dataverseRequest) { + private boolean isValid(SolrSearchResult result) { return result.isValid(x -> true); } } \ No newline at end of file From 8525c9acdef86cf33a56cf3d017f1cf5181a9db7 Mon Sep 17 00:00:00 2001 From: Eryk Kullikowski Date: Tue, 7 May 2024 14:36:18 +0200 Subject: [PATCH 12/14] cleaned up file page logic for incomplete metadata --- src/main/java/edu/harvard/iq/dataverse/FilePage.java | 2 +- src/main/webapp/file.xhtml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/FilePage.java b/src/main/java/edu/harvard/iq/dataverse/FilePage.java index f0a75c9c467..5ba4af0449e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/FilePage.java +++ b/src/main/java/edu/harvard/iq/dataverse/FilePage.java @@ -322,7 +322,7 @@ public boolean isValid() { final DatasetVersion workingVersion = fileMetadata.getDatasetVersion(); if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(false))) { final DatasetVersion newVersion = workingVersion.cloneDatasetVersion(); - newVersion.setDatasetFields(newVersion.initDatasetFields()); + newVersion.setDatasetFields(newVersion.initDatasetFields(true)); valid = newVersion.isValid(); } else { valid = true; diff --git a/src/main/webapp/file.xhtml b/src/main/webapp/file.xhtml index 99dacc46050..835764d9cf5 100644 --- a/src/main/webapp/file.xhtml +++ b/src/main/webapp/file.xhtml @@ -77,7 +77,7 @@ - + From 724f2388191dc164feff917411a3d2e21d52f11a Mon Sep 17 00:00:00 2001 From: Eryk Kullikowski Date: Tue, 7 May 2024 17:01:05 +0200 Subject: [PATCH 13/14] refactored isValid in DatasetVersion --- .../edu/harvard/iq/dataverse/DatasetPage.java | 4 +- .../harvard/iq/dataverse/DatasetVersion.java | 52 +++++++++++-------- .../edu/harvard/iq/dataverse/FilePage.java | 4 +- .../iq/dataverse/search/IndexServiceBean.java | 5 +- 4 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index 0427c38af64..2afe3b33981 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -2297,9 +2297,7 @@ private void displayPublishMessage(){ public boolean isValid() { if (valid == null) { if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(false))) { - final DatasetVersion newVersion = workingVersion.cloneDatasetVersion(); - newVersion.setDatasetFields(newVersion.initDatasetFields(true)); - valid = newVersion.isValid(); + valid = workingVersion.isValid(); } else { valid = true; } diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java index 1f13c8812cc..943693355a3 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java @@ -1585,10 +1585,6 @@ private DatasetField initDatasetField(DatasetField dsf) { } public List initDatasetFields() { - return initDatasetFields(false); - } - - public List initDatasetFields(boolean removeEmptyValues) { //retList - Return List of values List retList = new ArrayList<>(); //Running into null on create new dataset @@ -1609,9 +1605,6 @@ public List initDatasetFields(boolean removeEmptyValues) { for (DatasetField dsf : retList) { if (dsfType.equals(dsf.getDatasetFieldType())) { add = false; - if (removeEmptyValues) { - removeEmptyValues(dsf); - } break; } } @@ -1629,20 +1622,6 @@ public List initDatasetFields(boolean removeEmptyValues) { return retList; } - private void removeEmptyValues(DatasetField dsf) { - if (dsf.getDatasetFieldType().isPrimitive()) { // primitive - final Iterator i = dsf.getDatasetFieldValues().iterator(); - while (i.hasNext()) { - final String v = i.next().getValue(); - if (StringUtils.isBlank(v) || DatasetField.NA_VALUE.equals(v)) { - i.remove(); - } - } - } else { - dsf.getDatasetFieldCompoundValues().forEach(cv -> cv.getChildDatasetFields().forEach(v -> removeEmptyValues(v))); - } - } - /** * For the current server, create link back to this Dataset * @@ -1749,7 +1728,36 @@ public List> validateRequired() { } public boolean isValid() { - return validate().isEmpty(); + // first clone to leave the original untouched + final DatasetVersion newVersion = this.cloneDatasetVersion(); + // initDatasetFields + newVersion.setDatasetFields(newVersion.initDatasetFields()); + // remove special "N/A" values and empty values + newVersion.removeEmptyValues(); + // check validity of present fields and detect missing mandatory fields + return newVersion.validate().isEmpty(); + } + + private void removeEmptyValues() { + if (this.getDatasetFields() != null) { + for (DatasetField dsf : this.getDatasetFields()) { + removeEmptyValues(dsf); + } + } + } + + private void removeEmptyValues(DatasetField dsf) { + if (dsf.getDatasetFieldType().isPrimitive()) { // primitive + final Iterator i = dsf.getDatasetFieldValues().iterator(); + while (i.hasNext()) { + final String v = i.next().getValue(); + if (StringUtils.isBlank(v) || DatasetField.NA_VALUE.equals(v)) { + i.remove(); + } + } + } else { + dsf.getDatasetFieldCompoundValues().forEach(cv -> cv.getChildDatasetFields().forEach(v -> removeEmptyValues(v))); + } } public Set validate() { diff --git a/src/main/java/edu/harvard/iq/dataverse/FilePage.java b/src/main/java/edu/harvard/iq/dataverse/FilePage.java index 5ba4af0449e..52e1ffd825a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/FilePage.java +++ b/src/main/java/edu/harvard/iq/dataverse/FilePage.java @@ -321,9 +321,7 @@ public boolean isValid() { if (valid == null) { final DatasetVersion workingVersion = fileMetadata.getDatasetVersion(); if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(false))) { - final DatasetVersion newVersion = workingVersion.cloneDatasetVersion(); - newVersion.setDatasetFields(newVersion.initDatasetFields(true)); - valid = newVersion.isValid(); + valid = workingVersion.isValid(); } else { valid = true; } diff --git a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java index 7bb72b2875a..e61b93a741f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java @@ -835,10 +835,7 @@ public SolrInputDocuments toSolrDocs(IndexableDataset indexableDataset, Set Date: Tue, 14 May 2024 16:23:51 +0200 Subject: [PATCH 14/14] change the default to false for UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED --- .../10116-incomplete-metadata-label-setting.md | 2 +- doc/sphinx-guides/source/installation/config.rst | 13 ++++++------- .../java/edu/harvard/iq/dataverse/DatasetPage.java | 2 +- .../java/edu/harvard/iq/dataverse/FilePage.java | 2 +- .../iq/dataverse/search/SolrSearchResult.java | 2 +- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/doc/release-notes/10116-incomplete-metadata-label-setting.md b/doc/release-notes/10116-incomplete-metadata-label-setting.md index 970f2c922ae..769100c3804 100644 --- a/doc/release-notes/10116-incomplete-metadata-label-setting.md +++ b/doc/release-notes/10116-incomplete-metadata-label-setting.md @@ -1 +1 @@ -Bug fixed for the ``incomplete metadata`` label being shown for published dataset with incomplete metadata in certain scenarios. This label will now only be shown for draft versions of such datasets. This label can also be made visible for published datasets with the new option ``dataverse.ui.show-validity-label-when-published``, and will be only shown on datasets with incomplete metadata that the logged-in user can edit. +Bug fixed for the ``incomplete metadata`` label being shown for published dataset with incomplete metadata in certain scenarios. This label will now be shown for draft versions of such datasets and published datasets that the user can edit. This label can also be made invisible for published datasets (regardless of edit rights) with the new option ``dataverse.ui.show-validity-label-when-published`` set to `false`. diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst index c8959912220..f1ce1aff59f 100644 --- a/doc/sphinx-guides/source/installation/config.rst +++ b/doc/sphinx-guides/source/installation/config.rst @@ -2901,15 +2901,14 @@ dataverse.ui.show-validity-label-when-published +++++++++++++++++++++++++++++++++++++++++++++++ Even when you do not allow incomplete metadata to be saved in dataverse, some metadata may end up being incomplete, e.g., after making a metadata field mandatory. Datasets where that field is -not filled out, become incomplete, and therefore can be labeled with the ``incomplete metadata`` label. By default, this label is only shown for draft datasets. However, in some situations, you -may want to show the label also for published datasets. For example, when an admin needs to have an overview of the datasets that are no longer valid after a metadata fields update, -enabling this option will show the ``incomplete metadata`` labels on published datasets, but only to the users that can edit the specific datasets. Note that you need to reindex the datasets -after changing the metadata definitions. Reindexing will update the labels and other dataset information according to the new situation. +not filled out, become incomplete, and therefore can be labeled with the ``incomplete metadata`` label. By default, this label is only shown for draft datasets and published datasets that the +user can edit. This option can be disabled by setting it to ``false`` where only draft datasets with incomplete metadata will have that label. When disabled, all published dataset will not have +that label. Note that you need to reindex the datasets after changing the metadata definitions. Reindexing will update the labels and other dataset information according to the new situation. -When enabled, published datasets with incomplete metadata will have an ``incomplete metadata`` label attached to them, but only for the datasets that the user can edit. You can list these datasets, -for example, with the validity of metadata filter shown in "My Data" page that can be turned on by enabling the :ref:`dataverse.ui.show-validity-filter` option. +When enabled (by default), published datasets with incomplete metadata will have an ``incomplete metadata`` label attached to them, but only for the datasets that the user can edit. +You can list these datasets, for example, with the validity of metadata filter shown in "My Data" page that can be turned on by enabling the :ref:`dataverse.ui.show-validity-filter` option. -Defaults to ``false``. +Defaults to ``true``. Can also be set via any `supported MicroProfile Config API source`_, e.g. the environment variable ``DATAVERSE_API_SHOW_LABEL_FOR_INCOMPLETE_WHEN_PUBLISHED``. Will accept ``[tT][rR][uU][eE]|1|[oO][nN]`` as "true" expressions. diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index 2afe3b33981..d9cb10026a3 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -2296,7 +2296,7 @@ private void displayPublishMessage(){ public boolean isValid() { if (valid == null) { - if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(false))) { + if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(true))) { valid = workingVersion.isValid(); } else { valid = true; diff --git a/src/main/java/edu/harvard/iq/dataverse/FilePage.java b/src/main/java/edu/harvard/iq/dataverse/FilePage.java index 52e1ffd825a..9889d23cf55 100644 --- a/src/main/java/edu/harvard/iq/dataverse/FilePage.java +++ b/src/main/java/edu/harvard/iq/dataverse/FilePage.java @@ -320,7 +320,7 @@ private void displayPublishMessage(){ public boolean isValid() { if (valid == null) { final DatasetVersion workingVersion = fileMetadata.getDatasetVersion(); - if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(false))) { + if (workingVersion.isDraft() || (canUpdateDataset() && JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(true))) { valid = workingVersion.isValid(); } else { valid = true; diff --git a/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java b/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java index bd22beecc8e..507f7815218 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/SolrSearchResult.java @@ -1268,7 +1268,7 @@ public boolean isValid(Predicate canUpdateDataset) { if (this.isDraftState()) { return false; } - if (!JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(false)) { + if (!JvmSettings.UI_SHOW_VALIDITY_LABEL_WHEN_PUBLISHED.lookupOptional(Boolean.class).orElse(true)) { return true; } return !canUpdateDataset.test(this);