1 package baseCode.io.reader;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.util.StringTokenizer;
7 import java.util.Vector;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11
12 import baseCode.dataStructure.matrix.NamedMatrix;
13
14 /***
15 * Abstract class representing an object that can read in a {@link NamedMatrix}from a file.
16 * <p>
17 * Copyright (c) 2004
18 * </p>
19 * <p>
20 * Institution:: Columbia University
21 * </p>
22 *
23 * @author Paul Pavlidis
24 * @version $Id: AbstractNamedMatrixReader.java,v 1.3 2004/08/11 22:53:43 pavlidis Exp $
25 */
26 public abstract class AbstractNamedMatrixReader {
27
28 public abstract NamedMatrix read( String filename ) throws IOException;
29
30 public abstract NamedMatrix read( InputStream stream ) throws IOException;
31
32 public abstract NamedMatrix readOneRow(BufferedReader dis ) throws IOException;
33
34
35 protected static final Log log = LogFactory
36 .getLog( AbstractNamedMatrixReader.class );
37
38 protected Vector readHeader( BufferedReader dis ) throws IOException {
39 Vector headerVec = new Vector();
40 String header = dis.readLine();
41 StringTokenizer st = new StringTokenizer( header, "\t", true );
42
43
44 String previousToken = "";
45 int columnNumber = 0;
46 while ( st.hasMoreTokens() ) {
47 String s = st.nextToken();
48 boolean missing = false;
49
50 if ( s.compareTo( "\t" ) == 0 ) {
51
52 if ( previousToken.compareTo( "\t" ) == 0 ) {
53 missing = true;
54 } else if ( !st.hasMoreTokens() ) {
55 missing = true;
56 } else {
57 previousToken = s;
58 continue;
59 }
60 } else if ( s.compareTo( " " ) == 0 ) {
61 if ( previousToken.compareTo( "\t" ) == 0 ) {
62 missing = true;
63 }
64 }
65
66 if ( missing ) {
67 throw new IOException(
68 "Warning: Missing values not allowed in the header (column "
69 + columnNumber + ")" );
70 } else if ( columnNumber > 0 ) {
71 headerVec.add( s );
72 }
73
74 columnNumber++;
75 previousToken = s;
76 }
77
78
79 if ( headerVec.size() == 0 ) {
80 log.warn( "No headings found" );
81 }
82
83 return headerVec;
84
85 }
86
87 }