Skip to content

Commit

Permalink
Merge pull request #8748 from GlobalDataverseCommunityConsortium/GDCC…
Browse files Browse the repository at this point in the history
…/8745-archival_status_UI

Gdcc/8745 archival status UI
  • Loading branch information
kcondon authored Jul 28, 2022
2 parents 706196a + 87181ec commit a97102f
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 1 deletion.
75 changes: 75 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/DatasetPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
Expand Down Expand Up @@ -343,6 +345,10 @@ public void setSelectedHostDataverse(Dataverse selectedHostDataverse) {
private boolean versionHasTabular = false;

private boolean showIngestSuccess;

private Boolean archivable = null;
private Boolean versionArchivable = null;
private Boolean someVersionArchived = null;

public boolean isShowIngestSuccess() {
return showIngestSuccess;
Expand Down Expand Up @@ -5568,6 +5574,75 @@ public void archiveVersion(Long id) {
}
}
}

public boolean isArchivable() {
if (archivable == null) {
archivable = false;
String className = settingsWrapper.getValueForKey(SettingsServiceBean.Key.ArchiverClassName, null);
if (className != null) {
try {
Class<?> clazz = Class.forName(className);
Method m = clazz.getMethod("isArchivable", Dataset.class, SettingsWrapper.class);
Object[] params = { dataset, settingsWrapper };
archivable = ((Boolean) m.invoke(null, params) == true);
} catch (ClassNotFoundException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException | NoSuchMethodException | SecurityException e) {
logger.warning("Failed to call is Archivable on configured archiver class: " + className);
e.printStackTrace();
}
}
}
return archivable;
}

public boolean isVersionArchivable() {
if (versionArchivable == null) {
// If this dataset isn't in an archivable collection return false
versionArchivable = false;
if (isArchivable()) {
boolean checkForArchivalCopy = false;
// Otherwise, we need to know if the archiver is single-version-only
// If it is, we have to check for an existing archived version to answer the
// question
String className = settingsWrapper.getValueForKey(SettingsServiceBean.Key.ArchiverClassName, null);
if (className != null) {
try {
Class<?> clazz = Class.forName(className);
Method m = clazz.getMethod("isSingleVersion", SettingsWrapper.class);
Object[] params = { settingsWrapper };
checkForArchivalCopy = (Boolean) m.invoke(null, params);

if (checkForArchivalCopy) {
// If we have to check (single version archiving), we can't allow archiving if
// one version is already archived (or attempted - any non-null status)
versionArchivable = !isSomeVersionArchived();
} else {
// If we allow multiple versions or didn't find one that has had archiving run
// on it, we can archive, so return true
versionArchivable = true;
}
} catch (ClassNotFoundException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException | NoSuchMethodException | SecurityException e) {
logger.warning("Failed to call is Archivable on configured archiver class: " + className);
e.printStackTrace();
}
}
}
}
return versionArchivable;
}

public boolean isSomeVersionArchived() {
if (someVersionArchived == null) {
someVersionArchived = false;
for (DatasetVersion dv : dataset.getVersions()) {
if (dv.getArchivalCopyLocation() != null) {
someVersionArchived = true;
}
}
}
return someVersionArchived;
}

private static Date getFileDateToCompare(FileMetadata fileMetadata) {
DataFile datafile = fileMetadata.getDataFile();
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/propertyFiles/Bundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1868,6 +1868,12 @@ file.dataFilesTab.versions.headers.summary=Summary
file.dataFilesTab.versions.headers.contributors=Contributors
file.dataFilesTab.versions.headers.contributors.withheld=Contributor name(s) withheld
file.dataFilesTab.versions.headers.published=Published on
file.dataFilesTab.versions.headers.archived=Archival Status
file.dataFilesTab.versions.headers.archived.success=Archived
file.dataFilesTab.versions.headers.archived.pending=Pending
file.dataFilesTab.versions.headers.archived.failure=Failed
file.dataFilesTab.versions.headers.archived.notarchived=Not Archived
file.dataFilesTab.versions.headers.archived.submit=Submit
file.dataFilesTab.versions.viewDiffBtn=View Differences
file.dataFilesTab.versions.citationMetadata=Citation Metadata:
file.dataFilesTab.versions.added=Added
Expand Down
20 changes: 19 additions & 1 deletion src/main/webapp/dataset-versions.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@
</p:column><!-- end: description column -->

<!-- contributor column -->
<p:column headerText="#{bundle['file.dataFilesTab.versions.headers.contributors']}" class="col-sm-3">
<p:column headerText="#{bundle['file.dataFilesTab.versions.headers.contributors']}" class="col-sm-2">
<ui:fragment rendered="#{!empty(versionTab.contributorNames) and !anonymized}">
<h:outputText value="#{versionTab.contributorNames}" />
</ui:fragment>
Expand All @@ -147,6 +147,24 @@
<h:outputText id="versionDate" value="#{versionTab.publicationDateAsString}" />
</ui:fragment>
</p:column><!-- end: date column -->
<p:column headerText="#{bundle['file.dataFilesTab.versions.headers.archived']}" class="col-sm-1" rendered="#{!empty(DatasetPage.dataset.id) and permissionServiceBean.on(DatasetPage.dataset).has('ViewUnpublishedDataset') and !versionTab.isDraft() and (DatasetPage.archivable or DatasetPage.someVersionArchived or not empty(versionTab.archivalCopyLocation))}">
<ui:fragment>
<ui:fragment rendered="#{'success' eq versionTab.archivalCopyLocationStatus}">
<h:outputLink id="archived" value="#{versionTab.archivalCopyLocationMessage}" target="_blank" rendered="#{DatasetPage.isSuperUser()}">
<h:outputText value="#{bundle['file.dataFilesTab.versions.headers.archived.success']}" />
</h:outputLink>
<h:outputText value="#{bundle['file.dataFilesTab.versions.headers.archived.success']}" rendered="#{!DatasetPage.isSuperUser()}"/>
</ui:fragment>
<h:outputText value="#{bundle['file.dataFilesTab.versions.headers.archived.pending']}" rendered="#{'pending' eq versionTab.archivalCopyLocationStatus}" title="#{DatasetPage.isSuperUser() ? versionTab.archivalCopyLocationMessage : ''}"/>
<h:outputText value="#{bundle['file.dataFilesTab.versions.headers.archived.failure']}" rendered="#{'failure' eq versionTab.archivalCopyLocationStatus}" title="#{DatasetPage.isSuperUser() ? versionTab.archivalCopyLocationMessage : ''}"/>
<p:commandLink rendered="#{DatasetPage.isSuperUser() and DatasetPage.versionArchivable and empty(versionTab.archivalCopyLocation)}" update="#{p:resolveClientId('datasetForm:tabView:versionsTable', view)},:messagePanel"
action="#{DatasetPage.archiveVersion(versionTab.id)}">
<h:outputText value="#{bundle['file.dataFilesTab.versions.headers.archived.submit']}"/>
</p:commandLink>
<h:outputText value="#{bundle['file.dataFilesTab.versions.headers.archived.notarchived']}" rendered="#{ empty(versionTab.archivalCopyLocation) and ((not DatasetPage.isSuperUser() and DatasetPage.someVersionArchived) or (DatasetPage.isSuperUser() and not DatasetPage.versionArchivable))}"/>

</ui:fragment>
</p:column><!-- end: archivalCopy column -->
</p:dataTable>
<!-- / VERSIONS -->
</ui:fragment>
Expand Down

0 comments on commit a97102f

Please sign in to comment.