All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vaadin.server.StreamResource Maven / Gradle / Ivy

There is a newer version: 8.27.3
Show newest version
/*
 * Copyright (C) 2000-2024 Vaadin Ltd
 *
 * This program is available under Vaadin Commercial License and Service Terms.
 *
 * See  for the full
 * license.
 */

package com.vaadin.server;

import java.io.InputStream;
import java.io.Serializable;
import java.util.Arrays;

import com.vaadin.shared.util.SharedUtil;
import com.vaadin.util.FileTypeResolver;

/**
 * StreamResource is a resource provided to the client directly by
 * the application.
 *
 * @author Vaadin Ltd.
 * @since 3.0
 */
@SuppressWarnings("serial")
public class StreamResource implements ConnectorResource {

    /**
     * Source stream the downloaded content is fetched from.
     */
    private StreamSource streamSource = null;

    /**
     * Explicit mime-type.
     */
    private String mimeType = null;

    /**
     * Filename.
     */
    private String filename;

    /**
     * Default buffer size for this stream resource.
     */
    private int bufferSize = 0;

    /**
     * Default cache time for this stream resource.
     */
    private long cacheTime = DownloadStream.DEFAULT_CACHETIME;

    /**
     * Creates a new stream resource for downloading from stream.
     *
     * @param streamSource
     *            the source Stream.
     * @param filename
     *            the name of the file.
     */
    public StreamResource(StreamSource streamSource, String filename) {
        setFilename(filename);
        setStreamSource(streamSource);
    }

    /**
     * @see com.vaadin.server.Resource#getMIMEType()
     */
    @Override
    public String getMIMEType() {
        if (mimeType != null) {
            return mimeType;
        }
        return FileTypeResolver.getMIMEType(filename);
    }

    /**
     * Sets the mime type of the resource.
     *
     * @param mimeType
     *            the MIME type to be set.
     */
    public void setMIMEType(String mimeType) {
        this.mimeType = mimeType;
    }

    /**
     * Returns the source for this StreamResource. StreamSource is
     * queried when the resource is about to be streamed to the client.
     *
     * @return Source of the StreamResource.
     */
    public StreamSource getStreamSource() {
        return streamSource;
    }

    /**
     * Sets the source for this StreamResource.
     * StreamSource is queried when the resource is about to be
     * streamed to the client.
     *
     * @param streamSource
     *            the source to set.
     */
    public void setStreamSource(StreamSource streamSource) {
        this.streamSource = streamSource;
    }

    /**
     * Gets the filename.
     *
     * @return the filename.
     */
    @Override
    public String getFilename() {
        return filename;
    }

    /**
     * Sets the filename.
     *
     * @param filename
     *            the filename to set.
     */
    public void setFilename(String filename) {
        this.filename = filename;
    }

    @Override
    public DownloadStream getStream() {
        final StreamSource ss = getStreamSource();
        if (ss == null) {
            return null;
        }
        final DownloadStream ds = new DownloadStream(ss.getStream(),
                getMIMEType(), getFilename());
        ds.setBufferSize(getBufferSize());
        ds.setCacheTime(getCacheTime());
        return ds;
    }

    /**
     * Interface implemented by the source of a StreamResource.
     *
     * @author Vaadin Ltd.
     * @since 3.0
     */
    @FunctionalInterface
    public interface StreamSource extends Serializable {

        /**
         * Returns new input stream that is used for reading the resource.
         */
        public InputStream getStream();
    }

    /**
     * Gets the size of the download buffer used for this resource.
     *
     * 

* If the buffer size is 0, the buffer size is decided by the terminal * adapter. The default value is 0. *

* * @return the size of the buffer in bytes. */ 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; } /** * 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 negative value disables the caching of this * stream. *

* * @param cacheTime * the cache time in milliseconds. * */ public void setCacheTime(long cacheTime) { this.cacheTime = cacheTime; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } else if (obj instanceof StreamResource) { StreamResource that = (StreamResource) obj; return SharedUtil.equals(getStreamSource(), that.getStreamSource()) && SharedUtil.equals(mimeType, that.mimeType) && SharedUtil.equals(getFilename(), that.getFilename()) && getBufferSize() == that.getBufferSize() && getCacheTime() == that.getCacheTime(); } else { return false; } } @Override public int hashCode() { return Arrays.hashCode(new Object[] { getStreamSource(), mimeType, getFilename(), getBufferSize(), getCacheTime() }); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy