package jalview.datamodel.xdb.embl;
+import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
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