From 5360e52646f799df992f053046ff172c66346b84 Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Thu, 29 Mar 2007 16:30:36 +0000
Subject: [PATCH] speed ups

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@5823 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../sanger/artemis/editor/FastaTextPane.java  | 115 +++++++++++-------
 1 file changed, 72 insertions(+), 43 deletions(-)

diff --git a/uk/ac/sanger/artemis/editor/FastaTextPane.java b/uk/ac/sanger/artemis/editor/FastaTextPane.java
index 3facf926c..68b1db786 100644
--- a/uk/ac/sanger/artemis/editor/FastaTextPane.java
+++ b/uk/ac/sanger/artemis/editor/FastaTextPane.java
@@ -262,7 +262,7 @@ public class FastaTextPane extends JScrollPane
 
           if(hit != null)
             hit.setEndPosition(textPosition);
-
+          
           hit = getHitInfo(currentID,hitInfoCollection);
           hit.setStartPosition(textPosition);
 
@@ -549,11 +549,11 @@ public class FastaTextPane extends JScrollPane
   }
 
 
-  private static HitInfo getHitInfo(String acc, Vector hits)
+  private HitInfo getHitInfo(String acc, final Vector hits)
   {
     int ind = 0;
     acc     = acc.trim();
-
+    
     if((ind = acc.indexOf(";")) > -1)
       acc = acc.substring(0,ind);
 
@@ -564,7 +564,9 @@ public class FastaTextPane extends JScrollPane
       hit = (HitInfo)ehits.nextElement();
       if(hit.getAcc().equals(acc) ||
          hit.getID().equals(acc))
+      {
         return hit;
+      }
     }
 
     return null;
@@ -779,7 +781,8 @@ public class FastaTextPane extends JScrollPane
         strbuff = new BufferedReader(strread);
       }             
 
-      HitInfo hit = null;
+      HitInfo hit[] = new HitInfo[2];
+      HitInfo this_hit = null;
       String line = null;
       String lineStrip = null;
 
@@ -796,38 +799,64 @@ public class FastaTextPane extends JScrollPane
         
           lineStrip = line.substring(3).trim();
           if(line.startsWith("AC "))
-          {           
-            hit = getHitInfo(lineStrip,hits);
-                      
-            if(hit == null)
+          {
+            String acc1;
+            String acc2 = null;
+            
+            if(lineStrip.endsWith(";"))
+              lineStrip = lineStrip.substring(0, lineStrip.length()-1);
+              
+            int ind = lineStrip.indexOf(";");
+            
+            if(ind > -1)
+            {
+              acc1 = lineStrip.substring(0,ind);
+              acc2 = lineStrip.substring(ind+1);
+            }
+            else 
+              acc1 = lineStrip;
+            
+            hit[0] = getHitInfo(acc1,hits);
+            if(acc2 != null)
+              hit[1] = getHitInfo(acc2,hits);
+            else
+              hit[1] = null;
+            
+            if(hit[0] == null)
             {         
-              logger4j.debug("HIT NOT FOUND "+line);
+              logger4j.warn("HIT NOT FOUND "+lineStrip);
               continue;
             }         
                       
-            hit.setOrganism("");
-            hit.setGeneName("");
-          }           
-                      
-          if(hit == null)
-            continue; 
-                      
-          if(line.startsWith("OS "))
-            hit.setOrganism(lineStrip);
-          else if(line.startsWith("DE "))
-            hit.appendDescription(lineStrip);
-          else if(line.startsWith("GN "))
-          {           
-            StringTokenizer tokGN = new StringTokenizer(lineStrip,";");
-            while(tokGN.hasMoreTokens())
-            {         
-              line = tokGN.nextToken();
-              if(line.startsWith("Name="))
-                hit.setGeneName(line.substring(5));
-//            else    
-//              hit.appendDescription(line);
-            }         
+            hit[0].setGeneName("");
+            
+            if(hit[1] != null)
+              hit[1].setGeneName("");
           }           
+                
+          for(int i = 0; i < hit.length; i++)
+          {
+            this_hit = hit[i];
+            if(this_hit == null)
+              continue;
+
+            if(line.startsWith("OS "))
+              this_hit.setOrganism(lineStrip);
+            else if(line.startsWith("DE "))
+              this_hit.appendDescription(lineStrip);
+            else if(line.startsWith("GN "))
+            {
+              StringTokenizer tokGN = new StringTokenizer(lineStrip, ";");
+              while(tokGN.hasMoreTokens())
+              {
+                line = tokGN.nextToken();
+                if(line.startsWith("Name="))
+                  this_hit.setGeneName(line.substring(5));
+                // else
+                // hit.appendDescription(line);
+              }
+            }
+          }
         }
 
         strbuff.close();   
@@ -838,49 +867,49 @@ public class FastaTextPane extends JScrollPane
       ehits = hits.elements();
       while(ehits.hasMoreElements() && keepRunning)
       {               
-        hit = (HitInfo)ehits.nextElement();
+        this_hit = (HitInfo)ehits.nextElement();
         
-        HitInfo cacheHit = checkCache(hit);
+        HitInfo cacheHit = checkCache(this_hit);
         
         if(cacheHit != null && cacheHit.getEMBL() != null)
         {
           logger4j.debug("Retrieved from cache "+cacheHit.getID()+
                          " cache size="+cacheHits.length);
-          hit.setEMBL(cacheHit.getEMBL());
-          hit.setEC_number(cacheHit.getEC_number());
-          hit.setGeneName(cacheHit.getGeneName());
+          this_hit.setEMBL(cacheHit.getEMBL());
+          this_hit.setEC_number(cacheHit.getEC_number());
+          this_hit.setGeneName(cacheHit.getGeneName());
           continue;
         }
         
-        res = getUniprotLinkToDatabase(fgetz, getMfetchExecutable(), hit, env, "embl");
+        res = getUniprotLinkToDatabase(fgetz, getMfetchExecutable(), this_hit, env, "embl");
               
         int ind1 = res.indexOf("ID ");
         if(ind1 > -1) 
         {             
           StringTokenizer tok = new StringTokenizer(res);
           tok.nextToken();
-          hit.setEMBL(tok.nextToken());
+          this_hit.setEMBL(tok.nextToken());
         }             
         else          
-          hit.setEMBL("");
+          this_hit.setEMBL("");
                       
         // EC_number  
-        if(hit.getEC_number() != null)
+        if(this_hit.getEC_number() != null)
           continue;   
 
-        res = getUniprotLinkToDatabase(fgetz, getMfetchExecutable(), hit, env, "enzyme");
+        res = getUniprotLinkToDatabase(fgetz, getMfetchExecutable(), this_hit, env, "enzyme");
 
         ind1 = res.indexOf("ID ");
         if(ind1 > -1) 
         {             
           StringTokenizer tok = new StringTokenizer(res);
           tok.nextToken();
-          hit.setEC_number(tok.nextToken());
+          this_hit.setEC_number(tok.nextToken());
         }
         
         if(nCacheHits >= cacheHits.length)
           nCacheHits = 0;
-        cacheHits[nCacheHits] = hit;
+        cacheHits[nCacheHits] = this_hit;
         nCacheHits++;
       }               
     }              
-- 
GitLab