diff --git a/src/main/java/org/gcube/datatransfer/resolver/services/CatalogueResolver.java b/src/main/java/org/gcube/datatransfer/resolver/services/CatalogueResolver.java index b43d957..725bc74 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/services/CatalogueResolver.java +++ b/src/main/java/org/gcube/datatransfer/resolver/services/CatalogueResolver.java @@ -42,7 +42,7 @@ public class CatalogueResolver { ApplicationProfileReaderForCatalogueResolver appPrCatResolver; @GET - @Path("{entityContext:ctlg(-(o|g|p|d)?}/{vreName}/{entityName}") + @Path("{entityContext:ctlg(-(o|g|p|d))?}/{vreName}/{entityName}") public Response resolveCatalogue(@PathParam("entityName") String entityName, @PathParam("vreName") String vreName, @PathParam("entityContext") String entityContext) { InnerMethodName.instance.set("resolveCataloguePublicLink"); logger.info(CatalogueResolver.class.getSimpleName()+" GET starts..."); diff --git a/src/main/java/org/gcube/datatransfer/resolver/services/GeonetworkResolver.java b/src/main/java/org/gcube/datatransfer/resolver/services/GeonetworkResolver.java index 06aef2a..ef67cd1 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/services/GeonetworkResolver.java +++ b/src/main/java/org/gcube/datatransfer/resolver/services/GeonetworkResolver.java @@ -1,9 +1,13 @@ package org.gcube.datatransfer.resolver.services; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -12,6 +16,7 @@ import javax.annotation.Nullable; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.GET; +import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; @@ -29,14 +34,22 @@ import org.gcube.datatransfer.resolver.SingleFileStreamingOutput; import org.gcube.datatransfer.resolver.Util; import org.gcube.datatransfer.resolver.gis.GeonetworkAccessParameter; import org.gcube.datatransfer.resolver.gis.GeonetworkInstance; +import org.gcube.datatransfer.resolver.gis.GeonetworkServiceInterface; import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException; +import org.gcube.datatransfer.resolver.gis.geonetwork.FilterGetRecords; +import org.gcube.datatransfer.resolver.gis.geonetwork.GNAuthentication; import org.gcube.datatransfer.resolver.gis.geonetwork.HTTPCallsUtils; import org.gcube.datatransfer.resolver.gis.geonetwork.HTTPCallsUtils.HttpResponse; +import org.gcube.datatransfer.resolver.gis.geonetwork.ReusableInputStream; +import org.gcube.datatransfer.resolver.gis.util.GetResponseRecordFilter; import org.gcube.datatransfer.resolver.services.error.ExceptionManager; import org.gcube.datatransfer.resolver.services.exceptions.InternalServerException; import org.gcube.spatial.data.geonetwork.configuration.Configuration; +import org.gcube.spatial.data.geonetwork.model.Account; +import org.gcube.spatial.data.geonetwork.model.Account.Type; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; /** * The Class GeonetworkResolver. @@ -58,7 +71,7 @@ public class GeonetworkResolver { public static final String CSW_SERVER = "srv/en/csw"; public static final String VALUE_OF_REQUEST_DELIMITIER = "$$"; - public static final String PATH_PARAM_REMAINING = "remainPath"; + public static final String PATH_PARAM_REMAINPATH = "remainPath"; public static final String QUERY_PARAM_RESET_CACHE_PARAM = "resetcache"; public static final String QUERY_PARAM_RESET_CACHED_SCOPE_PARAM = "resetcachedscope"; @@ -85,7 +98,7 @@ public class GeonetworkResolver { * @param mode the mode * @param scope the scope * @param visibility the visibility - * @param owner the owner + * @param owner the owner - pass 'null' as string if no filter applied * @param requestDelimiter the request delimiter * @param resetCache the reset cache * @param resetScope the reset scope @@ -93,13 +106,13 @@ public class GeonetworkResolver { */ @GET - @Path("{"+PATH_PARAM_SCOPE+"}/{"+PATH_PARAM_MODE+"}/{"+PATH_PARAM_VISIBILITY+"}/{"+PATH_PARAM_OWNER+"}/$${remainPath:(/[^?$]+)?}") + @Path("{"+PATH_PARAM_SCOPE+"}/{"+PATH_PARAM_MODE+"}/{"+PATH_PARAM_VISIBILITY+"}/{"+PATH_PARAM_OWNER+"}/$${"+PATH_PARAM_REMAINPATH+":(/[^?$]+)?}") public Response submitGet(@Context HttpServletRequest req, @PathParam(PATH_PARAM_SCOPE) @Nullable String scope, @PathParam(PATH_PARAM_MODE) @Nullable String mode, @PathParam(PATH_PARAM_VISIBILITY) @Nullable String visibility, @PathParam(PATH_PARAM_OWNER) @Nullable String owner, - @PathParam("remainPath") @Nullable String remainPath, + @PathParam(PATH_PARAM_REMAINPATH) @Nullable String remainPath, @QueryParam(QUERY_PARAM_RESET_CACHE_PARAM) @Nullable String resetCache, @QueryParam(QUERY_PARAM_RESET_CACHED_SCOPE_PARAM) @Nullable String resetScope) { @@ -262,7 +275,7 @@ public class GeonetworkResolver { /** * Submit post. */ -/* @SuppressWarnings("resource") + @SuppressWarnings("resource") @POST @Path("/{"+PATH_PARAM_SCOPE+":(/[^/?$]+)?}}/{"+PATH_PARAM_MODE+"}/{"+PATH_PARAM_VISIBILITY+"}/{"+PATH_PARAM_OWNER+"}/{"+PATH_PARAM_REQUEST_DELIMITER+"}") public Response submitPost(@Context HttpServletRequest req, @@ -503,7 +516,7 @@ public class GeonetworkResolver { return null; } - }*/ + } /** * Purge remain from query string. @@ -516,12 +529,12 @@ public class GeonetworkResolver { // SCOPE is: /gcube/devsec/devVRE // [INFO ] 2016-04-05 15:01:42,808 org.gcube.datatransfer.resolver.gis.geonetwork.GeonetworkResolver - // Query String is: scope=/gcube/devsec/devVRE&version=2.0.2&request=GetCapabilities&service=CSW - int start = queryString.indexOf(PATH_PARAM_REMAINING+"="); + int start = queryString.indexOf(PATH_PARAM_REMAINPATH+"="); if(start>=0){ int end = queryString.indexOf("&", start); - if(end==-1 && queryString.length()==(PATH_PARAM_REMAINING+"="+remain_value).length()){ //SCOPE IS THE UNIQUE PARAMETER INTO QUETY STRING + if(end==-1 && queryString.length()==(PATH_PARAM_REMAINPATH+"="+remain_value).length()){ //SCOPE IS THE UNIQUE PARAMETER INTO QUETY STRING logger.debug("Scope is the unique parameter, returning empty query string"); return ""; }else if(end> map){ + + System.out.println("Printing Response Header..."); + for (Map.Entry> entry : map.entrySet()) { + System.out.println("Key : " + entry.getKey() + " ,Value : " + entry.getValue()); + } + } + + + public static String getFilename(Map> map){ + + List contentDispValue = map.get("content-disposition"); + String fileName = "filename"; + System.out.println("Printing content-disposition from Response Header..."); + for (String value : contentDispValue) { + System.out.println(value); + int start = value.indexOf("\""); + if(start>=0){ + int end = value.lastIndexOf("\""); + fileName = value.substring(start+1,end).trim(); + } + } + + System.out.println("Filename is: "+fileName); + return fileName; + } +}