X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2Fvamsas%2FRangetype.java;h=9c94ddd3f74791f9fdba8e0a04706e01164066f0;hb=57738a1f3c19b1c3a00bd3ac5108f8cd0af32f99;hp=b7e6f79d1021130ff21536192463a0d5004e9fef;hpb=cfa406a916d754e600c60f7dae29b053bf045ace;p=jalview.git diff --git a/src/jalview/io/vamsas/Rangetype.java b/src/jalview/io/vamsas/Rangetype.java index b7e6f79..9c94ddd 100644 --- a/src/jalview/io/vamsas/Rangetype.java +++ b/src/jalview/io/vamsas/Rangetype.java @@ -1,18 +1,47 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ 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.io.vamsas; +import jalview.bin.Console; +import jalview.io.VamsasAppDatastore; +import jalview.util.MessageManager; +import java.util.List; import java.util.Vector; +import uk.ac.vamsas.client.Vobject; import uk.ac.vamsas.objects.core.Local; -import uk.ac.vamsas.objects.core.Map; import uk.ac.vamsas.objects.core.MapType; import uk.ac.vamsas.objects.core.Mapped; import uk.ac.vamsas.objects.core.RangeType; import uk.ac.vamsas.objects.core.Seg; -import jalview.datamodel.Mapping; -import jalview.io.VamsasAppDatastore; -public class Rangetype extends DatastoreItem +/** + * Enhances DatastoreItem objects with additional functions to do with RangeType + * objects + * + * @author JimP + * + */ +public abstract class Rangetype extends DatastoreItem { public Rangetype() @@ -25,10 +54,22 @@ public class Rangetype extends DatastoreItem super(datastore); } + public Rangetype(VamsasAppDatastore datastore, Vobject vobj, + Class jvClass) + { + super(datastore, vobj, jvClass); + } + + public Rangetype(VamsasAppDatastore datastore, Object jvobj, Class vClass) + { + super(datastore, jvobj, vClass); + } + /** * get real bounds of a RangeType's specification. start and end are an - * inclusive range within which all segments and positions lie. - * TODO: refactor to vamsas utils + * inclusive range within which all segments and positions lie. TODO: refactor + * to vamsas utils + * * @param dseta * @return int[] { start, end} */ @@ -39,7 +80,8 @@ public class Rangetype extends DatastoreItem int[] se = null; if (dseta.getSegCount() > 0 && dseta.getPosCount() > 0) { - throw new Error("Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!"); + throw new Error(MessageManager.getString( + "error.invalid_vamsas_rangetype_cannot_resolve_lists")); } if (dseta.getSegCount() > 0) { @@ -59,11 +101,10 @@ public class Rangetype extends DatastoreItem } if (dseta.getPosCount() > 0) { - // could do a polarity for pos range too. and pass back indication of discontinuities. + // could do a polarity for pos range too. and pass back indication of + // discontinuities. int pos = dseta.getPos(0).getI(); - se = new int[] - { - pos, pos}; + se = new int[] { pos, pos }; for (int p = 0, pSize = dseta.getPosCount(); p < pSize; p++) { pos = dseta.getPos(p).getI(); @@ -83,7 +124,9 @@ public class Rangetype extends DatastoreItem } /** - * map from a rangeType's internal frame to the referenced object's coordinate frame. + * map from a rangeType's internal frame to the referenced object's coordinate + * frame. + * * @param dseta * @return int [] { ref(pos)...} for all pos in rangeType's frame. */ @@ -95,7 +138,8 @@ public class Rangetype extends DatastoreItem int[] se = null; if (dseta.getSegCount() > 0 && dseta.getPosCount() > 0) { - throw new Error("Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!"); + throw new Error(MessageManager.getString( + "error.invalid_vamsas_rangetype_cannot_resolve_lists")); } if (dseta.getSegCount() > 0) { @@ -105,18 +149,18 @@ public class Rangetype extends DatastoreItem int se_end = se[1 - se[2]] + (se[2] == 0 ? 1 : -1); for (int p = se[se[2]]; p != se_end; p += se[2] == 0 ? 1 : -1) { - posList.add(new Integer(p)); + posList.add(Integer.valueOf(p)); } } } else if (dseta.getPosCount() > 0) { int pos = dseta.getPos(0).getI(); - + for (int p = 0, pSize = dseta.getPosCount(); p < pSize; p++) { pos = dseta.getPos(p).getI(); - posList.add(new Integer(pos)); + posList.add(Integer.valueOf(pos)); } } } @@ -125,7 +169,7 @@ public class Rangetype extends DatastoreItem int[] range = new int[posList.size()]; for (int i = 0; i < range.length; i++) { - range[i] = ( (Integer) posList.elementAt(i)).intValue(); + range[i] = ((Integer) posList.elementAt(i)).intValue(); } posList.clear(); return range; @@ -135,60 +179,63 @@ public class Rangetype extends DatastoreItem protected int[] getIntervals(RangeType range) { - int[] intervals=null; + int[] intervals = null; Vector posList = new Vector(); if (range != null) { int[] se = null; if (range.getSegCount() > 0 && range.getPosCount() > 0) { - throw new Error("Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!"); + throw new Error(MessageManager.getString( + "error.invalid_vamsas_rangetype_cannot_resolve_lists")); } if (range.getSegCount() > 0) { for (int s = 0, sSize = range.getSegCount(); s < sSize; s++) { se = getSegRange(range.getSeg(s), false); - posList.addElement(new Integer(se[0])); - posList.addElement(new Integer(se[1])); + posList.addElement(Integer.valueOf(se[0])); + posList.addElement(Integer.valueOf(se[1])); } } else if (range.getPosCount() > 0) { int pos = range.getPos(0).getI(); - + for (int p = 0, pSize = range.getPosCount(); p < pSize; p++) { pos = range.getPos(p).getI(); - posList.add(new Integer(pos)); - posList.add(new Integer(pos)); + posList.add(Integer.valueOf(pos)); + posList.add(Integer.valueOf(pos)); } } } if (posList != null && posList.size() > 0) { - intervals=new int[posList.size()]; + intervals = new int[posList.size()]; java.util.Enumeration e = posList.elements(); - int i=0; + int i = 0; while (e.hasMoreElements()) { - intervals[i++] = ((Integer)e.nextElement()).intValue(); + intervals[i++] = ((Integer) e.nextElement()).intValue(); } } return intervals; } + /** * initialise a range type object from a set of start/end inclusive intervals + * * @param mrt - * @param range + * @param ranges */ - protected void initRangeType(RangeType mrt, int[] range) + protected void initRangeType(RangeType mrt, List ranges) { - for (int i=0; i "+map.toString()))); + Console.warn("using default mapping length of 1:1 for map " + + (map.isRegistered() ? map.getVorbaId().toString() + : (" " + map.toString()))); } - return parsemapType(map, 1, 1); + return parsemapType(map, 1, 1); } /** * initialise a MapType object from a MapList object. + * * @param maprange * @param ml * @param setUnits */ - protected void initMapType(MapType maprange, jalview.util.MapList ml, boolean setUnits) + protected void initMapType(MapType maprange, jalview.util.MapList ml, + boolean setUnits) { initMapType(maprange, ml, setUnits, false); } + /** * * @param maprange * @param ml * @param setUnits - * @param reverse - reverse MapList mapping for Local and Mapped ranges and units + * @param reverse + * - reverse MapList mapping for Local and Mapped ranges and units */ - protected void initMapType(MapType maprange, jalview.util.MapList ml, boolean setUnits, boolean reverse) + protected void initMapType(MapType maprange, jalview.util.MapList ml, + boolean setUnits, boolean reverse) { - if (ml==null) + if (ml == null) { - throw new Error("Implementation error. MapList is null for initMapType."); + throw new Error( + "Implementation error. MapList is null for initMapType."); } maprange.setLocal(new Local()); maprange.setMapped(new Mapped()); if (!reverse) - { + { initRangeType(maprange.getLocal(), ml.getFromRanges()); initRangeType(maprange.getMapped(), ml.getToRanges()); - } else { - initRangeType(maprange.getLocal(), ml.getToRanges()); - initRangeType(maprange.getMapped(), ml.getFromRanges()); - } + } + else + { + initRangeType(maprange.getLocal(), ml.getToRanges()); + initRangeType(maprange.getMapped(), ml.getFromRanges()); + } if (setUnits) { if (!reverse) - { + { maprange.getLocal().setUnit(ml.getFromRatio()); maprange.getMapped().setUnit(ml.getToRatio()); - } else { + } + else + { maprange.getLocal().setUnit(ml.getToRatio()); maprange.getMapped().setUnit(ml.getFromRatio()); } + // TODO: and verify - raise an implementation fault notice if local/mapped + // range % Local/Mapped Ratio != 0 + // if (uk.ac.vamsas.objects.utils.Range.getIntervals(range)) + } } -} \ No newline at end of file +}