raw.jsp revision d63d30c9cdb0ec554dad28004df28fe562daa23c
490da89281b7ee019c87406fb8ce7359aff0932cEugen Kuksa<%--
490da89281b7ee019c87406fb8ce7359aff0932cEugen KuksaCDDL HEADER START
490da89281b7ee019c87406fb8ce7359aff0932cEugen Kuksa
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen KuksaThe contents of this file are subject to the terms of the
68ff70f830e958de6693000b9652c9aa8cff97e7Eugen KuksaCommon Development and Distribution License (the "License").
68ff70f830e958de6693000b9652c9aa8cff97e7Eugen KuksaYou may not use this file except in compliance with the License.
68ff70f830e958de6693000b9652c9aa8cff97e7Eugen Kuksa
4de867f5bf046eb83029341a4b6520c7cac42274Eugen KuksaSee LICENSE.txt included in this distribution for the specific
68ff70f830e958de6693000b9652c9aa8cff97e7Eugen Kuksalanguage governing permissions and limitations under the License.
68ff70f830e958de6693000b9652c9aa8cff97e7Eugen Kuksa
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen KuksaWhen distributing Covered Code, include this CDDL HEADER in each
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen Kuksafile and include the License file at LICENSE.txt.
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen KuksaIf applicable, add the following below this CDDL HEADER, with the
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen Kuksafields enclosed by brackets "[]" replaced with your own identifying
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen Kuksainformation: Portions Copyright [yyyy] [name of copyright owner]
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen Kuksa
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen KuksaCDDL HEADER END
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen Kuksa
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen KuksaCopyright 2008 Sun Microsystems, Inc. All rights reserved.
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen KuksaUse is subject to license terms.
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen Kuksa--%><%@page import="java.io.File,
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen Kuksajava.io.InputStream,
68ff70f830e958de6693000b9652c9aa8cff97e7Eugen Kuksajava.io.OutputStream,
68ff70f830e958de6693000b9652c9aa8cff97e7Eugen Kuksajava.io.FileInputStream,
68ff70f830e958de6693000b9652c9aa8cff97e7Eugen Kuksajava.io.FileNotFoundException,
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen Kuksaorg.opensolaris.opengrok.configuration.RuntimeEnvironment,
9dd500e3acdc343dbefcaf88b7663db25be0ef46Eugen Kuksaorg.opensolaris.opengrok.history.HistoryGuru"%><%
490da89281b7ee019c87406fb8ce7359aff0932cEugen Kuksa
{
int errorCode = RuntimeEnvironment.getInstance().getServletAccessController().canAccess(request);
if (errorCode != response.SC_OK) {
response.sendError(errorCode);
return;
}
}
String path = request.getPathInfo();
if (path == null) {
path = "";
}
RuntimeEnvironment env = RuntimeEnvironment.getInstance();
File file = new File(env.getSourceRootPath(), path);
try {
path = env.getPathRelativeToSourceRoot(file, 0);
} catch (FileNotFoundException e) {
response.sendError(response.SC_NOT_FOUND);
return;
}
{
int errorCode = RuntimeEnvironment.getInstance().getServletAccessController().canAccess(request, path);
if (errorCode != response.SC_OK) {
response.sendError(errorCode);
return;
}
}
if (!file.exists() || !file.canRead() || RuntimeEnvironment.getInstance().getIgnoredNames().ignore(file)) {
response.sendError(response.SC_NOT_FOUND);
return;
} else if (file.isDirectory()) {
response.sendError(response.SC_NOT_FOUND, "Can't download a directory");
return;
}
String mimeType = getServletContext().getMimeType(file.getAbsolutePath());
response.setContentType(mimeType);
String revision = request.getParameter("r");
if (revision != null && revision.length() == 0) {
revision = null;
}
InputStream in = null;
if (revision != null) {
try{
in = HistoryGuru.getInstance().getRevision(file.getParent(), file.getName(), revision);
} catch (Exception e) {
response.sendError(404, "Revision not found");
return ;
}
} else {
response.setContentLength((int)file.length());
response.setDateHeader("Last-Modified", file.lastModified());
in = new FileInputStream(file);
}
try {
response.setHeader("content-disposition", "attachment; filename=" + file.getName());
OutputStream o = response.getOutputStream();
byte[] buffer = new byte[8192];
int nr;
while ((nr = in.read(buffer)) > 0) {
o.write(buffer, 0, nr);
}
o.flush();
o.close();
} finally {
in.close();
}
%>