2 * Jalview - A Sequence Alignment Editor and Viewer
3 * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
30 public class IdentifyFile
33 * Identify a datasource's file content.
34 * @note Do not use this method
35 * for stream sources - create a FileParse object instead.
37 * @param file DOCUMENT ME!
38 * @param protocol DOCUMENT ME!
41 public String Identify(String file, String protocol)
43 FileParse parser = null;
45 parser = new FileParse(file, protocol);
46 if (parser.isValid()) {
47 return Identify(parser);
49 } catch (Exception e) {
50 System.err.println("Error whilst identifying");
51 e.printStackTrace(System.err);
54 return parser.errormessage;
55 return "UNIDENTIFIED FILE PARSING ERROR";
57 public String Identify(FileParse source) {
58 return Identify(source, true); // preserves original behaviour prior to version 2.3
61 * Identify contents of source, closing it or resetting source to start afterwards.
64 * @return filetype string
66 public String Identify(FileParse source, boolean closeSource) {
67 String reply = "PFAM";
70 while ( (data = source.nextLine()) != null)
72 data = data.toUpperCase();
74 if ( (data.indexOf("# STOCKHOLM") > -1))
81 if ( (data.indexOf("#") == 0) || (data.length() < 1))
86 if (data.indexOf("PILEUP") > -1)
93 if ( (data.indexOf("//") == 0) ||
94 ( (data.indexOf("!!") > -1) &&
95 (data.indexOf("!!") < data.indexOf(
96 "_MULTIPLE_ALIGNMENT "))))
102 else if (data.indexOf("CLUSTAL") > -1)
108 else if ( (data.indexOf(">P1;") > -1) ||
109 (data.indexOf(">DL;") > -1))
115 else if (data.indexOf(">") > -1)
117 // could be BLC file, read next line to confirm
118 data = source.nextLine();
120 if (data.indexOf(">") > -1)
126 //Is this a single line BLC file?
128 String data2 = source.nextLine();
130 && data.indexOf("*") > -1
131 && data.indexOf("*") == data2.indexOf("*"))
143 else if (data.indexOf("HEADER") == 0 ||
144 data.indexOf("ATOM") == 0)
149 else if (data.indexOf(":") < data.indexOf(",")) // && data.indexOf(",")<data.indexOf(",", data.indexOf(",")))
151 // file looks like a concise JNet file
155 else if (source.inFile!=null)
157 String fileStr=source.inFile.getName();
158 // possibly a Jalview archive.
159 if (fileStr.lastIndexOf(".jar")>-1 || fileStr.lastIndexOf(".zip")>-1)
163 } else if (data.startsWith("PK")) {
164 reply="Jalview"; // archive.
171 source.reset(); // so the file can be parsed from the beginning again.
176 System.err.println("File Identification failed!\n" + ex);
177 return source.errormessage;