raw.jsp revision 14a41f02433890d19b2f871156271e3388cd0845
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye<%--
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner$Id$
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner
ef604281b397eceb0d9f67b87378b7c0b751967dTrond NorbyeCDDL HEADER START
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye
ef604281b397eceb0d9f67b87378b7c0b751967dTrond NorbyeThe contents of this file are subject to the terms of the
ef604281b397eceb0d9f67b87378b7c0b751967dTrond NorbyeCommon Development and Distribution License (the "License").
ef604281b397eceb0d9f67b87378b7c0b751967dTrond NorbyeYou may not use this file except in compliance with the License.
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye
ef604281b397eceb0d9f67b87378b7c0b751967dTrond NorbyeSee LICENSE.txt included in this distribution for the specific
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbyelanguage governing permissions and limitations under the License.
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye
ef604281b397eceb0d9f67b87378b7c0b751967dTrond NorbyeWhen distributing Covered Code, include this CDDL HEADER in each
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbyefile and include the License file at LICENSE.txt.
ef604281b397eceb0d9f67b87378b7c0b751967dTrond NorbyeIf applicable, add the following below this CDDL HEADER, with the
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbyefields enclosed by brackets "[]" replaced with your own identifying
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbyeinformation: Portions Copyright [yyyy] [name of copyright owner]
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye
ef604281b397eceb0d9f67b87378b7c0b751967dTrond NorbyeCDDL HEADER END
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye
ef604281b397eceb0d9f67b87378b7c0b751967dTrond NorbyeCopyright 2008 Sun Microsystems, Inc. All rights reserved.
ef604281b397eceb0d9f67b87378b7c0b751967dTrond NorbyeUse is subject to license terms.
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye
14a41f02433890d19b2f871156271e3388cd0845Jens ElknerPortions Copyright 2011 Jens Elkner.
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner--%><%@page import="
14a41f02433890d19b2f871156271e3388cd0845Jens Elknerjava.io.File,
14a41f02433890d19b2f871156271e3388cd0845Jens Elknerjava.io.FileInputStream,
14a41f02433890d19b2f871156271e3388cd0845Jens Elknerjava.io.FileNotFoundException,
14a41f02433890d19b2f871156271e3388cd0845Jens Elknerjava.io.InputStream,
14a41f02433890d19b2f871156271e3388cd0845Jens Elknerjava.io.OutputStream,
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye
14a41f02433890d19b2f871156271e3388cd0845Jens Elknerorg.opensolaris.opengrok.configuration.RuntimeEnvironment,
14a41f02433890d19b2f871156271e3388cd0845Jens Elknerorg.opensolaris.opengrok.history.HistoryGuru,
14a41f02433890d19b2f871156271e3388cd0845Jens Elknerorg.opensolaris.opengrok.web.PageConfig"
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner%><%@
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye
14a41f02433890d19b2f871156271e3388cd0845Jens Elknerinclude file="pageconfig.jspf"
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner%><%
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner/* ---------------------- raw.jsp start --------------------- */
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner{
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner cfg = PageConfig.get(request);
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner String redir = cfg.canProcess();
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner if (redir == null || redir.length() > 0) {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner if (redir != null) {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner response.sendRedirect(redir);
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner } else {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner response.sendError(HttpServletResponse.SC_NOT_FOUND);
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner }
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner return;
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner }
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner File f = cfg.getResourceFile();
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner String revision = cfg.getRequestedRevision();
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner if (revision.length() == 0) {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner revision = null;
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner }
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner InputStream in = null;
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner try {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner if (revision != null) {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner in = HistoryGuru.getInstance().getRevision(f.getParent(),
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner f.getName(), revision.substring(2));
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner } else {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner long flast = cfg.getLastModified();
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner if (request.getDateHeader("If-Modified-Since") >= flast) {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner return;
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner }
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner in = new FileInputStream(f);
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner response.setContentLength((int) f.length());
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner response.setDateHeader("Last-Modified", f.lastModified());
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner }
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner } catch (Exception e) {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner response.sendError(HttpServletResponse.SC_NOT_FOUND);
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner return ;
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner }
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner String mimeType = getServletContext().getMimeType(f.getAbsolutePath());
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner response.setContentType(mimeType);
138a7fea383af1a9084b7ec66d309d1cbc43d5f6Chris Eldredge
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner try {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner response.setHeader("content-disposition", "attachment; filename="
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner + f.getName());
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner OutputStream o = response.getOutputStream();
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner byte[] buffer = new byte[8192];
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner int nr;
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner while ((nr = in.read(buffer)) > 0) {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner o.write(buffer, 0, nr);
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner }
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner o.flush();
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner o.close();
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner } finally {
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner in.close();
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner }
ef604281b397eceb0d9f67b87378b7c0b751967dTrond Norbye}
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner/* ---------------------- raw.jsp end-------------------- */
14a41f02433890d19b2f871156271e3388cd0845Jens Elkner%>