diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java b/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java index 7d7ea0732a21fd43e012444bed0e4f503fa70f9f..f111ec061235a352089eb1d01159b0bcb7973801 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java @@ -409,7 +409,11 @@ public class DublinCoreFieldLoader { Map<String, Object> nestedMap2 = null; for(int i=0; i<requestedField.length; i++) { if(i<requestedField.length-1 && nestedMap!=null && nestedMap.get(requestedField[i])!=null) { - nestedMap2 = (Map<String, Object>)nestedMap.get(requestedField[i]); + try { + nestedMap2 = (Map<String, Object>)nestedMap.get(requestedField[i]); + }catch(ClassCastException cce) { + + } } if(i==requestedField.length-1 && nestedMap2!=null && nestedMap2.get(requestedField[i])!=null ) { diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java index ff9e3f73714c3179ef000e3e302c8601d7367e3c..4d9e021b390d0b0c527f88bf60a75f163d3544db 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java @@ -15,6 +15,8 @@ import info.textgrid.middleware.oaipmh.ListMetadataFormatsType; import info.textgrid.middleware.oaipmh.ListRecordsType; import info.textgrid.middleware.oaipmh.ListSetsType; import info.textgrid.middleware.oaipmh.OAIPMHType; +import info.textgrid.middleware.oaipmh.OAIPMHerrorType; +import info.textgrid.middleware.oaipmh.OAIPMHerrorcodeType; import info.textgrid.middleware.oaipmh.ObjectFactory; import info.textgrid.middleware.oaipmh.RequestType; import info.textgrid.middleware.oaipmh.VerbType; @@ -312,7 +314,7 @@ public class OAIPMHImpl implements OAIPMHProducer { */ public JAXBElement<OAIPMHType> listSetsRequest(ObjectFactory obf, OAIPMHType oai, RequestType request) { - System.out.println(this.textgrid); + ListSetsType sl = new ListSetsType(); JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai); sl = this.setList.setListBuilder(); @@ -400,6 +402,7 @@ public class OAIPMHImpl implements OAIPMHProducer { if (request.getMetadataPrefix() != null) { if (request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX)) { recListDeliv = this.recordListDC; + } else { recListDeliv = this.recordListIDIOM; } @@ -422,7 +425,12 @@ public class OAIPMHImpl implements OAIPMHProducer { ListRecordsType listRecords = recListDeliv.getRecords(request.getFrom(), request.getUntil(), request.getSet(), request.getResumptionToken()); - if (listRecords != null) { + if (listRecords != null ) { + if(recordListDC.getResultSize()==0) { + System.out.println(recordListDC.isFoundItems()); + requestErrors.setError("RecordMatchError", "The combination of the values of the from, until, set and metadataPrefix arguments results in an empty list."); + oai.getError().add(requestErrors.getError()); + } oai.setListRecords(listRecords); } } 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 5d0d70636d909b7a77ccfb875d69943f9660282a..e93754a6db6dab4a687a070db7ba3b2a9b4f26b1 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.text.ParseException; import java.util.Map; +import javax.swing.plaf.synth.SynthSpinnerUI; import javax.xml.datatype.DatatypeConfigurationException; import org.apache.commons.logging.LogFactory; import org.elasticsearch.action.get.GetRequest; @@ -145,7 +146,7 @@ public class RecordDelivererDC extends RecordDelivererAbstract { } if (this.textgrid == true && esResultObject.getSourceAsMap().get(this.formatField).equals(this.formatToFilter)) { - + String[] requestedField = relationToFurtherMetadataObject.split("\\."); Map<String, Object> nestedMap = esResultObject.getSourceAsMap(); diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java index a62afe19609d2a17f75bac188d051f98d7913555..fb4d819c276dd22a3903e1f64258ffc3c4ce49c4 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java @@ -50,7 +50,12 @@ public abstract class RecordListDelivererAbstract implements RecordListDeliverer + request.getResumptionToken() + " argument is invalid or expired."); } } - + + // Check if query to ElastisSearch responses with more then zero results + if(true) { + + } + // Check params in general. List<String> errorValues = new ArrayList<String>(); @@ -68,6 +73,8 @@ public abstract class RecordListDelivererAbstract implements RecordListDeliverer + "or is missing required arguments: " + errorValues); } + + return result; } 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 14c1d90f4510e31959f33efb3c2f937c2049fe60..488b04420be440536085c3d8fe375a4c59cbffe5 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java @@ -6,15 +6,15 @@ import java.net.URLDecoder; import java.text.ParseException; import java.util.Hashtable; import java.util.Map; + import javax.xml.datatype.DatatypeConfigurationException; + import org.apache.commons.logging.LogFactory; import org.elasticsearch.action.get.GetRequest; -import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchScrollRequest; -import org.elasticsearch.client.Client; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.Strings; @@ -81,7 +81,8 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { private String[] typeList; private String modifiedValue; private static final int lifeTimeResToken = 600; - + private long resultSize; + static Map<String, Integer> cursorCollector = new Hashtable<String, Integer>(); private int searchResponseSize; @@ -149,6 +150,7 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { SearchResponse scrollResp; QueryBuilder recordFilter; DublinCoreBuilder dublinCoreBuilder = new DublinCoreBuilder(); + if (this.dariah == true) { recordFilter = query; } else { @@ -194,6 +196,8 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { scrollID = scrollResp.getScrollId(); long completeListSize = scrollResp.getHits().totalHits; + setResultSize(completeListSize); + if (completeListSize > 0) { setFoundItems(true); @@ -201,11 +205,10 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { for (SearchHit hit : scrollResp.getHits().getHits()) { i++; - + if (hit != null && hit.getFields() != null) { try { if (hit.getSourceAsMap().get(this.dateOfObjectCreation) != null) { - String datestamp = hit.getSourceAsMap().get(this.dateOfObjectCreation).toString(); datestamp = OAIPMHUtillities.convertDateFormat(datestamp).toXMLFormat(); @@ -299,7 +302,7 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { GetResponse responseWorkValues) { DublinCoreBuilder result = new DublinCoreBuilder(); - + result.setContributor(DublinCoreFieldLoader.setContributor(hit, this.contributorList)); result.setCoverage(DublinCoreFieldLoader.setCoverage(hit, this.coverageList)); result.setCreator(DublinCoreFieldLoader.setCreator(hit, this.creatorList)); @@ -716,4 +719,12 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { this.oaiEsClient = oaiEsClient; } + public long getResultSize() { + return this.resultSize; + } + + public void setResultSize(long resultSize) { + this.resultSize = resultSize; + } + } diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java b/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java index b74ee6307833f6cfdb5f7fee79f7b491681b8673..7db564dbc6e0434e910a7194287676c28f49dd7b 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java @@ -1,24 +1,17 @@ package info.textgrid.middleware; -import info.textgrid.middleware.oaipmh.ListSetsType; -import info.textgrid.middleware.oaipmh.SetType; -import info.textgrid.namespaces.middleware.tgcrud.common.TextGridMimetypes; - import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedHashSet; -import java.util.List; import java.util.Map; import java.util.Set; import org.elasticsearch.action.get.GetRequest; -import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchRequest; -import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.common.Strings; @@ -30,6 +23,10 @@ import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; +import info.textgrid.middleware.oaipmh.ListSetsType; +import info.textgrid.middleware.oaipmh.SetType; +import info.textgrid.namespaces.middleware.tgcrud.common.TextGridMimetypes; + /** * */ @@ -52,7 +49,7 @@ public class SetDeliverer { * @param textgrid * @param dariah */ - public SetDeliverer(boolean textgrid, boolean dariah) { + public SetDeliverer(boolean textgrid, boolean dariah) { this.textgrid = textgrid; this.dariah = dariah; } @@ -64,40 +61,27 @@ public class SetDeliverer { ListSetsType setList = new ListSetsType(); QueryBuilder aggQuery; - if (!this.textgrid) { - System.out.println("TEST"); - aggQuery = QueryBuilders.matchPhraseQuery("format", TextGridMimetypes.EDITION); + + SearchRequest request = new SearchRequest(OAI_ESClient.getEsIndex()); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + AggregationBuilder agg = null; + if (this.textgrid) { + agg = AggregationBuilders + .terms("project.value.untouched") + .field("project.value.untouched") + .size(10000); } else { aggQuery = QueryBuilders.matchPhraseQuery("descriptiveMetadata.dc:format", TextGridMimetypes.DARIAH_COLLECTION); } - - SearchRequest request = new SearchRequest(OAI_ESClient.getEsIndex()); - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - //searchSourceBuilder.query(aggQuery); - - AggregationBuilder agg = AggregationBuilders - .terms("project.value.untouched") - .field("project.value.untouched") - .size(10000); + + searchSourceBuilder.aggregation(agg); - - request.source(searchSourceBuilder); - - /*searchSourceBuilder.storedField(this.formatField); - searchSourceBuilder.storedField(this.identifierField); - searchSourceBuilder.storedField("project.value"); - searchSourceBuilder.storedField("project.id");*/ searchSourceBuilder.size(10000); + request.source(searchSourceBuilder); + SearchResponse getRecordListItems=null; - /*SearchRequestBuilder request = OAI_ESClient.getEsClient() - .prepareSearch(OAI_ESClient.getEsIndex()).setTypes(OAI_ESClient.getEsType()) - .setQuery(aggQuery).addField(this.formatField).addField(this.identifierField) - .addField("project.value").addField("project.id").setSize(100000);*/ - - SearchResponse getRecordListItems=null; try { - getRecordListItems = OAI_ESClient.getEsClient().search(request, RequestOptions.DEFAULT); } catch (IOException e1) { // TODO Auto-generated catch block @@ -105,27 +89,28 @@ public class SetDeliverer { } for (SearchHit hit : getRecordListItems.getHits().getHits()) { - + if (this.dariah == false && hit.getSourceAsMap().get(this.identifierField) .toString().startsWith("hdl:")) { + String pid = hit.getFields().get(this.identifierField).getValues().get(0).toString(); this.identifier.add(pid); } - if (this.textgrid == false) { + if (this.textgrid == true) { String[] projectFields = new String[] {"project.value", "project.id"}; String projectName = DublinCoreFieldLoader.fillList(hit, projectFields).get(0); String projectID = DublinCoreFieldLoader.fillList(hit, projectFields).get(1); - String projectSetSpec = projectName.concat(":").concat(projectID); - System.out.println(projectName + ": " + projectSetSpec); + //String projectSetSpec = projectName.concat(":").concat(projectID); SetDeliverer.setSet.put(projectID, projectName); } } - System.out.println("MAP SIZE: " + setSet.size()); - if (this.textgrid == false) { - Iterator it = setSet.entrySet().iterator(); + + if (this.textgrid == true) { + + Iterator<?> it = setSet.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry) it.next(); SetType set = new SetType(); @@ -135,7 +120,7 @@ public class SetDeliverer { } } - if (this.dariah == false) { + if (this.dariah == true) { for (String identifierSetSpec : this.identifier) { String id = identifierSetSpec; try { diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java index 5433ddb6832b7b63da43f4e74b383a240125ee7b..e0cbfa6498acaf025e0a906626a287f9bd047959 100644 --- a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java +++ b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java @@ -38,13 +38,13 @@ public class OaiPmhTest { private static IdentifierListDelivererDC identifierList = new IdentifierListDelivererDC(true, false); private static IdentifierListDelivererIDIOM identifierListIDIOM = new IdentifierListDelivererIDIOM(true, false); private MetadataFormatListDeliverer metadataFormatList = new MetadataFormatListDeliverer(); - private SetDeliverer setListDARIAH = new SetDeliverer(false, true); + // private SetDeliverer setListDARIAH = new SetDeliverer(false, true); private static SetDeliverer setListTextGrid; private OAIPMHImpl request = new OAIPMHImpl( this.rep, OaiPmhTest.record, OaiPmhTest.recordIDIOM, OaiPmhTest.recordList, OaiPmhTest.recordListIDIOM, this.metadataFormatList, - this.setListDARIAH, OaiPmhTest.identifierList, OaiPmhTest.identifierListIDIOM); + this.setListTextGrid, OaiPmhTest.identifierList, OaiPmhTest.identifierListIDIOM); /** * @throws Exception @@ -249,7 +249,7 @@ public class OaiPmhTest { OaiPmhTest.identifierList.setSearchResponseSize("100"); System.out.println("Test for the verb \"ListIdentifiers\" with succesfull response"); JAXBElement<OAIPMHType> p = this.request.getRequest("ListIdentifiers", "", "oai_dc", - "", "", "", ""); + "project:TGPR-ed7c757e-1ead-69d4-7c17-554a3581925c", "", "", ""); JAXB.marshal(p, System.out); System.out.println("-----------------------------------\n"); } @@ -355,7 +355,7 @@ public class OaiPmhTest { System.out.println("Test for the verb \"ListRecords\" with sets with succesfull response"); JAXBElement<OAIPMHType> p = - this.request.getRequest("ListRecords", "", "oai_dc", "", "", "", ""); + this.request.getRequest("ListRecords", "", "oai_dc", "project:TGPR-bbac3e50-440c-e763-4749-5540cc8bb6aa", "", "", ""); JAXB.marshal(p, System.out); /*String resToken =""; @@ -447,7 +447,7 @@ public class OaiPmhTest { OaiPmhTest.recordList.setSearchResponseSize("100"); JAXBElement<OAIPMHType> r = - this.request.getRequest("ListRecords", "", "oai_dc", "", "", "", ""); + this.request.getRequest("ListRecords", "", "oai_dc", "project:TGPR-ed7c757e-1ead-69d4-7c17-554a3581925c", "", "", ""); JAXB.marshal(r, System.out); System.out.println("-----------------------------------\n"); } @@ -483,12 +483,12 @@ public class OaiPmhTest { */ @Test @Ignore - public void testListSets() throws ParseException { + public void testListSets() throws ParseException { - OaiPmhTest.setListTextGrid.setFormatField("format"); - OaiPmhTest.setListTextGrid.setFormatToFilter(TextGridMimetypes.EDITION); - OaiPmhTest.setListTextGrid.setIdentifierField("textgridUri"); - OaiPmhTest.setListTextGrid.setRepositoryObjectURIPrefix("textgrid:"); + OaiPmhTest.setListTextGrid.setFormatField("format"); + OaiPmhTest.setListTextGrid.setFormatToFilter(TextGridMimetypes.EDITION); + OaiPmhTest.setListTextGrid.setIdentifierField("textgridUri"); + OaiPmhTest.setListTextGrid.setRepositoryObjectURIPrefix("textgrid:"); JAXBElement<OAIPMHType> r = this.request.getRequest("ListSets", "", "", "", "", "", ""); JAXB.marshal(r, System.out);