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 d4feeeca8030a4839e7a1e978479737e5b590ef0..56ba5f7510f20ba8964890c79ce8fda3c3d6fb0c 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java @@ -1,38 +1,40 @@ 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; /** - * <p> * This class takes all possible arguments of an OAI-PMH request and proceeds depended on the given - * arguments. It also deals as response handler. - * </p> + * arguments. It also deals as response handler * - * @author Maximilian Brodhun, SUB Göttingen - * @version 2018-05-16 - * @since 2014-01-29 + * @author Maximilian Brodhun: SUB + * @version 1.0 + * @since 29.01.2014 + * */ + public class OAIPMHImpl implements OAIPMHProducer { private ErrorHandler error = new ErrorHandler(); @@ -49,15 +51,6 @@ public class OAIPMHImpl implements OAIPMHProducer { ListIdentifiersType lit = new ListIdentifiersType(); - /** - * @param oaiEsClient - * @param rep - * @param recDeliv - * @param recordList - * @param metadataFormatList - * @param setList - * @param identifierList - */ public OAIPMHImpl(OAI_ESClient oaiEsClient, RepIdentification rep, RecordDeliverer recDeliv, RecordListDeliverer recordList, MetadataFormatListDeliverer metadataFormatList, SetDeliverer setList, IdentifierListDeliverer identifierList) { @@ -70,57 +63,100 @@ public class OAIPMHImpl implements OAIPMHProducer { 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 handleRequest(verb, identifier, metadataPrefix, set, from, until, resumptionToken); -// } - - /* - * (non-Javadoc) + /** + * <p> + * Getting The request values as QueryParam from a REST request and proceeds appropriate to them. + * </p> * - * @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) + * @return OAIPMHType object containing the whole response */ + @Override @GET @Path("/") @Produces("text/xml") - public JAXBElement<OAIPMHType> getRequest(String verb, String identifier, String metadataPrefix, - String set, String from, String until, String resumptionToken) { - return handleRequest(verb, identifier, metadataPrefix, set, from, until, resumptionToken); - } + 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; - /** - * @return - */ - @GET - @Path("/version") - @Produces(MediaType.TEXT_PLAIN) - public String getVersion() { - return OaipmhServiceVersion.BUILDNAME + "-" + OaipmhServiceVersion.VERSION + "." - + OaipmhServiceVersion.BUILDDATE; } /** * 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(); @@ -167,15 +203,10 @@ public class OAIPMHImpl implements OAIPMHProducer { /** * 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); @@ -237,10 +268,6 @@ public class OAIPMHImpl implements OAIPMHProducer { * 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, @@ -301,32 +328,25 @@ public class OAIPMHImpl implements OAIPMHProducer { * checks the ListSets request of correctness and response including errors in case of an * incorrect request * - * @param obf - * @param oai - * @param request - * @return + * @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; } - /** - * @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); @@ -372,15 +392,8 @@ public class OAIPMHImpl implements OAIPMHProducer { 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(); @@ -432,7 +445,6 @@ public class OAIPMHImpl implements OAIPMHProducer { * @return verbParam: the verbParam as an OAIPMH verb type */ public VerbType setVerb(String verb) { - VerbType verbParam = null; if (verb == null) { @@ -465,9 +477,11 @@ public class OAIPMHImpl implements OAIPMHProducer { */ public void setFromRequestValue(String from, RequestType request) { + if (!from.isEmpty()) { request.setFrom(from); } + } /** @@ -475,10 +489,13 @@ public class OAIPMHImpl implements OAIPMHProducer { * * @param until */ + public void setUntilRequestValue(String until, RequestType request) { + if (!until.isEmpty()) { request.setUntil(until); } + } /** @@ -486,7 +503,9 @@ public class OAIPMHImpl implements OAIPMHProducer { * * @param identifier */ + public void setIdentifierRequestValue(String identifier, RequestType request) { + if (!identifier.isEmpty()) { request.setIdentifier(identifier); } @@ -497,10 +516,13 @@ public class OAIPMHImpl implements OAIPMHProducer { * * @param metadataPrefix */ + public void setMetadataPrefixRequestValue(String metadataPrefix, RequestType request) { + if (!metadataPrefix.isEmpty()) { request.setMetadataPrefix(metadataPrefix); } + } /** @@ -508,121 +530,46 @@ public class OAIPMHImpl implements OAIPMHProducer { * * @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; } - // ** - // PRIVATE METHODS - // ** - /** - * @param verb - * @param identifier - * @param metadataPrefix - * @param set - * @param from - * @param until - * @param resumptionToken * @return */ - private JAXBElement<OAIPMHType> handleRequest(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; + @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 450bdb6893f58d146012938e68b7d935fc229a7f..f95e265b816f972572e75101da2b706b604a558f 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHProducer.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHProducer.java @@ -1,98 +1,73 @@ 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 2018-05-16 - * @since 2014-01-15 + * @version 1.0 + * @since 15.01.2014 */ public interface OAIPMHProducer { - /** - * <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); - -// /** -// * <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); + /** + * + * @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 + * + */ + @POST + @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); - /** - * @return - */ - @GET - @Path("/version") - @Produces(MediaType.TEXT_PLAIN) - String getVersion(); + /** + * @return + */ + @GET + @Path("/version") + @Produces(MediaType.TEXT_PLAIN) + String getVersion(); }