org.lucidj.vaadinui.BundleResource.java Source code

Java tutorial

Introduction

Here is the source code for org.lucidj.vaadinui.BundleResource.java

Source

/*
 * Copyright 2000-2014 Vaadin Ltd.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 * 
 * Contributors:
 *       Florian Pirchner - Changed the ClassResource to BundleResource
 */

/* ============================================================================
 * NOTICE
 * ============================================================================
 *
 * Original source: https://github.com/lunifera/lunifera-vaadin-examples/blob/master/org.lunifera.example.vaadin.osgi/org.lunifera.example.vaadin.osgi.bundleresource/src/org/lunifera/example/vaadin/osgi/bundleresource/BundleResource.java
 *
 * Changes: Only the package.
 */

package org.lucidj.vaadinui;

import java.io.IOException;
import java.io.Serializable;
import java.net.URL;

import org.osgi.framework.Bundle;

import com.vaadin.server.ConnectorResource;
import com.vaadin.server.DownloadStream;
import com.vaadin.util.FileTypeResolver;

/**
 * <code>BundleResource</code> is a named resource accessed with the bundle.
 * 
 * This can be used to access resources such as icons, files, etc.
 * 
 * @see Bundle#getEntry(String)
 * 
 * @author Lunifera GmbH (based on Vaadin)
 */
@SuppressWarnings("serial")
public class BundleResource implements ConnectorResource, Serializable {
    /**
     * Default buffer size for this stream resource.
     */
    private int bufferSize = 0;

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

    /**
     * Name of the resource is relative to the associated class.
     */
    private final String resourceName;
    private URL resourceUrl;

    /**
     * Creates a new bundle resource instance.
     * 
     * @param bundle
     *            the bundle of the which the resource should be loaded.
     * @param resourceName
     *            the Unique identifier of the resource within the application.
     */
    public BundleResource(Bundle bundle, String resourceName) {
        this.resourceName = resourceName;

        if (bundle == null || resourceName == null) {
            throw (new NullPointerException());
        }

        resourceUrl = bundle.getEntry(resourceName);

        if (resourceUrl == null) {
            throw (new IllegalArgumentException(
                    "Resource not found on bundle " + bundle.getBundleId() + ": " + resourceName));
        }
    }

    public BundleResource(URL resourceUrl) {
        this.resourceUrl = resourceUrl;
        resourceName = resourceUrl.getFile();
    }

    /**
     * Gets the MIME type of this resource.
     * 
     * @see com.vaadin.server.Resource#getMIMEType()
     */
    @Override
    public String getMIMEType() {
        return (FileTypeResolver.getMIMEType(resourceName));
    }

    @Override
    public String getFilename() {
        String[] parts = resourceName.split("/");
        return (parts[parts.length - 1]);
    }

    @Override
    public DownloadStream getStream() {
        try {
            DownloadStream ds = new DownloadStream(resourceUrl.openStream(), getMIMEType(), getFilename());
            ds.setBufferSize(getBufferSize());
            ds.setCacheTime(getCacheTime());
            return (ds);
        } catch (IOException e) {
            throw new IllegalArgumentException(e);
        }
    }

    /**
     * Gets the size of the download buffer used for this resource.
     * 
     * <p>
     * If the buffer size is 0, the buffer size is decided by the terminal
     * adapter. The default value is 0.
     * </p>
     * 
     * @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.
     * 
     * @see #getBufferSize()
     */
    public void setBufferSize(int bufferSize) {
        this.bufferSize = bufferSize;
    }

    /**
     * Gets the length of cache expiration time.
     * 
     * <p>
     * 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 {@link DownloadStream#DEFAULT_CACHETIME}.
     * </p>
     * 
     * @return Cache time in milliseconds
     */
    public long getCacheTime() {
        return (cacheTime);
    }

    /**
     * Sets the length of cache expiration time.
     * 
     * <p>
     * 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.
     * </p>
     * 
     * @param cacheTime
     *            the cache time in milliseconds.
     * 
     */
    public void setCacheTime(long cacheTime) {
        this.cacheTime = cacheTime;
    }
}