X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fuk%2Fac%2Fvamsas%2Fobjects%2Futils%2FRange.java;h=f66df316f8d31fa7f1927a3fcf4fc593f6787006;hb=d6f378ff4d767169376e6f2489a00b75d8a36e39;hp=b20cb5bf2db74586fa3c9c4c260f01c96566f9a2;hpb=aab514f0d55b43f9f4f5154e3e34103c1b41becc;p=vamsas.git diff --git a/src/uk/ac/vamsas/objects/utils/Range.java b/src/uk/ac/vamsas/objects/utils/Range.java index b20cb5b..f66df31 100644 --- a/src/uk/ac/vamsas/objects/utils/Range.java +++ b/src/uk/ac/vamsas/objects/utils/Range.java @@ -2,10 +2,18 @@ package uk.ac.vamsas.objects.utils; import java.util.Vector; - +import uk.ac.vamsas.objects.core.Local; +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; +/** + * Utilities for working with RangeType and MapType objects. + * Derived from bitter experience. + * @author JimP + * + */ public class Range { /** @@ -143,4 +151,134 @@ public class Range { } return null; } + + public static int[] getIntervals(RangeType range) + { + 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!"); } + 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])); + } + } + 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)); + } + } + } + if (posList != null && posList.size() > 0) + { + intervals=new int[posList.size()]; + java.util.Enumeration e = posList.elements(); + int i=0; + while (e.hasMoreElements()) + { + 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 + */ + public static void initRangeType(RangeType mrt, int[] range) + { + for (int i=0; i