bbd394874c0ab2da599d69bece68dae47384fbfd
[jalview.git] / src / jalview / datamodel / xdb / embl / EmblFeatureLocations.java
1 package jalview.datamodel.xdb.embl;\r
2 \r
3 import java.util.Iterator;\r
4 import java.util.Vector;\r
5 \r
6 public class EmblFeatureLocations {\r
7     Vector locElements;\r
8     String locationType;\r
9     boolean locationComplement;\r
10     /**\r
11      * @return the locationComplement\r
12      */\r
13     public boolean isLocationComplement() {\r
14         return locationComplement;\r
15     }\r
16     /**\r
17      * @param locationComplement the locationComplement to set\r
18      */\r
19     public void setLocationComplement(boolean locationComplement) {\r
20         this.locationComplement = locationComplement;\r
21     }\r
22     /**\r
23      * @return the locationType\r
24      */\r
25     public String getLocationType() {\r
26         return locationType;\r
27     }\r
28     /**\r
29      * @param locationType the locationType to set\r
30      */\r
31     public void setLocationType(String locationType) {\r
32         this.locationType = locationType;\r
33     }\r
34     /**\r
35      * @return the locElements\r
36      */\r
37     public Vector getLocElements() {\r
38         return locElements;\r
39     }\r
40     /**\r
41      * @param locElements the locElements to set\r
42      */\r
43     public void setLocElements(Vector locElements) {\r
44         this.locElements = locElements;\r
45     }\r
46     /**\r
47      * Return all location elements as start-end pairs on referenced sequence \r
48      * TODO: pass back complement and 'less than or more than' range information\r
49      * @return int[] { start1, end1, ... }\r
50      */\r
51     public int[] getElementRanges() {\r
52         if (locationType.equalsIgnoreCase("single")) {\r
53             int[] se = new int[locElements.size()*2];            \r
54             int sepos=0;\r
55             for (Iterator le=locElements.iterator();le.hasNext();) {\r
56                 EmblFeatureLocElement loce = (EmblFeatureLocElement) le.next();\r
57                 BasePosition bp[] = loce.getBasePositions();\r
58                 if (bp.length==2) {\r
59                     se[sepos++] = Integer.parseInt(bp[0].getPos());\r
60                     se[sepos++] = Integer.parseInt(bp[1].getPos());\r
61                 }\r
62             }\r
63             return se;\r
64         }\r
65         if (locationType.equalsIgnoreCase("join")) {\r
66             int[] se = new int[locElements.size()*2];            \r
67             int sepos=0;\r
68             for (Iterator le=locElements.iterator();le.hasNext();) {\r
69                 EmblFeatureLocElement loce = (EmblFeatureLocElement) le.next();\r
70                 BasePosition bp[] = loce.getBasePositions();\r
71                 if (bp.length==2) {\r
72                     se[sepos++] = Integer.parseInt(bp[0].getPos());\r
73                     se[sepos++] = Integer.parseInt(bp[1].getPos());\r
74                 }\r
75             }\r
76             return se;\r
77         }\r
78         if (locationType!=null)\r
79         {\r
80           jalview.bin.Cache.log.error("EmbleFeatureLocations.getElementRanges cannot deal with locationType=='"+locationType+"'");\r
81         }\r
82         return null;\r
83     }\r
84 }