diff --git a/pom.xml b/pom.xml
index 0d3361f..fe0fcbf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.gcube.data.transfer
uri-resolver
- 1.7.0-SNAPSHOT
+ 1.8.0-SNAPSHOT
war
The URI Resolver is an HTTP URI resolver implemented as an HTTP servlet which gives access trough HTTP to different protocols URIs.
diff --git a/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestCriteria.java b/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestCriteria.java
index ef685ea..bbea192 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestCriteria.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestCriteria.java
@@ -5,6 +5,7 @@ package org.gcube.datatransfer.resolver;
/**
+ * The Class GeonetworkRequestCriteria.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 15, 2016
@@ -12,7 +13,6 @@ package org.gcube.datatransfer.resolver;
public class GeonetworkRequestCriteria {
private String scope;
- private final String FILTER_PUBLIC_IDS = "FILTER_PUBLIC_IDS";
private boolean valueOfFilterPublicIds;
private boolean authOnGeonetwork;
private boolean noAuthOnGeonetwork;
@@ -24,15 +24,16 @@ public class GeonetworkRequestCriteria {
* @param valueOfFilterPublicIds the value of filter public ids
* @param noAuthOnGeonetowrk the no auth on geonetowrk
*/
- GeonetworkRequestCriteria(String scope, boolean valueOfFilterPublicIds, boolean noAuthOnGeonetowrk){
+ public GeonetworkRequestCriteria(String scope, boolean valueOfFilterPublicIds, boolean noAuthOnGeonetowrk){
this.scope = scope;
this.valueOfFilterPublicIds = valueOfFilterPublicIds;
this.noAuthOnGeonetwork = noAuthOnGeonetowrk;
}
-
/**
+ * Checks if is no auth on geonetwork.
+ *
* @return the noAuthOnGeonetwork
*/
public boolean isNoAuthOnGeonetwork() {
@@ -42,6 +43,8 @@ public class GeonetworkRequestCriteria {
/**
+ * Gets the scope.
+ *
* @return the scope
*/
public String getScope() {
@@ -51,6 +54,8 @@ public class GeonetworkRequestCriteria {
/**
+ * Checks if is value of filter public ids.
+ *
* @return the valueOfFilterPublicIds
*/
public boolean isValueOfFilterPublicIds() {
@@ -60,6 +65,8 @@ public class GeonetworkRequestCriteria {
/**
+ * Sets the scope.
+ *
* @param scope the scope to set
*/
public void setScope(String scope) {
@@ -69,6 +76,8 @@ public class GeonetworkRequestCriteria {
/**
+ * Sets the value of filter public ids.
+ *
* @param valueOfFilterPublicIds the valueOfFilterPublicIds to set
*/
public void setValueOfFilterPublicIds(boolean valueOfFilterPublicIds) {
@@ -87,12 +96,12 @@ public class GeonetworkRequestCriteria {
StringBuilder builder = new StringBuilder();
builder.append("GeonetworkRequestCriteria [scope=");
builder.append(scope);
- builder.append(", FILTER_PUBLIC_IDS=");
- builder.append(FILTER_PUBLIC_IDS);
builder.append(", valueOfFilterPublicIds=");
builder.append(valueOfFilterPublicIds);
builder.append(", authOnGeonetwork=");
builder.append(authOnGeonetwork);
+ builder.append(", noAuthOnGeonetwork=");
+ builder.append(noAuthOnGeonetwork);
builder.append("]");
return builder.toString();
}
diff --git a/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestDecoder.java b/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestDecoder.java
index e0bb205..c313ebc 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestDecoder.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestDecoder.java
@@ -12,11 +12,18 @@ import org.slf4j.LoggerFactory;
/**
- * The Class GeonetworkScopeDecoder.
+ * The Class GeonetworkRequestDecoder.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Gets the new uri to forward the request to {@link GeonetworkResolver}
- * Jun 15, 2016
+ * Jul 27, 2016
+ *
+ * This class parses a request from servletpath and queryString
+ *
+ * The request must be: SCOPE#PARMETERS
+ * SCOPE must be: separated by _
+ * PARAMETERS can be:
+ * {@link GeonetworkResolver#PARAMETER_FILTER_PUBLIC_IDS}
+ * {@link GeonetworkResolver#PARAMETER_NO_AUTHENTICATION}
*/
public class GeonetworkRequestDecoder {
@@ -24,6 +31,8 @@ public class GeonetworkRequestDecoder {
private String newURI;
+ private GeonetworkRequestCriteria geonetworkRequestCriteria;
+
/**
* Instantiates a new geonetwork request decoder.
*
@@ -41,11 +50,11 @@ public class GeonetworkRequestDecoder {
throw new ServletException("Scope is null or empty, you must set a valid scope /geonetwork/root_vo_vre");
}
- GeonetworkRequestCriteria rc = getGeonetworkRequestCriteria(params[0]);
- logger.debug("scope value is: "+rc.getScope());
- newURI = UriResolverRewriteFilter.SERVLET_GEONETWORK + "?" + GeonetworkResolver.SCOPE + "=" + rc.getScope() +"&"+ GeonetworkResolver.PARAMETER_FILTER_PUBLIC_IDS +"="+rc.isValueOfFilterPublicIds() +"&"+GeonetworkResolver.PARAMETER_NO_AUTHENTICATION+"="+rc.isNoAuthOnGeonetwork();
- logger.debug(GeonetworkResolver.PARAMETER_FILTER_PUBLIC_IDS +" is: "+rc.isValueOfFilterPublicIds());
- logger.debug(GeonetworkResolver.PARAMETER_NO_AUTHENTICATION +" is: "+rc.isNoAuthOnGeonetwork());
+ geonetworkRequestCriteria = getGeonetworkRequestCriteria(params[0]);
+ logger.debug("scope value is: "+geonetworkRequestCriteria.getScope());
+ newURI = UriResolverRewriteFilter.SERVLET_GEONETWORK + "?" + GeonetworkResolver.SCOPE + "=" + geonetworkRequestCriteria.getScope() +"&"+ GeonetworkResolver.PARAMETER_FILTER_PUBLIC_IDS +"="+geonetworkRequestCriteria.isValueOfFilterPublicIds() +"&"+GeonetworkResolver.PARAMETER_NO_AUTHENTICATION+"="+geonetworkRequestCriteria.isNoAuthOnGeonetwork();
+ logger.debug(GeonetworkResolver.PARAMETER_FILTER_PUBLIC_IDS +" is: "+geonetworkRequestCriteria.isValueOfFilterPublicIds());
+ logger.debug(GeonetworkResolver.PARAMETER_NO_AUTHENTICATION +" is: "+geonetworkRequestCriteria.isNoAuthOnGeonetwork());
if(params.length>1){
String remainPath = "";
@@ -63,7 +72,6 @@ public class GeonetworkRequestDecoder {
}
-
/**
* Gets the geonetwork request criteria.
* Parses a request like root_vo_vre#filterPublicIds or root_vo_vre
@@ -99,9 +107,28 @@ public class GeonetworkRequestDecoder {
return newURI;
}
- public static void main(String[] args) {
+ /**
+ * @return the geonetworkRequestCriteria
+ */
+ public GeonetworkRequestCriteria getGeonetworkRequestCriteria() {
- System.out.println(getGeonetworkRequestCriteria("gcube_devsec_devVRE#filterpublicids"));
+ return geonetworkRequestCriteria;
+ }
+
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+
+ StringBuilder builder = new StringBuilder();
+ builder.append("GeonetworkRequestDecoder [newURI=");
+ builder.append(newURI);
+ builder.append(", geonetworkRequestCriteria=");
+ builder.append(geonetworkRequestCriteria);
+ builder.append("]");
+ return builder.toString();
}
}
diff --git a/src/main/java/org/gcube/datatransfer/resolver/UriResolverRewriteFilter.java b/src/main/java/org/gcube/datatransfer/resolver/UriResolverRewriteFilter.java
index 96ad191..f946656 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/UriResolverRewriteFilter.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/UriResolverRewriteFilter.java
@@ -126,43 +126,4 @@ public class UriResolverRewriteFilter implements Filter{
logger.trace("run init");
this.config = config;
}
- /*
- public static void main(String[] args) throws ServletException {
-
- String path = "/geonetwork/gcube_devsec_devVRE/srv/en/mef.export";
- String queryString = "p1=1&p2=2";
- String pathWithoutGN = path.substring(SERVLET_GEONETWORK.length()+1, path.length());
- logger.debug("servlet path without "+SERVLET_GEONETWORK + " is:" +pathWithoutGN);
- String[] params = pathWithoutGN.split("/");
-
- System.out.println(Arrays.asList(params));
-
- if(params[0]==null || params[0].isEmpty()){
- logger.error("Scope is null or empty, you must set a valid scope /geonetwork/root_vo_vre");
- throw new ServletException("Scope is null or empty, you must set a valid scope /geonetwork/root_vo_vre");
- }
-
- String scopeValue = getScope(params[0]);
- logger.debug("scope value is: "+scopeValue);
- String newURI = SERVLET_GEONETWORK + "?" + GeonetworkResolver.SCOPE + "=" + scopeValue;
-
- if(params.length>1){
- String remainPath = "";
-// newURI +="&remainPath=";
- for (int i = 1; i < params.length; i++) {
- String httpGetParam = params[i];
- if(httpGetParam!=null && !httpGetParam.isEmpty())
- remainPath+="/"+httpGetParam;
- }
-
- newURI +="&"+GeonetworkResolver.REMAIN_PATH+"="+remainPath;
- }
-
-
- if(queryString!=null && !queryString.isEmpty())
- newURI+="&"+queryString;
-
- logger.debug("forward "+newURI);
- }*/
-
}
diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java b/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java
index 833f3bd..7a983f1 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java
@@ -338,7 +338,7 @@ public class GeonetworkResolver extends HttpServlet{
logger.info("Sending CSW POST request to URL: "+gnCSWlURL);
logger.info("Content-Type: "+req.getContentType());
//DEBUG
- logger.trace("POST - BODY : "+byteArray.toString());
+ //logger.debug("POST - BODY : "+byteArray.toString());
InputStream in = httpUtils.post(gnCSWlURL, new ByteArrayInputStream(byteArray.toByteArray()), req.getContentType(), req.getParameterMap());
//END DEBUG
logger.info("Response return Content-Type: "+httpUtils.getLastContentType());
diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/util/GetResponseRecordFilter.java b/src/main/java/org/gcube/datatransfer/resolver/gis/util/GetResponseRecordFilter.java
index 4a8b615..f6a5419 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/gis/util/GetResponseRecordFilter.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/gis/util/GetResponseRecordFilter.java
@@ -84,12 +84,26 @@ public class GetResponseRecordFilter {
logger.debug("gmd:MD_Metadata are: " + nodes.getLength());
for (int i = 0; i < nodes.getLength(); i++) {
Element mdMetadata = (Element) nodes.item(i);
+
//
- Element id = (Element) mdMetadata.getElementsByTagName("gmd:fileIdentifier").item(0);
- Element gco = (Element) id.getElementsByTagName("gco:CharacterString").item(0);
+ NodeList fileIdentifierLst = mdMetadata.getElementsByTagName("gmd:fileIdentifier");
+ if(fileIdentifierLst==null || fileIdentifierLst.getLength()==0 || fileIdentifierLst.item(0)==null){
+ logger.info("skipping identifier: " + identifier +" it has not fileidentifier");
+ return false;
+ }
+
+ Element id = (Element) fileIdentifierLst.item(0);
+
+ NodeList gcoLst = id.getElementsByTagName("gco:CharacterString");
+ if(gcoLst==null || gcoLst.getLength()==0 || gcoLst.item(0)==null){
+ logger.info("skipping identifier: " + identifier +" it has not gco:CharacterString");
+ return false;
+ }
+
+ Element gco = (Element) gcoLst.item(0);
String idValue = gco.getTextContent();
logger.trace("Summary gmd:fileIdentifier is: " + idValue);
- if (idValue.equals(identifier)) {
+ if (idValue!=null && idValue.equals(identifier)) {
gco.setTextContent(A_PUBLIC_ID_PLEASE_IGNORE);
logger.debug("Overrided child " + idValue);
return true;
@@ -121,7 +135,7 @@ public class GetResponseRecordFilter {
if(overrideSummaryRecord(doc, identifier))
override++;
}
- logger.debug("Overrided "+override +" node/s");
+ logger.info("Overrided "+override +" node/s");
//TODO IS IT POSSIBLE TO REMOVE?
/*NodeList nodeList = doc.getElementsByTagName("csw:SearchResults");
diff --git a/src/test/java/GeonetworkMefServiceTest.java b/src/test/java/GeonetworkMefServiceTest.java
new file mode 100644
index 0000000..2e7855b
--- /dev/null
+++ b/src/test/java/GeonetworkMefServiceTest.java
@@ -0,0 +1,51 @@
+
+/**
+ *
+ */
+/**
+ *
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * Jul 29, 2016
+ */
+public class GeonetworkMefServiceTest {
+
+ /*
+ public static void main(String[] args) throws ServletException {
+
+ String path = "/geonetwork/gcube_devsec_devVRE/srv/en/mef.export";
+ String queryString = "p1=1&p2=2";
+ String pathWithoutGN = path.substring(SERVLET_GEONETWORK.length()+1, path.length());
+ logger.debug("servlet path without "+SERVLET_GEONETWORK + " is:" +pathWithoutGN);
+ String[] params = pathWithoutGN.split("/");
+
+ System.out.println(Arrays.asList(params));
+
+ if(params[0]==null || params[0].isEmpty()){
+ logger.error("Scope is null or empty, you must set a valid scope /geonetwork/root_vo_vre");
+ throw new ServletException("Scope is null or empty, you must set a valid scope /geonetwork/root_vo_vre");
+ }
+
+ String scopeValue = getScope(params[0]);
+ logger.debug("scope value is: "+scopeValue);
+ String newURI = SERVLET_GEONETWORK + "?" + GeonetworkResolver.SCOPE + "=" + scopeValue;
+
+ if(params.length>1){
+ String remainPath = "";
+// newURI +="&remainPath=";
+ for (int i = 1; i < params.length; i++) {
+ String httpGetParam = params[i];
+ if(httpGetParam!=null && !httpGetParam.isEmpty())
+ remainPath+="/"+httpGetParam;
+ }
+
+ newURI +="&"+GeonetworkResolver.REMAIN_PATH+"="+remainPath;
+ }
+
+
+ if(queryString!=null && !queryString.isEmpty())
+ newURI+="&"+queryString;
+
+ logger.debug("forward "+newURI);
+ }*/
+
+}
diff --git a/src/test/java/GeonetworkRequestDecoderTest.java b/src/test/java/GeonetworkRequestDecoderTest.java
new file mode 100644
index 0000000..955e9bb
--- /dev/null
+++ b/src/test/java/GeonetworkRequestDecoderTest.java
@@ -0,0 +1,44 @@
+import javax.servlet.ServletException;
+
+import org.gcube.datatransfer.resolver.GeonetworkRequestDecoder;
+import org.junit.Test;
+
+
+/**
+ *
+ */
+/**
+ *
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * Jul 27, 2016
+ */
+public class GeonetworkRequestDecoderTest {
+
+
+ //@Test
+ public void test1() throws ServletException{
+ String request = "/geonetwork/gcube_devsec_devVRE#filterpublicids";
+ System.out.println("Testing request: "+request);
+ GeonetworkRequestDecoder gd = new GeonetworkRequestDecoder(request,"");
+ System.out.println(gd);
+ }
+
+ //@Test
+ public void test2() throws ServletException{
+ String request = "/geonetwork/gcube_devsec_devVRE#noauthentication";
+ System.out.println("Testing request: "+request);
+ GeonetworkRequestDecoder gd = new GeonetworkRequestDecoder(request,"");
+ System.out.println(gd);
+ }
+
+
+ @Test
+ public void test3() throws ServletException{
+ String request = "/gcube_devsec";
+ System.out.println("Testing request: "+request);
+ GeonetworkRequestDecoder gd = new GeonetworkRequestDecoder(request,"");
+ System.out.println(gd);
+ }
+
+
+}