Subversion Repository Public Repository

litesoft

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt
package org.litesoft.util;

import java.io.*;

import org.litesoft.commonfoundation.exceptions.*;
import org.litesoft.commonfoundation.interators.*;

/**
 * An Iterator representing the results of repeatedly calling readLine
 * on a BufferedReader.  The underlying data source is any Reader.<p>
 *
 * @author George Smith
 * @version 1.0 7/28/01
 */

public class LineReaderIterator extends Iterators.AbstractReadOnly<String>
{
    /**
     * Construct an Iterator representing the results of repeatedly
     * calling readLine on a BufferedReader.<p>
     *
     * @param pReader the underlying data source (null OK).
     */
    public LineReaderIterator( Reader pReader )
    {
        zReader = Utils.getBufferedReader( pReader );
    }

    private BufferedReader zReader;
    private String zNextLine = null;

    private boolean loadNextLine()
    {
        if ( zReader == null )
        {
            return false;
        }
        try
        {
            if ( null != (zNextLine = zReader.readLine()) )
            {
                return true;
            }
        }
        catch ( IOException e )
        {
            throw new FileSystemException( e );
        }
        closeReader();
        return false;
    }

    private void closeReader()
    {
        try
        {
            zReader.close();
        }
        catch ( IOException ignore )
        {
            // ignoring...
        }
        zReader = null;
    }

    /**
     * If and when the GC runs, and this object is about to be reclaimed, then
     * this method is called, and if the Reader is still open, it is closed.
     */
    @Override
    public void finalize()
            throws Throwable
    {
        if ( zReader != null )
        {
            closeReader();
        }
        super.finalize();
    }

    /**
     * Returns <tt>true</tt>/<tt>false</tt>, if there is another line to be
     * had from next().<p>
     * <p/>
     * Note: The management of the underlying Reader is handled by this method.
     * The first time hasNext() returns false the Reader is closed, and if
     * the Reader is closed, hasNext() returns false.<p>
     *
     * @return <tt>true</tt>/<tt>false</tt>, if there is another line to be
     *         had from next().<p>
     *
     * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Util/Iterator.html#hasNext()">java.util.Iterator#hasNext()</a>
     * @see #next()
     */
    @Override
    public boolean hasNext()
    {
        return ((zNextLine != null) || loadNextLine());
    }

    /**
     * Returns the next element in the interation.
     *
     * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Util/Iterator.html#next()">java.util.Iterator#next()</a>
     */
    @Override
    public String next()
    {
        if ( !hasNext() )
        {
            return super.next(); // throws Exception
        }
        String rv = zNextLine;
        zNextLine = null;
        return rv;
    }

    /**
     * Returns a debug/human friendly String that represents this.<p>
     *
     * @return A String representation of this.
     */
    @Override
    public String toString()
    {
        return "LineReaderIterator: " + (hasNext() ? "has More" : "at End");
    }
}

Commits for litesoft/trunk/Java/core/Server/src/org/litesoft/util/LineReaderIterator.java

Diff revisions: vs.
Revision Author Commited Message
939 Diff Diff GeorgeS picture GeorgeS Mon 02 Jun, 2014 21:30:31 +0000

Extracting commonfoundation

151 Diff Diff GeorgeS picture GeorgeS Thu 17 Mar, 2011 04:16:22 +0000
50 Diff Diff GeorgeS picture GeorgeS Tue 13 Apr, 2010 11:51:38 +0000
49 Diff Diff GeorgeS picture GeorgeS Mon 12 Apr, 2010 02:59:10 +0000

License Text

24 Diff Diff GeorgeS picture GeorgeS Wed 24 Feb, 2010 01:51:38 +0000
2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000