From a0205942210037198f48eb20480efe88d5eb951e Mon Sep 17 00:00:00 2001 From: jprocter Date: Wed, 2 May 2007 15:19:23 +0000 Subject: [PATCH] feature locations are retrieved by associated accession string --- .../datamodel/xdb/embl/EmblFeatureLocations.java | 81 +++++++++++++------- 1 file changed, 53 insertions(+), 28 deletions(-) diff --git a/src/jalview/datamodel/xdb/embl/EmblFeatureLocations.java b/src/jalview/datamodel/xdb/embl/EmblFeatureLocations.java index a3c581d..a9fe76e 100644 --- a/src/jalview/datamodel/xdb/embl/EmblFeatureLocations.java +++ b/src/jalview/datamodel/xdb/embl/EmblFeatureLocations.java @@ -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 -- 1.7.10.2