|
14 | 14 | import edu.harvard.iq.dataverse.authorization.users.User; |
15 | 15 | import edu.harvard.iq.dataverse.batch.util.LoggingUtil; |
16 | 16 | import edu.harvard.iq.dataverse.dataaccess.ImageThumbConverter; |
| 17 | +import edu.harvard.iq.dataverse.DatasetVersion.VersionState; |
17 | 18 | import edu.harvard.iq.dataverse.engine.command.DataverseRequest; |
18 | 19 | import edu.harvard.iq.dataverse.search.IndexServiceBean; |
19 | 20 | import edu.harvard.iq.dataverse.search.SolrIndexServiceBean; |
|
26 | 27 | import java.io.File; |
27 | 28 | import java.io.IOException; |
28 | 29 | import java.sql.Timestamp; |
29 | | -import java.util.ArrayList; |
30 | | -import java.util.Date; |
31 | | -import java.util.HashMap; |
32 | | -import java.util.List; |
33 | | -import java.util.Map; |
| 30 | +import java.util.*; |
34 | 31 | import java.util.logging.Logger; |
35 | | -import java.util.Properties; |
36 | 32 |
|
37 | 33 | import edu.harvard.iq.dataverse.validation.JSONDataValidation; |
38 | 34 | import jakarta.ejb.EJB; |
@@ -468,8 +464,26 @@ public List<Dataverse> findDataversesThatLinkToThisDvId(long dataverseId) { |
468 | 464 | return dataverseLinkingService.findLinkingDataverses(dataverseId); |
469 | 465 | } |
470 | 466 |
|
| 467 | + public List<Dataset> findDatasetsThisIdHasLinkedTo(long dataverseId, boolean onlyPublished) { |
| 468 | + List<Dataset> linkedDatasets = datasetLinkingService.findLinkedDatasets(dataverseId); |
| 469 | + |
| 470 | + if (!onlyPublished) { |
| 471 | + return linkedDatasets; |
| 472 | + } |
| 473 | + |
| 474 | + List<Dataset> retList = new ArrayList(); |
| 475 | + |
| 476 | + for (Dataset ds : linkedDatasets) { |
| 477 | + if (ds.isReleased() && !ds.isDeaccessioned()) { |
| 478 | + retList.add(ds); |
| 479 | + } |
| 480 | + } |
| 481 | + |
| 482 | + return retList; |
| 483 | + } |
| 484 | + |
471 | 485 | public List<Dataset> findDatasetsThisIdHasLinkedTo(long dataverseId) { |
472 | | - return datasetLinkingService.findLinkedDatasets(dataverseId); |
| 486 | + return this.findDatasetsThisIdHasLinkedTo(dataverseId, false); |
473 | 487 | } |
474 | 488 |
|
475 | 489 | public List<Dataverse> findDataversesThatLinkToThisDatasetId(long datasetId) { |
@@ -754,21 +768,25 @@ public List<Long> findAllDataverseDataverseChildren(Long dvId) { |
754 | 768 |
|
755 | 769 | // function to recursively find ids of all children of a dataverse that are |
756 | 770 | // of type dataset |
757 | | - public List<Long> findAllDataverseDatasetChildren(Long dvId) { |
| 771 | + public List<Long> findAllDataverseDatasetChildren(Long dvId, boolean onlyPublished, boolean includeHarvested) { |
758 | 772 | // get list of Dataverse children |
759 | 773 | List<Long> dataverseChildren = findIdsByOwnerId(dvId); |
760 | 774 | // get list of Dataset children |
761 | | - List<Long> datasetChildren = datasetService.findIdsByOwnerId(dvId); |
| 775 | + List<Long> datasetChildren = datasetService.findIdsByOwnerId(dvId, onlyPublished, includeHarvested); |
762 | 776 |
|
763 | 777 | if (dataverseChildren == null) { |
764 | 778 | return datasetChildren; |
765 | 779 | } else { |
766 | 780 | for (Long childDvId : dataverseChildren) { |
767 | | - datasetChildren.addAll(findAllDataverseDatasetChildren(childDvId)); |
| 781 | + datasetChildren.addAll(findAllDataverseDatasetChildren(childDvId, onlyPublished, includeHarvested)); |
768 | 782 | } |
769 | 783 | return datasetChildren; |
770 | 784 | } |
771 | 785 | } |
| 786 | + |
| 787 | + public List<Long> findAllDataverseDatasetChildren(Long dvId) { |
| 788 | + return findAllDataverseDatasetChildren(dvId, false, false); |
| 789 | + } |
772 | 790 |
|
773 | 791 | public String addRoleAssignmentsToChildren(Dataverse owner, ArrayList<String> rolesToInherit, |
774 | 792 | boolean inheritAllRoles) { |
@@ -1257,4 +1275,36 @@ public void disableStorageQuota(StorageQuota storageQuota) { |
1257 | 1275 | public long getDataverseCount() { |
1258 | 1276 | return em.createNamedQuery("Dataverse.countAll", Long.class).getSingleResult(); |
1259 | 1277 | } |
| 1278 | + |
| 1279 | + /** |
| 1280 | + * Returns the total number of published datasets within a Dataverse collection. The number includes harvested and |
| 1281 | + * linked datasets. Datasets in subcollections are also counted. |
| 1282 | + * @param dvId ID of a Dataverse collection |
| 1283 | + * @return the total number of published datasets within that Dataverse collection |
| 1284 | + */ |
| 1285 | + public long getDatasetCount(Long dvId) { |
| 1286 | + Set<Long> dvIds = new HashSet<>(); |
| 1287 | + Deque<Long> stack = new ArrayDeque<>(); |
| 1288 | + dvIds.add(dvId); |
| 1289 | + stack.push(dvId); |
| 1290 | + |
| 1291 | + // Collect IDs of all subdataverses |
| 1292 | + while (!stack.isEmpty()) { |
| 1293 | + Long currentId = stack.pop(); |
| 1294 | + List<Long> children = em.createQuery("SELECT d.id FROM Dataverse d WHERE d.owner.id = :parentId", Long.class) |
| 1295 | + .setParameter("parentId", currentId) |
| 1296 | + .getResultList(); |
| 1297 | + |
| 1298 | + for (Long childId : children) { |
| 1299 | + if (dvIds.add(childId)) { |
| 1300 | + stack.push(childId); |
| 1301 | + } |
| 1302 | + } |
| 1303 | + } |
| 1304 | + |
| 1305 | + return em.createNamedQuery("Dataverse.getDatasetCount", Long.class) |
| 1306 | + .setParameter("ids", dvIds) |
| 1307 | + .setParameter("datasetState", VersionState.RELEASED) |
| 1308 | + .getSingleResult(); |
| 1309 | + } |
1260 | 1310 | } |
0 commit comments