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.InputStream;
041:
042: import org.millstone.base.Application;
043: import org.millstone.base.service.FileTypeResolver;
044:
045: /** Stream resource is a resource provided to the client directly
046: * by the application. The strean resource is fetched from URI
047: * that is most often in the context of the application or window.
048: * The resource is automatically registered to window in creation.
049: * @author IT Mill Ltd.
050: * @version 3.1.1
051: * @since 3.0
052: */
053: public class StreamResource implements ApplicationResource {
054:
055: /** Source streamthe downloaded content is fetched from */
056: private StreamSource streamSource = null;
057:
058: /** Explicit mime-type */
059: private String MIMEType = null;
060:
061: /** Filename */
062: private String filename;
063:
064: /** Application */
065: private Application application;
066:
067: /** Default buffer size for this stream resource */
068: private int bufferSize = 0;
069:
070: /** Default cache time for this stream resource */
071: private long cacheTime = DEFAULT_CACHETIME;
072:
073: /** Create new stream resource for downloading from stream. */
074: public StreamResource(StreamSource streamSource, String filename,
075: Application application) {
076:
077: this .application = application;
078: setFilename(filename);
079: setStreamSource(streamSource);
080:
081: // Register to application
082: application.addResource(this );
083:
084: }
085:
086: public String getMIMEType() {
087: if (MIMEType != null)
088: return MIMEType;
089: return FileTypeResolver.getMIMEType(filename);
090: }
091:
092: /** Set the mime type of the resource */
093: public void setMIMEType(String MIMEType) {
094: this .MIMEType = MIMEType;
095: }
096:
097: /** Returns the source for this StreamResource.
098: * StreamSource is queried when the resource is about to be streamed
099: * to the client.
100: * @return Source of the StreamResource.
101: */
102: public StreamSource getStreamSource() {
103: return streamSource;
104: }
105:
106: /** Sets the source for this StreamResource.
107: * StreamSource is queried when the resource is about to be streamed
108: * to the client.
109: * @param streamSource The source to set
110: */
111: public void setStreamSource(StreamSource streamSource) {
112: this .streamSource = streamSource;
113: }
114:
115: /** Returns the filename.
116: * @return String
117: */
118: public String getFilename() {
119: return filename;
120: }
121:
122: /** Sets the filename.
123: * @param filename The filename to set
124: */
125: public void setFilename(String filename) {
126: this .filename = filename;
127: }
128:
129: /**
130: * @see org.millstone.base.terminal.ApplicationResource#getApplication()
131: */
132: public Application getApplication() {
133: return application;
134: }
135:
136: /**
137: * @see org.millstone.base.terminal.ApplicationResource#getStream()
138: */
139: public DownloadStream getStream() {
140: StreamSource ss = getStreamSource();
141: if (ss == null)
142: return null;
143: DownloadStream ds = new DownloadStream(ss.getStream(),
144: getMIMEType(), getFilename());
145: ds.setBufferSize(getBufferSize());
146: ds.setCacheTime(cacheTime);
147: return ds;
148: }
149:
150: /** Interface implemented by the source of a StreamResource.
151: * @author IT Mill Ltd.
152: * @version 3.1.1
153: * @since 3.0
154: */
155: public interface StreamSource {
156:
157: /** Return new input stream that is used for reading
158: * the resource */
159: public InputStream getStream();
160: }
161:
162: /* documented in superclass */
163: public int getBufferSize() {
164: return bufferSize;
165: }
166:
167: /** Set the size of the download buffer used for this resource.
168: * @param bufferSize The size of the buffer in bytes.
169: */
170: public void setBufferSize(int bufferSize) {
171: this .bufferSize = bufferSize;
172: }
173:
174: /* documented in superclass */
175: public long getCacheTime() {
176: return cacheTime;
177: }
178:
179: /** Set lenght of cache expiracy time.
180: *
181: * <p>This gives the adapter the possibility cache streams sent to the
182: * client. The caching may be made in adapter or at the client if the
183: * client supports caching. Zero or negavive value disbales the
184: * caching of this stream.</p>
185: *
186: * @param cacheTime The cache time in milliseconds.
187: *
188: */
189: public void setCacheTime(long cacheTime) {
190: this.cacheTime = cacheTime;
191: }
192:
193: }
|