From ccfaca4dcdd272385e9a444016fc309e9cb1a1e4 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Wed, 8 Jun 2016 11:02:54 +0000 Subject: [PATCH] refs 2521: Explore the possibility to port the StatMan interface onto Dataminer https://support.d4science.org/issues/2521 Fixed Algorithms Descriptions retrivial git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/data-miner-manager@129016 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 154 ++++++++--------- .../server/smservice/SClient4WPS.java | 1 + .../smservice/wps/StatWPSClientSession.java | 155 +++++++++++++++--- 3 files changed, 202 insertions(+), 108 deletions(-) diff --git a/pom.xml b/pom.xml index 367279b..c61ae18 100644 --- a/pom.xml +++ b/pom.xml @@ -48,7 +48,7 @@ 2.6.1 3.3.2 3.1.1 - 2.6.1 + 2.6.1 ${env.KEYS} @@ -60,12 +60,8 @@ localRun - + org.slf4j slf4j-api @@ -77,7 +73,7 @@ runtime - + org.gcube.contentmanagement @@ -106,7 +102,7 @@ home-library-model runtime - + org.gcube.common @@ -139,12 +135,8 @@ ${gwtVersion} - + @@ -153,27 +145,14 @@ gxt ${gxtVersion} - - - + + + javax.portlet portlet-api @@ -182,18 +161,18 @@ org.gcube.applicationsupportlayer accesslogger - + org.gcube.portal custom-portal-handler - + org.gcube.core common-scope-maps compile - + org.gcube.applicationsupportlayer aslcore @@ -205,8 +184,8 @@ - - + + @@ -220,39 +199,35 @@ authorization-client provided - + org.gcube.portlets.user gcube-widgets compile - + org.gcube.portlets.widgets session-checker [0.0.0-SNAPSHOT,1.0.0-SNAPSHOT) - - + + org.gcube.applicationsupportlayer aslsocial - - - - - - - + + + + + + + org.gcube.contentmanagement @@ -266,35 +241,6 @@ provided - - - org.gcube.resources.discovery - ic-client - - - - - - - - org.n52.wps - 52n-wps-client-lib - 3.2.0 - - - gt-opengis - org.geotools - - - xerces - xercesImpl - - - - - - - org.gcube.common @@ -313,9 +259,41 @@ home-library-model provided + + + + + org.apache.httpcomponents + httpclient + 4.5.2 + + + + + + org.gcube.resources.discovery + ic-client + + + + + + org.n52.wps + 52n-wps-client-lib + 3.2.0 + + + gt-opengis + org.geotools + + + xerces + xercesImpl + + + + - - diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java index 35604b3..ae59ff3 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java @@ -356,6 +356,7 @@ public class SClient4WPS extends SClient { return; } catch (Throwable e) { + logger.error("RequestCapability(): "+e.getLocalizedMessage()); e.printStackTrace(); throw new Exception(e.getLocalizedMessage(), e); } finally { diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/wps/StatWPSClientSession.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/wps/StatWPSClientSession.java index c9e6a11..b5fe4e4 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/wps/StatWPSClientSession.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/wps/StatWPSClientSession.java @@ -1,11 +1,17 @@ package org.gcube.portlets.user.dataminermanager.server.smservice.wps; +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.Serializable; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -400,26 +406,64 @@ public class StatWPSClientSession implements Serializable { try { logger.debug("RetrieveDescription GET: " + processIDs + " url:" + url); - StatClientDescribeProcessRequest req = new StatClientDescribeProcessRequest(); - req.setIdentifier(processIDs); - String requestURL = req.getRequest(url); - String authString = user + ":" + password; - logger.debug("auth string: " + authString); - byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); - String encoded = new String(authEncBytes); - logger.debug("Base64 encoded auth string: " + encoded); + Path tempFile = Files.createTempFile("WPSProcessDescriptions", + "txt"); - URL urlObj = new URL(requestURL); - HttpURLConnection connection = (HttpURLConnection) urlObj - .openConnection(); - connection.setRequestMethod("GET"); - connection.setDoOutput(true); - connection.setRequestProperty("Authorization", "Basic " + encoded); - InputStream is = connection.getInputStream(); + List lines = new ArrayList<>(); + lines.add(""); + Files.write(tempFile, lines, Charset.defaultCharset(), + StandardOpenOption.APPEND); - Document doc = checkInputStream(is); - return ProcessDescriptionsDocument.Factory.parse(doc, options); + for (String processId : processIDs) { + String[] process = { processId }; + StatClientDescribeProcessRequest req = new StatClientDescribeProcessRequest(); + req.setIdentifier(process); + String requestURL = req.getRequest(url); + + String authString = user + ":" + password; + logger.debug("auth string: " + authString); + byte[] authEncBytes = Base64 + .encodeBase64(authString.getBytes()); + String encoded = new String(authEncBytes); + logger.debug("Base64 encoded auth string: " + encoded); + + URL urlObj = new URL(requestURL); + HttpURLConnection connection = (HttpURLConnection) urlObj + .openConnection(); + connection.setRequestMethod("GET"); + connection.setDoOutput(true); + connection.setRequestProperty("Authorization", "Basic " + + encoded); + InputStream is = connection.getInputStream(); + lines=retrievesSingleDescription(is); + Files.write(tempFile, lines, Charset.defaultCharset(), + StandardOpenOption.APPEND); + } + lines = new ArrayList<>(); + lines.add(""); + Files.write(tempFile, lines, Charset.defaultCharset(), + StandardOpenOption.APPEND); + + logger.debug(tempFile.toString()); + Document doc=null; + try (InputStream inputStream = Files.newInputStream(tempFile, + StandardOpenOption.READ)){ + doc = checkInputStream(inputStream); + + } + ProcessDescriptionsDocument processDescriptionsDocument = ProcessDescriptionsDocument.Factory.parse(doc, options); + + Files.delete(tempFile); + return processDescriptionsDocument; + + } catch (MalformedURLException e) { logger.error("URL seems not to be valid"); e.printStackTrace(); @@ -443,6 +487,60 @@ public class StatWPSClientSession implements Serializable { } } + protected List retrievesSingleDescription(InputStream is) throws WPSClientException { + try { + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + + List lines = new ArrayList<>(); + String line = null; + boolean elementProcessDescriptionsFound = false; + boolean elementProcessDescriptionsClosureFound = false; + + while ((line = br.readLine()) != null) { + if (elementProcessDescriptionsFound) { + if (elementProcessDescriptionsClosureFound) { + if (line.contains("")) { + break; + } else { + lines.add(line); + } + } else { + int closeIndex = line.indexOf(">"); + if (closeIndex != -1) { + elementProcessDescriptionsClosureFound = true; + if (closeIndex == line.length() - 1) { + + } else { + + } + } + } + } else { + if (line.contains(""); + if (closeIndex != -1) { + elementProcessDescriptionsClosureFound = true; + if (closeIndex == line.length() - 1) { + + } else { + + } + } + } else { + + } + } + } + return lines; + } catch (Throwable e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw new WPSClientException(e.getLocalizedMessage(), + new Exception(e)); + } + } + private InputStream retrieveDataViaPOST(XmlObject obj, String urlString) throws WPSClientException { try { @@ -479,10 +577,17 @@ public class StatWPSClientSession implements Serializable { } private Document checkInputStream(InputStream is) throws WPSClientException { - DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance(); - fac.setNamespaceAware(true); try { + DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance(); + fac.setNamespaceAware(true); Document doc = fac.newDocumentBuilder().parse(is); + logger.debug("Document: " + doc); + if (doc == null) { + logger.error("Document is null"); + throw new WPSClientException( + "Error in check input stream: Document is null"); + } + if (getFirstElementNode(doc.getFirstChild()).getLocalName().equals( "ExceptionReport") && getFirstElementNode(doc.getFirstChild()) @@ -498,18 +603,28 @@ public class StatWPSClientSession implements Serializable { "Error while parsing ExceptionReport retrieved from server", e); } + } else { + logger.debug("No Exception Report"); } return doc; } catch (SAXException e) { + logger.error("Error while parsing input: " + + e.getLocalizedMessage()); e.printStackTrace(); - throw new WPSClientException("Error while parsing input.", e); + throw new WPSClientException("Error while parsing input", e); } catch (IOException e) { + logger.error("Error occured while transfer: " + + e.getLocalizedMessage()); e.printStackTrace(); throw new WPSClientException("Error occured while transfer", e); } catch (ParserConfigurationException e) { + logger.error("Error occured, parser is not correctly configured: " + + e.getLocalizedMessage()); e.printStackTrace(); throw new WPSClientException( "Error occured, parser is not correctly configured", e); + } catch (WPSClientException e) { + throw e; } }