From cae56c1b11ced156266d0d61b044cdabfe0f0d1e Mon Sep 17 00:00:00 2001
From: "Stefan E. Funk" <funk@sub.uni-goettingen.de>
Date: Wed, 16 May 2018 15:58:12 +0200
Subject: [PATCH] added POST calls to OAIPMH request handling.

---
 oaipmh-core/pom.xml                           |    2 +-
 .../info/textgrid/middleware/OAIPMHImpl.java  | 1168 ++++++++---------
 .../textgrid/middleware/OAIPMHProducer.java   |  120 +-
 oaipmh-webapp/pom.xml                         |    2 +-
 pom.xml                                       |    2 +-
 5 files changed, 650 insertions(+), 644 deletions(-)

diff --git a/oaipmh-core/pom.xml b/oaipmh-core/pom.xml
index 4daa2579..c6c4217d 100644
--- a/oaipmh-core/pom.xml
+++ b/oaipmh-core/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<artifactId>oaipmh</artifactId>
 		<groupId>info.textgrid.middleware</groupId>
-		<version>2.15.0-SNAPSHOT</version>
+		<version>2.16.0-SNAPSHOT</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 dc1e5a1d..53baf3ba 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java
@@ -1,618 +1,598 @@
 package info.textgrid.middleware;
 
-import info.textgrid.middleware.oaipmh.GetRecordType;
-import info.textgrid.middleware.oaipmh.IdentifyType;
-import info.textgrid.middleware.oaipmh.ListIdentifiersType;
-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.ObjectFactory;
-import info.textgrid.middleware.oaipmh.RequestType;
-import info.textgrid.middleware.oaipmh.VerbType;
-
-import java.io.IOException;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.List;
-
-import javax.ws.rs.DefaultValue;
 import javax.ws.rs.GET;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.xml.bind.JAXBElement;
 import javax.xml.datatype.DatatypeConfigurationException;
 import javax.xml.datatype.XMLGregorianCalendar;
-
 import org.apache.commons.logging.LogFactory;
+import info.textgrid.middleware.oaipmh.GetRecordType;
+import info.textgrid.middleware.oaipmh.IdentifyType;
+import info.textgrid.middleware.oaipmh.ListIdentifiersType;
+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.ObjectFactory;
+import info.textgrid.middleware.oaipmh.RequestType;
+import info.textgrid.middleware.oaipmh.VerbType;
 
 /**
- * This class takes all possible arguments of an OAI-PMH request and proceeds
- * depended on the given arguments. It also deals as response handler
+ * This class takes all possible arguments of an OAI-PMH request and proceeds depended on the given
+ * arguments. It also deals as response handler
  * 
  * @author Maximilian Brodhun: SUB
  * @version 1.0
  * @since 29.01.2014
- *
  */
-
 public class OAIPMHImpl implements OAIPMHProducer {
 
-	private ErrorHandler					error	= new ErrorHandler();
-	private org.apache.commons.logging.Log	log		= LogFactory
-															.getLog(OAIPMHImpl.class);
-	private OAI_ESClient					oaiEsClient;
-	private RepIdentification				rep;
-	private RecordListDeliverer				recordList;
-	private RecordDeliverer					recDeliv;
-	private MetadataFormatListDeliverer		metadataFormatList;
-	private SetDeliverer					setList;
-	private IdentifierListDeliverer			identifierList;
-	public boolean							textgrid;
-	public boolean							dariah;
-
-	ListIdentifiersType						lit		= new ListIdentifiersType();
-
-	public OAIPMHImpl(
-				OAI_ESClient oaiEsClient, 
-				RepIdentification rep,
-				RecordDeliverer recDeliv, 
-				RecordListDeliverer recordList,
-				MetadataFormatListDeliverer metadataFormatList,
-				SetDeliverer setList, 
-				IdentifierListDeliverer identifierList) {
-		this.oaiEsClient = oaiEsClient;
-		this.rep = rep;
-		this.recDeliv = recDeliv;
-		this.recordList = recordList;
-		this.metadataFormatList = metadataFormatList;
-		this.setList = setList;
-		this.identifierList = identifierList;
-	}
-
-	/**
-	 * Getting The request values as QueryParam from a REST request and proceeds
-	 * appropriate to them
-	 * 
-	 * @return OAIPMHType object containing the whole response
-	 */
-	@Override
-	@GET
-	@Path("/")
-	@Produces("text/xml")
-	public JAXBElement<OAIPMHType> getRequest(
-			@QueryParam("verb") String verb,
-			@QueryParam("identifier") @DefaultValue("") String identifier,
-			@QueryParam("metadataPrefix") @DefaultValue("") String metadataPrefix,
-			@QueryParam("set") @DefaultValue("") String set,
-			@QueryParam("from") @DefaultValue("") String from,
-			@QueryParam("until") @DefaultValue("") String until,
-			@QueryParam("resumptionToken") @DefaultValue("") String resumptionToken) {
-
-		ObjectFactory obf = new ObjectFactory();
-		OAIPMHType response = new OAIPMHType();
-		JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(response);
-		VerbType verbParam = setVerb(verb);
-		RequestType request = new RequestType();
-
-		/*----Setting the responseDate of today-----*/
-		try {
-			XMLGregorianCalendar convertedDateFormat;
-			convertedDateFormat = OAIPMHUtillities.convertDateFormat(OAIPMHUtillities.getXMLGregorianCalendarNow().toString());
-			response.setResponseDate(convertedDateFormat);
-		} catch (ParseException e) {
-			log.debug("can not parse date format");
-		} catch (DatatypeConfigurationException e) {
-			log.debug("Datatype configuration failed");
-		}
-
-		/* converting the request values */
-
-		setFromRequestValue(from, request);
-		setUntilRequestValue(until, request);
-		setIdentifierRequestValue(identifier, request);
-		setMetadataPrefixRequestValue(metadataPrefix, request);
-		setResumptionTokenRequestValue(resumptionToken, request);
-		setSetRequestValue(set, request);
-		//request.setSet(set);
-		request.setVerb(verbParam);
-
-		if (textgrid == true) {
-			request.setValue(TGConstants.TG_REP_BASEURL);
-		}
-		if (dariah == true) {
-			request.setValue(DARIAHConstants.DARIAH_REP_BASEURL);
-		}
-
-		if (verbParam != null) {
-			if (verbParam.value().equals("Identify")) {
-				oaipmhRoot = identifyRequest(obf, response, request);
-			} else if (verbParam.value().equals("GetRecord")) {
-				oaipmhRoot = getRecordRequest(obf, response, request);
-			} else if (verbParam.value().equals("ListIdentifiers")) {
-				try {
-					oaipmhRoot = listIdentifiersRequest(obf, response, request);
-				} catch (ParseException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-			} else if (verbParam.value().equals("ListSets")) {
-				oaipmhRoot = listSetsRequest(obf, response, request);
-			} else if (verbParam.value().equals("ListMetadataFormats")) {
-				oaipmhRoot = listMetadataFormatsRequest(identifier, obf,
-						response, request);
-			} else if (verbParam.value().equals("ListRecords")) {
-				oaipmhRoot = listRecordsRequest(obf, response, request);
-			}
-		} else {
-			response.getError().add(error.setError("VerbError"));
-
-		}
-
-		response.setRequest(request);
-
-		oaipmhRoot.setValue(response);
-
-		return oaipmhRoot;
-
-	}
-
-	/**
-	 * checks the Identify request of correctness and response including errors
-	 * in case of an incorrect request
-	 */
-
-	public JAXBElement<OAIPMHType> identifyRequest(ObjectFactory obf,
-			OAIPMHType oai, RequestType request) {
-		List<String> errorValues = new ArrayList<String>();
-		JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
-		IdentifyType tgRepIdentificationRequest = new IdentifyType();
-
-		if (rep.requestChecker(request)) {
-
-			tgRepIdentificationRequest.setBaseURL(rep.getBaseUrl());
-			tgRepIdentificationRequest.setDeletedRecord(rep
-					.getDeletedRecordStatus());
-			tgRepIdentificationRequest.setEarliestDatestamp(rep
-					.getEarliestDatestamp());
-			tgRepIdentificationRequest.setGranularity(rep.getGranularity());
-			tgRepIdentificationRequest.setRepositoryName(rep
-					.getRepositoryName());
-			tgRepIdentificationRequest.setProtocolVersion(rep
-					.getProtocolVersion());
-			tgRepIdentificationRequest.getAdminEmail().add(
-					rep.getAdminMaiAddresss());
-			oai.setIdentify(tgRepIdentificationRequest);
-
-		} else {
-			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");
-			}
-
-			error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue(
-					"The request includes illegal arguments: " + errorValues);
-			oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));
-		}
-
-		return oaipmhRoot;
-	}
-
-	/**
-	 * checks the GetRecord request of correctness and response including errors
-	 * in case of an incorrect request
-	 */
-
-	public JAXBElement<OAIPMHType> getRecordRequest(ObjectFactory obf,
-			OAIPMHType oai, RequestType request) {
-		List<String> errorValues = new ArrayList<String>();
-		// RecordDeliverer recDeliv = new RecordDeliverer(oaiEsClient,
-		// TGConstants.TGFields);
-		JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
-
-		if (request.getMetadataPrefix() != null
-				&& !request.getMetadataPrefix().equals("oai_dc")) {
-			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 if (recDeliv.requestChecker(request)) {
-
-			// recDeliv.getRecordById(request.getIdentifier());
-
-			GetRecordType getRecord = new GetRecordType();
-			getRecord = recDeliv.getRecordById(request.getIdentifier());
-
-			if (getRecord != null) {
-				// getRecord = recDeliv.getRecordById(request.getIdentifier());
-				oai.setGetRecord(getRecord);
-			} else {
-				error.setError(TGConstants.OAI_NO_RECORD_MATCH).setValue(
-						"The value of the identifier: "
-								+ request.getIdentifier()
-								+ " is unknown or illegal in this repository");
-				oai.getError().add(
-						error.setError(TGConstants.OAI_NO_RECORD_MATCH));
-			}
-		} else {
-
-			if (request.getFrom() != null) {
-				errorValues.add("from");
-			}
-			if (request.getResumptionToken() != null) {
-				errorValues.add("resumptionToken");
-			}
-			if (request.getSet() != null) {
-				errorValues.add("set");
-			}
-			if (request.getUntil() != null) {
-				errorValues.add("until");
-			}
-			if (request.getMetadataPrefix() == null) {
-				errorValues.add("metadataPrefix");
-			}
-			if (request.getIdentifier() == null) {
-				errorValues.add("identifier");
-			}
-			error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue(
-					"The request includes illegal arguments "
-							+ "or is missing required arguments: "
-							+ errorValues);
-			oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));
-		}
-
-		return oaipmhRoot;
-	}
-
-	/**
-	 * checks the ListIdentifiers request of correctness and response including
-	 * errors in case of an incorrect request
-	 * 
-	 * @throws ParseException
-	 */
-	public JAXBElement<OAIPMHType> listIdentifiersRequest(ObjectFactory obf,
-			OAIPMHType oai, RequestType request) throws ParseException {
-
-		List<String> errorValues = new ArrayList<String>();
-		JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
-
-		// 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");
-			if (request.getResumptionToken() != null
-					&& RecordListDeliverer.cursorCollector.containsKey(request
-							.getResumptionToken())) {
-				error.setError(TGConstants.OAI_BAD_RESUMPTION_TOKEN)
-						.setValue(
-								"The value of the resumptionToken argument is invalid or expired");
-				oai.getError().add(
-						error.setError(TGConstants.OAI_BAD_RESUMPTION_TOKEN));
-			} else {
-				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));
-				}
-			}
-		}
-
-		return oaipmhRoot;
-	}
-
-	/**
-	 * checks the ListSets request of correctness and response including errors
-	 * in case of an incorrect request
-	 * 
-	 * @throws IOException
-	 */
-	public JAXBElement<OAIPMHType> listSetsRequest(ObjectFactory obf,
-			OAIPMHType oai, RequestType request) {
-
-		ListSetsType sl = new ListSetsType();
-		
-		JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
-
-		sl = this.setList.setListBuilder();
-
-		oai.setListSets(sl);
-
-		
-		return oaipmhRoot;
-	}
-
-	public JAXBElement<OAIPMHType> listMetadataFormatsRequest(String id,
-			ObjectFactory obf, OAIPMHType oai, RequestType request) {
-		List<String> errorValues = new ArrayList<String>();
-		ListMetadataFormatsType listMF = new ListMetadataFormatsType();
-		JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
-
-		if (metadataFormatList.requestChecker(request)) {
-
-			if (id.isEmpty()) {
-				listMF = metadataFormatList.setMetadataFormatListWithoutId();
-			} else {
-				listMF = metadataFormatList.setMetadataFormatList(request
-						.getIdentifier());
-			}
-
-			if (listMF != null) {
-
-				oai.setListMetadataFormats(listMF);
-			} else {
-				error.setError(TGConstants.OAI_NO_RECORD_MATCH).setValue(
-						"The value of the identifier: "
-								+ request.getIdentifier()
-								+ " is unknown or illegal in this repository");
-				oai.getError().add(
-						error.setError(TGConstants.OAI_NO_RECORD_MATCH));
-			}
-		} else {
-			if (request.getFrom() != null) {
-				errorValues.add("from");
-			}
-			if (request.getMetadataPrefix() != null) {
-				errorValues.add("metadataPrefix");
-			}
-			if (request.getResumptionToken() != null) {
-				errorValues.add("resumptionToken");
-			}
-			if (request.getSet() != null) {
-				errorValues.add("set");
-			}
-			if (request.getUntil() != null) {
-				errorValues.add("until");
-			}
-
-			error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue(
-					"The request includes illegal "
-							+ "arguments or is missing required arguments: "
-							+ errorValues);
-			oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));
-		}
-
-		return oaipmhRoot;
-	}
-
-	public JAXBElement<OAIPMHType> listRecordsRequest(ObjectFactory obf,
-			OAIPMHType oai, RequestType request) {
-		// System.out.println("blablablabla");
-		List<String> errorValues = new ArrayList<String>();
-		ListRecordsType listRecords = new ListRecordsType();
-		// RecordListDeliverer recordList = new
-		// RecordListDeliverer(oaiEsClient,// TGConstants.TGFields);
-		JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
-
-		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));
-			}
-		}
-
-		return oaipmhRoot;
-	}
-
-	/**
-	 * Taking the sting from the REST request and converting into an OAIPMH verb
-	 * type
-	 * 
-	 * @param verb
-	 *            : what is to within the repository
-	 * @return verbParam: the verbParam as an OAIPMH verb type
-	 */
-	public VerbType setVerb(String verb) {
-		VerbType verbParam = null;
-
-		if (verb == null) {
-			verb = "Identify";
-		}
-		
-		if (verb != null && verb.equals("Identify")) {
-			verbParam = VerbType.IDENTIFY;
-		} else if (verb != null && verb.equals("ListMetadataFormats")) {
-			verbParam = VerbType.LIST_METADATA_FORMATS;
-		} else if (verb != null && verb.equals("ListSets")) {
-			verbParam = VerbType.LIST_SETS;
-		} else if (verb != null && verb.equals("ListIdentifiers")) {
-			verbParam = VerbType.LIST_IDENTIFIERS;
-		} else if (verb != null && verb.equals("ListRecords")) {
-			verbParam = VerbType.LIST_RECORDS;
-		} else if (verb != null && verb.equals("GetRecord")) {
-			verbParam = VerbType.GET_RECORD;
-		} else {
-			error.setError("VerbError");
-		}
-
-		return verbParam;
-	}
-
-	/**
-	 * Setting the from value for the request
-	 * 
-	 * @param from
-	 */
-
-	public void setFromRequestValue(String from, RequestType request) {
-
-		if (!from.isEmpty()) {
-			request.setFrom(from);
-		}
-
-	}
-
-	/**
-	 * Setting the until value for the request
-	 * 
-	 * @param until
-	 */
-
-	public void setUntilRequestValue(String until, RequestType request) {
-
-		if (!until.isEmpty()) {
-			request.setUntil(until);
-		}
-
-	}
-
-	/**
-	 * Setting the identifier value for the request
-	 * 
-	 * @param identifier
-	 */
-
-	public void setIdentifierRequestValue(String identifier, RequestType request) {
-
-		if (!identifier.isEmpty()) {
-			request.setIdentifier(identifier);
-		}
-	}
-
-	/**
-	 * Setting the metadataPrefix value for the request
-	 * 
-	 * @param metadataPrefix
-	 */
-
-	public void setMetadataPrefixRequestValue(String metadataPrefix,
-			RequestType request) {
-
-		if (!metadataPrefix.isEmpty()) {
-			request.setMetadataPrefix(metadataPrefix);
-		}
-
-	}
-
-	/**
-	 * Setting the resumptionToken value for the request
-	 * 
-	 * @param resumptionToken
-	 */
-
-	public void setResumptionTokenRequestValue(String resumptionToken,
-			RequestType request) {
-
-		if (!resumptionToken.isEmpty()) {
-			request.setResumptionToken(resumptionToken);
-		}
-	}
-
-	/**
-	 * Setting the set value for the request
-	 * 
-	 * @param set
-	 */
-
-	public void setSetRequestValue(String set, RequestType request) {
-
-		if (!set.isEmpty()) {
-			request.setSet(set);
-		}
-	}
-
-
-
-
-	public void setTextGrid(boolean textgrid) {
-		this.textgrid = textgrid;
-	}
-
-	public void setDariah(boolean dariah) {
-		this.dariah = dariah;
-	}
-
-	/**
-	 * @return
-	 */
-	@GET
-	@Path("/version")
-	@Produces(MediaType.TEXT_PLAIN)
-	public String getVersion() {
-		return OaipmhServiceVersion.BUILDNAME + "-"
-				+ OaipmhServiceVersion.VERSION + "."
-				+ OaipmhServiceVersion.BUILDDATE;
-	}
+  private ErrorHandler error = new ErrorHandler();
+  private org.apache.commons.logging.Log log = LogFactory.getLog(OAIPMHImpl.class);
+  private OAI_ESClient oaiEsClient;
+  private RepIdentification rep;
+  private RecordListDeliverer recordList;
+  private RecordDeliverer recDeliv;
+  private MetadataFormatListDeliverer metadataFormatList;
+  private SetDeliverer setList;
+  private IdentifierListDeliverer identifierList;
+  public boolean textgrid;
+  public boolean dariah;
+
+  ListIdentifiersType lit = new ListIdentifiersType();
+
+  public OAIPMHImpl(OAI_ESClient oaiEsClient, RepIdentification rep, RecordDeliverer recDeliv,
+      RecordListDeliverer recordList, MetadataFormatListDeliverer metadataFormatList,
+      SetDeliverer setList, IdentifierListDeliverer identifierList) {
+    this.oaiEsClient = oaiEsClient;
+    this.rep = rep;
+    this.recDeliv = recDeliv;
+    this.recordList = recordList;
+    this.metadataFormatList = metadataFormatList;
+    this.setList = setList;
+    this.identifierList = identifierList;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see info.textgrid.middleware.OAIPMHProducer#getRequest(java.lang.String, java.lang.String,
+   * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+   */
+  @POST
+  @Path("/")
+  @Produces("text/xml")
+  public JAXBElement<OAIPMHType> postRequest(String verb, String identifier, String metadataPrefix,
+      String set, String from, String until, String resumptionToken) {
+    return getRequest(verb, identifier, metadataPrefix, set, from, until, resumptionToken);
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see info.textgrid.middleware.OAIPMHProducer#getRequest(java.lang.String, java.lang.String,
+   * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+   */
+  @GET
+  @Path("/")
+  @Produces("text/xml")
+  public JAXBElement<OAIPMHType> getRequest(String verb, String identifier, String metadataPrefix,
+      String set, String from, String until, String resumptionToken) {
+
+    ObjectFactory obf = new ObjectFactory();
+    OAIPMHType response = new OAIPMHType();
+    JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(response);
+    VerbType verbParam = setVerb(verb);
+    RequestType request = new RequestType();
+
+    /*----Setting the responseDate of today-----*/
+    try {
+      XMLGregorianCalendar convertedDateFormat;
+      convertedDateFormat = OAIPMHUtillities
+          .convertDateFormat(OAIPMHUtillities.getXMLGregorianCalendarNow().toString());
+      response.setResponseDate(convertedDateFormat);
+    } catch (ParseException e) {
+      log.debug("can not parse date format");
+    } catch (DatatypeConfigurationException e) {
+      log.debug("Datatype configuration failed");
+    }
+
+    /* converting the request values */
+
+    setFromRequestValue(from, request);
+    setUntilRequestValue(until, request);
+    setIdentifierRequestValue(identifier, request);
+    setMetadataPrefixRequestValue(metadataPrefix, request);
+    setResumptionTokenRequestValue(resumptionToken, request);
+    setSetRequestValue(set, request);
+    // request.setSet(set);
+    request.setVerb(verbParam);
+
+    if (textgrid == true) {
+      request.setValue(TGConstants.TG_REP_BASEURL);
+    }
+    if (dariah == true) {
+      request.setValue(DARIAHConstants.DARIAH_REP_BASEURL);
+    }
+
+    if (verbParam != null) {
+      if (verbParam.value().equals("Identify")) {
+        oaipmhRoot = identifyRequest(obf, response, request);
+      } else if (verbParam.value().equals("GetRecord")) {
+        oaipmhRoot = getRecordRequest(obf, response, request);
+      } else if (verbParam.value().equals("ListIdentifiers")) {
+        try {
+          oaipmhRoot = listIdentifiersRequest(obf, response, request);
+        } catch (ParseException e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+        }
+      } else if (verbParam.value().equals("ListSets")) {
+        oaipmhRoot = listSetsRequest(obf, response, request);
+      } else if (verbParam.value().equals("ListMetadataFormats")) {
+        oaipmhRoot = listMetadataFormatsRequest(identifier, obf, response, request);
+      } else if (verbParam.value().equals("ListRecords")) {
+        oaipmhRoot = listRecordsRequest(obf, response, request);
+      }
+    } else {
+      response.getError().add(error.setError("VerbError"));
+    }
+
+    response.setRequest(request);
+
+    oaipmhRoot.setValue(response);
+
+    return oaipmhRoot;
+  }
+
+  /**
+   * checks the Identify request of correctness and response including errors in case of an
+   * incorrect request
+   * 
+   * @param obf
+   * @param oai
+   * @param request
+   * @return
+   */
+  public JAXBElement<OAIPMHType> identifyRequest(ObjectFactory obf, OAIPMHType oai,
+      RequestType request) {
+    List<String> errorValues = new ArrayList<String>();
+    JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
+    IdentifyType tgRepIdentificationRequest = new IdentifyType();
+
+    if (rep.requestChecker(request)) {
+
+      tgRepIdentificationRequest.setBaseURL(rep.getBaseUrl());
+      tgRepIdentificationRequest.setDeletedRecord(rep.getDeletedRecordStatus());
+      tgRepIdentificationRequest.setEarliestDatestamp(rep.getEarliestDatestamp());
+      tgRepIdentificationRequest.setGranularity(rep.getGranularity());
+      tgRepIdentificationRequest.setRepositoryName(rep.getRepositoryName());
+      tgRepIdentificationRequest.setProtocolVersion(rep.getProtocolVersion());
+      tgRepIdentificationRequest.getAdminEmail().add(rep.getAdminMaiAddresss());
+      oai.setIdentify(tgRepIdentificationRequest);
+
+    } else {
+      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");
+      }
+
+      error.setError(TGConstants.OAI_BAD_ARGUMENT)
+          .setValue("The request includes illegal arguments: " + errorValues);
+      oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));
+    }
+
+    return oaipmhRoot;
+  }
+
+  /**
+   * checks the GetRecord request of correctness and response including errors in case of an
+   * incorrect request
+   * 
+   * @param obf
+   * @param oai
+   * @param request
+   * @return
+   */
+  public JAXBElement<OAIPMHType> getRecordRequest(ObjectFactory obf, OAIPMHType oai,
+      RequestType request) {
+    List<String> errorValues = new ArrayList<String>();
+    // RecordDeliverer recDeliv = new RecordDeliverer(oaiEsClient,
+    // TGConstants.TGFields);
+    JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
+
+    if (request.getMetadataPrefix() != null && !request.getMetadataPrefix().equals("oai_dc")) {
+      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 if (recDeliv.requestChecker(request)) {
+
+      // recDeliv.getRecordById(request.getIdentifier());
+
+      GetRecordType getRecord = new GetRecordType();
+      getRecord = recDeliv.getRecordById(request.getIdentifier());
+
+      if (getRecord != null) {
+        // getRecord = recDeliv.getRecordById(request.getIdentifier());
+        oai.setGetRecord(getRecord);
+      } else {
+        error.setError(TGConstants.OAI_NO_RECORD_MATCH).setValue("The value of the identifier: "
+            + request.getIdentifier() + " is unknown or illegal in this repository");
+        oai.getError().add(error.setError(TGConstants.OAI_NO_RECORD_MATCH));
+      }
+    } else {
+
+      if (request.getFrom() != null) {
+        errorValues.add("from");
+      }
+      if (request.getResumptionToken() != null) {
+        errorValues.add("resumptionToken");
+      }
+      if (request.getSet() != null) {
+        errorValues.add("set");
+      }
+      if (request.getUntil() != null) {
+        errorValues.add("until");
+      }
+      if (request.getMetadataPrefix() == null) {
+        errorValues.add("metadataPrefix");
+      }
+      if (request.getIdentifier() == null) {
+        errorValues.add("identifier");
+      }
+      error.setError(TGConstants.OAI_BAD_ARGUMENT)
+          .setValue("The request includes illegal arguments " + "or is missing required arguments: "
+              + errorValues);
+      oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));
+    }
+
+    return oaipmhRoot;
+  }
+
+  /**
+   * checks the ListIdentifiers request of correctness and response including errors in case of an
+   * incorrect request
+   * 
+   * @param obf
+   * @param oai
+   * @param request
+   * @return
+   * @throws ParseException
+   */
+  public JAXBElement<OAIPMHType> listIdentifiersRequest(ObjectFactory obf, OAIPMHType oai,
+      RequestType request) throws ParseException {
+
+    List<String> errorValues = new ArrayList<String>();
+    JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
+
+    // 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");
+      if (request.getResumptionToken() != null
+          && RecordListDeliverer.cursorCollector.containsKey(request.getResumptionToken())) {
+        error.setError(TGConstants.OAI_BAD_RESUMPTION_TOKEN)
+            .setValue("The value of the resumptionToken argument is invalid or expired");
+        oai.getError().add(error.setError(TGConstants.OAI_BAD_RESUMPTION_TOKEN));
+      } else {
+        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));
+        }
+      }
+    }
+
+    return oaipmhRoot;
+  }
+
+  /**
+   * checks the ListSets request of correctness and response including errors in case of an
+   * incorrect request
+   * 
+   * @param obf
+   * @param oai
+   * @param request
+   * @return
+   */
+  public JAXBElement<OAIPMHType> listSetsRequest(ObjectFactory obf, OAIPMHType oai,
+      RequestType request) {
+
+    ListSetsType sl = new ListSetsType();
+
+    JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
+
+    sl = this.setList.setListBuilder();
+
+    oai.setListSets(sl);
+
+    return oaipmhRoot;
+  }
+
+  /**
+   * @param id
+   * @param obf
+   * @param oai
+   * @param request
+   * @return
+   */
+  public JAXBElement<OAIPMHType> listMetadataFormatsRequest(String id, ObjectFactory obf,
+      OAIPMHType oai, RequestType request) {
+    List<String> errorValues = new ArrayList<String>();
+    ListMetadataFormatsType listMF = new ListMetadataFormatsType();
+    JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
+
+    if (metadataFormatList.requestChecker(request)) {
+
+      if (id.isEmpty()) {
+        listMF = metadataFormatList.setMetadataFormatListWithoutId();
+      } else {
+        listMF = metadataFormatList.setMetadataFormatList(request.getIdentifier());
+      }
+
+      if (listMF != null) {
+
+        oai.setListMetadataFormats(listMF);
+      } else {
+        error.setError(TGConstants.OAI_NO_RECORD_MATCH).setValue("The value of the identifier: "
+            + request.getIdentifier() + " is unknown or illegal in this repository");
+        oai.getError().add(error.setError(TGConstants.OAI_NO_RECORD_MATCH));
+      }
+    } else {
+      if (request.getFrom() != null) {
+        errorValues.add("from");
+      }
+      if (request.getMetadataPrefix() != null) {
+        errorValues.add("metadataPrefix");
+      }
+      if (request.getResumptionToken() != null) {
+        errorValues.add("resumptionToken");
+      }
+      if (request.getSet() != null) {
+        errorValues.add("set");
+      }
+      if (request.getUntil() != null) {
+        errorValues.add("until");
+      }
+
+      error.setError(TGConstants.OAI_BAD_ARGUMENT).setValue("The request includes illegal "
+          + "arguments or is missing required arguments: " + errorValues);
+      oai.getError().add(error.setError(TGConstants.OAI_BAD_ARGUMENT));
+    }
+
+    return oaipmhRoot;
+  }
+
+  /**
+   * @param obf
+   * @param oai
+   * @param request
+   * @return
+   */
+  public JAXBElement<OAIPMHType> listRecordsRequest(ObjectFactory obf, OAIPMHType oai,
+      RequestType request) {
+    // System.out.println("blablablabla");
+    List<String> errorValues = new ArrayList<String>();
+    ListRecordsType listRecords = new ListRecordsType();
+    // RecordListDeliverer recordList = new
+    // RecordListDeliverer(oaiEsClient,// TGConstants.TGFields);
+    JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
+
+    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));
+      }
+    }
+
+    return oaipmhRoot;
+  }
+
+  /**
+   * Taking the sting from the REST request and converting into an OAIPMH verb type
+   * 
+   * @param verb : what is to within the repository
+   * @return verbParam: the verbParam as an OAIPMH verb type
+   */
+  public VerbType setVerb(String verb) {
+    VerbType verbParam = null;
+
+    if (verb == null) {
+      verb = "Identify";
+    }
+
+    if (verb != null && verb.equals("Identify")) {
+      verbParam = VerbType.IDENTIFY;
+    } else if (verb != null && verb.equals("ListMetadataFormats")) {
+      verbParam = VerbType.LIST_METADATA_FORMATS;
+    } else if (verb != null && verb.equals("ListSets")) {
+      verbParam = VerbType.LIST_SETS;
+    } else if (verb != null && verb.equals("ListIdentifiers")) {
+      verbParam = VerbType.LIST_IDENTIFIERS;
+    } else if (verb != null && verb.equals("ListRecords")) {
+      verbParam = VerbType.LIST_RECORDS;
+    } else if (verb != null && verb.equals("GetRecord")) {
+      verbParam = VerbType.GET_RECORD;
+    } else {
+      error.setError("VerbError");
+    }
+
+    return verbParam;
+  }
+
+  /**
+   * Setting the from value for the request
+   * 
+   * @param from
+   */
+
+  public void setFromRequestValue(String from, RequestType request) {
+
+    if (!from.isEmpty()) {
+      request.setFrom(from);
+    }
+
+  }
+
+  /**
+   * Setting the until value for the request
+   * 
+   * @param until
+   */
+  public void setUntilRequestValue(String until, RequestType request) {
+    if (!until.isEmpty()) {
+      request.setUntil(until);
+    }
+  }
+
+  /**
+   * Setting the identifier value for the request
+   * 
+   * @param identifier
+   */
+  public void setIdentifierRequestValue(String identifier, RequestType request) {
+    if (!identifier.isEmpty()) {
+      request.setIdentifier(identifier);
+    }
+  }
+
+  /**
+   * Setting the metadataPrefix value for the request
+   * 
+   * @param metadataPrefix
+   */
+  public void setMetadataPrefixRequestValue(String metadataPrefix, RequestType request) {
+    if (!metadataPrefix.isEmpty()) {
+      request.setMetadataPrefix(metadataPrefix);
+    }
+  }
+
+  /**
+   * Setting the resumptionToken value for the request
+   * 
+   * @param resumptionToken
+   */
+  public void setResumptionTokenRequestValue(String resumptionToken, RequestType request) {
+    if (!resumptionToken.isEmpty()) {
+      request.setResumptionToken(resumptionToken);
+    }
+  }
+
+  /**
+   * <p>
+   * Setting the set value for the request
+   * </p>
+   * 
+   * @param set
+   * @param request
+   */
+  public void setSetRequestValue(String set, RequestType request) {
+    if (!set.isEmpty()) {
+      request.setSet(set);
+    }
+  }
+
+  /**
+   * @param textgrid
+   */
+  public void setTextGrid(boolean textgrid) {
+    this.textgrid = textgrid;
+  }
+
+  /**
+   * @param dariah
+   */
+  public void setDariah(boolean dariah) {
+    this.dariah = dariah;
+  }
+
+  /**
+   * @return
+   */
+  @GET
+  @Path("/version")
+  @Produces(MediaType.TEXT_PLAIN)
+  public String getVersion() {
+    return OaipmhServiceVersion.BUILDNAME + "-" + OaipmhServiceVersion.VERSION + "."
+        + OaipmhServiceVersion.BUILDDATE;
+  }
 
 }
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHProducer.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHProducer.java
index d31884f4..3a3a791f 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHProducer.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHProducer.java
@@ -1,17 +1,20 @@
 package info.textgrid.middleware;
 
 import info.textgrid.middleware.oaipmh.OAIPMHType;
-
 import javax.ws.rs.GET;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.DefaultValue;
+import javax.ws.rs.FormParam;
 import javax.ws.rs.core.MediaType;
 import javax.xml.bind.JAXBElement;
 
 /**
+ * <p>
  * Interface to the get Request function
+ * </p>
  * 
  * @author Maximilian Brodhun, SUB
  * @version 1.0
@@ -20,53 +23,76 @@ import javax.xml.bind.JAXBElement;
 
 public interface OAIPMHProducer {
 
-	/**
-	 * 
-	 * @param verb
-	 *            The parameter verb is a required parameter to all requests.
-	 *            Depending on it the request will be proceed. Possible values
-	 *            are: GetRecord, Identify, ListIdentifiers,
-	 *            ListMetadataFormats, ListRecords and ListSets In case of other
-	 *            verbs an error response will be send back
-	 * 
-	 * @param identifier
-	 *            This value indicates if the request will be proceed just for a
-	 *            single identifier of the repository
-	 * @param metadataPrefix
-	 *            To limit the response just for a special metadata format this
-	 *            value can be used. The prefix "oai_dc" has to be supported by
-	 *            all repositories
-	 * @param set
-	 *            To represent the architecture of the repository it is possible
-	 *            to make sets which work like categories. At the moment
-	 *            textgrid does not support sets
-	 * @param from
-	 *            Start value to filter the response for a specific interval
-	 * @param until
-	 *            End value to filter the response for a specific interval
-	 * @param resumptionToken
-	 *            Indicates how many value will be send back in the response
-	 *
-	 */
+  /**
+   * <p>
+   * Getting the request values as QueryParam from a REST GET request and proceeds appropriate to
+   * them.
+   * </p>
+   * 
+   * @param verb - The parameter verb is a required parameter to all requests. Depending on it the
+   *        request will be proceed. Possible values are: GetRecord, Identify, ListIdentifiers,
+   *        ListMetadataFormats, ListRecords and ListSets In case of other verbs an error response
+   *        will be send back
+   * @param identifier - This value indicates if the request will be proceed just for a single
+   *        identifier of the repository
+   * @param metadataPrefix - To limit the response just for a special metadata format this value can
+   *        be used. The prefix "oai_dc" has to be supported by all repositories
+   * @param set - To represent the architecture of the repository it is possible to make sets which
+   *        work like categories. At the moment textgrid does not support sets
+   * @param from - Start value to filter the response for a specific interval
+   * @param until - End value to filter the response for a specific interval
+   * @param resumptionToken - Indicates how many value will be send back in the response
+   * @return OAIPMHType object containing the whole response
+   */
+  @GET
+  @Path("/")
+  @Produces(MediaType.TEXT_XML)
+  JAXBElement<OAIPMHType> getRequest(@QueryParam("verb") String verb,
+      @QueryParam("identifier") @DefaultValue("") String identifier,
+      @QueryParam("metadataPrefix") @DefaultValue("") String metadataPrefix,
+      @QueryParam("set") @DefaultValue("") String set,
+      @QueryParam("from") @DefaultValue("") String from,
+      @QueryParam("until") @DefaultValue("") String until,
+      @QueryParam("resumptionToken") @DefaultValue("") String resumptionToken);
 
-	@GET
-	@Path("/")
-	@Produces(MediaType.TEXT_XML)
-	JAXBElement<OAIPMHType> getRequest(
-			@QueryParam("verb") String verb,
-			@QueryParam("identifier") @DefaultValue("") String identifier,
-			@QueryParam("metadataPrefix") @DefaultValue("") String metadataPrefix,
-			@QueryParam("set") @DefaultValue("") String set,
-			@QueryParam("from") @DefaultValue("") String from,
-			@QueryParam("until") @DefaultValue("") String until,
-			@QueryParam("resumptionToken") @DefaultValue("") String resumptionToken);
+  /**
+   * <p>
+   * Getting the request values as FormParams from a REST POST request and proceeds appropriate to
+   * them.
+   * </p>
+   * 
+   * @param verb - The parameter verb is a required parameter to all requests. Depending on it the
+   *        request will be proceed. Possible values are: GetRecord, Identify, ListIdentifiers,
+   *        ListMetadataFormats, ListRecords and ListSets In case of other verbs an error response
+   *        will be send back
+   * @param identifier - This value indicates if the request will be proceed just for a single
+   *        identifier of the repository
+   * @param metadataPrefix - To limit the response just for a special metadata format this value can
+   *        be used. The prefix "oai_dc" has to be supported by all repositories
+   * @param set - To represent the architecture of the repository it is possible to make sets which
+   *        work like categories. At the moment textgrid does not support sets
+   * @param from - Start value to filter the response for a specific interval
+   * @param until - End value to filter the response for a specific interval
+   * @param resumptionToken - Indicates how many value will be send back in the response
+   * @return OAIPMHType object containing the whole response
+   */
+  @POST
+  @Path("/")
+  @Produces(MediaType.TEXT_XML)
+  JAXBElement<OAIPMHType> postRequest(@FormParam("verb") String verb,
+      @FormParam("identifier") @DefaultValue("") String identifier,
+      @FormParam("metadataPrefix") @DefaultValue("") String metadataPrefix,
+      @FormParam("set") @DefaultValue("") String set,
+      @FormParam("from") @DefaultValue("") String from,
+      @FormParam("until") @DefaultValue("") String until,
+      @FormParam("resumptionToken") @DefaultValue("") String resumptionToken);
 
-	/**
-	 * @return
-	 */
-	@GET
-	@Path("/version")
-	@Produces(MediaType.TEXT_PLAIN)
-	String getVersion();
+  /**
+   * @return
+   */
+  @GET
+  @Path("/version")
+  @Produces(MediaType.TEXT_PLAIN)
+  String getVersion();
 
 }
diff --git a/oaipmh-webapp/pom.xml b/oaipmh-webapp/pom.xml
index cb51e0bb..4f01dc00 100644
--- a/oaipmh-webapp/pom.xml
+++ b/oaipmh-webapp/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<artifactId>oaipmh</artifactId>
 		<groupId>info.textgrid.middleware</groupId>
-		<version>2.15.0-SNAPSHOT</version>
+		<version>2.16.0-SNAPSHOT</version>
 	</parent>
 	<groupId>info.textgrid.middleware</groupId>
 	<artifactId>oaipmh-webapp</artifactId>
diff --git a/pom.xml b/pom.xml
index b0d8786a..aa53e136 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>2.15.0-SNAPSHOT</version>
+	<version>2.16.0-SNAPSHOT</version>
 	<packaging>pom</packaging>
 	<name>DARIAHDE :: OAI-PMH DataProvider</name>
 	<properties>
-- 
GitLab