Skip to content

Commit 286ca7c

Browse files
committed
wip
1 parent 7930345 commit 286ca7c

File tree

6 files changed

+133
-10
lines changed

6 files changed

+133
-10
lines changed

src/main/java/nl/knaw/dans/dvingest/core/bagprocessor/FilesEditor.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import lombok.RequiredArgsConstructor;
2222
import lombok.extern.slf4j.Slf4j;
2323
import nl.knaw.dans.dvingest.core.service.DataverseService;
24+
import nl.knaw.dans.dvingest.core.service.FilesInDataset;
2425
import nl.knaw.dans.dvingest.core.service.UtilityServices;
2526
import nl.knaw.dans.dvingest.core.yaml.EditFiles;
2627
import nl.knaw.dans.lib.dataverse.DataverseException;
@@ -40,7 +41,7 @@
4041
import java.util.stream.Collectors;
4142

4243
@Slf4j
43-
@RequiredArgsConstructor
44+
4445
public class FilesEditor {
4546
@NonNull
4647
private final UUID depositId;
@@ -57,9 +58,19 @@ public class FilesEditor {
5758
private String pid;
5859

5960
@Getter(AccessLevel.PACKAGE) // Getter for unit testing
60-
private final Map<String, FileMeta> filesInDataset = new java.util.HashMap<>();
61+
// private final Map<String, FileMeta> filesInDataset = new java.util.HashMap<>();
6162
private boolean filesRetrieved = false;
6263

64+
private FilesInDataset filesInDataset;
65+
66+
public FilesEditor(UUID depositId, Path dataDir, EditFiles editFiles, DataverseService dataverseService, UtilityServices utilityServices) {
67+
this.depositId = depositId;
68+
this.dataDir = dataDir;
69+
this.editFiles = editFiles;
70+
this.dataverseService = dataverseService;
71+
this.utilityServices = utilityServices;
72+
}
73+
6374
public void editFiles(String pid) throws IOException, DataverseException {
6475
/*
6576
* TODO:
@@ -77,6 +88,8 @@ public void editFiles(String pid) throws IOException, DataverseException {
7788
}
7889
}
7990

91+
filesInDataset = dataverseService.getFilesInDataset(pid);
92+
8093
log.debug("Start editing files for deposit {}", depositId);
8194
this.pid = pid;
8295
if (editFiles != null) {
@@ -97,7 +110,7 @@ private void deleteFiles() throws IOException, DataverseException {
97110
log.debug("Start deleting {} files for deposit {}", depositId, editFiles.getDeleteFiles().size());
98111
for (var file : editFiles.getDeleteFiles()) {
99112
log.debug("Deleting file: {}", file);
100-
var fileToDelete = filesInDataset().get(file);
113+
var fileToDelete = filesInDataset.get(file);
101114
if (fileToDelete == null) {
102115
throw new IllegalArgumentException("File to delete not found in dataset: " + file);
103116
}

src/main/java/nl/knaw/dans/dvingest/core/dansbag/EditFilesComposer.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818
import lombok.AllArgsConstructor;
1919
import lombok.extern.slf4j.Slf4j;
2020
import nl.knaw.dans.dvingest.core.bagprocessor.DataversePath;
21+
import nl.knaw.dans.dvingest.core.dansbag.mapper.mapping.FileElement;
2122
import nl.knaw.dans.dvingest.core.yaml.AddEmbargo;
2223
import nl.knaw.dans.dvingest.core.yaml.EditFiles;
2324
import nl.knaw.dans.dvingest.core.yaml.FromTo;
2425
import nl.knaw.dans.ingest.core.domain.Deposit;
2526
import nl.knaw.dans.ingest.core.domain.FileInfo;
2627
import nl.knaw.dans.ingest.core.service.XPathEvaluator;
27-
import nl.knaw.dans.dvingest.core.dansbag.mapper.mapping.FileElement;
2828
import nl.knaw.dans.lib.dataverse.model.file.FileMeta;
2929

3030
import java.nio.file.Path;
@@ -56,8 +56,6 @@ public class EditFilesComposer {
5656

5757
public EditFiles composeEditFiles() {
5858
var editFiles = new EditFiles();
59-
60-
// Get file information from files.xml
6159
var pathFileInfoMap = getFileInfo(dansDeposit);
6260

6361
// TODO: in update also ignore any files that have not changed (content or metadata)
@@ -69,6 +67,7 @@ public EditFiles composeEditFiles() {
6967
editFiles.setAddRestrictedFiles(getRestrictedFilesToAdd(pathFileInfoMap));
7068
editFiles.setUpdateFileMetas(getUpdatedFileMetas(pathFileInfoMap));
7169
editFiles.setDeleteFiles(getDeleteFiles(pathFileInfoMap));
70+
editFiles.setMoveFiles(getFileMovements());
7271

7372
var dateAvailable = getDateAvailable(dansDeposit);
7473
var filePathsToEmbargo = getEmbargoedFiles(pathFileInfoMap, dateAvailable);
@@ -133,6 +132,15 @@ protected List<String> getDeleteFiles(Map<Path, FileInfo> files) {
133132
return List.of();
134133
}
135134

135+
/**
136+
* Get the files that should be moved.
137+
*
138+
* @return a list of FromTo objects that specify the files to move and their new location
139+
*/
140+
protected List<FromTo> getFileMovements() {
141+
return List.of();
142+
}
143+
136144
private List<Path> getEmbargoedFiles(Map<Path, FileInfo> files, Instant dateAvailable) {
137145
var now = Instant.now();
138146
if (dateAvailable.isAfter(now)) {
@@ -183,8 +191,6 @@ private List<FromTo> getFilesToRenameAtUpload(Map<Path, FileInfo> files) {
183191
return fromTos;
184192
}
185193

186-
187-
188194
// TODO: move to mapping package
189195
private Instant getDateAvailable(Deposit deposit) {
190196
return XPathEvaluator.strings(deposit.getDdm(), "/ddm:DDM/ddm:profile/ddm:available")

src/main/java/nl/knaw/dans/dvingest/core/dansbag/EditFilesComposerForUpdate.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package nl.knaw.dans.dvingest.core.dansbag;
1717

18+
import nl.knaw.dans.dvingest.core.service.DataverseService;
1819
import nl.knaw.dans.ingest.core.domain.Deposit;
1920
import nl.knaw.dans.ingest.core.domain.FileInfo;
2021
import nl.knaw.dans.lib.dataverse.model.file.FileMeta;
@@ -28,14 +29,22 @@
2829
* Overrides the methods in EditFilesComposer to handle the case of an update to an existing dataset.
2930
*/
3031
public class EditFilesComposerForUpdate extends EditFilesComposer {
32+
private final DataverseService dataverseService;
3133

32-
public EditFilesComposerForUpdate(Deposit dansDeposit, Pattern fileExclusionPattern, List<String> embargoExclusions) {
34+
public EditFilesComposerForUpdate(Deposit dansDeposit, Pattern fileExclusionPattern, List<String> embargoExclusions, DataverseService dataverseService) {
3335
super(dansDeposit, fileExclusionPattern, embargoExclusions);
36+
this.dataverseService = dataverseService;
3437
}
3538

3639
@Override
3740
protected List<String> getFilesToIgnore(Map<Path, FileInfo> files) {
38-
return super.getFilesToIgnore(files);
41+
super.getFilesToIgnore(files);
42+
43+
44+
45+
46+
47+
3948
}
4049

4150
@Override

src/main/java/nl/knaw/dans/dvingest/core/service/DataverseService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,6 @@ public interface DataverseService {
7272
void addEmbargo(String pid, Embargo embargo) throws IOException, DataverseException;
7373

7474
List<String> findDoiByMetadataField(String fieldName, String value) throws IOException, DataverseException;
75+
76+
FilesInDataset getFilesInDataset(String pid);
7577
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package nl.knaw.dans.dvingest.core.service;
2+
3+
import nl.knaw.dans.lib.dataverse.DataverseException;
4+
import nl.knaw.dans.lib.dataverse.model.file.FileMeta;
5+
6+
import java.io.IOException;
7+
8+
/**
9+
* Interface for a service that keeps track of the files in a dataset. The key to each file is its path in the dataset, i.e. the combination of label and directoryLabel.
10+
*/
11+
public interface FilesInDataset {
12+
13+
/**
14+
* Gets the FileMeta object for the file with the same path as the given FileMeta object.
15+
*
16+
* @param fileMeta the FileMeta object with the path of the file to get
17+
* @return the FileMeta object for the file with the same path as the given FileMeta object, or null if no such file exists
18+
*/
19+
FileMeta get(FileMeta fileMeta) throws IOException, DataverseException;
20+
21+
/**
22+
* Adds or overwrites the FileMeta object for the file with the same path as the given FileMeta object.
23+
*
24+
* @param fileMeta the FileMeta object to put
25+
*/
26+
void put(FileMeta fileMeta) throws IOException, DataverseException;
27+
28+
/**
29+
* Removes the FileMeta object for the file with the same path as the given FileMeta object.
30+
*
31+
* @param fileMeta the FileMeta object to remove
32+
*/
33+
void remove(FileMeta fileMeta) throws IOException, DataverseException;
34+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package nl.knaw.dans.dvingest.core.service;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import nl.knaw.dans.dvingest.core.bagprocessor.DataversePath;
5+
import nl.knaw.dans.lib.dataverse.DataverseException;
6+
import nl.knaw.dans.lib.dataverse.model.file.FileMeta;
7+
8+
import java.io.IOException;
9+
import java.util.Map;
10+
11+
@Slf4j
12+
public class FilesInDatasetImpl implements FilesInDataset {
13+
private final Map<String, FileMeta> filesInDataset = new java.util.HashMap<>();
14+
private final DataverseService dataverseService;
15+
private final String pid;
16+
private boolean filesRetrieved = false;
17+
18+
public FilesInDatasetImpl(String pid, DataverseService dataverseService) {
19+
this.dataverseService = dataverseService;
20+
this.pid = pid;
21+
}
22+
23+
@Override
24+
public FileMeta get(FileMeta fileMeta) throws IOException, DataverseException {
25+
return filesInDataset().get(getPath(fileMeta));
26+
}
27+
28+
@Override
29+
public void put(FileMeta fileMeta) throws IOException, DataverseException {
30+
filesInDataset().put(getPath(fileMeta), fileMeta);
31+
32+
}
33+
34+
@Override
35+
public void remove(FileMeta fileMeta) throws IOException, DataverseException {
36+
filesInDataset().remove(getPath(fileMeta));
37+
}
38+
39+
private Map<String, FileMeta> filesInDataset() throws IOException, DataverseException {
40+
if (!filesRetrieved) {
41+
log.debug("Retrieving files in dataset for pid {}", pid);
42+
var files = dataverseService.getFiles(pid);
43+
for (var file : files) {
44+
filesInDataset.put(getPath(file), file);
45+
}
46+
filesRetrieved = true;
47+
log.debug("Retrieved {} files in dataset for pid {}", files.size(), pid);
48+
}
49+
else {
50+
log.debug("Files in dataset already retrieved for pid {}", pid);
51+
}
52+
return filesInDataset;
53+
}
54+
55+
private String getPath(FileMeta file) {
56+
var dataversePath = new DataversePath(file.getDirectoryLabel(), file.getLabel());
57+
return dataversePath.toString();
58+
}
59+
}

0 commit comments

Comments
 (0)