|
1 | 1 | package edu.harvard.iq.dataverse.dataverse.featured; |
2 | 2 |
|
3 | | -import com.google.common.collect.Lists; |
4 | 3 | import edu.harvard.iq.dataverse.*; |
5 | | -import edu.harvard.iq.dataverse.authorization.Permission; |
6 | | -import edu.harvard.iq.dataverse.authorization.users.User; |
7 | | -import edu.harvard.iq.dataverse.engine.command.DataverseRequest; |
8 | 4 | import edu.harvard.iq.dataverse.settings.JvmSettings; |
9 | 5 | import edu.harvard.iq.dataverse.util.BundleUtil; |
10 | 6 | import edu.harvard.iq.dataverse.util.FileUtil; |
|
13 | 9 | import jakarta.inject.Named; |
14 | 10 | import jakarta.persistence.EntityManager; |
15 | 11 | import jakarta.persistence.PersistenceContext; |
16 | | -import jakarta.servlet.http.HttpServletRequest; |
17 | 12 |
|
18 | 13 | import java.io.File; |
19 | 14 | import java.io.IOException; |
|
22 | 17 | import java.nio.file.Files; |
23 | 18 | import java.nio.file.Path; |
24 | 19 | import java.nio.file.StandardCopyOption; |
25 | | -import java.util.EnumSet; |
| 20 | +import java.util.ArrayList; |
26 | 21 | import java.util.List; |
| 22 | +import java.util.logging.Logger; |
27 | 23 |
|
28 | 24 | @Stateless |
29 | 25 | @Named |
30 | 26 | public class DataverseFeaturedItemServiceBean implements Serializable { |
| 27 | + private static final Logger logger = Logger.getLogger(DataverseFeaturedItemServiceBean.class.getCanonicalName()); |
31 | 28 |
|
32 | 29 | public static class InvalidImageFileException extends Exception { |
33 | 30 | public InvalidImageFileException(String message) { |
@@ -70,6 +67,25 @@ public void deleteAllByDvObjectId(Long id) { |
70 | 67 | .executeUpdate(); |
71 | 68 | } |
72 | 69 |
|
| 70 | + public void deleteInvalidatedFeaturedItemsByDataset(Dataset dataset) { |
| 71 | + // Delete any Featured Items that contain Datafiles that were removed or restricted in the latest published version |
| 72 | + List<DataverseFeaturedItem> featuredItems = findAllByDataverseOrdered(dataset.getOwner()); |
| 73 | + for (DataverseFeaturedItem featuredItem : featuredItems) { |
| 74 | + if (featuredItem.getDvObject() != null && featuredItem.getType().equalsIgnoreCase(DataverseFeaturedItem.TYPES.DATAFILE.name())) { |
| 75 | + DataFile df = (DataFile) featuredItem.getDvObject(); |
| 76 | + List<Long> latestVersionFileIds = new ArrayList<>(); |
| 77 | + dataset.getLatestVersion().getFileMetadatas().stream() |
| 78 | + .map(FileMetadata::getId) |
| 79 | + .forEachOrdered(latestVersionFileIds::add); |
| 80 | + // If the datafile is restricted or part of this dataset but not in the latest version we need to delete the featured item |
| 81 | + if (df.isRestricted() || (dataset.getFiles().contains(df) && !latestVersionFileIds.contains(df.getId()))) { |
| 82 | + logger.fine("Deleting invalidated Featured Item for " + (df.isRestricted() ? "Restricted" : "Deleted") + "Datafile ID: " + df.getId()); |
| 83 | + deleteAllByDvObjectId(df.getId()); |
| 84 | + } |
| 85 | + } |
| 86 | + } |
| 87 | + } |
| 88 | + |
73 | 89 | public List<DataverseFeaturedItem> findAllByDataverseOrdered(Dataverse dataverse) { |
74 | 90 | List<DataverseFeaturedItem> items = em |
75 | 91 | .createNamedQuery("DataverseFeaturedItem.findByDataverseOrderedByDisplayOrder", DataverseFeaturedItem.class) |
|
0 commit comments