001/*
002 * (C) Copyright 2006-2007 Nuxeo SAS <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 *     Jean-Marc Orliaguet, Chalmers
011 *
012 * $Id$
013 */
014
015package org.nuxeo.theme.html.servlets;
016
017import java.io.IOException;
018import java.io.OutputStream;
019import java.io.Serializable;
020
021import javax.servlet.http.HttpServlet;
022import javax.servlet.http.HttpServletRequest;
023import javax.servlet.http.HttpServletResponse;
024
025import org.apache.commons.logging.Log;
026import org.apache.commons.logging.LogFactory;
027import org.nuxeo.common.utils.FileUtils;
028import org.nuxeo.ecm.core.io.download.BufferingServletOutputStream;
029import org.nuxeo.theme.Manager;
030import org.nuxeo.theme.html.Utils;
031import org.nuxeo.theme.themes.ThemeException;
032
033public final class Images extends HttpServlet implements Serializable {
034
035    private static final Log log = LogFactory.getLog(Images.class);
036
037    private static final long serialVersionUID = 1L;
038
039    @Override
040    protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException {
041        doPost(request, response);
042    }
043
044    @Override
045    protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws IOException {
046
047        final String path = request.getPathInfo().substring(1);
048        byte[] data = null;
049        try {
050            data = Manager.getThemeManager().getImageResource(path);
051        } catch (ThemeException e) {
052            log.error("Image not found: " + path);
053        }
054        if (data != null) {
055            OutputStream os = response.getOutputStream();
056            BufferingServletOutputStream.stopBuffering(os);
057            String ext = FileUtils.getFileExtension(path);
058            String mimeType = Utils.getImageMimeType(ext);
059            response.addHeader("content-type", mimeType);
060
061            // Cache headers
062            final String lifetime = "604800"; // 1 week
063            final long now = System.currentTimeMillis();
064            response.addHeader("Cache-Control", "max-age=" + lifetime);
065            response.addHeader("Cache-Control", "must-revalidate");
066            response.setDateHeader("Last-Modified", now);
067            response.setDateHeader("Expires", now + new Long(lifetime) * 1000L);
068
069            os.write(data);
070            os.close();
071        }
072    }
073}