diff --git a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java index 4b31e5cf0a4..92b7f5516d1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java @@ -166,7 +166,32 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) throws Except } else { addIfNotNull(aggRes, JsonLDTerm.schemaOrg("description"), df.getDescription()); } - addIfNotNull(aggRes, JsonLDTerm.schemaOrg("name"), fmd.getLabel()); // "label" is the filename + String fileName = fmd.getLabel();// "label" is the filename + long fileSize = df.getFilesize(); + String mimeType = df.getContentType(); + String currentIngestedName = null; + boolean ingested=df.getOriginalFileName()!= null || df.getOriginalFileSize()!=null || df.getOriginalFileFormat()!=null; + if(ingested) { + if(df.getOriginalFileName()!=null) { + currentIngestedName= fileName; + fileName = df.getOriginalFileName(); + } else { + logger.warning("Missing Original file name for id: " + df.getId()); + } + if(df.getOriginalFileSize()!=null) { + fileSize = df.getOriginalFileSize(); + } else { + logger.warning("Missing Original file size for id: " + df.getId()); + } + if(df.getOriginalFileFormat()!=null) { + mimeType = df.getOriginalFileFormat(); + } else { + logger.warning("Missing Original file format for id: " + df.getId()); + } + + + } + addIfNotNull(aggRes, JsonLDTerm.schemaOrg("name"), fileName); addIfNotNull(aggRes, JsonLDTerm.restricted, fmd.isRestricted()); addIfNotNull(aggRes, JsonLDTerm.directoryLabel, fmd.getDirectoryLabel()); addIfNotNull(aggRes, JsonLDTerm.schemaOrg("version"), fmd.getVersion()); @@ -189,21 +214,20 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) throws Except if (df.getGlobalId().asString().length() != 0) { fileId = df.getGlobalId().asString(); fileSameAs = SystemConfig.getDataverseSiteUrlStatic() - + "/api/access/datafile/:persistentId?persistentId=" + fileId; + + "/api/access/datafile/:persistentId?persistentId=" + fileId + (ingested ? "&format=original":""); } else { fileId = SystemConfig.getDataverseSiteUrlStatic() + "/file.xhtml?fileId=" + df.getId(); - fileSameAs = SystemConfig.getDataverseSiteUrlStatic() + "/api/access/datafile/" + df.getId(); + fileSameAs = SystemConfig.getDataverseSiteUrlStatic() + "/api/access/datafile/" + df.getId() + (ingested ? "?format=original":""); } aggRes.add("@id", fileId); aggRes.add(JsonLDTerm.schemaOrg("sameAs").getLabel(), fileSameAs); fileArray.add(fileId); aggRes.add("@type", JsonLDTerm.ore("AggregatedResource").getLabel()); - addIfNotNull(aggRes, JsonLDTerm.schemaOrg("fileFormat"), df.getContentType()); - addIfNotNull(aggRes, JsonLDTerm.filesize, df.getFilesize()); + addIfNotNull(aggRes, JsonLDTerm.schemaOrg("fileFormat"), mimeType); + addIfNotNull(aggRes, JsonLDTerm.filesize, fileSize); addIfNotNull(aggRes, JsonLDTerm.storageIdentifier, df.getStorageIdentifier()); - addIfNotNull(aggRes, JsonLDTerm.originalFileFormat, df.getOriginalFileFormat()); - addIfNotNull(aggRes, JsonLDTerm.originalFormatLabel, df.getOriginalFormatLabel()); + addIfNotNull(aggRes, JsonLDTerm.currentIngestedName, currentIngestedName); addIfNotNull(aggRes, JsonLDTerm.UNF, df.getUnf()); addIfNotNull(aggRes, JsonLDTerm.rootDataFileId, df.getRootDataFileId()); addIfNotNull(aggRes, JsonLDTerm.previousDataFileId, df.getPreviousDataFileId()); diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonLDTerm.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonLDTerm.java index 20aeceda7de..065097709cf 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonLDTerm.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonLDTerm.java @@ -34,8 +34,11 @@ public class JsonLDTerm { public static JsonLDTerm categories = JsonLDTerm.DVCore("categories"); public static JsonLDTerm filesize = JsonLDTerm.DVCore("filesize"); public static JsonLDTerm storageIdentifier = JsonLDTerm.DVCore("storageIdentifier"); + @Deprecated public static JsonLDTerm originalFileFormat = JsonLDTerm.DVCore("originalFileFormat"); + @Deprecated public static JsonLDTerm originalFormatLabel = JsonLDTerm.DVCore("originalFormatLabel"); + public static JsonLDTerm currentIngestedName= JsonLDTerm.DVCore("currentIngestedName"); public static JsonLDTerm UNF = JsonLDTerm.DVCore("UNF"); public static JsonLDTerm rootDataFileId = JsonLDTerm.DVCore("rootDataFileId"); public static JsonLDTerm previousDataFileId = JsonLDTerm.DVCore("previousDataFileId"); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/BagIT.java b/src/test/java/edu/harvard/iq/dataverse/api/BagIT.java new file mode 100644 index 00000000000..4ac76ac846d --- /dev/null +++ b/src/test/java/edu/harvard/iq/dataverse/api/BagIT.java @@ -0,0 +1,78 @@ +package edu.harvard.iq.dataverse.api; + +import com.jayway.restassured.RestAssured; +import com.jayway.restassured.response.Response; +import edu.harvard.iq.dataverse.engine.command.impl.LocalSubmitToArchiveCommand; +import edu.harvard.iq.dataverse.settings.SettingsServiceBean; +import static javax.ws.rs.core.Response.Status.CREATED; +import static javax.ws.rs.core.Response.Status.OK; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +public class BagIT { + + @BeforeClass + public static void setUpClass() { + + RestAssured.baseURI = UtilIT.getRestAssuredBaseUri(); + + Response setArchiverClassName = UtilIT.setSetting(SettingsServiceBean.Key.ArchiverClassName, LocalSubmitToArchiveCommand.class.getCanonicalName()); + setArchiverClassName.then().assertThat() + .statusCode(OK.getStatusCode()); + + Response setArchiverSettings = UtilIT.setSetting(SettingsServiceBean.Key.ArchiverSettings, ":BagItLocalPath, :BagGeneratorThreads"); + setArchiverSettings.then().assertThat() + .statusCode(OK.getStatusCode()); + + Response setBagItLocalPath = UtilIT.setSetting(":BagItLocalPath", "/tmp"); + setBagItLocalPath.then().assertThat() + .statusCode(OK.getStatusCode()); + + } + + @Test + public void testBagItExport() { + + Response createUser = UtilIT.createRandomUser(); + createUser.then().assertThat().statusCode(OK.getStatusCode()); + String username = UtilIT.getUsernameFromResponse(createUser); + String apiToken = UtilIT.getApiTokenFromResponse(createUser); + Response toggleSuperuser = UtilIT.makeSuperUser(username); + toggleSuperuser.then().assertThat() + .statusCode(OK.getStatusCode()); + + Response createDataverse = UtilIT.createRandomDataverse(apiToken); + createDataverse.then().assertThat().statusCode(CREATED.getStatusCode()); + String dataverseAlias = UtilIT.getAliasFromResponse(createDataverse); + Integer dataverseId = UtilIT.getDataverseIdFromResponse(createDataverse); + + Response createDataset = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken); + createDataset.prettyPrint(); + createDataset.then().assertThat() + .statusCode(CREATED.getStatusCode()); + + String datasetPid = UtilIT.getDatasetPersistentIdFromResponse(createDataset); + + Response publishDataverse = UtilIT.publishDataverseViaNativeApi(dataverseAlias, apiToken); + publishDataverse.then().assertThat().statusCode(OK.getStatusCode()); + Response publishDataset = UtilIT.publishDatasetViaNativeApi(datasetPid, "major", apiToken); + publishDataset.then().assertThat().statusCode(OK.getStatusCode()); + + Response archiveDataset = UtilIT.archiveDataset(datasetPid, "1.0", apiToken); + archiveDataset.prettyPrint(); + archiveDataset.then().assertThat().statusCode(OK.getStatusCode()); + + } + + @AfterClass + public static void tearDownClass() { + + // Not checking if delete happened. Hopefully, it did. + UtilIT.deleteSetting(SettingsServiceBean.Key.ArchiverClassName); + UtilIT.deleteSetting(SettingsServiceBean.Key.ArchiverSettings); + UtilIT.deleteSetting(":BagItLocalPath"); + + } + +} diff --git a/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java b/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java index 5b8048a391f..716cd1e8d84 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java @@ -1879,6 +1879,14 @@ static Response deleteSetting(SettingsServiceBean.Key settingKey) { return response; } + /** + * @param settingKey Include the colon like :BagItLocalPath + */ + static Response deleteSetting(String settingKey) { + Response response = given().when().delete("/api/admin/settings/" + settingKey); + return response; + } + static Response getSetting(SettingsServiceBean.Key settingKey) { Response response = given().when().get("/api/admin/settings/" + settingKey); return response; @@ -1889,6 +1897,14 @@ static Response setSetting(SettingsServiceBean.Key settingKey, String value) { return response; } + /** + * @param settingKey Include the colon like :BagItLocalPath + */ + public static Response setSetting(String settingKey, String value) { + Response response = given().body(value).when().put("/api/admin/settings/" + settingKey); + return response; + } + static Response getRoleAssignmentsOnDataverse(String dataverseAliasOrId, String apiToken) { String url = "/api/dataverses/" + dataverseAliasOrId + "/assignments"; return given() @@ -2927,6 +2943,20 @@ static Response getDatasetVersionArchivalStatus(Integer datasetId, String versio .get("/api/datasets/" + datasetId + "/" + version + "/archivalStatus"); return response; } + + static Response archiveDataset(String idOrPersistentIdOfDataset, String version, String apiToken) { + String idInPath = idOrPersistentIdOfDataset; + String optionalQueryParam = ""; + if (!NumberUtils.isNumber(idOrPersistentIdOfDataset)) { + idInPath = ":persistentId"; + optionalQueryParam = "?persistentId=" + idOrPersistentIdOfDataset; + } + Response response = given() + .header(API_TOKEN_HTTP_HEADER, apiToken) + .post("/api/admin/submitDatasetVersionToArchive/" + idInPath + "/" + version + optionalQueryParam); + return response; + } + static Response setDatasetVersionArchivalStatus(Integer datasetId, String version, String apiToken, String status, String message) { Response response = given() .header(API_TOKEN_HTTP_HEADER, apiToken).contentType("application/json; charset=utf-8").body("{\"status\":\"" + status + "\", \"message\":\"" + message + "\"}") diff --git a/tests/integration-tests.txt b/tests/integration-tests.txt index 71ba38e0aae..85b37c79835 100644 --- a/tests/integration-tests.txt +++ b/tests/integration-tests.txt @@ -1 +1 @@ -DataversesIT,DatasetsIT,SwordIT,AdminIT,BuiltinUsersIT,UsersIT,UtilIT,ConfirmEmailIT,FileMetadataIT,FilesIT,SearchIT,InReviewWorkflowIT,HarvestingServerIT,MoveIT,MakeDataCountApiIT,FileTypeDetectionIT,EditDDIIT,ExternalToolsIT,AccessIT,DuplicateFilesIT,DownloadFilesIT,LinkIT,DeleteUsersIT,DeactivateUsersIT,AuxiliaryFilesIT,InvalidCharactersIT,LicensesIT,NotificationsIT +DataversesIT,DatasetsIT,SwordIT,AdminIT,BuiltinUsersIT,UsersIT,UtilIT,ConfirmEmailIT,FileMetadataIT,FilesIT,SearchIT,InReviewWorkflowIT,HarvestingServerIT,MoveIT,MakeDataCountApiIT,FileTypeDetectionIT,EditDDIIT,ExternalToolsIT,AccessIT,DuplicateFilesIT,DownloadFilesIT,LinkIT,DeleteUsersIT,DeactivateUsersIT,AuxiliaryFilesIT,InvalidCharactersIT,LicensesIT,NotificationsIT,BagIT