001: /* *************************************************************************
002:
003: Millstone(TM)
004: Open Sourced User Interface Library for
005: Internet Development with Java
006:
007: Millstone is a registered trademark of IT Mill Ltd
008: Copyright (C) 2000-2005 IT Mill Ltd
009:
010: *************************************************************************
011:
012: This library is free software; you can redistribute it and/or
013: modify it under the terms of the GNU Lesser General Public
014: license version 2.1 as published by the Free Software Foundation.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: *************************************************************************
026:
027: For more information, contact:
028:
029: IT Mill Ltd phone: +358 2 4802 7180
030: Ruukinkatu 2-4 fax: +358 2 4802 7181
031: 20540, Turku email: info@itmill.com
032: Finland company www: www.itmill.com
033:
034: Primary source for MillStone information and releases: www.millstone.org
035:
036: ********************************************************************** */
037:
038: package org.millstone.base.terminal;
039:
040: import java.io.File;
041: import java.io.FileInputStream;
042: import java.io.FileNotFoundException;
043:
044: import org.millstone.base.Application;
045: import org.millstone.base.service.FileTypeResolver;
046:
047: /** File resources are files or directories on local filesystem. The files and directories
048: * are served trough URI:s to the client terminal and thus must be registered to an
049: * URI context before they can be used. The resource is automatically registered
050: * to the application when it is created.
051: *
052: * @author IT Mill Ltd.
053: * @version 3.1.1
054: * @since 3.0
055: */
056: public class FileResource implements ApplicationResource {
057:
058: /** Default buffer size for this stream resource */
059: private int bufferSize = 0;
060:
061: /** File where the downloaded content is fetched from. */
062: private File sourceFile;
063:
064: /** Application */
065: private Application application;
066:
067: /** Default cache time for this stream resource */
068: private long cacheTime = DownloadStream.DEFAULT_CACHETIME;
069:
070: /** Create new file resource for providing given file for
071: * client terminals.
072: */
073: public FileResource(File sourceFile, Application application) {
074: this .application = application;
075: setSourceFile(sourceFile);
076: application.addResource(this );
077: }
078:
079: public DownloadStream getStream() {
080: try {
081: DownloadStream ds = new DownloadStream(new FileInputStream(
082: this .sourceFile), getMIMEType(), getFilename());
083: ds.setCacheTime(cacheTime);
084: return ds;
085: } catch (FileNotFoundException e) {
086: // No logging for non-existing files at this level.
087: return null;
088: }
089: }
090:
091: /** Returns the source file.
092: * @return File
093: */
094: public File getSourceFile() {
095: return sourceFile;
096: }
097:
098: /** Sets the source file.
099: * @param sourceFile The source file to set
100: */
101: public void setSourceFile(File sourceFile) {
102: this .sourceFile = sourceFile;
103: }
104:
105: /**
106: * @see org.millstone.base.terminal.ApplicationResource#getApplication()
107: */
108: public Application getApplication() {
109: return application;
110: }
111:
112: /**
113: * @see org.millstone.base.terminal.ApplicationResource#getFilename()
114: */
115: public String getFilename() {
116: return sourceFile.getName();
117: }
118:
119: /**
120: * @see org.millstone.base.terminal.Resource#getMIMEType()
121: */
122: public String getMIMEType() {
123: return FileTypeResolver.getMIMEType(sourceFile);
124: }
125:
126: /** Get lenght of cache expiracy time.
127: * This gives the adapter the possibility cache streams sent to the client.
128: * The caching may be made in adapter or at the client if the client supports
129: * caching. Default is DownloadStream.DEFAULT_CACHETIME.
130: * @return Cache time in milliseconds
131: */
132: public long getCacheTime() {
133: return cacheTime;
134: }
135:
136: /** Set lenght of cache expiracy time.
137: * This gives the adapter the possibility cache streams sent to the client.
138: * The caching may be made in adapter or at the client if the client supports
139: * caching. Zero or negavive value disbales the caching of this stream.
140: * @param cacheTime The cache time in milliseconds.
141: */
142: public void setCacheTime(long cacheTime) {
143: this .cacheTime = cacheTime;
144: }
145:
146: /* documented in superclass */
147: public int getBufferSize() {
148: return bufferSize;
149: }
150:
151: /** Set the size of the download buffer used for this resource.
152: * @param bufferSize The size of the buffer in bytes.
153: */
154: public void setBufferSize(int bufferSize) {
155: this.bufferSize = bufferSize;
156: }
157:
158: }
|