feature locations are retrieved by associated accession string
authorjprocter <Jim Procter>
Wed, 2 May 2007 15:19:23 +0000 (15:19 +0000)
committerjprocter <Jim Procter>
Wed, 2 May 2007 15:19:23 +0000 (15:19 +0000)
src/jalview/datamodel/xdb/embl/EmblFeatureLocations.java

index a3c581d..a9fe76e 100644 (file)
@@ -1,5 +1,6 @@
 package jalview.datamodel.xdb.embl;
 
+import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Vector;
 
@@ -44,41 +45,65 @@ public class EmblFeatureLocations {
         this.locElements = locElements;
     }
     /**
-     * Return all location elements as start-end pairs on referenced sequence 
+     * Return all location elements as start-end pairs (without accessions)  
      * TODO: pass back complement and 'less than or more than' range information
+     * Note: do not use this since it throws away any accessionIds associated with
+     * each location!
      * @return int[] { start1, end1, ... }
      */
     public int[] getElementRanges() {
-        if (locationType.equalsIgnoreCase("single")) {
-            int[] se = new int[locElements.size()*2];            
-            int sepos=0;
-            for (Iterator le=locElements.iterator();le.hasNext();) {
-                EmblFeatureLocElement loce = (EmblFeatureLocElement) le.next();
-                BasePosition bp[] = loce.getBasePositions();
-                if (bp.length==2) {
-                    se[sepos++] = Integer.parseInt(bp[0].getPos());
-                    se[sepos++] = Integer.parseInt(bp[1].getPos());
-                }
+      return getElementRanges(null);
+    }
+    /**
+     * Return all location elements concerning given accession as start-end pairs  
+     * TODO: pass back complement and 'less than or more than' range information
+     * TODO: deal with multiple accessions
+     * @param accession the accession string for which locations are requested, or null for all locations
+     * @return null or int[] { start1, end1, ... }
+     */
+    
+    public int[] getElementRanges(String accession)
+    {
+      int sepos=0;
+      int[] se = new int[locElements.size()*2];
+      if (locationType.equalsIgnoreCase("single")) {
+        for (Enumeration le=locElements.elements();le.hasMoreElements();) {
+            EmblFeatureLocElement loce = (EmblFeatureLocElement) le.nextElement();
+            if (accession==null || loce.accession!=null && accession.equals(loce.accession))
+            {
+              BasePosition bp[] = loce.getBasePositions();
+              if (bp.length==2) {
+                se[sepos++] = Integer.parseInt(bp[0].getPos());
+                se[sepos++] = Integer.parseInt(bp[1].getPos());
+              }
             }
-            return se;
         }
-        if (locationType.equalsIgnoreCase("join")) {
-            int[] se = new int[locElements.size()*2];            
-            int sepos=0;
-            for (Iterator le=locElements.iterator();le.hasNext();) {
-                EmblFeatureLocElement loce = (EmblFeatureLocElement) le.next();
-                BasePosition bp[] = loce.getBasePositions();
-                if (bp.length==2) {
-                    se[sepos++] = Integer.parseInt(bp[0].getPos());
-                    se[sepos++] = Integer.parseInt(bp[1].getPos());
-                }
+    }
+    if (locationType.equalsIgnoreCase("join")) {
+        for (Enumeration le=locElements.elements();le.hasMoreElements();) {
+          EmblFeatureLocElement loce = (EmblFeatureLocElement) le.nextElement();
+          if (accession==null || loce.accession!=null && accession.equals(loce.accession))
+          {
+            BasePosition bp[] = loce.getBasePositions();
+            if (bp.length==2) {
+                se[sepos++] = Integer.parseInt(bp[0].getPos());
+                se[sepos++] = Integer.parseInt(bp[1].getPos());
             }
-            return se;
+          }
         }
-        if (locationType!=null)
-        {
-          jalview.bin.Cache.log.error("EmbleFeatureLocations.getElementRanges cannot deal with locationType=='"+locationType+"'");
-        }
-        return null;
+        return se;
+    }
+    if (locationType!=null)
+    {
+      jalview.bin.Cache.log.error("EmbleFeatureLocations.getElementRanges cannot deal with locationType=='"+locationType+"'");
+    }
+    // trim range if necessary.
+    if (se!=null && sepos!=se.length)
+    {
+      int[] trimmed = new int[sepos];
+      System.arraycopy(se,0,trimmed, 0, sepos);
+      se = trimmed;
+    }
+    return se;
     }
 }
\ No newline at end of file