diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java index bd817165647b2ca6fb9d40be432637c2d13e0c9f..9534300ced39e5014a1536e499568c8f3d9e3fff 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java @@ -596,14 +596,17 @@ public class OAIPMHUtilities { * @param setSpec * @return */ - public static HeaderType computeTheF______Header(String dateOfCreation, String identifier, - String setSpec) { + public static HeaderType computeTheF______Header(final String dateOfCreation, + final String identifier, final String setSpec) { HeaderType result = new HeaderType(); result.setIdentifier(identifier); result.setDatestamp(dateOfCreation); + log.debug( + "Header (DoC / ID / setSpec): " + dateOfCreation + " / " + identifier + " / " + setSpec); + if (setSpec != null && !setSpec.isEmpty()) { result.getSetSpec().add(setSpec); } @@ -611,6 +614,33 @@ public class OAIPMHUtilities { return result; } + /** + * <p> + * Get the setSpec, if given, check for prefix, if not given, use prefix and given ID. + * </p> + * + * @param theSetSpec + * @param theSpecPrefix + * @param theID + * @return A valid setSpec value for the set. + */ + protected static String getSetSpec(String theSetSpec, String theSpecPrefix, String theID) { + + String result = theSetSpec; + + // Check given setSpec value, add ID if empty. + if (result == null || result.isEmpty() || result.equals(theSpecPrefix)) { + result = theID; + } + + // Then check for prefix, add prefix, if necessary. + if (!result.startsWith(theSpecPrefix)) { + result = theSpecPrefix + result; + } + + return result; + } + // ** // GETTERS & SETTERS // ** diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java index 6667b920c479d91489cfad5a50b3ac7a1d8b26cb..7b0a94aad214cd3d1278c1a92b1544efdb60ee59 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java @@ -138,16 +138,12 @@ public class RecordDelivererDATACITE extends RecordDelivererAbstract { log.debug("specField: " + this.specField); String setSpec = OAIPMHUtilities.fieldLoader(this.jsonObj, this.specField); - if (setSpec.isEmpty()) { - setSpec = identifier; - } - if (!setSpec.startsWith(this.specFieldPrefix)) { - setSpec = this.specFieldPrefix + setSpec; - } + String setSpecValue = OAIPMHUtilities.getSetSpec(setSpec, this.specFieldPrefix, identifier); log.debug("setSpec: " + setSpec); - HeaderType header = OAIPMHUtilities.computeTheF______Header(datestamp, identifier, setSpec); + HeaderType header = + OAIPMHUtilities.computeTheF______Header(datestamp, identifier, setSpecValue); getRecordType = OAIPMHUtilities.getRecordType(this.setOpenAireRecord(), header); return getRecordType; diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java index 7d0e55102cf7e8a81718ddaab180bdd92714c78a..ec828f669e986faba5f33e3bf57ca152fd80cd72 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java @@ -93,12 +93,10 @@ public class RecordDelivererDC extends RecordDelivererAbstract { } String setSpec = OAIPMHUtilities.fieldLoader(json, this.specField); - if (!setSpec.startsWith(this.specFieldPrefix)) { - setSpec += this.specFieldPrefix + setSpec; - } + String setSpecValue = OAIPMHUtilities.getSetSpec(setSpec, this.specFieldPrefix, identifier); record.setHeader( - OAIPMHUtilities.computeTheF______Header(dateOfCreation, identifier, setSpec)); + OAIPMHUtilities.computeTheF______Header(dateOfCreation, identifier, setSpecValue)); record.setMetadata(dublinCoreBuilder.getDC()); } @@ -120,15 +118,13 @@ public class RecordDelivererDC extends RecordDelivererAbstract { String dateOfCreation = esResultObject.getSourceAsMap().get(this.dateOfObjectCreation).toString(); - String setSpec = - DublinCoreFieldLoader - .fillListFromTGWorkValues(esResultObject, TGConstants.RELATIONS_LIST).get(0); - if (!setSpec.startsWith(this.specFieldPrefix)) { - setSpec += this.specFieldPrefix + setSpec; - } + String setSpec = DublinCoreFieldLoader + .fillListFromTGWorkValues(esResultObject, TGConstants.RELATIONS_LIST).get(0); + String setSpecValue = OAIPMHUtilities.getSetSpec(setSpec, this.specFieldPrefix, identifier); record.setHeader(OAIPMHUtilities.computeTheF______Header( - OAIPMHUtilities.convertDateFormat(dateOfCreation).toString(), identifier, setSpec)); + OAIPMHUtilities.convertDateFormat(dateOfCreation).toString(), identifier, + setSpecValue)); record.setMetadata(dublinCoreBuilder.getDC()); } diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java index 1ab2a8687cbb540f9e3b43cae81d20fcf641b096..0530c9e489079b7778042e0b7dd49277b2ceeaf1 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java @@ -22,7 +22,6 @@ import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; import org.json.JSONObject; -import info.textgrid.middleware.oaipmh.GetRecordType; import info.textgrid.middleware.oaipmh.HeaderType; import info.textgrid.middleware.oaipmh.ListRecordsType; import info.textgrid.middleware.oaipmh.MetadataType; @@ -249,19 +248,10 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { // Get identifier and setSpec field, add setSpec prefix if not already set. String identifier = OAIPMHUtilities.fieldLoader(json, this.identifierField); - String setSpec = set; - if (setSpec == null || setSpec.isEmpty()) { - setSpec = OAIPMHUtilities.fieldLoader(json, this.specField); - if (setSpec.isEmpty()) { - setSpec = identifier; - } - } - if (!setSpec.startsWith(this.specFieldPrefix)) { - setSpec = this.specFieldPrefix + setSpec; - } + String setSpec = OAIPMHUtilities.getSetSpec(set, this.specFieldPrefix, identifier); log.debug("identifier (dhrep): " + identifier); - log.debug("setSpec: " + setSpec); + log.debug("setSpec: " + set); try { dublinCoreBuilder = putContentIntoDCFieldListsDH(hit); @@ -364,20 +354,6 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { fetchFields(QueryBuilders.boolQuery().must(setQuery), recordList, resumptionToken, set); } - // String[] includes = this.fields; - // String[] excludes = Strings.EMPTY_ARRAY; - // GetResponse gr = - // OAIPMHUtilities.getRcordByIDFromElasticSearch(OAI_ESClient.getEsIndex(), set, - // includes, excludes); - - // RecordDelivererDC urgl = new RecordDelivererDC(false, true); - // try { - // recordList.getRecord().add(urgl.getRecordById(set).getRecord()); - // } catch (DatatypeConfigurationException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } - } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/TestOAIPMHUtilities.java b/oaipmh-core/src/test/java/info/textgrid/middleware/TestOAIPMHUtilities.java index 7188e84e57130f330b0a92622ef043a5a571fd0e..56cb8ef77b9bc3e3302899455d99a56e8651d876 100644 --- a/oaipmh-core/src/test/java/info/textgrid/middleware/TestOAIPMHUtilities.java +++ b/oaipmh-core/src/test/java/info/textgrid/middleware/TestOAIPMHUtilities.java @@ -60,4 +60,45 @@ public class TestOAIPMHUtilities { } } + /** + * + */ + @Test + public void testGetSetSpec() { + + String id = "hdl:21.T11991/0000-001B-4C00-E"; + + // Set is empty. + String set = ""; + String exp = "hdl:21.T11991/0000-001B-4C00-E"; + String setSpec = OAIPMHUtilities.getSetSpec(set, "hdl:", id); + + if (!setSpec.equals(exp)) { + System.out.println(setSpec + " != " + exp); + assertTrue(false); + } + + // Set is prefix only. + set = "hdl:"; + exp = "hdl:21.T11991/0000-001B-4C00-E"; + setSpec = OAIPMHUtilities.getSetSpec(set, "hdl:", id); + + if (!setSpec.equals(exp)) { + System.out.println(setSpec + " != " + exp); + assertTrue(false); + } + + // Set is NOT empty. + set = "project:53281-3452-34-5"; + exp = "project:53281-3452-34-5"; + setSpec = OAIPMHUtilities.getSetSpec(set, "project:", id); + + if (!setSpec.equals(exp)) { + System.out.println(setSpec + " != " + exp); + assertTrue(false); + } + + + } + }