diff --git a/doc/release-notes/issue-10523.md b/doc/release-notes/issue-10523.md new file mode 100644 index 00000000000..3ce292646a7 --- /dev/null +++ b/doc/release-notes/issue-10523.md @@ -0,0 +1,6 @@ + +## Developer Updates + +### Writing External Exporters + +The getDatasetFileDetails data structure now contains "directoryLabel" (file path). See #10523 and #11618. \ No newline at end of file diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java index 592a893083c..9a51eb8b745 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java @@ -864,6 +864,7 @@ public static JsonObjectBuilder json(DataFile df, FileMetadata fileMetadata, boo } fileName = fileMetadata.getLabel(); + String directoryLabel = fileMetadata.getDirectoryLabel(); GlobalId filePid = df.getGlobalId(); String pidURL = (filePid!=null)? filePid.asURL(): null; //For backward compatibility - prior to #8674, asString() returned "" for the value when no PID exists. @@ -907,6 +908,7 @@ public static JsonObjectBuilder json(DataFile df, FileMetadata fileMetadata, boo .add("tabularTags", getTabularFileTags(df)) .add("creationDate", df.getCreateDateFormattedYYYYMMDD()) .add("publicationDate", df.getPublicationDateFormattedYYYYMMDD()) + .add("directoryLabel", directoryLabel) .add("lastUpdateTime", format(fileMetadata.getDatasetVersion().getLastUpdateTime())); Dataset dfOwner = df.getOwner(); if (dfOwner != null) { diff --git a/src/test/java/edu/harvard/iq/dataverse/export/InternalExportProviderTest.java b/src/test/java/edu/harvard/iq/dataverse/export/InternalExportProviderTest.java new file mode 100644 index 00000000000..c072788735e --- /dev/null +++ b/src/test/java/edu/harvard/iq/dataverse/export/InternalExportProviderTest.java @@ -0,0 +1,54 @@ +package edu.harvard.iq.dataverse.export; + +import edu.harvard.iq.dataverse.DataFile; +import edu.harvard.iq.dataverse.DataTable; +import edu.harvard.iq.dataverse.DatasetVersion; +import edu.harvard.iq.dataverse.FileMetadata; +import jakarta.json.JsonArray; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.when; + +public class InternalExportProviderTest { + + /** + * this is a unit-test for seeing why the directory-labels are + * not showing in the exported data and how best to remedy the case + */ + @Test + public void getDatasetFileDetailsVanilla() throws Exception { + + DatasetVersion mockDV = Mockito.mock(DatasetVersion.class); + List metadataList = new ArrayList<>(); + FileMetadata metadata = new FileMetadata(); + metadata.setId(1L); + metadata.setDirectoryLabel("some/directory/label"); + metadata.setLabel("some-silly-label"); + + DataFile datafile = new DataFile(); + datafile.setId(1L); + metadata.setDataFile(datafile); + metadata.setDatasetVersion(mockDV); + + List dataTables = new ArrayList<>(); + DataTable dataTable = new DataTable(); + dataTable.setOriginalFileName("some_silly_original_file_name"); + dataTables.add(dataTable); + + datafile.setDataTables(dataTables); + + metadataList.add(metadata); + when(mockDV.getFileMetadatas()).thenReturn(metadataList); + + InternalExportDataProvider provider = new InternalExportDataProvider(mockDV); + + JsonArray json = provider.getDatasetFileDetails(); + assertTrue(json.toString().contains("some/directory/label")); + } + +}