Skip to content

Commit bdfccc9

Browse files
committed
fix require earlier versions logic
1 parent ddf3040 commit bdfccc9

1 file changed

Lines changed: 22 additions & 3 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/DatasetPage.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6211,6 +6211,7 @@ public boolean isArchivable() {
62116211
return archivable;
62126212
}
62136213

6214+
/** Method to decide if a 'Submit' button should be enabled for archiving a dataset version. */
62146215
public boolean isVersionArchivable(Long id) {
62156216
Boolean thisVersionArchivable = versionArchivable.get(id);
62166217
if (thisVersionArchivable == null) {
@@ -6225,11 +6226,29 @@ public boolean isVersionArchivable(Long id) {
62256226
DatasetVersion targetVersion = dataset.getVersions().stream()
62266227
.filter(v -> v.getId().equals(id)).findFirst().orElse(null);
62276228
if (requiresEarlierVersionsToBeArchived) {// Find the specific version by id
6228-
DatasetVersion priorVersion = DatasetUtil.getPriorVersion(targetVersion);
6229+
// Check all prior versions to ensure they are successfully archived
6230+
boolean allPriorVersionsArchived = true;
6231+
boolean foundTarget = false;
6232+
List<DatasetVersion> versions = dataset.getVersions();
6233+
6234+
for (DatasetVersion versionInLoop : versions) {
6235+
// Once we find the target version, start checking subsequent versions (which are prior versions)
6236+
if (foundTarget) {
6237+
// Check if this prior version has been successfully archived
6238+
String archivalStatus = versionInLoop.getArchivalCopyLocationStatus();
6239+
if (archivalStatus == null || !archivalStatus.equals(DatasetVersion.ARCHIVAL_STATUS_SUCCESS)) {
6240+
allPriorVersionsArchived = false;
6241+
break;
6242+
}
6243+
}
6244+
if (versionInLoop.equals(targetVersion)) {
6245+
foundTarget = true;
6246+
}
6247+
}
62296248

6230-
if (priorVersion== null || (isVersionArchivable(priorVersion.getId())
6231-
&& ArchiverUtil.isVersionArchived(priorVersion))) {
6249+
if (allPriorVersionsArchived) {
62326250
thisVersionArchivable = true;
6251+
// This check has been passed, so we go on to check other conditions
62336252
} else {
62346253
// Store the false value and skip further checks
62356254
versionArchivable.put(id, thisVersionArchivable);

0 commit comments

Comments
 (0)