From fbeef4d7db06f71c83dde47cdc8b60def0d3cbbf Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Wed, 6 Sep 2017 08:43:37 +0000 Subject: [PATCH] Generalized request xml.metadata.get git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-transfer/uri-resolver@152698 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../gis/geonetwork/GeonetworkResolver.java | 1 + .../gis/util/GetResponseRecordFilter.java | 128 +++++++++++++----- 2 files changed, 93 insertions(+), 36 deletions(-) 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 2931e7e..f30e276 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 @@ -445,6 +445,7 @@ public class GeonetworkResolver extends HttpServlet{ List fileIdentifiers = GetResponseRecordFilter.getTextContentStringsForTagName(doc, "gmd:fileIdentifier"); List noMatchingOwner = new ArrayList(); for (String fileId : fileIdentifiers) { + //String own = GetResponseRecordFilter.getMetaCategoryByFileIdentifier(fileId, config.getGeoNetworkEndpoint(),config.getAdminAccount().getUser(), config.getAdminAccount().getPassword()); String own = GetResponseRecordFilter.getMetaOwnerNameByFileIdentifier(fileId, config.getGeoNetworkEndpoint(),config.getAdminAccount().getUser(), config.getAdminAccount().getPassword()); if(own.compareTo(theOwner)!=0){ logger.debug("Owner of file Identifier "+fileId+" not matching the owner passed: "+theOwner+", removing it.."); 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 58c62e6..9787954 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 @@ -307,6 +307,66 @@ public class GetResponseRecordFilter { } + + /** + * Perform the request xml metadata get. + * + * @param fileIdentifier the file identifier is the UUID + * @param geonetworkURL the geonetwork url + * @param user the user + * @param pwd the pwd + * @return the response as string + */ + public static String requestXmlMetadataGet(String fileIdentifier, String geonetworkURL, String user, String pwd){ + + if(fileIdentifier==null || fileIdentifier.isEmpty()) + return null; + + HTTPCallsUtils httpCall = new HTTPCallsUtils(); + String queryURL = geonetworkURL.endsWith("/")?geonetworkURL:geonetworkURL+"/"; + try { + queryURL+=XML_METADATA_GET_SERVICE+"?uuid="+URLEncoder.encode(fileIdentifier, "UTF-8"); + } + catch (UnsupportedEncodingException e1) { + queryURL+=XML_METADATA_GET_SERVICE+"?uuid="+fileIdentifier; + } + + String theResponse = null; + try { + logger.trace("Performing query: "+queryURL); + //IT IS NEED ADMIN LOGIN IN ON GN TO PERFORM SUCH QUERY + boolean authorized = GNAuthentication.login(httpCall, geonetworkURL, user, pwd); + HttpResponse response = httpCall.get(queryURL); + if(response.getStatus()==HttpStatus.SC_OK){ + theResponse = response.getResponse(); + } + } + catch (MalformedURLException e) { + logger.debug("MalformedURLException error on getting the tag 'ownername' for the file identifier: "+fileIdentifier, e); + } + catch (Exception e) { + logger.debug("Error on getting the tag 'ownername' for the file identifier: "+fileIdentifier, e); + } + + return theResponse; + + } + + + /** + * Gets the meta category by file identifier. + * + * @param fileIdentifier the file identifier + * @param geonetworkURL the geonetwork url + * @param user the user + * @param pwd the pwd + * @return the meta category by file identifier + */ + public static String getMetaCategoryByFileIdentifier(String fileIdentifier, String geonetworkURL, String user, String pwd){ + + return getMetadataValueByFileIdentifier(fileIdentifier, geonetworkURL, user, pwd, "category"); + } + /** * Gets the meta owner name by file identifier. * @@ -318,51 +378,47 @@ public class GetResponseRecordFilter { */ public static String getMetaOwnerNameByFileIdentifier(String fileIdentifier, String geonetworkURL, String user, String pwd){ - if(fileIdentifier==null || fileIdentifier.isEmpty()) + return getMetadataValueByFileIdentifier(fileIdentifier, geonetworkURL, user, pwd, "ownername"); + + } + + + /** + * Gets the metadata value by file identifier. + * + * @param fileIdentifier the file identifier + * @param geonetworkURL the geonetwork url + * @param user the user + * @param pwd the pwd + * @param metadataName the metadata name + * @return the metadata value by file identifier + */ + private static String getMetadataValueByFileIdentifier(String fileIdentifier, String geonetworkURL, String user, String pwd, String metadataName){ + + String response = requestXmlMetadataGet(fileIdentifier, geonetworkURL, user, pwd); + + if(response==null || response.isEmpty()) return null; - String ownerName = null; - HTTPCallsUtils httpCall = new HTTPCallsUtils(); - String queryURL = geonetworkURL.endsWith("/")?geonetworkURL:geonetworkURL+"/"; + InputStream stream = new ByteArrayInputStream(response.getBytes()); + Document doc; try { - queryURL+=XML_METADATA_GET_SERVICE+"?uuid="+URLEncoder.encode(fileIdentifier, "UTF-8"); - } - catch (UnsupportedEncodingException e1) { - queryURL+=XML_METADATA_GET_SERVICE+"?uuid="+fileIdentifier; - } - HttpResponse response; - try { - logger.trace("Performing query: "+queryURL); - //IT IS NEED ADMIN LOGIN IN ON GN TO PERFORM SUCH QUERY - boolean authorized = GNAuthentication.login(httpCall, geonetworkURL, user, pwd); - response = httpCall.get(queryURL); - if(response.getStatus()==HttpStatus.SC_OK){ - String theR = response.getResponse(); - //logger.trace("resp: "+theR); - InputStream stream = new ByteArrayInputStream(response.getResponse().getBytes()); - Document doc = GetResponseRecordFilter.inputStreamToW3CDocument(stream); - List ownerNames = GetResponseRecordFilter.getTextContentStringsForTagName(doc, "ownername"); - - if(ownerNames==null || ownerNames.isEmpty()) - return null; - - ownerName = ownerNames.get(0); - logger.debug("found and returning the ownername: '"+ownerName + "' for file identifier: "+fileIdentifier); + doc = GetResponseRecordFilter.inputStreamToW3CDocument(stream); + List metadataValues = GetResponseRecordFilter.getTextContentStringsForTagName(doc, metadataName); + if(metadataValues==null || metadataValues.isEmpty()){ + logger.debug("No "+metadataName+" found, returning null"); + return null; } - } - catch (MalformedURLException e) { - logger.debug("MalformedURLException error on getting the tag 'ownername' for the file identifier: "+fileIdentifier, e); + + logger.debug("found and returning value of "+metadataName+": '"+metadataValues.get(0) + "' for file identifier: "+fileIdentifier); + return metadataValues.get(0); } catch (Exception e) { - logger.debug("Error on getting the tag 'ownername' for the file identifier: "+fileIdentifier, e); + logger.debug("Error: ",e); + return null; } - - - - return ownerName; - } // /**