From 40fa85e4b4f27463d18e6a2f9e81b3e574abe24d Mon Sep 17 00:00:00 2001
From: mbrodhu <brodhun@sub.uni-goettingen.de>
Date: Wed, 2 Nov 2016 15:42:30 +0100
Subject: [PATCH] restoken and set not with restoken

---
 .../middleware/IdentifierListDeliverer.java   |  14 ++-
 .../info/textgrid/middleware/OAIPMHImpl.java  | 102 ++++++++++++++++--
 .../info/textgrid/middleware/OaiPmhTest.java  |   2 +-
 .../src/main/webapp/WEB-INF/beans.xml         |   2 +-
 4 files changed, 102 insertions(+), 18 deletions(-)

diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDeliverer.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDeliverer.java
index 17ae30dc..8e4d06be 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDeliverer.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDeliverer.java
@@ -175,7 +175,7 @@ public class IdentifierListDeliverer {
 			}				
 
 			if (this.dariah) {
-				System.out.println("BLA");
+				System.out.println("BLARIAH");
 				datestamp = hit.getFields().get(dateOfObjectCreation).getValue().toString();
 				
 				try {
@@ -282,12 +282,16 @@ public class IdentifierListDeliverer {
 	public boolean requestChecker(RequestType request) {
 		boolean requestCheck;
 
-		if (request.getMetadataPrefix() == null || request.getIdentifier() != null) {
+		if (request.getResumptionToken() != null && (request.getMetadataPrefix() != null) || request.getSet() != null ){
 			requestCheck = false;
-		} else {
-			requestCheck = true;
 		}
-
+		else {
+			if (request.getMetadataPrefix() == null || request.getIdentifier() != null) {
+				requestCheck = false;
+			} else {
+				requestCheck = true;
+			}
+		}
 		return requestCheck;
 
 	}
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 d60ec450..0e389dc4 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java
@@ -284,9 +284,55 @@ public class OAIPMHImpl implements OAIPMHProducer {
 		List<String> errorValues = new ArrayList<String>();
 		JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
 
-		if (identifierList.requestChecker(request)) {
-			if (!request.getMetadataPrefix().equals(
-					TGConstants.METADATA_DC_PREFIX)) {
+		//if (identifierList.requestChecker(request)) {
+			
+			if(request.getResumptionToken() != null && request.getMetadataPrefix() != null){
+				errorValues.add("MetadataPrefix");
+				error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue("The request includes illegal arguments or missing requiered arguments:" + errorValues);
+			    oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));								
+			}else if(request.getResumptionToken() == null && request.getSet() != null){
+				errorValues.add("Set");
+				error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue("The request includes illegal arguments or missing requiered arguments:" + errorValues);
+			    oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));				
+			}else if(request.getResumptionToken() == null && request.getMetadataPrefix() == null){
+				errorValues.add("MetadataPrefix");
+				error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue("The request includes illegal arguments or missing requiered arguments:" + errorValues);
+			    oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));
+			}else if (request.getMetadataPrefix() != null &&  !request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX )){
+				error.setError(TGConstants.OAI_METADATA_FORMAT_ERROR).setValue("The value of the metadataPrefix: "
+						+ request.getMetadataPrefix()
+						+ " is not supported by the item identified by the value of: "
+						+ request.getIdentifier());
+					oai.getError().add(error.setError(TGConstants.OAI_METADATA_FORMAT_ERROR));
+			}
+			else{
+				System.out.println("bla1000");
+				lit = identifierList.processIdentifierList(request.getFrom(), request.getUntil(), request.getSet(), request.getResumptionToken());
+				if (lit != null) {
+					System.out.println("bla2000");
+					oai.setListIdentifiers(lit);
+				} else {
+					error.setError(TGConstants.OAI_NO_RECORD_MATCH).setValue("The combination of the values "
+											+ request.getFrom() + " and "
+											+ request.getUntil()
+											+ " results in an empty list");
+					oai.getError().add(error.setError(TGConstants.OAI_NO_RECORD_MATCH));
+				}
+			}
+			
+		//}
+			
+			
+			
+			/*if(request.getResumptionToken() != null && (request.getSet() != null || request.getMetadataPrefix() != null)){
+				error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue(
+						"The request includes illegal arguments or missing requiered arguments:" + errorValues);
+			    oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));	
+			}			
+			else {				
+			
+			
+			if (request.getMetadataPrefix() != null && !request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX )) {
 				try {
 					error.setError(TGConstants.OAI_METADATA_FORMAT_ERROR).setValue("The value of the metadataPrefix: "
 											+ request.getMetadataPrefix()
@@ -301,12 +347,10 @@ public class OAIPMHImpl implements OAIPMHProducer {
 			} else {
 				try {
 					lit = identifierList.processIdentifierList(request.getFrom(),	request.getUntil(), request.getSet(), request.getResumptionToken());
-					if (lit != null) {
-						//lit = identifierList.processIdentifierList(request.getFrom(), request.getUntil(),request.getSet(), request.getResumptionToken());
+					if (lit != null) {						
 						oai.setListIdentifiers(lit);
 					} else {
-						error.setError(TGConstants.OAI_NO_RECORD_MATCH)
-								.setValue("The combination of the values "
+						error.setError(TGConstants.OAI_NO_RECORD_MATCH).setValue("The combination of the values "
 												+ request.getFrom() + " and "
 												+ request.getUntil()
 												+ " results in an empty list");
@@ -318,6 +362,9 @@ public class OAIPMHImpl implements OAIPMHProducer {
 					log.debug(e);
 				}
 			}
+			
+			}
+			
 		} else {
 			if (request.getIdentifier() != null) {
 				errorValues.add("identifier");
@@ -330,7 +377,7 @@ public class OAIPMHImpl implements OAIPMHProducer {
 							+ "or missing requiered arguments: " + errorValues);
 			oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));
 
-		}
+		}*/
 
 		return oaipmhRoot;
 	}
@@ -420,8 +467,41 @@ public class OAIPMHImpl implements OAIPMHProducer {
 		ListRecordsType listRecords = new ListRecordsType();
 		//RecordListDeliverer recordList = new RecordListDeliverer(oaiEsClient,// TGConstants.TGFields);
 		JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
-
-		if (recordList.requestChecker(request)) {
+		
+		if(request.getResumptionToken() != null && request.getMetadataPrefix() != null){
+			errorValues.add("MetadataPrefix");
+			error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue("The request includes illegal arguments or missing requiered arguments:" + errorValues);
+		    oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));								
+		}else if(request.getResumptionToken() == null && request.getSet() != null){
+			errorValues.add("Set");
+			error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue("The request includes illegal arguments or missing requiered arguments:" + errorValues);
+		    oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));				
+		}else if(request.getResumptionToken() == null && request.getMetadataPrefix() == null){
+			errorValues.add("MetadataPrefix");
+			error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue("The request includes illegal arguments or missing requiered arguments:" + errorValues);
+		    oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));
+		}else if (request.getMetadataPrefix() != null &&  !request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX )){
+			error.setError(TGConstants.OAI_METADATA_FORMAT_ERROR).setValue("The value of the metadataPrefix: "
+					+ request.getMetadataPrefix()
+					+ " is not supported by the item identified by the value of: "
+					+ request.getIdentifier());
+				oai.getError().add(error.setError(TGConstants.OAI_METADATA_FORMAT_ERROR));
+		}
+		else{
+			listRecords = recordList.getRecords(request.getFrom(), request.getUntil(), request.getSet(), request.getResumptionToken());
+			if (listRecords != null) {						
+				oai.setListRecords(listRecords);
+			} else {
+				error.setError(TGConstants.OAI_NO_RECORD_MATCH).setValue("The combination of the values "
+										+ request.getFrom() + " and "
+										+ request.getUntil()
+										+ " results in an empty list");
+				oai.getError().add(error.setError(TGConstants.OAI_NO_RECORD_MATCH));
+			}
+		}
+		
+		
+		/*if (recordList.requestChecker(request)) {
 
 			if (!request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX)) {
 				error.setError(TGConstants.OAI_METADATA_FORMAT_ERROR).setValue(
@@ -457,7 +537,7 @@ public class OAIPMHImpl implements OAIPMHProducer {
 							+ "arguments or is missing required arguments: "
 							+ errorValues);
 			oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));
-		}
+		}*/
 
 		return oaipmhRoot;
 	}
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 6bf2b7dd..577d5b08 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java
@@ -402,7 +402,7 @@ public class OaiPmhTest {
 
 		// cregId:hdl:6607/0000-0000-26A5-B
 		// dariah:collection:6607/0000-0000-26A5-B
-		JAXBElement<OAIPMHType> r = this.request.getRequest("ListRecords", "","oai_dc", "", "", "", "");
+		JAXBElement<OAIPMHType> r = this.request.getRequest("ListRecords", "","", "", "", "", "cXVlcnlUaGVuRmV0Y2g7NTs0MzpWWjY2NXdVdlJJS0N5R2NXMVVpMUZROzUyOmYzRmZjdXdVUnptOFFNbzI2ckU4OEE7NTA6ZjNGZmN1d1VSem04UU1vMjZyRTg4QTs0OTpmM0ZmY3V3VVJ6bThRTW8yNnJFODhBOzUxOmYzRmZjdXdVUnptOFFNbzI2ckU4OEE7MDs=");
 		JAXB.marshal(r, System.out);
 		System.out.println("-----------------------------------\n");
 	}
diff --git a/oaipmh-webapp/src/main/webapp/WEB-INF/beans.xml b/oaipmh-webapp/src/main/webapp/WEB-INF/beans.xml
index 06ca9d7f..08bfc5a1 100644
--- a/oaipmh-webapp/src/main/webapp/WEB-INF/beans.xml
+++ b/oaipmh-webapp/src/main/webapp/WEB-INF/beans.xml
@@ -124,7 +124,7 @@
 		<property name="repositoryObjectURIPrefix" value="${repositoryObjectURIPrefix}" />
 		<property name="identifierListFields" value="${identifierListFields}"></property>
 		<property name="FieldForRange" value="${rangeField}" />
-		<property name="identifierField" value="${identifierField}" />
+		<property name="identifierField" value="${identifierField}" />		                
 		<property name="searchResponseSize" value="${searchResponseSize}" />
 	</bean>
 
-- 
GitLab