regex links for launching URL from single click on sequence ID
[jalview.git] / src / jalview / gui / IdPanel.java
index d4e7c77..4741974 100755 (executable)
@@ -23,6 +23,7 @@ import java.awt.event.*;
 import javax.swing.*;
 
 import jalview.datamodel.*;
+import jalview.util.UrlLink;
 
 /**
  * DOCUMENT ME!
@@ -184,21 +185,42 @@ public class IdPanel
     }
 
     int seq = alignPanel.seqPanel.findSeq(e);
-
-    //DEFAULT LINK IS FIRST IN THE LINK LIST
-
+    String url = null;
+    int i = 0;
     String id = av.getAlignment().getSequenceAt(seq).getName();
-    if (id.indexOf("|") > -1)
+    while (url == null && i < links.size())
     {
-      id = id.substring(id.lastIndexOf("|") + 1);
-    }
-
-    String url = links.elementAt(0).toString();
-    url = url.substring(url.indexOf("|") + 1);
-
-    int index = url.indexOf("$SEQUENCE_ID$");
-    url = url.substring(0, index) + id + url.substring(index + 13);
+      // DEFAULT LINK IS FIRST IN THE LINK LIST
+      // BUT IF ITS A REGEX AND DOES NOT MATCH THE NEXT ONE WILL BE TRIED
+      url = links.elementAt(i++).toString();
+      jalview.util.UrlLink urlLink = null;
+      try
+      {
+        urlLink = new UrlLink(url);
+      } catch (Exception foo)
+      {
+        jalview.bin.Cache.log.error("Exception for URLLink '" + url + "'",
+                foo);
+        url = null;
+        continue;
+      }
+      ;
+      if (!urlLink.isValid())
+      {
+        jalview.bin.Cache.log.error(urlLink.getInvalidMessage());
+        url = null;
+        continue;
+      }
 
+      String urls[] = urlLink.makeUrls(id, true);
+      if (urls == null || urls[0]==null || urls[0].length()<4)
+      {
+        url = null;
+        continue;
+      }
+      // just take first URL made from regex
+      url = urls[1];
+    }
     try
     {
       jalview.util.BrowserLauncher.openURL(url);
@@ -213,6 +235,7 @@ public class IdPanel
                                             JOptionPane.WARNING_MESSAGE);
       ex.printStackTrace();
     }
+    
   }
 
   /**