Remove redundancy in Eclipse
[jalview.git] / src / jalview / io / PIRFile.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 package jalview.io;\r
20 \r
21 import java.io.*;\r
22 import java.util.*;\r
23 \r
24 import jalview.analysis.*;\r
25 import jalview.datamodel.*;\r
26 \r
27 public class PIRFile\r
28     extends AlignFile\r
29 {\r
30   Vector words = new Vector(); //Stores the words in a line after splitting\r
31 \r
32   public PIRFile()\r
33   {\r
34   }\r
35 \r
36   public PIRFile(String inStr)\r
37   {\r
38     super(inStr);\r
39   }\r
40 \r
41   public PIRFile(String inFile, String type)\r
42       throws IOException\r
43   {\r
44     super(inFile, type);\r
45   }\r
46 \r
47   public void parse()\r
48   {\r
49     try\r
50     {\r
51       String id;\r
52       String start;\r
53       String end;\r
54       StringBuffer sequence;\r
55       String line = null;\r
56 \r
57       while ( (line = nextLine()) != null)\r
58       {\r
59         if(line.length()==0)\r
60         {\r
61           //System.out.println("blank line");\r
62           continue;\r
63         }\r
64 \r
65         id = "No id";\r
66         start = "1";\r
67         end = "-1";\r
68 \r
69         try\r
70         {\r
71           int slashIndex = line.indexOf("/");\r
72           if(slashIndex!=-1)\r
73           {\r
74             id = line.substring(line.indexOf(";") + 1, line.indexOf("/"));\r
75             line = line.substring(line.indexOf("/") + 1);\r
76             start = line.substring(0, line.indexOf("-"));\r
77             end = line.substring(line.indexOf("-") + 1);\r
78           }\r
79           else\r
80           {\r
81             id = line.substring(line.indexOf(";")+1);\r
82           }\r
83         }\r
84         catch (Exception ex)\r
85         {    }// Default id, start and end unchanged\r
86 \r
87         sequence = new StringBuffer();\r
88 \r
89         line = nextLine(); // this is the title line\r
90 \r
91         boolean starFound = false;\r
92 \r
93         while(!starFound)\r
94         {\r
95           line = nextLine();\r
96           sequence.append(line);\r
97 \r
98           if (line == null)\r
99             break;\r
100 \r
101           if (line.indexOf("*") > -1)\r
102           {\r
103             starFound = true;\r
104           }\r
105         }\r
106 \r
107         if(sequence.length()>0)\r
108         {\r
109           sequence.setLength(sequence.length() - 1);\r
110 \r
111           Sequence newSeq = new Sequence(id, sequence.toString(),\r
112                                          Integer.parseInt(start),\r
113                                          Integer.parseInt(end));\r
114           seqs.addElement(newSeq);\r
115         }\r
116       }\r
117     }\r
118     catch (Exception ex)\r
119     {\r
120       ex.printStackTrace();\r
121     }\r
122   }\r
123 \r
124   public String print()\r
125   {\r
126     return print(getSeqsAsArray());\r
127   }\r
128 \r
129   public static String print(SequenceI[] s)\r
130   {\r
131     return print(s, 72, true);\r
132   }\r
133 \r
134   public static String print(SequenceI[] s, int len)\r
135   {\r
136     return print(s, len, true);\r
137   }\r
138 \r
139   public static String print(SequenceI[] s, int len, boolean gaps)\r
140   {\r
141     StringBuffer out = new StringBuffer();\r
142     int i = 0;\r
143 \r
144     while ( (i < s.length) && (s[i] != null))\r
145     {\r
146       String seq = "";\r
147 \r
148       if (gaps)\r
149       {\r
150         seq = s[i].getSequence() + "*";\r
151       }\r
152       else\r
153       {\r
154         seq = AlignSeq.extractGaps(s[i].getSequence(), "-");\r
155         seq = AlignSeq.extractGaps(seq, ".");\r
156         seq = AlignSeq.extractGaps(seq, " ");\r
157         seq = seq + "*";\r
158       }\r
159 \r
160       out.append(">P1;" + s[i].getName() + "/" + s[i].getStart() + "-" +\r
161                  s[i].getEnd() + "\n");\r
162       out.append(" Dummy title\n");\r
163 \r
164       int nochunks = (seq.length() / len) + 1;\r
165 \r
166       for (int j = 0; j < nochunks; j++)\r
167       {\r
168         int start = j * len;\r
169         int end = start + len;\r
170 \r
171         if (end < seq.length())\r
172         {\r
173           out.append(seq.substring(start, end) + "\n");\r
174         }\r
175         else if (start < seq.length())\r
176         {\r
177           out.append(seq.substring(start) + "\n");\r
178         }\r
179       }\r
180 \r
181       i++;\r
182     }\r
183 \r
184     return out.toString();\r
185   }\r
186 \r
187 }\r