Uses FeaturesFile parser, GFF and Jalview
authoramwaterhouse <Andrew Waterhouse>
Fri, 23 Jun 2006 13:45:06 +0000 (13:45 +0000)
committeramwaterhouse <Andrew Waterhouse>
Fri, 23 Jun 2006 13:45:06 +0000 (13:45 +0000)
src/jalview/appletgui/AlignFrame.java

index c4c2c5b..d7bf91a 100755 (executable)
@@ -148,162 +148,29 @@ public class AlignFrame extends Frame implements ActionListener,
    * @param String DOCUMENT ME!\r
    */\r
 \r
-  public void parseFeaturesFile(String file)\r
+  public void parseFeaturesFile(String file, String type)\r
   {\r
-    String line = null;\r
-    try\r
-    {\r
-      BufferedReader in = null;\r
-      java.io.InputStream is = getClass().getResourceAsStream("/" + file);\r
-      if (is != null)\r
-      {\r
-        in = new BufferedReader(new java.io.InputStreamReader(is));\r
-      }\r
-      else\r
-      {\r
-        URL url = new URL(file);\r
-        in = new BufferedReader(new InputStreamReader(url.openStream()));\r
-      }\r
-\r
-      SequenceI seq = null;\r
-      String type, desc, token;\r
-\r
-      int index, start, end;\r
-      StringTokenizer st;\r
-      SequenceFeature sf;\r
-      FeatureRenderer fr = alignPanel.seqPanel.seqCanvas.getFeatureRenderer();\r
-      String featureGroup = null, groupLink = null;\r
-      Hashtable typeLink = new Hashtable();\r
-\r
-      while ( (line = in.readLine()) != null)\r
-      {\r
-        st = new StringTokenizer(line, "\t");\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
-            //We should check whether this is the current group,\r
-            //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
-\r
-        while (st.hasMoreElements())\r
-        {\r
-          desc = st.nextToken();\r
-\r
-          token = st.nextToken();\r
-          if (!token.equals("ID_NOT_SPECIFIED"))\r
-          {\r
-            index = viewport.alignment.findIndex(viewport.alignment.findName(\r
-                token));\r
-            st.nextToken();\r
-          }\r
-          else\r
-          {\r
-            index = Integer.parseInt(st.nextToken());\r
-          }\r
-\r
-          start = Integer.parseInt(st.nextToken());\r
-          end = Integer.parseInt(st.nextToken());\r
-\r
-          seq = viewport.alignment.getSequenceAt(index);\r
-\r
-          type = st.nextToken();\r
-\r
-          if(fr.getColour(type)==null)\r
-          {\r
-            // Probably the old style groups file\r
-            UserColourScheme ucs = new UserColourScheme(type);\r
-            fr.setColour(type, ucs.findColour("A"));\r
-          }\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
-      viewport.showSequenceFeatures = true;\r
-      sequenceFeatures.setState(true);\r
-\r
-      alignPanel.repaint();\r
-\r
+    boolean featuresFile = false;\r
+    try{\r
+      featuresFile = new jalview.io.FeaturesFile(file, type).parse(viewport.alignment,\r
+                                         alignPanel.seqPanel.seqCanvas.\r
+                                         getFeatureRenderer().featureColours);\r
     }\r
-    catch (Exception ex)\r
+    catch(Exception ex)\r
     {\r
       ex.printStackTrace();\r
-      System.out.println("Error parsing groups file: " + ex +"\n"+line);\r
     }\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
+    if(featuresFile)\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
+      viewport.showSequenceFeatures = true;\r
+      sequenceFeatures.setState(true);\r
+      alignPanel.repaint();\r
     }\r
 \r
-    sf.description = sb.toString();\r
   }\r
 \r
+\r
   public void keyPressed(KeyEvent evt)\r
   {\r
     if (viewport.cursorMode\r