KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > killingar > wiki > Reader


1 /* Copyright 2000-2005 Anders Hovmöller
2  *
3  * The person or persons who have associated their work with
4  * this document (the "Dedicator") hereby dedicate the entire
5  * copyright in the work of authorship identified below (the
6  * "Work") to the public domain.
7  *
8  * Dedicator makes this dedication for the benefit of the
9  * public at large and to the detriment of Dedicator's heirs
10  * and successors. Dedicator intends this dedication to be an
11  * overt act of relinquishment in perpetuity of all present
12  * and future rights under copyright law, whether vested or
13  * contingent, in the Work. Dedicator understands that such
14  * relinquishment of all rights includes the relinquishment of
15  * all rights to enforce (by lawsuit or otherwise) those
16  * copyrights in the Work.
17  *
18  * Dedicator recognizes that, once placed in the public
19  * domain, the Work may be freely reproduced, distributed,
20  * transmitted, used, modified, built upon, or otherwise
21  * exploited by anyone for any purpose, commercial or non-
22  * commercial, and in any way, including by methods that have
23  * not yet been invented or conceived.
24  */

25
26 package net.killingar.wiki;
27
28 import net.killingar.wiki.impl.LineNode;
29
30 import java.io.BufferedReader JavaDoc;
31 import java.io.IOException JavaDoc;
32 import java.io.InputStreamReader JavaDoc;
33 import java.util.NoSuchElementException JavaDoc;
34
35 public class Reader implements Parser
36 {
37     private BufferedReader JavaDoc inputReader;
38     private String JavaDoc nextBuffer;
39     private Throwable JavaDoc chucker;
40     private int lineCounter = 0;
41
42     private boolean cued;
43
44     public void setSource(Object JavaDoc o)
45     {
46         inputReader = new BufferedReader JavaDoc((InputStreamReader JavaDoc)o);
47     }
48
49     public Reader(InputStreamReader JavaDoc reader)
50     {
51         inputReader = new BufferedReader JavaDoc(reader);
52     }
53
54     public Reader()
55     {
56     }
57
58     public boolean hasMore()
59     {
60         cued = true;
61         if (nextBuffer != null)
62         {
63             return true;
64         }
65         try
66         {
67             nextBuffer = inputReader.readLine();
68             if (nextBuffer == null)
69             {
70                 inputReader.close();
71                 return false;
72             }
73             nextBuffer += "\n"; // we need to preserve the newline
74
}
75         catch (IOException JavaDoc e)
76         {
77             chucker = e;
78         }
79         //idea is to if IOException occurs the user can find out about it
80
//next time he calls next, if he never calls it he never finds out
81
//nor will it bother anyone in that situation since the user didnt
82
//need it anyways.
83
return true;
84
85     }
86
87     public Node next()
88     {
89         if (cued == false)
90         {
91             throw new IllegalStateException JavaDoc("Please call hasMore() before calling next()");
92         }
93
94         cued = false;
95
96         if (chucker != null)
97         {
98             throw new ParserException(chucker);
99         }
100
101         if (nextBuffer == null)
102         {
103             throw new NoSuchElementException JavaDoc("end of stream");
104         }
105
106         Node node = new LineNode(nextBuffer, ++lineCounter);
107         nextBuffer = null;
108         return node;
109     }
110 }
111
Popular Tags