01: /*
02: * ExtendedContext.java November 2005
03: *
04: * Copyright (C) 2005, Niall Gallagher <niallg@users.sf.net>
05: *
06: * This library is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation.
09: *
10: * This library is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: * GNU Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General
16: * Public License along with this library; if not, write to the
17: * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18: * Boston, MA 02111-1307 USA
19: */
20:
21: package simple.http.serve;
22:
23: import java.io.IOException;
24: import java.io.File;
25:
26: /**
27: * The <code>ExtendedContext</code> object is used to provide a file
28: * context that extends another seperate context. This is used so
29: * that files from another context are available to this one. Such
30: * a configuration has advantages when acquiring templates or files
31: * in a server with multiple hosts. It allows a set of stock files,
32: * images, and templates to become available to multiple contexts.
33: *
34: * @author Niall Gallagher
35: *
36: * @see simple.http.serve.CacheContext
37: */
38: public class ExtendedContext extends CacheContext {
39:
40: /**
41: * This is the default limit to the files sizes to cache.
42: */
43: private static final int DEFAULT_SIZE = 8192;
44:
45: /**
46: * The context used if a file is not found in this context.
47: */
48: protected Context extend;
49:
50: /**
51: * Constructor for the <code>ExtendedContext</code> object. This
52: * is used to create a context that will search the provided base
53: * path before the extended directory. This allows a set of stock
54: * images, templates, and files to be shared between separate
55: * extended context instances in a server with several hosts.
56: *
57: * @param base this is the directory specifying the context root
58: * @param extend this is the directory path that is extended
59: */
60: public ExtendedContext(File base, File extend) {
61: this (base, extend, new File[] { base, extend });
62: }
63:
64: /**
65: * Constructor for the <code>ExtendedContext</code> object. This
66: * is used to create a context that will search the provided base
67: * path before the extended directory. This allows a set of stock
68: * images, templates, and files to be shared between separate
69: * extended context instances in a server with several hosts.
70: *
71: * @param base this is the directory specifying the context root
72: * @param extend this is the directory path that is extended
73: * @param list this is the range of files used for configuration
74: */
75: public ExtendedContext(File base, File extend, File[] list) {
76: super (base, list, DEFAULT_SIZE);
77: this .extend = new FileContext(extend);
78: }
79:
80: /**
81: * This method is used to acquire an <code>Index</code> for the
82: * URI path provided. The index is first acquired using the base
83: * path for this context, if the file does not exist then the
84: * extended directory path is used to provide the index. This is
85: * done so that files from both directories are visible.
86: *
87: * @param target this is the URI path referenceing an OS file
88: *
89: * @return this returns an index object for the URI target
90: */
91: public Index getIndex(String target) {
92: Index index = super.getIndex(target);
93:
94: if (!index.getFile().exists()) {
95: return extend.getIndex(target);
96: }
97: return index;
98: }
99: }
|