001/*
002 * Copyright (c) 2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *     Florent Guillaume
011 */
012package org.nuxeo.theme.html.servlets;
013
014import java.io.InputStream;
015import java.net.MalformedURLException;
016import java.net.URL;
017
018import javax.servlet.ServletContext;
019import javax.servlet.ServletContextEvent;
020import javax.servlet.ServletContextListener;
021
022import org.nuxeo.theme.ResourceResolver;
023
024/**
025 * Resolver for resources that checks the servlet context first.
026 *
027 * @since 5.5
028 */
029public class ServletResourceResolver extends ResourceResolver implements ServletContextListener {
030
031    protected ServletContext servletContext;
032
033    @Override
034    public URL getResource(String path) {
035        try {
036            URL url = servletContext.getResource("/" + path);
037            if (url != null) {
038                return url;
039            }
040        } catch (MalformedURLException e) {
041            // continue
042        }
043        return super.getResource(path);
044    }
045
046    @Override
047    public InputStream getResourceAsStream(String path) {
048        InputStream is = servletContext.getResourceAsStream("/" + path);
049        if (is != null) {
050            return is;
051        }
052        return super.getResourceAsStream(path);
053    }
054
055    @Override
056    public void contextInitialized(ServletContextEvent sce) {
057        servletContext = sce.getServletContext();
058        ResourceResolver.setInstance(this);
059    }
060
061    @Override
062    public void contextDestroyed(ServletContextEvent sce) {
063        servletContext = null;
064        ResourceResolver.setInstance(null);
065    }
066
067}