diff --git a/distro/changelog.xml b/distro/changelog.xml
index 2344218..cd55a07 100644
--- a/distro/changelog.xml
+++ b/distro/changelog.xml
@@ -4,6 +4,7 @@
Integrated DataMiner CL for simplify integration with new
StorageHub[ticket #11720]
Added refresh button in operators panel[ticket #11741]
+ Added hyperlink for log that contains http reference[ticket #11529]
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java
index 7af9049..b05fa8f 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java
@@ -9,6 +9,7 @@ import org.gcube.portlets.user.dataminermanager.client.custom.progress.OrangePro
import org.gcube.portlets.user.dataminermanager.client.custom.progress.RedProgressBar;
import org.gcube.portlets.user.dataminermanager.client.events.CancelComputationExecutionRequestEvent;
import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync;
+import org.gcube.portlets.user.dataminermanager.client.util.ElementsHighlights;
import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3;
import org.gcube.portlets.user.dataminermanager.shared.Constants;
import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationId;
@@ -178,6 +179,9 @@ public class ComputationStatusPanel extends SimpleContainer {
} else {
errorMessage = computationStatus.getError()
.getLocalizedMessage();
+ ElementsHighlights el=new ElementsHighlights();
+ errorMessage=el.createLinkFromText(errorMessage);
+
}
Info.display("Failed",
"The computation " + computationId.getId() + " of "
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/util/ElementsHighlights.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/util/ElementsHighlights.java
new file mode 100644
index 0000000..48a7a43
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/util/ElementsHighlights.java
@@ -0,0 +1,271 @@
+package org.gcube.portlets.user.dataminermanager.client.util;
+
+import com.allen_sauer.gwt.log.client.Log;
+
+/**
+ *
+ * @author Giancarlo Panichi
+ *
+ *
+ */
+public class ElementsHighlights {
+
+ public ElementsHighlights() {
+
+ }
+
+ public String createLinkFromText(String text) {
+ Log.info("Message: " + text);
+ if (text == null || text.isEmpty()) {
+ return text;
+ }
+
+ boolean end = false;
+ StringBuilder result = new StringBuilder();
+ String mes = new String(text);
+
+ while (!end) {
+ if (mes != null && !mes.isEmpty()) {
+ if (mes.contains("http") || mes.contains("https")) {
+ int httpIndex = mes.indexOf("http");
+ int httpsIndex = mes.indexOf("https");
+ if (httpIndex == -1) {
+ if (httpsIndex == -1) {
+ result.append(mes);
+ end = true;
+ } else {
+ String prefix = mes.substring(0, httpsIndex);
+ result.append(prefix);
+
+ String checkTerminator;
+ if (httpsIndex > 0) {
+ checkTerminator = mes.substring(httpsIndex - 1, httpsIndex);
+ if (checkTerminator.compareTo(" ") != 0 && checkTerminator.compareTo("\"") != 0
+ && checkTerminator.compareTo("'") != 0) {
+ Log.debug("Terminator Found:" + checkTerminator);
+ checkTerminator = " ";
+ Log.debug("Terminator Set:" + checkTerminator);
+
+ } else {
+ Log.debug("Terminator Set:" + checkTerminator);
+ }
+ } else {
+ checkTerminator = " ";
+ Log.debug("Terminator Set:" + checkTerminator);
+ }
+
+
+ mes = mes.substring(httpsIndex, mes.length());
+
+ int terminator = mes.indexOf(checkTerminator);
+ if (terminator == -1) {
+ if(mes.contains("")){
+ int j=mes.indexOf("");
+ String extractedUrl=mes.substring(0, j);
+ result.append("" + extractedUrl + "");
+ result.append(mes.substring(j));
+ } else {
+ result.append("" + mes + "");
+ }
+ end = true;
+ } else {
+ String extractedUrl;
+ if (checkTerminator == " ") {
+ extractedUrl = mes.substring(0, terminator+1);
+ } else {
+ extractedUrl = mes.substring(0, terminator);
+ }
+
+
+ if(extractedUrl.contains("")){
+ int k=extractedUrl.indexOf("");
+ extractedUrl=extractedUrl.substring(0, k);
+ }
+
+ Log.debug("extractedUrl: "+extractedUrl);
+ result.append(
+ "" + extractedUrl + "");
+ mes = mes.substring(terminator, mes.length());
+ }
+ }
+
+ } else {
+ if (httpsIndex == -1) {
+ String prefix = mes.substring(0, httpIndex);
+ result.append(prefix);
+
+ String checkTerminator;
+ if (httpIndex > 0) {
+ checkTerminator = mes.substring(httpIndex - 1, httpIndex);
+ if (checkTerminator.compareTo(" ") != 0 && checkTerminator.compareTo("\"") != 0
+ && checkTerminator.compareTo("'") != 0) {
+ Log.debug("Terminator Found:" + checkTerminator);
+ checkTerminator = " ";
+ Log.debug("Terminator Set:" + checkTerminator);
+
+ } else {
+ Log.debug("Terminator Set:" + checkTerminator);
+ }
+ } else {
+ checkTerminator = " ";
+ Log.debug("Terminator Set:" + checkTerminator);
+ }
+
+ mes = mes.substring(httpIndex, mes.length());
+ int terminator = mes.indexOf(checkTerminator);
+ Log.debug("TerminatorCheck found: "+terminator);
+ if (terminator == -1) {
+ if(mes.contains("")){
+ int j=mes.indexOf("");
+ String extractedUrl=mes.substring(0, j);
+ result.append("" + extractedUrl + "");
+ result.append(mes.substring(j));
+ } else {
+ result.append("" + mes + "");
+ }
+ end = true;
+ } else {
+ String extractedUrl;
+ if (checkTerminator == " ") {
+ extractedUrl = mes.substring(0, terminator+1);
+ } else {
+ extractedUrl = mes.substring(0, terminator);
+ }
+
+
+ if(extractedUrl.contains("")){
+ int k=extractedUrl.indexOf("");
+ extractedUrl=extractedUrl.substring(0, k);
+ }
+
+ Log.debug("extractedUrl: "+extractedUrl);
+ result.append(
+ "" + extractedUrl + "");
+ mes = mes.substring(terminator, mes.length());
+ }
+ } else {
+ if (httpsIndex <= httpIndex) {
+ String prefix = mes.substring(0, httpsIndex);
+ result.append(prefix);
+
+ String checkTerminator;
+ if (httpsIndex > 0) {
+ checkTerminator = mes.substring(httpsIndex - 1, httpsIndex);
+ if (checkTerminator.compareTo(" ") != 0 && checkTerminator.compareTo("\"") != 0
+ && checkTerminator.compareTo("'") != 0) {
+ Log.debug("Terminator Found:" + checkTerminator);
+ checkTerminator = " ";
+ Log.debug("Terminator Set:" + checkTerminator);
+
+ } else {
+ Log.debug("Terminator Set:" + checkTerminator);
+ }
+ } else {
+ checkTerminator = " ";
+ Log.debug("Terminator Set:" + checkTerminator);
+ }
+
+
+ mes = mes.substring(httpsIndex, mes.length());
+ int terminator = mes.indexOf(checkTerminator);
+
+ if (terminator == -1) {
+ if(mes.contains("")){
+ int j=mes.indexOf("");
+ String extractedUrl=mes.substring(0, j);
+ result.append("" + extractedUrl + "");
+ result.append(mes.substring(j));
+ } else {
+ result.append("" + mes + "");
+ }
+ end = true;
+ } else {
+ String extractedUrl;
+ if (checkTerminator == " ") {
+ extractedUrl = mes.substring(0, terminator);
+ } else {
+ extractedUrl = mes.substring(0, terminator - 1);
+ }
+
+
+ if(extractedUrl.contains("")){
+ int k=extractedUrl.indexOf("");
+ extractedUrl=extractedUrl.substring(0, k);
+ }
+
+ Log.debug("extractedUrl: "+extractedUrl);
+ result.append(
+ "" + extractedUrl + "");
+ mes = mes.substring(terminator, mes.length());
+ }
+ } else {
+ String prefix = mes.substring(0, httpIndex);
+ result.append(prefix);
+
+ String checkTerminator;
+ if (httpIndex > 0) {
+ checkTerminator = mes.substring(httpIndex - 1, httpIndex);
+ if (checkTerminator.compareTo(" ") != 0 && checkTerminator.compareTo("\"") != 0
+ && checkTerminator.compareTo("'") != 0) {
+ Log.debug("Terminator Found:" + checkTerminator);
+ checkTerminator = " ";
+ Log.debug("Terminator Set:" + checkTerminator);
+
+ } else {
+ Log.debug("Terminator Set:" + checkTerminator);
+ }
+ } else {
+ checkTerminator = " ";
+ Log.debug("Terminator Set:" + checkTerminator);
+ }
+
+
+ mes = mes.substring(httpIndex, mes.length());
+ int terminator = mes.indexOf(checkTerminator);
+
+ if (terminator == -1) {
+ if(mes.contains("")){
+ int j=mes.indexOf("");
+ String extractedUrl=mes.substring(0, j);
+ result.append("" + extractedUrl + "");
+ result.append(mes.substring(j));
+ } else {
+ result.append("" + mes + "");
+ }
+ end = true;
+ } else {
+ String extractedUrl;
+ if (checkTerminator == " ") {
+ extractedUrl = mes.substring(0, terminator);
+ } else {
+ extractedUrl = mes.substring(0, terminator - 1);
+ }
+
+ if(extractedUrl.contains("")){
+ int k=extractedUrl.indexOf("");
+ extractedUrl=extractedUrl.substring(0, k);
+ }
+
+ Log.debug("extractedUrl: "+extractedUrl);
+ result.append(
+ "" + extractedUrl + "");
+ mes = mes.substring(terminator, mes.length());
+
+ }
+ }
+ }
+
+ }
+
+ } else {
+ result.append(mes);
+ end = true;
+ }
+ } else {
+ end = true;
+ }
+ }
+ Log.info("New Message: " + result.toString());
+ return result.toString();
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/shared/Constants.java b/src/main/java/org/gcube/portlets/user/dataminermanager/shared/Constants.java
index 0c01a89..f0f7892 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/shared/Constants.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/shared/Constants.java
@@ -18,7 +18,7 @@ public class Constants {
public static final String DEFAULT_USER = "giancarlo.panichi";
public final static String DEFAULT_SCOPE = "/gcube/devNext/NextNext";
- public final static String DEFAULT_TOKEN = "ae1208f0-210d-47c9-9b24-d3f2dfcce05f-98187548";
+ public final static String DEFAULT_TOKEN = "";
public static final String DEFAULT_ROLE = "OrganizationMember";
diff --git a/src/test/java/org/gcube/portlets/user/dataminermanager/ElementsHighlightsTest.java b/src/test/java/org/gcube/portlets/user/dataminermanager/ElementsHighlightsTest.java
new file mode 100644
index 0000000..f6694b4
--- /dev/null
+++ b/src/test/java/org/gcube/portlets/user/dataminermanager/ElementsHighlightsTest.java
@@ -0,0 +1,59 @@
+package org.gcube.portlets.user.dataminermanager;
+
+import org.gcube.portlets.user.dataminermanager.client.util.ElementsHighlights;
+import org.gcube.portlets.user.dataminermanager.shared.Constants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ * @author Giancarlo Panichi
+ *
+ *
+ */
+public class ElementsHighlightsTest extends TestCase {
+ private static Logger logger = LoggerFactory.getLogger(ElementsHighlightsTest.class);
+
+ public void testExecute() {
+ if (Constants.TEST_ENABLE) {
+ logger.debug("ElementsHighlightsTest Test");
+ try {
+ ElementsHighlights eh = new ElementsHighlights();
+
+ /*String textWithLink = new String(
+ "Result reported in https://trivial.com/error/Error.txt and https://trivial.com/error/Error.txt test2");
+ logger.debug("Text with link: " + textWithLink);
+ eh.createLinkFromText(textWithLink);
+
+ String textWithoutLink = new String(
+ "Error reported in https://trivial.com/error/Error.txt and https://trivial.com/error/Error.txt test2");
+ logger.debug("Text without link: " + textWithoutLink);
+ eh.createLinkFromText(textWithoutLink);
+
+ String textNull = null;
+ logger.debug("Text null: " + textNull);
+ eh.createLinkFromText(textNull);*/
+
+ String textWithSomeTags = new String(
+ "The computation e1e862c8-2735-45ec-9e21-7663a7366316 of Netcdf Support "
+ + "Java has failed. http://www.opengis.net/ows/1.1 xmlns:wps='http://www.opengis.net/wps/1.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> java.lang.RuntimeException: Logs of the script can be found at http://data-d.d4science.org/ZHFXaWtUS2FSOGlqSytNOHZaRHNMYTFRSkw3WEc2d3ZHbWJQNStIS0N6Yz0-VLT");
+ logger.debug("Text with some tags: " + textWithSomeTags);
+ eh.createLinkFromText(textWithSomeTags);
+
+ assertTrue("Success", true);
+
+ } catch (Throwable e) {
+ logger.error(e.getLocalizedMessage());
+ e.printStackTrace();
+ assertTrue("Error", false);
+ }
+
+ } else {
+ assertTrue("Success", true);
+ }
+
+ }
+
+}