JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / src / javajs / util / DataReader.java
1 package javajs.util;\r
2 \r
3 import java.io.BufferedReader;\r
4 import java.io.IOException;\r
5 import java.io.Reader;\r
6 import java.io.StringReader;\r
7 \r
8 /**\r
9  * Just a simple abstract class to join a String reader and a String[]\r
10  * reader under the same BufferedReader umbrella.\r
11  * \r
12  * Subclassed as StringDataReader, ArrayDataReader, and ListDataReader\r
13  * \r
14  */\r
15 \r
16 public abstract class DataReader extends BufferedReader {\r
17 \r
18   public abstract DataReader setData(Object data);\r
19   \r
20   protected int ptMark;\r
21 \r
22   public DataReader() {\r
23     super(new StringReader(""));\r
24   }\r
25 \r
26   protected DataReader(Reader in) {\r
27     super(in);\r
28   }\r
29 \r
30   public BufferedReader getBufferedReader() {\r
31     return this;\r
32   }\r
33 \r
34   protected int readBuf(char[] buf, int off, int len) throws IOException {\r
35     // not used by StringDataReader\r
36     int nRead = 0;\r
37     String line = readLine();\r
38     if (line == null)\r
39       return 0;\r
40     int linept = 0;\r
41     int linelen = line.length();\r
42     for (int i = off; i < len && linelen >= 0; i++) {\r
43       if (linept >= linelen) {\r
44         linept = 0;\r
45         buf[i] = '\n';\r
46         line = readLine();\r
47         linelen = (line == null ? -1 : line.length());\r
48       } else {\r
49         buf[i] = line.charAt(linept++);\r
50       }\r
51       nRead++;\r
52     }\r
53     return nRead;\r
54   }\r
55 \r
56 }