f1dfffece42b9ac20a24bc866aafe963d1a9e1ed
[jalview.git] / src / jalview / io / IdentifyFile.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2007 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.net.*;\r
23 \r
24 /**\r
25  * DOCUMENT ME!\r
26  *\r
27  * @author $author$\r
28  * @version $Revision$\r
29  */\r
30 public class IdentifyFile\r
31 {\r
32   /**\r
33    * DOCUMENT ME!\r
34    *\r
35    * @param file DOCUMENT ME!\r
36    * @param protocol DOCUMENT ME!\r
37    *\r
38    * @return DOCUMENT ME!\r
39    */\r
40   public String Identify(String file, String protocol)\r
41   {\r
42     String reply = "PFAM";\r
43     String error = "FILE NOT FOUND";\r
44     try\r
45     {\r
46       BufferedReader reader = null;\r
47 \r
48       if (protocol.equals(AppletFormatAdapter.FILE))\r
49       {\r
50         reader = new BufferedReader(new FileReader(file));\r
51       }\r
52       else if (protocol.equals(AppletFormatAdapter.URL))\r
53       {\r
54         error = "URL NOT FOUND";\r
55         URL url = new URL(file);\r
56         reader = new BufferedReader(new InputStreamReader(\r
57             url.openStream()));\r
58 \r
59       }\r
60       else if (protocol.equals(AppletFormatAdapter.PASTE))\r
61       {\r
62         reader = new BufferedReader(new StringReader(file));\r
63       }\r
64       else if (protocol.equals(AppletFormatAdapter.CLASSLOADER))\r
65       {\r
66         java.io.InputStream is = getClass().getResourceAsStream("/" +\r
67             file);\r
68         reader = new BufferedReader(new java.io.InputStreamReader(is));\r
69       }\r
70 \r
71       String data;\r
72 \r
73       while ( (data = reader.readLine()) != null)\r
74       {\r
75         data = data.toUpperCase();\r
76 \r
77         if ( (data.indexOf("# STOCKHOLM") > -1))\r
78         {\r
79           reply = "STH";\r
80 \r
81           break;\r
82         }\r
83 \r
84         if ( (data.indexOf("#") == 0) || (data.length() < 1))\r
85         {\r
86           continue;\r
87         }\r
88 \r
89         if (data.indexOf("PILEUP") > -1)\r
90         {\r
91           reply = "PileUp";\r
92 \r
93           break;\r
94         }\r
95 \r
96         if ( (data.indexOf("//") == 0) ||\r
97             ( (data.indexOf("!!") > -1) &&\r
98              (data.indexOf("!!") < data.indexOf(\r
99                  "_MULTIPLE_ALIGNMENT "))))\r
100         {\r
101           reply = "MSF";\r
102 \r
103           break;\r
104         }\r
105         else if (data.indexOf("CLUSTAL") > -1)\r
106         {\r
107           reply = "CLUSTAL";\r
108 \r
109           break;\r
110         }\r
111         else if ( (data.indexOf(">P1;") > -1) ||\r
112                  (data.indexOf(">DL;") > -1))\r
113         {\r
114           reply = "PIR";\r
115 \r
116           break;\r
117         }\r
118         else if (data.indexOf(">") > -1)\r
119         {\r
120           // could be BLC file, read next line to confirm\r
121           data = reader.readLine();\r
122 \r
123           if (data.indexOf(">") > -1)\r
124           {\r
125             reply = "BLC";\r
126           }\r
127           else\r
128           {\r
129             //Is this a single line BLC file?\r
130             reader.readLine();\r
131             String data2 = reader.readLine();\r
132             if (data2 != null\r
133                 && data.indexOf("*") > -1\r
134                 && data.indexOf("*") == data2.indexOf("*"))\r
135             {\r
136               reply = "BLC";\r
137             }\r
138             else\r
139             {\r
140               reply = "FASTA";\r
141             }\r
142           }\r
143 \r
144           break;\r
145         }\r
146         else if (data.indexOf("HEADER") == 0 ||\r
147                  data.indexOf("ATOM") == 0)\r
148         {\r
149           reply = "PDB";\r
150           break;\r
151         }\r
152         else if (data.indexOf(":") < data.indexOf(",")) //  && data.indexOf(",")<data.indexOf(",", data.indexOf(",")))\r
153         {\r
154           // file looks like a concise JNet file\r
155           reply = "JnetFile";\r
156           break;\r
157         }\r
158       }\r
159 \r
160       reader.close();\r
161     }\r
162     catch (Exception ex)\r
163     {\r
164       System.err.println("File Identification failed!\n" + ex);\r
165       return error;\r
166     }\r
167 \r
168     return reply;\r
169   }\r
170 }\r