Ye olde SequenceFeatureFetcher
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index 1ecf254..c4c2c5b 100755 (executable)
@@ -172,18 +172,26 @@ public class AlignFrame extends Frame implements ActionListener,
       StringTokenizer st;\r
       SequenceFeature sf;\r
       FeatureRenderer fr = alignPanel.seqPanel.seqCanvas.getFeatureRenderer();\r
-      int lineNo = 0;\r
-      String featureGroup = null;\r
+      String featureGroup = null, groupLink = null;\r
+      Hashtable typeLink = new Hashtable();\r
+\r
       while ( (line = in.readLine()) != null)\r
       {\r
-        lineNo++;\r
         st = new StringTokenizer(line, "\t");\r
-        if (st.countTokens() == 2)\r
+        if(!st.hasMoreTokens())\r
+          continue;\r
+\r
+        if (st.countTokens() < 4)\r
         {\r
           type = st.nextToken();\r
           if(type.equalsIgnoreCase("startgroup"))\r
           {\r
             featureGroup = st.nextToken();\r
+            if (st.hasMoreElements())\r
+            {\r
+              groupLink = st.nextToken();\r
+              fr.addFeatureLink(featureGroup, groupLink);\r
+            }\r
           }\r
           else if(type.equalsIgnoreCase("endgroup"))\r
           {\r
@@ -191,11 +199,19 @@ public class AlignFrame extends Frame implements ActionListener,
             //but at present theres no way of showing more than 1 group\r
             st.nextToken();\r
             featureGroup = null;\r
+            groupLink = null;\r
           }\r
           else\r
           {\r
             UserColourScheme ucs = new UserColourScheme(st.nextToken());\r
             fr.setColour(type, ucs.findColour("A"));\r
+            if (st.hasMoreElements())\r
+            {\r
+                String link = st.nextToken();\r
+                typeLink.put(type, link);\r
+                fr.addFeatureLink(type, link);\r
+            }\r
+\r
           }\r
           continue;\r
         }\r
@@ -203,6 +219,7 @@ public class AlignFrame extends Frame implements ActionListener,
         while (st.hasMoreElements())\r
         {\r
           desc = st.nextToken();\r
+\r
           token = st.nextToken();\r
           if (!token.equals("ID_NOT_SPECIFIED"))\r
           {\r
@@ -229,9 +246,21 @@ public class AlignFrame extends Frame implements ActionListener,
             fr.setColour(type, ucs.findColour("A"));\r
           }\r
 \r
-          sf = new SequenceFeature(type, desc, "", start, end, featureGroup);\r
-\r
+          sf = new SequenceFeature(type, desc, start, end, 0f, featureGroup);\r
           seq.addSequenceFeature(sf);\r
+\r
+          if(groupLink!=null)\r
+          {\r
+            sf.addLink(groupLink);\r
+            sf.description += "%LINK%";\r
+          }\r
+          if(typeLink.containsKey(type))\r
+          {\r
+            sf.addLink(typeLink.get(type).toString());\r
+            sf.description += "%LINK%";\r
+          }\r
+\r
+          parseDescriptionHTML(sf);\r
         }\r
       }\r
 \r
@@ -248,6 +277,33 @@ public class AlignFrame extends Frame implements ActionListener,
     }\r
   }\r
 \r
+  void parseDescriptionHTML(SequenceFeature sf)\r
+  {\r
+    StringBuffer sb = new StringBuffer();\r
+    StringTokenizer st = new StringTokenizer(sf.getDescription(), "<");\r
+    String token,  link;\r
+    while(st.hasMoreElements())\r
+    {\r
+      token = st.nextToken("<>");\r
+      if(token.equalsIgnoreCase("html") || token.startsWith("/"))\r
+        continue;\r
+\r
+      if(token.startsWith("a href="))\r
+      {\r
+        link = token.substring(token.indexOf("\"")+1, token.length()-1);\r
+        String label = st.nextToken("<>");\r
+        sf.addLink(label+"|"+link);\r
+        sb.append(label+"%LINK%");\r
+      }\r
+      else if(token.equalsIgnoreCase("br"))\r
+        sb.append("\n");\r
+      else\r
+        sb.append(token);\r
+    }\r
+\r
+    sf.description = sb.toString();\r
+  }\r
+\r
   public void keyPressed(KeyEvent evt)\r
   {\r
     if (viewport.cursorMode\r
@@ -1733,7 +1789,7 @@ public void itemStateChanged(ItemEvent evt)
         g.drawString("If  you use JalView, please cite:", x, y += fh + 8);\r
         g.drawString("\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"",\r
                      x, y += fh);\r
-        g.drawString("Bioinformatics,  2004 12;426-7.", x, y += fh);\r
+        g.drawString("Bioinformatics,  2004 20;426-7.", x, y += fh);\r
       }\r
     }\r
 \r