X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2Fxdb%2Fembl%2FEmblFeatureLocations.java;h=94105ae6f5efec4f292e2c13ea7e8e8b0513d35e;hb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;hp=bbd394874c0ab2da599d69bece68dae47384fbfd;hpb=2ea52575d29eccae73a4262f52f59ff3fcf713b1;p=jalview.git diff --git a/src/jalview/datamodel/xdb/embl/EmblFeatureLocations.java b/src/jalview/datamodel/xdb/embl/EmblFeatureLocations.java index bbd3948..94105ae 100644 --- a/src/jalview/datamodel/xdb/embl/EmblFeatureLocations.java +++ b/src/jalview/datamodel/xdb/embl/EmblFeatureLocations.java @@ -1,84 +1,175 @@ -package jalview.datamodel.xdb.embl; - -import java.util.Iterator; -import java.util.Vector; - -public class EmblFeatureLocations { - Vector locElements; - String locationType; - boolean locationComplement; - /** - * @return the locationComplement - */ - public boolean isLocationComplement() { - return locationComplement; - } - /** - * @param locationComplement the locationComplement to set - */ - public void setLocationComplement(boolean locationComplement) { - this.locationComplement = locationComplement; - } - /** - * @return the locationType - */ - public String getLocationType() { - return locationType; - } - /** - * @param locationType the locationType to set - */ - public void setLocationType(String locationType) { - this.locationType = locationType; - } - /** - * @return the locElements - */ - public Vector getLocElements() { - return locElements; - } - /** - * @param locElements the locElements to set - */ - public void setLocElements(Vector locElements) { - this.locElements = locElements; - } - /** - * Return all location elements as start-end pairs on referenced sequence - * TODO: pass back complement and 'less than or more than' range information - * @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 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()); - } - } - return se; - } - if (locationType!=null) - { - jalview.bin.Cache.log.error("EmbleFeatureLocations.getElementRanges cannot deal with locationType=='"+locationType+"'"); - } - return null; - } -} \ No newline at end of file +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) + * Copyright (C) 2015 The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.datamodel.xdb.embl; + +import java.util.Vector; + +/** + * Data model for a <loctaion> child element of a <feature> read + * from an EMBL query reply + * + * @see embl_mapping.xml + */ +public class EmblFeatureLocations +{ + Vector locElements; + + String locationType; + + boolean locationComplement; + + /** + * @return the locationComplement + */ + public boolean isLocationComplement() + { + return locationComplement; + } + + /** + * @param locationComplement + * the locationComplement to set + */ + public void setLocationComplement(boolean locationComplement) + { + this.locationComplement = locationComplement; + } + + /** + * @return the locationType + */ + public String getLocationType() + { + return locationType; + } + + /** + * @param locationType + * the locationType to set + */ + public void setLocationType(String locationType) + { + this.locationType = locationType; + } + + /** + * @return the locElements + */ + public Vector getLocElements() + { + return locElements; + } + + /** + * @param locElements + * the locElements to set + */ + public void setLocElements(Vector locElements) + { + this.locElements = locElements; + } + + /** + * 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() + { + 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")) // TODO: or "simple" ? + { + for (EmblFeatureLocElement loce : locElements) + { + 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()); + } + } + } + } + else if (locationType.equalsIgnoreCase("join")) + { + for (EmblFeatureLocElement loce : locElements) + { + 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; + } + else if (locationType != null) + { + if (jalview.bin.Cache.log != null) + { + jalview.bin.Cache.log + .error("EmbleFeatureLocations.getElementRanges cannot deal with locationType=='" + + locationType + "'"); + } + else + { + System.err + .println("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; + } +}