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("" + 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("" + 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("" + 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("" + 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("" + 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("" + 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("" + 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("" + 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); + } + + } + +}