1 // ========================================================================
2 // $Id: Include.java,v 1.6 2005/08/13 00:01:23 gregwilkins Exp $
3 // Copyright 1996-2004 Mort Bay Consulting Pty. Ltd.
4 // ------------------------------------------------------------------------
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 package org.mortbay.html;
17 import java.io.BufferedReader;
18 import java.io.File;
19 import java.io.FileNotFoundException;
20 import java.io.FileReader;
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.io.InputStreamReader;
24 import java.io.Reader;
25 import java.io.StringReader;
26 import java.io.StringWriter;
27 import java.io.Writer;
28 import java.net.URL;
29
30 import org.mortbay.util.IO;
31
32
33 /* -------------------------------------------------------------------- */
34 /** Include File, InputStream or Reader Element.
35 * <p>This Element includes another file.
36 * This class expects that the HTTP directory separator '/' will be used.
37 * This will be converted to the local directory separator.
38 * @see Element
39 * @version $Id: Include.java,v 1.6 2005/08/13 00:01:23 gregwilkins Exp $
40 * @author Greg Wilkins
41 */
42 public class Include extends Element
43 {
44
45 Reader reader=null;
46
47 /* ------------------------------------------------------------ */
48 /** Constructor.
49 * Include file
50 * @param directory Directory name
51 * @param fileName file name
52 * @exception IOException File not found
53 */
54 public Include(String directory,
55 String fileName)
56 throws IOException
57 {
58 if (directory==null)
59 directory=".";
60
61 if (File.separatorChar != '/')
62 {
63 directory = directory.replace('/',File.separatorChar);
64 fileName = fileName .replace('/',File.separatorChar);
65 }
66
67 includeFile(new File(directory,fileName));
68 }
69
70 /* ------------------------------------------------------------ */
71 /** Constructor.
72 * Include file.
73 * @param fileName Filename
74 * @exception IOException File not found
75 */
76 public Include(String fileName)
77 throws IOException
78 {
79 if (File.separatorChar != '/')
80 fileName = fileName .replace('/',File.separatorChar);
81 includeFile(new File(fileName));
82 }
83
84 /* ------------------------------------------------------------ */
85 /** Constructor.
86 * Include file.
87 * @param file file
88 * @exception IOException File not found
89 */
90 public Include(File file)
91 throws IOException
92 {
93 includeFile(file);
94 }
95
96 /* ------------------------------------------------------------ */
97 /** Constructor.
98 * Include InputStream.
99 * Byte to character transformation is done assuming the default
100 * local character set. What this means is that on EBCDIC systems
101 * the included file is assumed to be in EBCDIC.
102 * @param in stream
103 * @exception IOException
104 */
105 public Include(InputStream in)
106 throws IOException
107 {
108 if (in!=null)
109 reader=new InputStreamReader(in);
110 }
111
112 /* ------------------------------------------------------------ */
113 /** Constructor.
114 * Include contents of a URL.
115 * Byte to character transformation is done assuming the default
116 * local character set. What this means is that on EBCDIC systems
117 * the included file is assumed to be in EBCDIC.
118 * @param url the URL to read from.
119 * @exception IOException
120 */
121 public Include(URL url)
122 throws IOException
123 {
124 if (url!=null)
125 reader=new InputStreamReader(url.openStream());
126 }
127
128 /* ------------------------------------------------------------ */
129 /** Constructor.
130 * Include Reader.
131 * @param in reader
132 * @exception IOException
133 */
134 public Include(Reader in)
135 throws IOException
136 {
137 reader=in;
138 }
139
140 /* ------------------------------------------------------------ */
141 private void includeFile(File file)
142 throws IOException
143 {
144 if (!file.exists())
145 throw new FileNotFoundException(file.toString());
146
147 if (file.isDirectory())
148 {
149 List list = new List(List.Unordered);
150 String[] ls = file.list();
151 for (int i=0 ; i< ls.length ; i++)
152 list.add(ls[i]);
153 StringWriter sw = new StringWriter();
154 list.write(sw);
155 reader = new StringReader(sw.toString());
156 }
157 else
158 {
159 reader = new BufferedReader(new FileReader(file));
160 }
161 }
162
163
164 /* ---------------------------------------------------------------- */
165 public void write(Writer out)
166 throws IOException
167 {
168 if (reader==null)
169 return;
170
171 try{
172 IO.copy(reader,out);
173 }
174 finally
175 {
176 reader.close();
177 reader=null;
178 }
179 }
180 }
181
182
183
184
185
186
187
188
189