Skip to content

Commit f198d22

Browse files
committed
Fix performance when checking dataset version file count
1 parent 3e5bba0 commit f198d22

2 files changed

Lines changed: 22 additions & 5 deletions

File tree

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,6 +1340,15 @@ public Long getDatasetVersionCount(Long datasetId, boolean canViewUnpublishedVer
13401340
return em.createQuery(cq).getSingleResult();
13411341
}
13421342

1343+
public boolean hasFiles(Long datasetVersionId) {
1344+
Query query = em.createNativeQuery("SELECT id FROM fileMetadata WHERE datasetversion_id="+datasetVersionId+" LIMIT 1");
1345+
try {
1346+
query.getSingleResult();
1347+
return true;
1348+
} catch (NoResultException e) {
1349+
return false;
1350+
}
1351+
}
13431352

13441353
/**
13451354
* Update the archival copy location for a specific version of a dataset.

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ public class PermissionsWrapper implements java.io.Serializable {
3333
@EJB
3434
PermissionServiceBean permissionService;
3535

36+
@EJB
37+
DatasetVersionServiceBean datasetVersionService;
38+
3639
@Inject
3740
DataverseSession session;
3841

@@ -257,15 +260,17 @@ public boolean canIssueDeleteDatasetCommand(DvObject dvo){
257260
// PUBLISH DATASET
258261
public boolean canIssuePublishDatasetCommand(DvObject dvo){
259262
User u = session.getUser();
260-
if (u != null && u.isSuperuser()) {
263+
if (u == null) {
264+
return false; // guests can not publish
265+
}
266+
if (u.isSuperuser()) {
261267
return true;
262268
}
263269
// Return false if dataset has 0 files and user want to 'publish' or 'submit for review' and 'publish dataset requires files' flag is set
264270
if (dvo.isInstanceofDataset()) {
265271
Dataverse dv =((Dataset)dvo).getOwner();
266272
if (dv != null) {
267-
List<FileMetadata> metadataList = ((Dataset) dvo).getLatestVersion().getFileMetadatas();
268-
if (metadataList.size() == 0 && dv.getEffectiveRequiresFilesToPublishDataset()) {
273+
if (!datasetVersionService.hasFiles(((Dataset) dvo).getLatestVersion().getId()) && dv.getEffectiveRequiresFilesToPublishDataset()) {
269274
return false;
270275
}
271276
}
@@ -275,12 +280,15 @@ public boolean canIssuePublishDatasetCommand(DvObject dvo){
275280

276281
// SUBMIT DATASET FOR REVIEW
277282
public boolean canIssueSubmitDatasetForReviewCommand(DvObject dvo){
283+
User u = session.getUser();
284+
if (u == null) {
285+
return false; // guests can not submit for review
286+
}
278287
// Return false if dataset has 0 files and user want to 'publish' or 'submit for review' and 'publish dataset requires files' flag is set
279288
if (dvo.isInstanceofDataset()) {
280289
Dataverse dv =((Dataset)dvo).getOwner();
281290
if (dv != null) {
282-
List<FileMetadata> metadataList = ((Dataset) dvo).getLatestVersion().getFileMetadatas();
283-
if (metadataList.size() == 0 && dv.getEffectiveRequiresFilesToPublishDataset()) {
291+
if (!datasetVersionService.hasFiles(((Dataset) dvo).getLatestVersion().getId()) && dv.getEffectiveRequiresFilesToPublishDataset()) {
284292
return false;
285293
}
286294
}

0 commit comments

Comments
 (0)