diff --git a/distro/changelog.xml b/distro/changelog.xml index bad1e07..fd9b59b 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -2,6 +2,8 @@ Updated PortalContext [ticket #6278] + Added encoded parameters in equivalent http request [ticket + #7167] diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/dmservice/SClient4WPS.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/dmservice/SClient4WPS.java index 5f6f0f9..a0c17c2 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/dmservice/SClient4WPS.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/dmservice/SClient4WPS.java @@ -2,8 +2,10 @@ package org.gcube.portlets.user.dataminermanager.server.dmservice; import java.io.ByteArrayInputStream; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.net.URL; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -556,12 +558,11 @@ public class SClient4WPS extends SClient { if (node == null) return; - logger.debug("Node Name: " + node.getNodeName()); if (node.getNodeName() == null) { return; } - + if (node.getFirstChild() != null) { logger.debug("Node Value: " + node.getFirstChild().getNodeValue()); } else { @@ -569,7 +570,6 @@ public class SClient4WPS extends SClient { return; } - String text; switch (node.getNodeName()) { case "d4science:Data": @@ -733,15 +733,8 @@ public class SClient4WPS extends SClient { throw new Exception("Invalid processLocation: " + processUrl); } - String equivalentRequest = wpsProcessingServlet + "?" - + "request=Execute&service=WPS&Version=1.0.0&gcube-token=" - + wpsToken + "&lang=en-US&Identifier=" + operator.getId() - + "&DataInputs="; - - for (String key : equivalentRequestMap.keySet()) { - equivalentRequest = equivalentRequest + key + "=" - + equivalentRequestMap.get(key) + ";"; - } + String equivalentRequest = extractEquivalentRequestForComputation(operator, + equivalentRequestMap); ComputationId computationId = new ComputationId(id, processUrl, operator.getId(), operator.getName(), equivalentRequest); @@ -752,6 +745,29 @@ public class SClient4WPS extends SClient { return computationId; } + private String extractEquivalentRequestForComputation(Operator operator, + LinkedHashMap equivalentRequestMap) { + String equivalentRequest = wpsProcessingServlet + "?" + + "request=Execute&service=WPS&Version=1.0.0&gcube-token=" + + wpsToken + "&lang=en-US&Identifier=" + operator.getId() + + "&DataInputs="; + + for (String key : equivalentRequestMap.keySet()) { + String value=""; + try { + value = URLEncoder.encode(equivalentRequestMap.get(key), + "UTF-8"); + } catch (UnsupportedEncodingException e) { + logger.error("Error in equivalent request creation: Unsupported Encoding for key=" + + key,e); + } + + equivalentRequest = equivalentRequest + key + "=" + + value + ";"; + } + return equivalentRequest; + } + private String compute(ProcessInformations processInformations, Map userInputs, Map inputParameters, @@ -887,8 +903,7 @@ public class SClient4WPS extends SClient { if ((failure != null && !failure.isEmpty())) { logger.debug("WPS FAILURE: " + failure); computationStatus = new ComputationStatus( - new ServiceException( - failure)); + new ServiceException(failure)); } else { String paused = statusType .getProcessPaused() == null ? null @@ -897,8 +912,7 @@ public class SClient4WPS extends SClient { if (paused != null && !paused.isEmpty()) { logger.debug("WPS PAUSED: " + paused); computationStatus = new ComputationStatus( - new ServiceException( - paused)); + new ServiceException(paused)); } else { String success = statusType .getProcessSucceeded() == null ? null @@ -1274,15 +1288,9 @@ public class SClient4WPS extends SClient { throw new Exception("Invalid processLocation: " + processUrl); } - String equivalentRequest = wpsProcessingServlet + "?" - + "request=Execute&service=WPS&Version=1.0.0&gcube-token=" - + wpsToken + "&lang=en-US&Identifier=" - + computationProperties.get("operator_id") + "&DataInputs="; - - for (String key : equivalentRequestMap.keySet()) { - equivalentRequest = equivalentRequest + key + "=" - + equivalentRequestMap.get(key) + ";"; - } + + String equivalentRequest = extractEquivalentRequestForResubmit( + computationProperties, equivalentRequestMap); ComputationId computationId = new ComputationId(id, processUrl, computationProperties.get("operator_id"), @@ -1294,6 +1302,28 @@ public class SClient4WPS extends SClient { return computationId; } + private String extractEquivalentRequestForResubmit( + Map computationProperties, + LinkedHashMap equivalentRequestMap) { + String equivalentRequest = wpsProcessingServlet + "?" + + "request=Execute&service=WPS&Version=1.0.0&gcube-token=" + + wpsToken + "&lang=en-US&Identifier=" + + computationProperties.get("operator_id") + "&DataInputs="; + + for (String key : equivalentRequestMap.keySet()) { + String value=""; + try { + value = URLEncoder.encode(equivalentRequestMap.get(key), + "UTF-8"); + } catch (UnsupportedEncodingException e) { + logger.error("Error in equivalent request creation: Unsupported Encoding for key=" + + key,e); + } + equivalentRequest = equivalentRequest + key + "=" + value + ";"; + } + return equivalentRequest; + } + @Override public ComputationData getComputationDataByComputationProperties( Map computationProperties) throws Exception {