/* * 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; } }