raw.jsp revision 14a41f02433890d19b2f871156271e3388cd0845
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney<%--
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney$Id$
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney
57944bee374767ef401f984a0136afb3822f22f7Matt SweeneyCDDL HEADER START
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney
57944bee374767ef401f984a0136afb3822f22f7Matt SweeneyThe contents of this file are subject to the terms of the
57944bee374767ef401f984a0136afb3822f22f7Matt SweeneyCommon Development and Distribution License (the "License").
57944bee374767ef401f984a0136afb3822f22f7Matt SweeneyYou may not use this file except in compliance with the License.
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney
d6ac1282b7aebe50016ff2242315c34ac60422c8Jeff ConniffSee LICENSE.txt included in this distribution for the specific
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeneylanguage governing permissions and limitations under the License.
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney
57944bee374767ef401f984a0136afb3822f22f7Matt SweeneyWhen distributing Covered Code, include this CDDL HEADER in each
ce93c9e30dd338180488beb781d0cb1b0473654aLuke Smithfile and include the License file at LICENSE.txt.
57944bee374767ef401f984a0136afb3822f22f7Matt SweeneyIf applicable, add the following below this CDDL HEADER, with the
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeneyfields enclosed by brackets "[]" replaced with your own identifying
6797a96aa17cfbc2eb9b3f90f564a29c01519324Satyen Desaiinformation: Portions Copyright [yyyy] [name of copyright owner]
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney
d3b7b73e5ca50ba0821b439d4f9a12cfaaf38870Jeff ConniffCDDL HEADER END
3dde601567dd6bab7c9f86e64a472c4d90b03cf6Derek Gathright
57944bee374767ef401f984a0136afb3822f22f7Matt SweeneyCopyright 2008 Sun Microsystems, Inc. All rights reserved.
9c46bf9bc0ac9bab8d409ae4ab6d2a2ddc4dc55bJeff ConniffUse is subject to license terms.
80ea28fae9dc032e5b99c726c41e492cd59bf49dJeff Conniff
80ea28fae9dc032e5b99c726c41e492cd59bf49dJeff ConniffPortions Copyright 2011 Jens Elkner.
9c46bf9bc0ac9bab8d409ae4ab6d2a2ddc4dc55bJeff Conniff
9c46bf9bc0ac9bab8d409ae4ab6d2a2ddc4dc55bJeff Conniff--%><%@page import="
9c46bf9bc0ac9bab8d409ae4ab6d2a2ddc4dc55bJeff Conniffjava.io.File,
80ea28fae9dc032e5b99c726c41e492cd59bf49dJeff Conniffjava.io.FileInputStream,
d909360e6d2b72521cc26a0cd458a68cb4337b66Jeff Conniffjava.io.FileNotFoundException,
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeneyjava.io.InputStream,
6340fd3eeb615e0720d218535598b6627a3d4c71Jeff Conniffjava.io.OutputStream,
433c6e4d8b64100e84f0a4d37768706d5951994fJeff Conniff
6340fd3eeb615e0720d218535598b6627a3d4c71Jeff Connifforg.opensolaris.opengrok.configuration.RuntimeEnvironment,
433c6e4d8b64100e84f0a4d37768706d5951994fJeff Connifforg.opensolaris.opengrok.history.HistoryGuru,
6340fd3eeb615e0720d218535598b6627a3d4c71Jeff Connifforg.opensolaris.opengrok.web.PageConfig"
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney%><%@
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeneyinclude file="pageconfig.jspf"
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney%><%
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney/* ---------------------- raw.jsp start --------------------- */
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney{
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney cfg = PageConfig.get(request);
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney String redir = cfg.canProcess();
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney if (redir == null || redir.length() > 0) {
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney if (redir != null) {
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney response.sendRedirect(redir);
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney } else {
b4f14fb8425b05925652295a6e65a98b2448f70fJeff Conniff response.sendError(HttpServletResponse.SC_NOT_FOUND);
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney }
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney return;
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney }
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney File f = cfg.getResourceFile();
07ad9ab2be0e01d9fe09926c37a65a867aa6f401Jeff Conniff String revision = cfg.getRequestedRevision();
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney if (revision.length() == 0) {
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney revision = null;
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney }
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney InputStream in = null;
433c6e4d8b64100e84f0a4d37768706d5951994fJeff Conniff try {
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney if (revision != null) {
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney in = HistoryGuru.getInstance().getRevision(f.getParent(),
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney f.getName(), revision.substring(2));
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney } else {
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney long flast = cfg.getLastModified();
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney if (request.getDateHeader("If-Modified-Since") >= flast) {
dba22eabcfca7e9fe626abbad1494c3a0200dde0Matt Sweeney response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
dba22eabcfca7e9fe626abbad1494c3a0200dde0Matt Sweeney return;
dba22eabcfca7e9fe626abbad1494c3a0200dde0Matt Sweeney }
dba22eabcfca7e9fe626abbad1494c3a0200dde0Matt Sweeney in = new FileInputStream(f);
dba22eabcfca7e9fe626abbad1494c3a0200dde0Matt Sweeney response.setContentLength((int) f.length());
ce93c9e30dd338180488beb781d0cb1b0473654aLuke Smith response.setDateHeader("Last-Modified", f.lastModified());
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney }
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney } catch (Exception e) {
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney response.sendError(HttpServletResponse.SC_NOT_FOUND);
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney return ;
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney }
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney String mimeType = getServletContext().getMimeType(f.getAbsolutePath());
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney response.setContentType(mimeType);
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney
ce93c9e30dd338180488beb781d0cb1b0473654aLuke Smith try {
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney response.setHeader("content-disposition", "attachment; filename="
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney + f.getName());
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney OutputStream o = response.getOutputStream();
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney byte[] buffer = new byte[8192];
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney int nr;
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney while ((nr = in.read(buffer)) > 0) {
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney o.write(buffer, 0, nr);
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney }
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney o.flush();
d40e32ef6c95cddf35e9cc056dfdd259ba314fa2Jeff Conniff o.close();
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney } finally {
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney in.close();
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney }
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney}
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney/* ---------------------- raw.jsp end-------------------- */
57944bee374767ef401f984a0136afb3822f22f7Matt Sweeney%>