You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2013/10/21 21:24:05 UTC

svn commit: r1534332 - in /airavata/trunk/modules: commons/utils/src/main/java/org/apache/airavata/common/utils/ gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/ xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/ xbaya-gui/src...

Author: samindaw
Date: Mon Oct 21 19:24:05 2013
New Revision: 1534332

URL: http://svn.apache.org/r1534332
Log:
https://issues.apache.org/jira/browse/AIRAVATA-873

Modified:
    airavata/trunk/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GSISSHProvider.java
    airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/TextWindow.java
    airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/monitor/MonitorWindow.java

Modified: airavata/trunk/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java?rev=1534332&r1=1534331&r2=1534332&view=diff
==============================================================================
--- airavata/trunk/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java (original)
+++ airavata/trunk/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java Mon Oct 21 19:24:05 2013
@@ -25,11 +25,65 @@ import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class StringUtil {
 	public static final String DELIMETER=",";
 	public static final String QUOTE="\"";
 	
+	// Merits for the following function should go to 
+	// http://blog.houen.net/java-get-url-from-string/ 
+	public static List<String> getURLS(String text) {
+		List<String> links = new ArrayList<String>();
+		String regex = "\\(?\\b((http|https|ftp)://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";
+		Pattern p = Pattern.compile(regex);
+		Matcher m = p.matcher(text);
+		while (m.find()) {
+			String urlStr = m.group();
+			if (urlStr.startsWith("(") && urlStr.endsWith(")")) {
+				urlStr = urlStr.substring(1, urlStr.length() - 1);
+			}
+			if (!links.contains(urlStr)) {
+				links.add(urlStr);
+			}
+		}
+		return links;
+	}
+
+	public static String createHTMLUrlTaggedString2(String value, List<String> pullLinks) {
+		for (String url : pullLinks) {
+			String hyperlinkString="<a href='"+url+"'>"+url+"</a>";
+			value=value.replaceAll(Pattern.quote(url), hyperlinkString);
+		}
+		return value;
+	}
+	public static String createHTMLUrlTaggedString(String value) {
+		String urledString = "";
+		int lastIndex=0,index=0;
+		while(index!=-1){
+			index=value.toLowerCase().indexOf("://",lastIndex);
+			if (index!=-1){
+				int beginIndex=value.lastIndexOf(" ",index);
+				urledString+=value.substring(lastIndex,beginIndex+1);
+				int endIndex=value.indexOf(" ",index);
+				if (beginIndex==-1){
+					beginIndex=0;
+				}else{
+					beginIndex++;
+				}
+				if (endIndex==-1){
+					endIndex=value.length();
+				}
+				String url=value.substring(beginIndex, endIndex);
+				urledString+="<a href='"+url+"'>"+url+"</a>";
+				lastIndex=endIndex;
+			}
+		}
+		urledString+=value.substring(lastIndex, value.length());
+		return urledString;
+	}
+	
 	private static boolean isQuoted(String s, String delimiter){
 		//Check if we need quotes
 		if (s.contains(delimiter)){

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GSISSHProvider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GSISSHProvider.java?rev=1534332&r1=1534331&r2=1534332&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GSISSHProvider.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GSISSHProvider.java Mon Oct 21 19:24:05 2013
@@ -20,6 +20,12 @@
 */
 package org.apache.airavata.gfac.provider.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+
 import org.apache.airavata.common.utils.StringUtil;
 import org.apache.airavata.commons.gfac.type.ActualParameter;
 import org.apache.airavata.commons.gfac.type.MappingFactory;
@@ -36,16 +42,17 @@ import org.apache.airavata.gfac.provider
 import org.apache.airavata.gsi.ssh.api.Cluster;
 import org.apache.airavata.gsi.ssh.api.SSHApiException;
 import org.apache.airavata.gsi.ssh.api.job.JobDescriptor;
-import org.apache.airavata.gsi.ssh.impl.DefaultJobSubmissionListener;
 import org.apache.airavata.gsi.ssh.impl.JobStatus;
 import org.apache.airavata.gsi.ssh.impl.PBSCluster;
 import org.apache.airavata.gsi.ssh.listener.JobSubmissionListener;
-import org.apache.airavata.schemas.gfac.*;
+import org.apache.airavata.schemas.gfac.FileArrayType;
+import org.apache.airavata.schemas.gfac.HostDescriptionType;
+import org.apache.airavata.schemas.gfac.HpcApplicationDeploymentType;
+import org.apache.airavata.schemas.gfac.StringArrayType;
+import org.apache.airavata.schemas.gfac.URIArrayType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.*;
-
 public class GSISSHProvider implements GFacProvider {
     private static final Logger log = LoggerFactory.getLogger(GSISSHProvider.class);
 

Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/TextWindow.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/TextWindow.java?rev=1534332&r1=1534331&r2=1534332&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/TextWindow.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/TextWindow.java Mon Oct 21 19:24:05 2013
@@ -39,6 +39,7 @@ import javax.swing.event.HyperlinkEvent.
 import javax.swing.event.HyperlinkListener;
 
 import org.apache.airavata.common.utils.BrowserLauncher;
+import org.apache.airavata.common.utils.StringUtil;
 import org.apache.airavata.xbaya.XBayaEngine;
 import org.apache.airavata.xbaya.ui.widgets.GridPanel;
 import org.apache.airavata.xbaya.ui.widgets.XBayaTextField;
@@ -83,35 +84,9 @@ public class TextWindow {
         this.dialog.hide();
     }
 
-    public String createHTMLUrlTaggedString(String value) {
-		String urledString = "";
-		int lastIndex=0,index=0;
-		while(index!=-1){
-			index=value.toLowerCase().indexOf("://",lastIndex);
-			if (index!=-1){
-				int beginIndex=value.lastIndexOf(" ",index);
-				urledString+=value.substring(lastIndex,beginIndex+1);
-				int endIndex=value.indexOf(" ",index);
-				if (beginIndex==-1){
-					beginIndex=0;
-				}else{
-					beginIndex++;
-				}
-				if (endIndex==-1){
-					endIndex=value.length();
-				}
-				String url=value.substring(beginIndex, endIndex);
-				urledString+="<a href='"+url+"'>"+url+"</a>";
-				lastIndex=endIndex;
-			}
-		}
-		urledString+=value.substring(lastIndex, value.length());
-		return urledString;
-	}
-    
     @SuppressWarnings("serial")
 	private void init() {
-        final JEditorPane editorPane = new JEditorPane(XmlConstants.CONTENT_TYPE_HTML, createHTMLUrlTaggedString(value));
+        final JEditorPane editorPane = new JEditorPane(XmlConstants.CONTENT_TYPE_HTML, StringUtil.createHTMLUrlTaggedString(value));
         editorPane.setEditable(false);
         editorPane.setBackground(Color.WHITE);
         editorPane.addHyperlinkListener(new HyperlinkListener() {

Modified: airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/monitor/MonitorWindow.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/monitor/MonitorWindow.java?rev=1534332&r1=1534331&r2=1534332&view=diff
==============================================================================
--- airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/monitor/MonitorWindow.java (original)
+++ airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/monitor/MonitorWindow.java Mon Oct 21 19:24:05 2013
@@ -21,13 +21,28 @@
 
 package org.apache.airavata.xbaya.ui.dialogs.monitor;
 
+import java.awt.Color;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
 import java.awt.event.ActionEvent;
+import java.net.URL;
 import java.util.Date;
+import java.util.regex.Pattern;
 
 import javax.swing.AbstractAction;
 import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JEditorPane;
 import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.TransferHandler;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkEvent.EventType;
+import javax.swing.event.HyperlinkListener;
 
+import org.apache.airavata.common.utils.BrowserLauncher;
+import org.apache.airavata.common.utils.StringUtil;
 import org.apache.airavata.common.utils.XMLUtil;
 import org.apache.airavata.ws.monitor.EventDataRepository;
 import org.apache.airavata.ws.monitor.MonitorUtil;
@@ -35,10 +50,12 @@ import org.apache.airavata.xbaya.ui.XBay
 import org.apache.airavata.xbaya.ui.dialogs.XBayaDialog;
 import org.apache.airavata.xbaya.ui.widgets.GridPanel;
 import org.apache.airavata.xbaya.ui.widgets.XBayaLabel;
-import org.apache.airavata.xbaya.ui.widgets.XBayaTextArea;
 import org.apache.airavata.xbaya.ui.widgets.XBayaTextField;
+import org.apache.commons.lang.StringEscapeUtils;
 import org.xmlpull.infoset.XmlElement;
 
+import xsul5.XmlConstants;
+
 public class MonitorWindow {
 
     private XBayaGUI xbayaGUI;
@@ -51,7 +68,9 @@ public class MonitorWindow {
 
     private XBayaTextField statusTextField;
 
-    private XBayaTextArea messageTextArea;
+    private JEditorPane messageTextArea;
+    private String messageText;
+    
 
     /**
      * Constructs a MonitorWindow.
@@ -79,10 +98,13 @@ public class MonitorWindow {
         }
         this.idTextField.setText(MonitorUtil.getNodeID(event));
         this.statusTextField.setText(MonitorUtil.getStatus(event));
+        
         // Show the raw XML for now.
-        this.messageTextArea.setText(XMLUtil.BUILDER.serializeToStringPretty(event));
+        messageText = XMLUtil.BUILDER.serializeToStringPretty(event);
+		this.messageTextArea.setText(StringUtil.createHTMLUrlTaggedString2(StringEscapeUtils.escapeHtml(messageText),StringUtil.getURLS(messageText)).replaceAll(Pattern.quote(" "), "&nbsp;").replaceAll(Pattern.quote("\n"), "<br />\n"));
 
         this.dialog.show();
+        this.dialog.getDialog().setSize(600, 800);
     }
 
     private void hide() {
@@ -102,10 +124,26 @@ public class MonitorWindow {
         this.statusTextField.setEditable(false);
         XBayaLabel statusLabel = new XBayaLabel(EventDataRepository.Column.STATUS.getName(), this.statusTextField);
 
-        this.messageTextArea = new XBayaTextArea();
+        this.messageTextArea = new JEditorPane(XmlConstants.CONTENT_TYPE_HTML, "");
         this.messageTextArea.setSize(500, 500);
         this.messageTextArea.setEditable(false);
-        XBayaLabel messageLabel = new XBayaLabel(EventDataRepository.Column.MESSAGE.getName(), this.messageTextArea);
+        messageTextArea.setBackground(Color.WHITE);
+        messageTextArea.addHyperlinkListener(new HyperlinkListener() {
+            public void hyperlinkUpdate(HyperlinkEvent event) {
+                if (event.getEventType() == EventType.ACTIVATED) {
+                    URL url = event.getURL();
+                    try {
+                        BrowserLauncher.openURL(url.toString());
+                    } catch (Exception e) {
+                        MonitorWindow.this.xbayaGUI.getErrorWindow().error(MonitorWindow.this.dialog.getDialog(),
+                                e.getMessage(), e);
+                    }
+                }
+            }
+        });
+        JScrollPane pane = new JScrollPane(messageTextArea);
+        pane.setSize(500, 500);
+        XBayaLabel messageLabel = new XBayaLabel(EventDataRepository.Column.MESSAGE.getName(), pane);
 
         GridPanel infoPanel = new GridPanel();
         infoPanel.add(timeLabel);
@@ -115,7 +153,7 @@ public class MonitorWindow {
         infoPanel.add(statusLabel);
         infoPanel.add(this.statusTextField);
         infoPanel.add(messageLabel);
-        infoPanel.add(this.messageTextArea);
+        infoPanel.add(pane);
         infoPanel.layout(4, 2, 3, 1);
 
         JButton okButton = new JButton("OK");
@@ -124,8 +162,15 @@ public class MonitorWindow {
                 hide();
             }
         });
+        JButton copyButton = new JButton("Copy to Clipboard");
+        copyButton.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+            	Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(messageText), null);
+            }
+        });
         JPanel buttonPanel = new JPanel();
         buttonPanel.add(okButton);
+        buttonPanel.add(copyButton);
 
         this.dialog = new XBayaDialog(this.xbayaGUI, "Notification", infoPanel, buttonPanel);
         this.dialog.setDefaultButton(okButton);