-package jalview.datamodel.xdb.embl;\r
-\r
-import java.util.Iterator;\r
-import java.util.Vector;\r
-\r
-public class EmblFeatureLocations {\r
- Vector locElements;\r
- String locationType;\r
- boolean locationComplement;\r
- /**\r
- * @return the locationComplement\r
- */\r
- public boolean isLocationComplement() {\r
- return locationComplement;\r
- }\r
- /**\r
- * @param locationComplement the locationComplement to set\r
- */\r
- public void setLocationComplement(boolean locationComplement) {\r
- this.locationComplement = locationComplement;\r
- }\r
- /**\r
- * @return the locationType\r
- */\r
- public String getLocationType() {\r
- return locationType;\r
- }\r
- /**\r
- * @param locationType the locationType to set\r
- */\r
- public void setLocationType(String locationType) {\r
- this.locationType = locationType;\r
- }\r
- /**\r
- * @return the locElements\r
- */\r
- public Vector getLocElements() {\r
- return locElements;\r
- }\r
- /**\r
- * @param locElements the locElements to set\r
- */\r
- public void setLocElements(Vector locElements) {\r
- this.locElements = locElements;\r
- }\r
- /**\r
- * Return all location elements as start-end pairs on referenced sequence \r
- * @return int[] { start1, end1, ... }\r
- */\r
- public int[] getElementRanges() {\r
- if (locationType.equalsIgnoreCase("single")) {\r
- int[] se = new int[locElements.size()*2]; \r
- int sepos=0;\r
- for (Iterator le=locElements.iterator();le.hasNext();) {\r
- EmblFeatureLocElement loce = (EmblFeatureLocElement) le.next();\r
- BasePosition bp[] = loce.getBasePositions();\r
- if (bp.length==2) {\r
- se[sepos++] = Integer.parseInt(bp[0].getPos());\r
- se[sepos++] = Integer.parseInt(bp[1].getPos());\r
- }\r
- }\r
- return se;\r
- }\r
- return null;\r
- }\r
-}
\ No newline at end of file
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2)
+ * 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 <http://www.gnu.org/licenses/>.
+ * 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<EmblFeatureLocElement> 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<EmblFeatureLocElement> getLocElements()
+ {
+ return locElements;
+ }
+
+ /**
+ * @param locElements
+ * the locElements to set
+ */
+ public void setLocElements(Vector<EmblFeatureLocElement> 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;
+ }
+}