net.lightbody.bmp.proxy.jetty.html.Include Maven / Gradle / Ivy
// ========================================================================
// $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.
* 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;
}
}
}