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 {