Skip to content

Commit

Permalink
OAIPMH server / Model API parameters and Sonarlint improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
josegar74 committed Jan 9, 2024
1 parent 17a700d commit 726ba00
Show file tree
Hide file tree
Showing 5 changed files with 198 additions and 82 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -96,16 +96,16 @@ private void register(OaiPmhService s) {
//---
//---------------------------------------------------------------------------

public Element dispatch(Element request, ServiceContext context) {
Element response = dispatchI(request, context);
public Element dispatch(OaiPmhParams oaiPmhParams, ServiceContext context) {
Element response = dispatchI(oaiPmhParams, context);
validateResponse(context, response);

return response;
}

//---------------------------------------------------------------------------

private Element dispatchI(Element request, ServiceContext context) {
private Element dispatchI(OaiPmhParams oaiPmhParams, ServiceContext context) {
String url = null;

Map<String, String> params = null;
Expand All @@ -114,7 +114,7 @@ private Element dispatchI(Element request, ServiceContext context) {

try {
url = si.getSiteUrl() + context.getBaseUrl() + "/" + Jeeves.Prefix.SERVICE + "/" + context.getService();
params = OaiPmhFactory.extractParams(request);
params = oaiPmhParams.asMap();

AbstractRequest req = OaiPmhFactory.parse(context.getApplicationContext(), params);
OaiPmhService srv = hmServices.get(req.getVerb());
Expand Down
130 changes: 130 additions & 0 deletions core/src/main/java/org/fao/geonet/kernel/oaipmh/OaiPmhParams.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
/*
* Copyright (C) 2001-2023 Food and Agriculture Organization of the
* United Nations (FAO-UN), United Nations World Food Programme (WFP)
* and United Nations Environment Programme (UNEP)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2,
* Rome - Italy. email: [email protected]
*/

package org.fao.geonet.kernel.oaipmh;

import org.apache.commons.lang.StringUtils;
import org.fao.oaipmh.OaiPmh;

import java.util.HashMap;
import java.util.Map;

public class OaiPmhParams {
private String verb;
private String metadataPrefix;
private String identifier;
private String set;
private String from;
private String until;
private String resumptionToken;

public String getVerb() {
return verb;
}

public void setVerb(String verb) {
this.verb = verb;
}

public String getMetadataPrefix() {
return metadataPrefix;
}

public void setMetadataPrefix(String metadataPrefix) {
this.metadataPrefix = metadataPrefix;
}

public String getIdentifier() {
return identifier;
}

public void setIdentifier(String identifier) {
this.identifier = identifier;
}

public String getSet() {
return set;
}

public void setSet(String set) {
this.set = set;
}

public String getFrom() {
return from;
}

public void setFrom(String from) {
this.from = from;
}

public String getUntil() {
return until;
}

public void setUntil(String until) {
this.until = until;
}

public String getResumptionToken() {
return resumptionToken;
}

public void setResumptionToken(String resumptionToken) {
this.resumptionToken = resumptionToken;
}

public Map<String, String> asMap() {
Map<String, String> params = new HashMap<>();

if (StringUtils.isNotEmpty(verb)) {
params.put(OaiPmh.ParamNames.VERB, verb);
}

if (StringUtils.isNotEmpty(metadataPrefix)) {
params.put(OaiPmh.ParamNames.METADATA_PREFIX, metadataPrefix);
}

if (StringUtils.isNotEmpty(identifier)) {
params.put(OaiPmh.ParamNames.IDENTIFIER, identifier);
}

if (StringUtils.isNotEmpty(set)) {
params.put(OaiPmh.ParamNames.SET, set);
}

if (StringUtils.isNotEmpty(from)) {
params.put(OaiPmh.ParamNames.FROM, from);
}

if (StringUtils.isNotEmpty(until)) {
params.put(OaiPmh.ParamNames.UNTIL, until);
}

if (StringUtils.isNotEmpty(resumptionToken)) {
params.put(OaiPmh.ParamNames.RESUMPTION_TOKEN, resumptionToken);
}

return params;
}
}
34 changes: 33 additions & 1 deletion oaipmh/src/main/java/org/fao/oaipmh/OaiPmh.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//=============================================================================
//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the
//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the
//=== United Nations (FAO-UN), United Nations World Food Programme (WFP)
//=== and United Nations Environment Programme (UNEP)
//===
Expand Down Expand Up @@ -28,6 +28,13 @@
//=============================================================================

public class OaiPmh {
/**
* Private constructor to avoid instantiate the class.
*/
private OaiPmh() {

}

//---------------------------------------------------------------------------
//---
//--- Constants
Expand All @@ -40,10 +47,35 @@ public class OaiPmh {
//---------------------------------------------------------------------------

public static class Namespaces {
/**
* Private constructor to avoid instantiate the class.
*/
private Namespaces() {

}
public static final Namespace OAI_PMH = Namespace.getNamespace("http://www.openarchives.org/OAI/2.0/");
public static final Namespace OAI_DC = Namespace.getNamespace("oai_dc", "http://www.openarchives.org/OAI/2.0/oai_dc/");
public static final Namespace XSI = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
}

public static class ParamNames {
/**
* Private constructor to avoid instantiate the class.
*/
private ParamNames() {

}

public static final String VERB = "verb";
public static final String METADATA_PREFIX = "metadataPrefix";
public static final String IDENTIFIER = "identifier";
public static final String SET = "set";

public static final String FROM = "from";
public static final String UNTIL = "until";

public static final String RESUMPTION_TOKEN = "resumptionToken";
}
}

//=============================================================================
Expand Down
69 changes: 28 additions & 41 deletions oaipmh/src/main/java/org/fao/oaipmh/server/OaiPmhFactory.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//=============================================================================
//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the
//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the
//=== United Nations (FAO-UN), United Nations World Food Programme (WFP)
//=== and United Nations Environment Programme (UNEP)
//===
Expand Down Expand Up @@ -28,46 +28,33 @@

import org.fao.geonet.domain.ISODate;
import org.fao.geonet.utils.GeonetHttpRequestFactory;
import org.fao.geonet.utils.XmlRequest;
import org.fao.oaipmh.OaiPmh;
import org.fao.oaipmh.exceptions.BadArgumentException;
import org.fao.oaipmh.exceptions.BadVerbException;
import org.fao.oaipmh.requests.*;
import org.jdom.Element;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;

//=============================================================================

public class OaiPmhFactory {
/**
* Private constructor to avoid instantiate the class.
*/
private OaiPmhFactory() {

}

//---------------------------------------------------------------------------
//---
//--- API methods
//---
//---------------------------------------------------------------------------

public static Map<String, String> extractParams(Element request) throws BadArgumentException {
Map<String, String> params = new HashMap<String, String>();

for (Object o : request.getChildren()) {
Element elem = (Element) o;
String name = elem.getName();
String value = elem.getText();

if (params.containsKey(name))
throw new BadArgumentException("Parameter repeated : " + name);

params.put(name, value);
}

return params;
}

//---------------------------------------------------------------------------

public static AbstractRequest parse(ConfigurableApplicationContext applicationContext, Map<String, String> params) throws BadVerbException, BadArgumentException {
//--- duplicate parameters because the below procedure will consume them

Map<String, String> params2 = new HashMap<String, String>();
Map<String, String> params2 = new HashMap<>();


for (Map.Entry<String, String> param : params.entrySet()) {
Expand Down Expand Up @@ -161,7 +148,7 @@ private static ISODate consumeDate(Map<String, String> params, String name) thro
//---------------------------------------------------------------------------

private static void checkConsumption(Map<String, String> params) throws BadArgumentException {
if (params.keySet().size() == 0)
if (params.keySet().isEmpty())
return;

String extraParam = params.keySet().iterator().next();
Expand All @@ -188,8 +175,8 @@ private static GetRecordRequest handleGetRecord(ApplicationContext applicationCo
throws BadArgumentException {
GetRecordRequest req = new GetRecordRequest(applicationContext.getBean(GeonetHttpRequestFactory.class));

req.setIdentifier(consumeMan(params, "identifier"));
req.setMetadataPrefix(consumeMan(params, "metadataPrefix"));
req.setIdentifier(consumeMan(params, OaiPmh.ParamNames.IDENTIFIER));
req.setMetadataPrefix(consumeMan(params, OaiPmh.ParamNames.METADATA_PREFIX));

checkConsumption(params);

Expand All @@ -203,14 +190,14 @@ private static ListIdentifiersRequest handleListIdentifiers(ApplicationContext a

ListIdentifiersRequest req = new ListIdentifiersRequest(applicationContext.getBean(GeonetHttpRequestFactory.class));

if (params.containsKey("resumptionToken"))
req.setResumptionToken(consumeMan(params, "resumptionToken"));
if (params.containsKey(OaiPmh.ParamNames.RESUMPTION_TOKEN))
req.setResumptionToken(consumeMan(params, OaiPmh.ParamNames.RESUMPTION_TOKEN));
else {
req.setMetadataPrefix(consumeMan(params, "metadataPrefix"));
req.setSet(consumeOpt(params, "set"));
req.setMetadataPrefix(consumeMan(params, OaiPmh.ParamNames.METADATA_PREFIX));
req.setSet(consumeOpt(params, OaiPmh.ParamNames.SET));

req.setFrom(consumeDate(params, "from"));
req.setUntil(consumeDate(params, "until"));
req.setFrom(consumeDate(params, OaiPmh.ParamNames.FROM));
req.setUntil(consumeDate(params, OaiPmh.ParamNames.UNTIL));
}

checkConsumption(params);
Expand All @@ -225,7 +212,7 @@ private static ListMetadataFormatsRequest handleListMdFormats(ApplicationContext

ListMetadataFormatsRequest req = new ListMetadataFormatsRequest(applicationContext.getBean(GeonetHttpRequestFactory.class));

req.setIdentifier(consumeOpt(params, "identifier"));
req.setIdentifier(consumeOpt(params, OaiPmh.ParamNames.IDENTIFIER));
checkConsumption(params);

return req;
Expand All @@ -238,14 +225,14 @@ private static ListRecordsRequest handleListRecords(ApplicationContext applicati

ListRecordsRequest req = new ListRecordsRequest(applicationContext.getBean(GeonetHttpRequestFactory.class));

if (params.containsKey("resumptionToken"))
req.setResumptionToken(consumeMan(params, "resumptionToken"));
if (params.containsKey(OaiPmh.ParamNames.RESUMPTION_TOKEN))
req.setResumptionToken(consumeMan(params, OaiPmh.ParamNames.RESUMPTION_TOKEN));
else {
req.setMetadataPrefix(consumeMan(params, "metadataPrefix"));
req.setSet(consumeOpt(params, "set"));
req.setMetadataPrefix(consumeMan(params, OaiPmh.ParamNames.METADATA_PREFIX));
req.setSet(consumeOpt(params, OaiPmh.ParamNames.SET));

req.setFrom(consumeDate(params, "from"));
req.setUntil(consumeDate(params, "until"));
req.setFrom(consumeDate(params, OaiPmh.ParamNames.FROM));
req.setUntil(consumeDate(params, OaiPmh.ParamNames.UNTIL));
}

checkConsumption(params);
Expand All @@ -260,8 +247,8 @@ private static ListSetsRequest handleListSets(ApplicationContext applicationCont

ListSetsRequest req = new ListSetsRequest(applicationContext.getBean(GeonetHttpRequestFactory.class));

if (params.containsKey("resumptionToken"))
req.setResumptionToken(consumeMan(params, "resumptionToken"));
if (params.containsKey(OaiPmh.ParamNames.RESUMPTION_TOKEN))
req.setResumptionToken(consumeMan(params, OaiPmh.ParamNames.RESUMPTION_TOKEN));

checkConsumption(params);

Expand Down
Loading

0 comments on commit 726ba00

Please sign in to comment.