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);


Reply via email to