net.lightbody.bmp.proxy.jetty.html.Include.java Source code

Java tutorial

Introduction

Here is the source code for net.lightbody.bmp.proxy.jetty.html.Include.java

Source

// ========================================================================
// $Id: Include.java,v 1.6 2005/08/13 00:01:23 gregwilkins Exp $
// Copyright 1996-2004 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at 
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================

package net.lightbody.bmp.proxy.jetty.html;

import net.lightbody.bmp.proxy.jetty.log.LogFactory;
import net.lightbody.bmp.proxy.jetty.util.IO;
import org.apache.commons.logging.Log;

import java.io.*;
import java.net.URL;

/* -------------------------------------------------------------------- */
/** Include File, InputStream or Reader Element.
 * <p>This Element includes another file.
 * This class expects that the HTTP directory separator '/' will be used.
 * This will be converted to the local directory separator.
 * @see Element
 * @version $Id: Include.java,v 1.6 2005/08/13 00:01:23 gregwilkins Exp $
 * @author Greg Wilkins
*/
public class Include extends Element {
    private static Log log = LogFactory.getLog(Include.class);

    Reader reader = null;

    /* ------------------------------------------------------------ */
    /** Constructor.
     * Include file
     * @param directory Directory name
     * @param fileName file name
     * @exception IOException File not found
     */
    public Include(String directory, String fileName) throws IOException {
        if (directory == null)
            directory = ".";

        if (File.separatorChar != '/') {
            directory = directory.replace('/', File.separatorChar);
            fileName = fileName.replace('/', File.separatorChar);
        }

        if (log.isDebugEnabled())
            log.debug("IncludeTag(" + directory + "," + fileName + ")");
        includeFile(new File(directory, fileName));
    }

    /* ------------------------------------------------------------ */
    /** Constructor. 
     * Include file.
     * @param fileName Filename
     * @exception IOException File not found
     */
    public Include(String fileName) throws IOException {
        if (File.separatorChar != '/')
            fileName = fileName.replace('/', File.separatorChar);
        if (log.isDebugEnabled())
            log.debug("IncludeTag(" + fileName + ")");
        includeFile(new File(fileName));
    }

    /* ------------------------------------------------------------ */
    /** Constructor.
     * Include file.
     * @param file file
     * @exception IOException File not found
     */
    public Include(File file) throws IOException {
        if (log.isDebugEnabled())
            log.debug("IncludeTag(" + file + ")");
        includeFile(file);
    }

    /* ------------------------------------------------------------ */
    /** Constructor.
     * Include InputStream.
     * Byte to character transformation is done assuming the default
     * local character set.  What this means is that on EBCDIC systems
     * the included file is assumed to be in EBCDIC.
     * @param in stream
     * @exception IOException
     */
    public Include(InputStream in) throws IOException {
        if (in != null)
            reader = new InputStreamReader(in);
    }

    /* ------------------------------------------------------------ */
    /** Constructor.
     * Include contents of a URL.
     * Byte to character transformation is done assuming the default
     * local character set.  What this means is that on EBCDIC systems
     * the included file is assumed to be in EBCDIC.
     * @param url the URL to read from.
     * @exception IOException
     */
    public Include(URL url) throws IOException {
        if (url != null)
            reader = new InputStreamReader(url.openStream());
    }

    /* ------------------------------------------------------------ */
    /** Constructor.
     * Include Reader.
     * @param in reader
     * @exception IOException
     */
    public Include(Reader in) throws IOException {
        reader = in;
    }

    /* ------------------------------------------------------------ */
    private void includeFile(File file) throws IOException {
        if (!file.exists())
            throw new FileNotFoundException(file.toString());

        if (file.isDirectory()) {
            List list = new List(List.Unordered);
            String[] ls = file.list();
            for (int i = 0; i < ls.length; i++)
                list.add(ls[i]);
            StringWriter sw = new StringWriter();
            list.write(sw);
            reader = new StringReader(sw.toString());
        } else {
            reader = new BufferedReader(new FileReader(file));
        }
    }

    /* ---------------------------------------------------------------- */
    public void write(Writer out) throws IOException {
        if (reader == null)
            return;

        try {
            IO.copy(reader, out);
        } finally {
            reader.close();
            reader = null;
        }
    }
}