Report invalid chars
[jalview.git] / src / jalview / io / AppletFormatAdapter.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 jalview.datamodel.*;\r
22 \r
23     import java.util.Vector;\r
24 \r
25 \r
26     /**\r
27      * DOCUMENT ME!\r
28      *\r
29      * @author $author$\r
30      * @version $Revision$\r
31      */\r
32     public class AppletFormatAdapter\r
33     {\r
34         /** DOCUMENT ME!! */\r
35         public static final Vector formats = new Vector();\r
36 \r
37         public static String INVALID_CHARACTERS = "Contains invalid characters";\r
38 \r
39         public static String SUPPORTED_FORMATS = "Formats currently supported are\n" +\r
40                                                  "Fasta, MSF, Clustal, BLC, PIR, MSP, and PFAM";\r
41 \r
42         static\r
43         {\r
44             formats.addElement("BLC");\r
45             formats.addElement("CLUSTAL");\r
46             formats.addElement("FASTA");\r
47             formats.addElement("MSF");\r
48             formats.addElement("PileUp");\r
49             formats.addElement("PIR");\r
50             formats.addElement("PFAM");\r
51         }\r
52 \r
53         AlignFile afile = null;\r
54 \r
55         /**\r
56          * DOCUMENT ME!\r
57          *\r
58          * @param inFile DOCUMENT ME!\r
59          * @param type DOCUMENT ME!\r
60          * @param format DOCUMENT ME!\r
61          *\r
62          * @return DOCUMENT ME!\r
63          */\r
64         public SequenceI[] readFile(String inFile, String type, String format)\r
65             throws java.io.IOException\r
66         {\r
67             try\r
68             {\r
69                 if (format.equals("FASTA"))\r
70                 {\r
71                     afile = new FastaFile(inFile, type);\r
72                 }\r
73                 else if (format.equals("MSF"))\r
74                 {\r
75                     afile = new MSFfile(inFile, type);\r
76                 }\r
77                 else if (format.equals("PileUp"))\r
78                 {\r
79                     afile = new PileUpfile(inFile, type);\r
80                 }\r
81                 else if (format.equals("CLUSTAL"))\r
82                 {\r
83                     afile = new ClustalFile(inFile, type);\r
84                 }\r
85                 else if (format.equals("BLC"))\r
86                 {\r
87                     afile = new BLCFile(inFile, type);\r
88                 }\r
89                 else if (format.equals("PIR"))\r
90                 {\r
91                     afile = new PIRFile(inFile, type);\r
92                 }\r
93                 else if (format.equals("PFAM"))\r
94                 {\r
95                     afile = new PfamFile(inFile, type);\r
96                 }\r
97 \r
98                 return afile.getSeqsAsArray();\r
99             }\r
100             catch (Exception e)\r
101             {\r
102               System.err.println("Failed to read alignment using the '" + format +\r
103                                  "' reader.\n"+e);\r
104 \r
105               if(e.getMessage()!=null && e.getMessage().startsWith(INVALID_CHARACTERS))\r
106                 throw new java.io.IOException(e.getMessage());\r
107 \r
108               // Finally test if the user has pasted just the sequence, no id\r
109               if(type.equalsIgnoreCase("Paste"))\r
110               {\r
111                 try{\r
112                   // Possible sequence is just residues with no label\r
113                   afile = new FastaFile(">UNKNOWN\n" + inFile, "Paste");\r
114                   return afile.getSeqsAsArray();\r
115                 }\r
116                 catch(Exception ex)\r
117                 {\r
118                   if(ex.toString().startsWith(INVALID_CHARACTERS))\r
119                     throw new java.io.IOException(e.getMessage());\r
120 \r
121                   ex.printStackTrace();\r
122                 }\r
123               }\r
124 \r
125               // If we get to this stage, the format was not supported\r
126               throw new java.io.IOException(SUPPORTED_FORMATS);\r
127             }\r
128         }\r
129 \r
130 \r
131         /**\r
132          * DOCUMENT ME!\r
133          *\r
134          * @param format DOCUMENT ME!\r
135          * @param seqs DOCUMENT ME!\r
136          *\r
137          * @return DOCUMENT ME!\r
138          */\r
139         public String formatSequences(String format,\r
140                                       Vector seqs,\r
141                                       boolean jvsuffix)\r
142         {\r
143             SequenceI[] s = new SequenceI[seqs.size()];\r
144 \r
145             for (int i = 0; i < seqs.size(); i++)\r
146                 s[i] = (SequenceI) seqs.elementAt(i);\r
147 \r
148             try\r
149             {\r
150                 AlignFile afile = null;\r
151 \r
152                 if (format.equalsIgnoreCase("FASTA"))\r
153                 {\r
154                     afile = new FastaFile();\r
155                 }\r
156                 else if (format.equalsIgnoreCase("MSF"))\r
157                 {\r
158                     afile = new MSFfile();\r
159                 }\r
160                 else if (format.equalsIgnoreCase("PileUp"))\r
161                 {\r
162                     afile = new PileUpfile();\r
163                 }\r
164                 else if (format.equalsIgnoreCase("CLUSTAL"))\r
165                 {\r
166                     afile = new ClustalFile();\r
167                 }\r
168                 else if (format.equalsIgnoreCase("BLC"))\r
169                 {\r
170                     afile = new BLCFile();\r
171                 }\r
172                 else if (format.equalsIgnoreCase("PIR"))\r
173                 {\r
174                     afile = new PIRFile();\r
175                 }\r
176                 else if (format.equalsIgnoreCase("PFAM"))\r
177                 {\r
178                     afile = new PfamFile();\r
179                 }\r
180 \r
181                 afile.addJVSuffix(jvsuffix);\r
182 \r
183                 afile.setSeqs(s);\r
184 \r
185                 return afile.print();\r
186             }\r
187             catch (Exception e)\r
188             {\r
189                 System.err.println("Failed to write alignment as a '" + format +\r
190                     "' file\n");\r
191                 e.printStackTrace();\r
192             }\r
193 \r
194             return null;\r
195         }\r
196     }\r