raw.jsp revision eee3266b4179dae85826d6139b3b540838ea955a
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<%--
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews$Id$
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCDDL HEADER START
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinThe contents of this file are subject to the terms of the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCommon Development and Distribution License (the "License").
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinYou may not use this file except in compliance with the License.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinSee LICENSE.txt included in this distribution for the specific
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinlanguage governing permissions and limitations under the License.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinWhen distributing Covered Code, include this CDDL HEADER in each
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfile and include the License file at LICENSE.txt.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinIf applicable, add the following below this CDDL HEADER, with the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfields enclosed by brackets "[]" replaced with your own identifying
47012ae6dbf18a2503d7b33c1c9583dc38625cb7Mark Andrewsinformation: Portions Copyright [yyyy] [name of copyright owner]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCDDL HEADER END
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCopyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
cedb0bd0c1e3c461b7e479a16d3adfd5b150f1f4Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinPortions Copyright 2011 Jens Elkner.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein--%><%@page import="
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.io.File,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.io.FileInputStream,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.io.FileNotFoundException,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.io.InputStream,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.io.OutputStream,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.opensolaris.opengrok.configuration.RuntimeEnvironment,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.opensolaris.opengrok.history.HistoryGuru,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.opensolaris.opengrok.web.PageConfig,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.opensolaris.opengrok.web.Prefix"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%><%@
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeininclude file="pageconfig.jspf"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%><%
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein/* ---------------------- raw.jsp start --------------------- */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cfg = PageConfig.get(request);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein String redir = cfg.canProcess();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (redir == null || redir.length() > 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (redir != null) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein response.sendRedirect(redir);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein response.sendError(HttpServletResponse.SC_NOT_FOUND);
b15d6bddeb80c985f42986dba362c2aaf8803462Mark Andrews }
b15d6bddeb80c985f42986dba362c2aaf8803462Mark Andrews return;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
b15d6bddeb80c985f42986dba362c2aaf8803462Mark Andrews
b15d6bddeb80c985f42986dba362c2aaf8803462Mark Andrews File f = cfg.getResourceFile();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein String revision = cfg.getRequestedRevision();
b15d6bddeb80c985f42986dba362c2aaf8803462Mark Andrews if (revision.length() == 0) {
47012ae6dbf18a2503d7b33c1c9583dc38625cb7Mark Andrews revision = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein InputStream in = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein try {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (revision != null) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein in = HistoryGuru.getInstance().getRevision(f.getParent(),
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews f.getName(), revision);
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein long flast = cfg.getLastModified();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (request.getDateHeader("If-Modified-Since") >= flast) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein return;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein in = new FileInputStream(f);
b15d6bddeb80c985f42986dba362c2aaf8803462Mark Andrews response.setContentLength((int) f.length());
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein response.setDateHeader("Last-Modified", f.lastModified());
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } catch (Exception e) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein response.sendError(HttpServletResponse.SC_NOT_FOUND);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein return ;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein String mimeType = getServletContext().getMimeType(f.getAbsolutePath());
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein response.setContentType(mimeType);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein try {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (cfg.getPrefix() == Prefix.DOWNLOAD_P) {
727f5b8846457a33d06f515a10a7e1aa849ddf18Andreas Gustafsson response.setHeader("content-disposition", "attachment; filename="
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce + f.getName());
8e245ec21beee31a780de9b89ba1e8bb2b9f4c9aAndreas Gustafsson } else {
727f5b8846457a33d06f515a10a7e1aa849ddf18Andreas Gustafsson response.setHeader("content-type", "text/plain");
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce }
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce OutputStream o = response.getOutputStream();
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce byte[] buffer = new byte[8192];
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce int nr;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce while ((nr = in.read(buffer)) > 0) {
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce o.write(buffer, 0, nr);
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.flush();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o.close();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } finally {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein in.close();
b15d6bddeb80c985f42986dba362c2aaf8803462Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein/* ---------------------- raw.jsp end-------------------- */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein