Package org.bounce.text.xml

Source Code of org.bounce.text.xml.XMLInputStream

/*
* $Id: XMLInputStream.java,v 1.1 2005/03/19 12:21:47 edankert Exp $
*
* Copyright (c) 2002 - 2005, Edwin Dankert
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright notice,
*   this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
*   notice, this list of conditions and the following disclaimer in the
*   documentation and/or other materials provided with the distribution.
* * Neither the name of 'Edwin Dankert' nor the names of its contributors
*   may  be used to endorse or promote products derived from this software
*   without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.bounce.text.xml;

import java.io.IOException;
import java.io.InputStream;

import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.Segment;

/**
* A XML input stream, for a XML Document.
*
* <p>
* <b>Note: </b> The XML Editor package is based on the JavaEditorKit example as
* described in the article <i>'Customizing a Text Editor' </i> by <b>Timothy
* Prinzing </b>. See:
* http://java.sun.com/products/jfc/tsc/articles/text/editor_kit/
* </p>
*
* @version $Revision: 1.1 $, $Date: 2005/03/19 12:21:47 $
* @author Edwin Dankert <edankert@gmail.com>
*/
class XMLInputStream extends InputStream {

    private Segment segment = null;

    private Document document = null;

    private int end = 0; // end position

    private int pos = 0; // pos in document

    private int index = 0; // index into array of the segment

    /**
     * Constructs a stream for the document.
     *
     * @param doc
     *            the document with Xml Information.
     */
    public XMLInputStream( Document doc) {
        this.segment = new Segment();
        this.document = doc;

        end = document.getLength();
        pos = 0;

        try {
            loadSegment();
        } catch ( IOException ioe) {
            throw new Error( "unexpected: " + ioe);
        }
    }

    /**
     * Sets the new range to be scanned for the stream and loads the necessary
     * information.
     *
     * @param start
     *            the start of the segment.
     * @param end
     *            the end of the segment.
     */
    public void setRange( int start, int end) {
        this.end = end;
        pos = start;

        try {
            loadSegment();
        } catch ( IOException ioe) {
            throw new Error( "unexpected: " + ioe);
        }
    }

    /**
     * Reads the next byte of data from this input stream. The value byte is
     * returned as an <code>int</code> in the range <code>0</code> to
     * <code>255</code>. If no byte is available because the end of the
     * stream has been reached, the value <code>-1</code> is returned.
     *
     * @return the next byte of data, or <code>-1</code> if the end of the
     *         stream is reached.
     *        
     * @throws IOException
     */
    public int read() throws IOException {
        if ( index >= segment.offset + segment.count) {
            if ( pos >= end) {
                // no more data
                return -1;
            }

            loadSegment();
        }

        return segment.array[index++];
    }

    // Loads the segment with new information if necessary...
    private void loadSegment() throws IOException {
        try {
            int n = Math.min( 1024, end - pos);

            document.getText( pos, n, segment);
            pos += n;

            index = segment.offset;
        } catch ( BadLocationException e) {
            throw new IOException( "Bad location");
        }
    }
}
TOP

Related Classes of org.bounce.text.xml.XMLInputStream

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.