diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java index a9d094930ddd750542d965e578f4b47f2a474096..d91429f59726884bf0aefc7f7507112e24ed3d76 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java @@ -216,19 +216,20 @@ public class IDIOMImages implements RecordDelivererInterface, RecordListDelivere Document doc = builder.parse(new InputSource(new StringReader(immByTGObject.getXML()))); metadataMets.setAny(doc.getDocumentElement()); conedaKorRecord.setMetadata(metadataMets); - if (changedID.contains(".")) { - conedaKorRecord.setHeader(buildOAIPMHRecordHeader( - OAIPMHUtilities.datestampAsString(immByTGObject.getCreationDate()), - changedID.substring(0, changedID.indexOf(".")))); - } else { - conedaKorRecord.setHeader(buildOAIPMHRecordHeader( - OAIPMHUtilities.datestampAsString(immByTGObject.getCreationDate()), changedID)); - } + + // Use base URI for IDIOM image delivery! + String tgBaseURI = OAIPMHUtilities.getTextGridBaseURI(changedID); + conedaKorRecord.setHeader(buildOAIPMHRecordHeader( + OAIPMHUtilities.datestampAsString(immByTGObject.getCreationDate()), tgBaseURI)); singleImageMetsMods.setRecord(conedaKorRecord); } catch (ParserConfigurationException | SAXException | CrudClientException e) { - log.severe("error! " + e.getClass().getName() + ": " + e.getMessage()); + String message = + "ERROR getting IDIOM METS record from TG-crud! Maybe renew Session ID in OAIPMH config?" + + e.getClass().getName() + ": " + e.getMessage(); + log.warning(message); + return null; } diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java index f3bc1d522e34836cdf53720ea6b8ff92603b3eaf..7973213590b57eef9e3182a2e9833474d7b5c8cf 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java @@ -24,7 +24,7 @@ import info.textgrid.middleware.oaipmh.RecordType; /** * @author Maximilian Brodhun, SUB Göttingen * @author Stefan E. Funk, SUB Göttingen - * @version 2022-09-27 + * @version 2022-10-04 * @since 2019-03-12 */ @Component @@ -104,9 +104,9 @@ public class RecordDelivererIDIOM extends RecordDelivererAbstract { } catch (JSONException | ParserConfigurationException | SAXException | IOException | ParseException | NoSuchElementException e) { - log.severe("error! " + e.getClass().getName() + ": " + e.getMessage()); - // TODO Auto-generated catch block - e.printStackTrace(); + String message = "ERROR getting IDIOM METS record for ID " + id + "! " + + e.getClass().getName() + ": " + e.getMessage(); + log.warning(message); } } @@ -119,14 +119,19 @@ public class RecordDelivererIDIOM extends RecordDelivererAbstract { // Fixes #64 if (idi != null) { this.record = idi.getRecord(); + } else { + String message = "ERROR getting IDIOM IMAGE record for ID " + id + "!"; + log.warning(message); } } // No setSpec needed here! // TODO Why not?? String setSpec = ""; + // We need to have the base URI here in header (and record), it is used as Record ID of Mayan + // artifacts here! HeaderType header = - OAIPMHUtilities.computeResponseHeader(this.dateOfObjectCreation, textgridURI, setSpec); + OAIPMHUtilities.computeResponseHeader(this.dateOfObjectCreation, textgridBaseURI, setSpec); this.record.setHeader(header); grt.setRecord(this.record); diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/OAIPMHUtilitiesOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/OAIPMHUtilitiesOnline.java index 5f1985a7933a01e353eecf3a0cde58894ee0a6f8..d912f08a2f7c999ab98add8f2194be8fce9ae392 100644 --- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/OAIPMHUtilitiesOnline.java +++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/OAIPMHUtilitiesOnline.java @@ -21,6 +21,7 @@ import org.apache.cxf.transport.http.HTTPConduit; import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; import org.apache.http.HttpStatus; import info.textgrid.middleware.OAIPMHProducer; +import info.textgrid.middleware.OAIPMHUtilities; import info.textgrid.middleware.test.online.dh.TestDHOAIPMHOnline; /** @@ -323,8 +324,8 @@ public class OAIPMHUtilitiesOnline { recordsExpectedPerRequest, loopCount, threadName); // Test if the header identifiers are sound. - if (theVerb.equals(VERB_LIST_RECORDS)) { - examineTGHeader(responseString, recordsExpectedPerRequest); + if (theVerb.equals(VERB_LIST_RECORDS) || theVerb.equals(VERB_LIST_IDENTIFIERS)) { + examineTGHeaderIDs(responseString, theMetadataPrefix); } // Test general metadata content (if verb is listRecords!), must go conform with the metadata @@ -357,7 +358,7 @@ public class OAIPMHUtilitiesOnline { // Test if the header identifiers are sound. if (theVerb.equals(VERB_LIST_RECORDS)) { - examineTGHeader(responseString, recordsExpectedPerRequest); + examineTGHeaderIDs(responseString, theMetadataPrefix); } // Test general metadata content (if verb is listRecords!), must go conform with the @@ -529,23 +530,6 @@ public class OAIPMHUtilitiesOnline { } } - /** - * <p> - * Check for correct metadata content according to metadata prefix --> We do need to check if we - * have different identifiers in the response. - * </p> - * - * @param theResponseString - * @param recordsExpectedPerRequest - */ - private static void examineTGHeader(String theResponseString, int recordsExpectedPerRequest) { - boolean IDSUnique = examineTGHeaderIDs(theResponseString); - if (IDSUnique) { - String message = "Duplicate IDs in the response!"; - assertTrue(message, false); - } - } - /** * <p> * Creates a hash set containing all the ID values from a certain tag. Used to count elements such @@ -554,11 +538,10 @@ public class OAIPMHUtilitiesOnline { * </p> * * @param theResponseString - * @return + * @param theMetadataPrefix */ - private static boolean examineTGHeaderIDs(String theResponseString) { + public static void examineTGHeaderIDs(String theResponseString, String theMetadataPrefix) { - boolean result = false; HashSet<String> idHash = new HashSet<String>(); int startID = 0; @@ -585,7 +568,10 @@ public class OAIPMHUtilitiesOnline { assertTrue(message, false); } - return result; + // Check for revision URIs in IDIOM responses. + for (String u : idHash) { + examineTGIdentifiers(u, theMetadataPrefix); + } } // ** @@ -848,4 +834,24 @@ public class OAIPMHUtilitiesOnline { } } + /** + * @param theIdentifier + * @param theMetadataPrefix + */ + private static void examineTGIdentifiers(String theIdentifier, String theMetadataPrefix) { + if (theMetadataPrefix.equals(OAI_IDIOMMETS_PREFIX)) { + if (!OAIPMHUtilities.getTextGridBaseURI(theIdentifier).equals(theIdentifier)) { + String message = + "ERROR IN OAIPMH RESPONSE: identifier " + theIdentifier + " is NOT a base URI!"; + assertTrue(message, false); + } + } else { + if (OAIPMHUtilities.getTextGridBaseURI(theIdentifier).equals(theIdentifier)) { + String message = + "ERROR IN OAIPMH RESPONSE: identifier " + theIdentifier + " MUST NOT BE a base URI!"; + assertTrue(message, false); + } + } + } + } diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGGetRecordOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGGetRecordOnline.java index 2eb8157fffc99f981dfb6357c16ca40a84e9c308..4db99b4f0f93e87d4911cb36c581caef9e9dd14d 100644 --- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGGetRecordOnline.java +++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGGetRecordOnline.java @@ -173,6 +173,9 @@ public class TestTGGetRecordOnline { assertTrue(message, false); } + // Test OAI header. + OAIPMHUtilitiesOnline.examineTGHeaderIDs(response, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX); + System.out.println("\tresponse: " + response); System.out.println(OAIPMHUtilitiesOnline.OK); } @@ -201,6 +204,9 @@ public class TestTGGetRecordOnline { assertTrue(message, false); } + // Test OAI header. + OAIPMHUtilitiesOnline.examineTGHeaderIDs(response, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX); + System.out.println("\tresponse: " + response); System.out.println(OAIPMHUtilitiesOnline.OK); } diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java index 517adbd98616862fbfd009b46a4e8963c9279d27..00f20c544e717374584ad9f96a9cacdd12cabc62 100644 --- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java +++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java @@ -333,7 +333,7 @@ public class TestTGListRecordsOnline { System.out.println(OAIPMHUtilitiesOnline.OK); } else { - System.out.println("..skipping"); + System.out.println("...skipping"); } } @@ -369,25 +369,36 @@ public class TestTGListRecordsOnline { throws IOException, InterruptedException, ExecutionException { System.out - .println( - OAIPMHUtilitiesOnline.TESTING + "testListRecordsConcurrentlyIDIOMMETSMorePages()"); + .println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsConcurrentlyIDIOMMETSMorePages()"); ExecutorService executor = Executors.newFixedThreadPool(3); Future<Boolean> f1 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 2, 30, "D1")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, + 2, 30, + "IDIOM1")); Future<Boolean> f2 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 3, 30, "D2")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, + 3, 30, + "IDIOM2")); Future<Boolean> f3 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 4, 30, "D3")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, + 4, 30, + "IDIOM3")); executor.shutdown(); - System.out.println(OAIPMHUtilitiesOnline.OK + ": [D1]=" + f1.get() + ", [D2]=" + f2.get() - + ", [D3]=" + f3.get()); + System.out.println(OAIPMHUtilitiesOnline.OK + ": [IDIOM1]=" + f1.get() + ", [IDIOM2]=" + + f2.get() + ", [IDIOM3]=" + f3.get()); } @@ -404,17 +415,33 @@ public class TestTGListRecordsOnline { ExecutorService executor = Executors.newFixedThreadPool(4); Future<Boolean> f1 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 44, 100, "DC1")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_DC_PREFIX, + 44, 100, + "DC1")); Future<Boolean> f2 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 33, 100, "DC2")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_DC_PREFIX, + 33, 100, + "DC2")); Future<Boolean> f3 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 66, 100, "DC3")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_DC_PREFIX, + 66, 100, + "DC3")); Future<Boolean> f4 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 28, 100, "DC4")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_DC_PREFIX, + 28, 100, + "DC4")); executor.shutdown(); @@ -436,17 +463,33 @@ public class TestTGListRecordsOnline { ExecutorService executor = Executors.newFixedThreadPool(3); Future<Boolean> f1 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 6, 100, "B1")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_DC_PREFIX, + 6, 100, + "B1")); Future<Boolean> f2 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 7, 100, "B2")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_DC_PREFIX, + 7, 100, + "B2")); Future<Boolean> f3 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 8, 100, "B3")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_DC_PREFIX, + 8, 100, + "B3")); Future<Boolean> f4 = executor.submit( - new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, - OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 9, 100, "B4")); + new TGOAIPMHResumptionTokenThread(oaipmhWebClient, + OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, + OAIPMHUtilitiesOnline.NO_SET, + OAIPMHUtilitiesOnline.OAI_DC_PREFIX, + 9, 100, + "B4")); executor.shutdown(); diff --git a/oaipmh-core/src/test/resources/oaipmh.test.dev-textgridlab-org.properties b/oaipmh-core/src/test/resources/oaipmh.test.dev-textgridlab-org.properties index b8a46c00b5e3940f1c3e4826300b28822a939e35..80a0058c7232d6b781a185679a4fdac5bbd29c94 100644 --- a/oaipmh-core/src/test/resources/oaipmh.test.dev-textgridlab-org.properties +++ b/oaipmh-core/src/test/resources/oaipmh.test.dev-textgridlab-org.properties @@ -11,8 +11,10 @@ expectedGetRecordDATACITE = Weise Klugredenn checkGetRecordIDIOM = textgrid:2sg18.0 expectedGetRecordIDIOM = Aguateca -checkGetRecordIDIOMImage = textgrid:3vcgs.0 -expectedGetRecordIDIOMImage = Edzna, Hieroglyphic Stairway 1, HS.1:1-10, HS.1:45-47, HS.1:48-49 +checkGetRecordIDIOMImage = 3pgz0.0 +expectedGetRecordIDIOMImage = Museum of Fine Arts Boston, Boston +#checkGetRecordIDIOMImage = textgrid:3vcgs.0 +#expectedGetRecordIDIOMImage = Edzna, Hieroglyphic Stairway 1, HS.1:1-10, HS.1:45-47, HS.1:48-49 #checkGetRecordIDIOMImage = textgrid:407sf.0 #expectedGetRecordIDIOMImage = Acanceh, Structure 1, Stucco Frieze, Detail diff --git a/oaipmh-core/src/test/resources/oaipmh.test.repository-de-dariah-eu.properties b/oaipmh-core/src/test/resources/oaipmh.test.repository-de-dariah-eu.properties index 95ef1e4b018d7b174c7ca2be1a502ba7b50cd3be..436febfc77b891e9a69fa16d43c3de59e8cfdc8d 100644 --- a/oaipmh-core/src/test/resources/oaipmh.test.repository-de-dariah-eu.properties +++ b/oaipmh-core/src/test/resources/oaipmh.test.repository-de-dariah-eu.properties @@ -2,11 +2,11 @@ oaipmhEndpoint = https://repository.de.dariah.eu/1.0/oaipmh # GetRecord -checkGetRecordDC = hdl:21.T11991/0000-001A-7532-8 -expectedGetRecordDC = <dc:identifier>doi:10.20375/0000-001A-7532-8</dc:identifier> +checkGetRecordDC = hdl:21.11113/0000-000B-C8F2-2 +expectedGetRecordDC = <dc:identifier>hdl:21.11113/0000-000B-C8F2-2</dc:identifier> -checkGetRecordDATACITE = hdl:21.T11991/0000-001A-7532-8 -expectedGetRecordDATACITE = <datacite:alternateIdentifier alternateIdentifierType="DOI">10.20375/0000-001A-7532-8</datacite:alternateIdentifier> +checkGetRecordDATACITE = hdl:21.11113/0000-000B-C8F2-2 +expectedGetRecordDATACITE = <datacite:alternateIdentifier alternateIdentifierType="DOI">10.20375/0000-000B-C8F2-2</datacite:alternateIdentifier> # ListRecords checkListRecordsDCSet = hdl:21.11113/0000-000B-C8F2-2 @@ -15,8 +15,8 @@ checkListRecordsDCSetExpectedPages = 4 checkListRecordsDCFrom = 2018-07-02T16:00 checkListRecordsDCUntil = 2018-07-02T23:00 -checkListRecordsDATACITEFrom = 2018-07-02T16:00 -checkListRecordsDATACITEUntil = 2018-07-02T23:00 +checkListRecordsDATACITEFrom = 2021-03-23T11:00 +checkListRecordsDATACITEUntil = 2021-07-23T11:00 # ListIdentifiers checkListIdentifiersSet = hdl:21.11113/0000-000B-C8F2-2 diff --git a/oaipmh-core/src/test/resources/oaipmh.test.textgridlab-org.properties b/oaipmh-core/src/test/resources/oaipmh.test.textgridlab-org.properties index 3e107e4863440bcfca4a3626e2102bb262ac537c..a2c1b6a3ae57557c6fd01d7bb2a9219b1da84475 100644 --- a/oaipmh-core/src/test/resources/oaipmh.test.textgridlab-org.properties +++ b/oaipmh-core/src/test/resources/oaipmh.test.textgridlab-org.properties @@ -11,8 +11,8 @@ expectedGetRecordDATACITE = Weise Klugredenn checkGetRecordIDIOM = textgrid:2sg18.0 expectedGetRecordIDIOM = Aguateca -checkGetRecordIDIOMImage = textgrid:3x641.0 -expectedGetRecordIDIOMImage = Aguateca +checkGetRecordIDIOMImage = textgrid:3wmg2.0 +expectedGetRecordIDIOMImage = El Chorro, Altar 1 checkGetRecordIDList = textgrid:mq05.0, textgrid:jgv6.0, textgrid:w7rz.0, textgrid:w36b.0, textgrid:mcdv.0, textgrid:v0qx.0, textgrid:xkck.0, textgrid:t3m1.0, textgrid:10rsq.0, textgrid:mq05.0, textgrid:jgv6.0, textgrid:w7rz.0, textgrid:w36b.0, textgrid:mcdv.0, textgrid:v0qx.0, textgrid:xkck.0, textgrid:t3m1.0, textgrid:10rsq.0