diff --git a/oaipmh-core/pom.xml b/oaipmh-core/pom.xml index 129b74217c0de78e29217a79bc1916b9919cce66..32db2b0038dd54eedf56fec6c6c8c26cd1c56e50 100644 --- a/oaipmh-core/pom.xml +++ b/oaipmh-core/pom.xml @@ -5,7 +5,7 @@ <parent> <artifactId>oaipmh</artifactId> <groupId>info.textgrid.middleware</groupId> - <version>3.3.3</version> + <version>3.3.4</version> </parent> <groupId>info.textgrid.middleware</groupId> <artifactId>oaipmh-core</artifactId> 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 366343d31e1bc83c394e1651680487c610e43b48..1a31c6115a8ae5e188cab871cc1b0cacaeaad94e 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java @@ -327,7 +327,39 @@ public class OAIPMHImpl implements OAIPMHProducer { public OAIPMHtype listSetsRequest(OAIPMHtype oaipmhRoot, RequestType request) { ListSetsType sl = this.setList.setListBuilder(); - oaipmhRoot.setListSets(sl); + + + if (this.setList.requestChecker(request)) { + oaipmhRoot.setListSets(sl); + }else { + List<String> errorValues = new ArrayList<String>(); + ErrorHandler badArgument = new ErrorHandler(); + if (request.getIdentifier() != null) { + errorValues.add("identifier"); + } + if (request.getFrom() != null) { + errorValues.add("from"); + } + if (request.getMetadataPrefix() != null) { + errorValues.add("metadataPrefix"); + } + if (request.getResumptionToken() != null) { + errorValues.add("ResumptionToken"); + } + if (request.getUntil() != null) { + errorValues.add("until"); + } + if (request.getSet() != null) { + errorValues.add("set"); + } + + badArgument.setError(TGConstants.OAI_BAD_ARGUMENT, "The request includes illegal arguments: " + errorValues); + oaipmhRoot.getError().add(badArgument.getError()); + } + + + + return oaipmhRoot; } 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 1457e8932cfedd5fae9c8c5a729c4c1c8c02e811..302675328eac3cb1df94daa028754fdc74967bc3 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java @@ -49,6 +49,13 @@ public class OAIPMHUtilities { private static org.apache.commons.logging.Log log = LogFactory.getLog(OAIPMHImpl.class); + + public static boolean isOAIPMH_RequestArgument(String verb){ + String allowedArgument= "^[identifier,from,until,set,resumptionToken,metadataPrefix]*$"; + return verb.matches(allowedArgument); + } + + /** * <p> * Since TextGrid just supports DC the only returned MetadataFormat is DublinCore. 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 2e81caf1b3dcadc435a5c8ea20ada593351a4d54..090d48b707d783c25903e870f6234853c8194046 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java @@ -15,6 +15,7 @@ import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import info.textgrid.middleware.oaipmh.ListSetsType; +import info.textgrid.middleware.oaipmh.RequestType; import info.textgrid.middleware.oaipmh.SetType; import info.textgrid.namespaces.middleware.tgcrud.common.TextGridMimetypes; @@ -61,8 +62,12 @@ public class SetDeliverer { SearchRequestBuilder request = OAI_ESClient.getOaiESClient() .prepareSearch(OAI_ESClient.getEsIndex()).setTypes(OAI_ESClient.getEsType()) - .setQuery(aggQuery).addField(this.formatField).addField(this.identifierField) - .addField("project.value").addField("project.id").setSize(100000); + .setQuery(aggQuery) + .addField(this.formatField) + .addField(this.identifierField) + .addField("project.value") + .addField("project.id") + .setSize(100000); SearchResponse getRecordListItems = request.execute().actionGet(); @@ -127,6 +132,34 @@ public class SetDeliverer { return setList; } + + /** + * <p> + * Checking the request if all necessary values are set or not allowed values are not set. + * </p> + * + * @param request the initially request from the OAIPMG client + * @return a boolean indicating the correctness of the request + */ + public boolean requestChecker(RequestType request) { + + boolean noArguments; + + if (request.getFrom() != null || + request.getIdentifier() != null || + request.getMetadataPrefix() != null) { + noArguments = false; + } else if (request.getResumptionToken() != null || + request.getSet() != null || + request.getUntil() != null) { + + noArguments = false; + } else { + noArguments = true; + } + return noArguments; + } + /** * @return diff --git a/oaipmh-webapp/pom.xml b/oaipmh-webapp/pom.xml index 96c1f0ef0ad79ae66f6a2fbd2b92051658c166bc..5d49cbac1b189f893e8b2d2a0f46aa525e04eeb4 100644 --- a/oaipmh-webapp/pom.xml +++ b/oaipmh-webapp/pom.xml @@ -5,7 +5,7 @@ <parent> <artifactId>oaipmh</artifactId> <groupId>info.textgrid.middleware</groupId> - <version>3.3.3</version> + <version>3.3.4</version> </parent> <groupId>info.textgrid.middleware</groupId> <artifactId>oaipmh-webapp</artifactId> diff --git a/pom.xml b/pom.xml index 6245a22a0666d43becb26e5e5aa3d2e29e81d0ef..a565323a92893435d9eb66a9967ced917ef955d5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>info.textgrid.middleware</groupId> <artifactId>oaipmh</artifactId> - <version>3.3.3</version> + <version>3.3.4</version> <packaging>pom</packaging> <name>DARIAHDE :: OAI-PMH DataProvider</name> <properties>