au.edu.uts.eng.remotelabs.schedserver.server.impl.BundleResourceLoader.java Source code

Java tutorial

Introduction

Here is the source code for au.edu.uts.eng.remotelabs.schedserver.server.impl.BundleResourceLoader.java

Source

/**
 * SAHARA Scheduling Server
 *
 * Schedules and assigns local laboratory rigs.
 *
 * @license See LICENSE in the top level directory for complete license terms.
 *
 * Copyright (c) 2012, University of Technology, Sydney
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met:
 *
 *  * Redistributions of source code must retain the above copyright notice, 
 *    this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright 
 *    notice, this list of conditions and the following disclaimer in the 
 *    documentation and/or other materials provided with the distribution.
 *  * Neither the name of the University of Technology, Sydney nor the names 
 *    of its contributors may be used to endorse or promote products derived from 
 *    this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * @author Michael Diponio (mdiponio)
 * @date 17th October 2012
 */
package au.edu.uts.eng.remotelabs.schedserver.server.impl;

import java.io.InputStream;

import org.apache.commons.collections.ExtendedProperties;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.runtime.resource.loader.ResourceLoader;

import au.edu.uts.eng.remotelabs.schedserver.logger.Logger;
import au.edu.uts.eng.remotelabs.schedserver.logger.LoggerActivator;

/**
 * Resource loader which looks through the classloaders of the bundles
 * that are registered to host a web page to load template files.
 */
public class BundleResourceLoader extends ResourceLoader {
    /** Logger. */
    private final Logger logger;

    public BundleResourceLoader() {
        this.logger = LoggerActivator.getLogger();
    }

    @Override
    public void init(ExtendedProperties props) {
        this.logger.info("Initialising velocity bundle resource loader.");
    }

    @Override
    public InputStream getResourceStream(String path) throws ResourceNotFoundException {
        /* Check this bundles classloader for resource. */
        if ("VM_global_library.vm".equals(path)) {
            /* Special file requested during Velocity initialisation. */
            path = "/META-INF/" + path;
        }

        InputStream is = BundleResourceLoader.class.getResourceAsStream(path);
        if (is == null) {
            /* Resource not found in this classloader, search through all registered
             * bundle classloaders to find the path. */
            for (ClassLoader cl : PageHostingServiceListener.getClassLoaders()) {
                is = cl.getResourceAsStream(path);
                if (is != null)
                    break;
            }
        }

        if (is == null) {
            this.logger.warn("Velocity resource " + path + " not found.");
            throw new ResourceNotFoundException("Velocity resource " + path + " not found.");
        }

        return is;
    }

    @Override
    public boolean isSourceModified(Resource arg0) {
        /* Resources are not modified dynamically. */
        return false;
    }

    @Override
    public long getLastModified(Resource resource) {
        /* Resources are not modified dynamically. */
        return 0;
    }
}