/* *************************************************************************
IT Mill Toolkit
Development of Browser User Interfaces Made Easy
Copyright (C) 2000-2006 IT Mill Ltd
*************************************************************************
This product is distributed under commercial license that can be found
from the product package on license.pdf. Use of this product might
require purchasing a commercial license from IT Mill Ltd. For guidelines
on usage, see licensing-guidelines.html
*************************************************************************
For more information, contact:
IT Mill Ltd phone: +358 2 4802 7180
Ruukinkatu 2-4 fax: +358 2 4802 7181
20540, Turku email: info@itmill.com
Finland company www: www.itmill.com
Primary source for information and releases: www.itmill.com
********************************************************************** */
package com.itmill.toolkit.terminal;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.itmill.toolkit.Application;
import com.itmill.toolkit.service.FileTypeResolver;
/**
* FileResources
are files or directories on local filesystem. The files and directories
* are served through URI:s to the client terminal and thus must be registered to an
* URI context before they can be used. The resource is automatically registered
* to the application when it is created.
*
* @author IT Mill Ltd.
* @version @VERSION@
* @since 3.0
*/
public class FileResource implements ApplicationResource {
/**
* Default buffer size for this stream resource.
*/
private int bufferSize = 0;
/**
* File where the downloaded content is fetched from.
*/
private File sourceFile;
/**
* Application.
*/
private Application application;
/**
* Default cache time for this stream resource.
*/
private long cacheTime = DownloadStream.DEFAULT_CACHETIME;
/**
* Creates a new file resource for providing given file for
* client terminals.
*/
public FileResource(File sourceFile, Application application) {
this.application = application;
setSourceFile(sourceFile);
application.addResource(this);
}
/**
* Gets the resource as stream.
* @see com.itmill.toolkit.terminal.ApplicationResource#getStream()
*/
public DownloadStream getStream() {
try {
DownloadStream ds = new DownloadStream(
new FileInputStream(this.sourceFile),
getMIMEType(),
getFilename());
ds.setCacheTime(cacheTime);
return ds;
} catch (FileNotFoundException e) {
// No logging for non-existing files at this level.
return null;
}
}
/**
* Gets the source file.
* @return the source File.
*/
public File getSourceFile() {
return sourceFile;
}
/**
* Sets the source file.
* @param sourceFile the source file to set.
*/
public void setSourceFile(File sourceFile) {
this.sourceFile = sourceFile;
}
/**
* @see com.itmill.toolkit.terminal.ApplicationResource#getApplication()
*/
public Application getApplication() {
return application;
}
/**
* @see com.itmill.toolkit.terminal.ApplicationResource#getFilename()
*/
public String getFilename() {
return sourceFile.getName();
}
/**
* @see com.itmill.toolkit.terminal.Resource#getMIMEType()
*/
public String getMIMEType() {
return FileTypeResolver.getMIMEType(sourceFile);
}
/**
* Gets the length of cache expiration time.
* This gives the adapter the possibility cache streams sent to the client.
* The caching may be made in adapter or at the client if the client supports
* caching. Default is DownloadStream.DEFAULT_CACHETIME
.
* @return Cache time in milliseconds.
*/
public long getCacheTime() {
return cacheTime;
}
/**
* Sets the length of cache expiration time.
* This gives the adapter the possibility cache streams sent to the client.
* The caching may be made in adapter or at the client if the client supports
* caching. Zero or negavive value disbales the caching of this stream.
* @param cacheTime the cache time in milliseconds.
*/
public void setCacheTime(long cacheTime) {
this.cacheTime = cacheTime;
}
/* documented in superclass */
public int getBufferSize() {
return bufferSize;
}
/**
* Sets the size of the download buffer used for this resource.
* @param bufferSize the size of the buffer in bytes.
*/
public void setBufferSize(int bufferSize) {
this.bufferSize = bufferSize;
}
}