Skip to content

Commit c0b09bb

Browse files
authored
Merge pull request IQSS#10979 from GlobalDataverseCommunityConsortium/IQSS-10975
IQSS 10975 - fix file replace
2 parents 9ee8754 + da06fea commit c0b09bb

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

Diff for: doc/release-notes/10975-fix-file-replace-via-api

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
A bug that caused replacing files via API when file PIDs were enabled has been fixed.
2+
3+
For testing purposes, the FAKE PID provider can now be used with file PIDs enabled. (The FAKE provider is not recommended for any production use.)

Diff for: src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetVersionCommand.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,8 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
230230
if (!theDataset.getOrCreateEditVersion().equals(fmd.getDatasetVersion())) {
231231
fmd = FileMetadataUtil.getFmdForFileInEditVersion(fmd, theDataset.getOrCreateEditVersion());
232232
}
233-
}
233+
}
234+
fmd.setDataFile(ctxt.em().merge(fmd.getDataFile()));
234235
fmd = ctxt.em().merge(fmd);
235236

236237
// There are two datafile cases as well - the file has been released, so we're
@@ -241,20 +242,23 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
241242
ctxt.engine().submit(new DeleteDataFileCommand(fmd.getDataFile(), getRequest()));
242243
// and remove the file from the dataset's list
243244
theDataset.getFiles().remove(fmd.getDataFile());
245+
ctxt.em().remove(fmd.getDataFile());
246+
ctxt.em().remove(fmd);
244247
} else {
245-
// if we aren't removing the file, we need to explicitly remove the fmd from the
246-
// context and then remove it from the datafile's list
247248
ctxt.em().remove(fmd);
249+
// if we aren't removing the file, we need to remove it from the datafile's list
248250
FileMetadataUtil.removeFileMetadataFromList(fmd.getDataFile().getFileMetadatas(), fmd);
249251
}
250-
// In either case, to fully remove the fmd, we have to remove any other possible
252+
// In either case, we've removed from the context
253+
// And, to fully remove the fmd, we have to remove any other possible
251254
// references
252255
// From the datasetversion
253256
FileMetadataUtil.removeFileMetadataFromList(theDataset.getOrCreateEditVersion().getFileMetadatas(), fmd);
254257
// and from the list associated with each category
255258
for (DataFileCategory cat : theDataset.getCategories()) {
256259
FileMetadataUtil.removeFileMetadataFromList(cat.getFileMetadatas(), fmd);
257260
}
261+
258262
}
259263
for(FileMetadata fmd: theDataset.getOrCreateEditVersion().getFileMetadatas()) {
260264
logger.fine("FMD: " + fmd.getId() + " for file: " + fmd.getDataFile().getId() + "is in final draft version");

Diff for: src/main/java/edu/harvard/iq/dataverse/pidproviders/doi/fake/FakeDOIProvider.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,11 @@ public List<String> getProviderInformation() {
4444
}
4545

4646
@Override
47-
public String createIdentifier(DvObject dvo) throws Throwable {
48-
return "fakeIdentifier";
47+
public String createIdentifier(DvObject dvObject) throws Throwable {
48+
if(dvObject.getIdentifier() == null || dvObject.getIdentifier().isEmpty() ){
49+
dvObject = generatePid(dvObject);
50+
}
51+
return dvObject.getIdentifier();
4952
}
5053

5154
@Override

0 commit comments

Comments
 (0)