mast.jsp revision 112
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen<%--
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenCDDL HEADER START
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenThe contents of this file are subject to the terms of the
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenCommon Development and Distribution License (the "License").
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenYou may not use this file except in compliance with the License.
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenSee LICENSE.txt included in this distribution for the specific
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenlanguage governing permissions and limitations under the License.
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenWhen distributing Covered Code, include this CDDL HEADER in each
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenfile and include the License file at LICENSE.txt.
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenIf applicable, add the following below this CDDL HEADER, with the
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenfields enclosed by brackets "[]" replaced with your own identifying
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gunderseninformation: Portions Copyright [yyyy] [name of copyright owner]
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenCDDL HEADER END
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenCopyright 2005 Sun Microsystems, Inc. All rights reserved.
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenUse is subject to license terms.
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenident "%Z%%M% %I% %E% SMI"
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen--%><%@ page import = "javax.servlet.*,
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenjava.lang.*,
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenjavax.servlet.http.*,
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenjava.util.*,
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenjava.io.*,
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenorg.opensolaris.opengrok.index.*,
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenorg.opensolaris.opengrok.configuration.*
8cd11a0f0f4ca05199e1166f6a07472b296f7455Tom Gundersen"
602cc437e8b4a3ab760b5a23fa4f3112134d9c36Tom Gundersen%><%@ page session="false" %><%@ page errorPage="error.jsp"%><%
c166a070553511e402de5ad216d3fb62b49bdacbTom GundersenString context = request.getContextPath();
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenString servlet = request.getServletPath();
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenString reqURI = request.getRequestURI();
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenString path = request.getPathInfo();
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenif (path == null) path = "";
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenRuntimeEnvironment environment = RuntimeEnvironment.getInstance();
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenenvironment.register();
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenString rawSource = environment.getSourceRootPath();
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenString resourcePath = rawSource + path;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenFile resourceFile = new File(resourcePath);
5a3eb5a77d7c491a31818c4dfdcf8fd7dcaaadb2Tom GundersenresourcePath = resourceFile.getAbsolutePath();
5a3eb5a77d7c491a31818c4dfdcf8fd7dcaaadb2Tom Gundersenboolean valid = true;
5a3eb5a77d7c491a31818c4dfdcf8fd7dcaaadb2Tom Gundersenboolean noHistory = true;
0617ffabe86a6d366252477eafbe59a888b149d4Tom Gundersenboolean noAnnotation = true;
0617ffabe86a6d366252477eafbe59a888b149d4Tom Gundersenboolean annotate = false;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom GundersenString basename = resourceFile.getName();
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersenboolean isDir = false;
8cd11a0f0f4ca05199e1166f6a07472b296f7455Tom GundersenEftarFileReader ef = null;
5a3eb5a77d7c491a31818c4dfdcf8fd7dcaaadb2Tom GundersenString parent = null;
5a3eb5a77d7c491a31818c4dfdcf8fd7dcaaadb2Tom GundersenString parentBasename = resourceFile.getParentFile().getName();
5a3eb5a77d7c491a31818c4dfdcf8fd7dcaaadb2Tom GundersenIgnoredNames ignoredNames = environment.getIgnoredNames();
5a3eb5a77d7c491a31818c4dfdcf8fd7dcaaadb2Tom Gundersen
5a3eb5a77d7c491a31818c4dfdcf8fd7dcaaadb2Tom Gundersenif(resourcePath.length() < rawSource.length()
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen|| ignoredNames.ignore(path)
c166a070553511e402de5ad216d3fb62b49bdacbTom Gundersen|| ignoredNames.ignore(parentBasename)
c166a070553511e402de5ad216d3fb62b49bdacbTom Gundersen|| !resourcePath.startsWith(rawSource)) {
c166a070553511e402de5ad216d3fb62b49bdacbTom Gundersen valid = false;
0617ffabe86a6d366252477eafbe59a888b149d4Tom Gundersen response.sendError(404);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen return;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen} else if (!resourceFile.canRead() && resourcePath.startsWith(rawSource)) {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen String newPath = rawSource + "/on/" + path;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen File newFile = new File(newPath);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen if(newFile.canRead()) {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen if(newFile.isDirectory() && servlet.startsWith("/xref") && !path.endsWith("/")) {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen response.sendRedirect(context + servlet + "/on" + path + "/");
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen } else {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen response.sendRedirect(context + servlet + "/on" + path);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen }
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen }
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen valid = false;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen response.sendError(404);
0617ffabe86a6d366252477eafbe59a888b149d4Tom Gundersen return;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen} else {
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen valid = true;
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen path = resourcePath.substring(rawSource.length());
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen if ("".equals(path)) {
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen path = "/";
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen }
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen if (File.separatorChar == '\\') {
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen path = path.replace('\\','/');
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen }
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen isDir = resourceFile.isDirectory();
0617ffabe86a6d366252477eafbe59a888b149d4Tom Gundersen if (isDir && !servlet.startsWith("/xref") && !servlet.startsWith("/hist")) { //if it is an existing directory perhaps people wanted directory xref
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen if(!reqURI.endsWith("/")) {
c166a070553511e402de5ad216d3fb62b49bdacbTom Gundersen response.sendRedirect(context + "/xref" + path + "/");
c166a070553511e402de5ad216d3fb62b49bdacbTom Gundersen } else {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen response.sendRedirect(context + "/xref" + path);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen }
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen } if (isDir && !reqURI.endsWith("/")) {
aa3437a573ed2a2b2a03c9649fe11d27b40a772bTom Gundersen response.sendRedirect(context + servlet + path +"/");
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen } else {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen long flast = resourceFile.lastModified();
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen String dtag = "";
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen if (request.getDateHeader("If-Modified-Since") >= flast ) {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen valid = false;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen } else {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen response.setDateHeader("Last-Modified", flast);
aa3437a573ed2a2b2a03c9649fe11d27b40a772bTom Gundersen int lastSlash = path.lastIndexOf('/');
aa3437a573ed2a2b2a03c9649fe11d27b40a772bTom Gundersen parent = (lastSlash != -1) ? path.substring(0, lastSlash) : "";
2672953bde548f3648eb6a24dbda415604262ceaTom Gundersen int pLastSlash = parent.lastIndexOf('/');
aa3437a573ed2a2b2a03c9649fe11d27b40a772bTom Gundersen parentBasename = pLastSlash != -1 ? parent.substring(pLastSlash+1) : parent;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen noHistory = !(isDir || HistoryGuru.getInstance().hasHistory(rawSource + "/" + parent));
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen noAnnotation = isDir ||
2672953bde548f3648eb6a24dbda415604262ceaTom Gundersen !HistoryGuru.getInstance().hasAnnotation(resourceFile);
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen annotate = !noAnnotation &&
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen Boolean.parseBoolean(request.getParameter("a"));
aa3437a573ed2a2b2a03c9649fe11d27b40a772bTom Gundersen try{
aa3437a573ed2a2b2a03c9649fe11d27b40a772bTom Gundersen ef = new EftarFileReader(environment.getDataRootPath() + "/index/dtags.eftar");
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen dtag = ef.get(path);
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen if(servlet.startsWith("/xr")) {
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen } else {
aa3437a573ed2a2b2a03c9649fe11d27b40a772bTom Gundersen if(ef != null) {
aa3437a573ed2a2b2a03c9649fe11d27b40a772bTom Gundersen try {
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen ef.close();
02b59d57e0c08231645120077f651151f5bb2babTom Gundersen } catch (IOException e) {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen } finally {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen ef = null;
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen }
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen }
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen }
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen } catch (Exception e) {
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen dtag = "";
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen }
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen%><?xml version="1.0" encoding="iso-8859-1"?>
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
f579559b3a14c1f1ef96c372e7626c4733e6ef7dTom Gundersen<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen<head>
ef1ba6065c6ccea94d4ee867f36df7bbc53a5224Tom Gundersen <meta name="robots" content="noindex,nofollow">
ef1ba6065c6ccea94d4ee867f36df7bbc53a5224Tom Gundersen <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
ef1ba6065c6ccea94d4ee867f36df7bbc53a5224Tom Gundersen <title>Cross Reference: <%=path%></title>
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek <link rel="icon" href="<%=context%>/img/icon.png" type="image/png"/>
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen <link rel="stylesheet" type="text/css" href="<%=context%>/style.css"/>
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen <link rel="stylesheet" type="text/css" href="<%=context%>/print.css" media="print" />
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen <link rel="alternate stylesheet" type="text/css" media="all" title="Paper White" href="<%=context%>/print.css"/>
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen</head>
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen<body><div id="page">
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen<form action="<%=context%>/search">
ef1ba6065c6ccea94d4ee867f36df7bbc53a5224Tom Gundersen <div id="header">
ef1ba6065c6ccea94d4ee867f36df7bbc53a5224Tom Gundersen <%= getServletContext().getInitParameter("HEADER") %>
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen <div id="pagetitle"><b id="filename">Cross Reference: <%=path%></b><br/><%=dtag%></div>
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek </div>
449f75549247b3b7b073a788f0f099ce6b7c5378Tom Gundersen<div id="Masthead"><tt><a href="<%=context%>/xref/">xref</a>: <%=org.opensolaris.opengrok.web.Util.breadcrumbPath(context + "/xref", path)%></tt></div>
ef1ba6065c6ccea94d4ee867f36df7bbc53a5224Tom Gundersen<div id="bar"><a href="<%=context%>" id="home">Home</a> |
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen<%
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersenif ((!isDir && noHistory) || servlet.startsWith("/hi")) {
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen %> <span class="c" id="history">History</span> |<%
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen} else {
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen %><a id="history" href="<%=context%>/history<%=path%>">History</a> |<%
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen}
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersenif (noAnnotation || annotate) {
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen%> <span class="c" id="annotate">Annotate</span> |<%
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen} else {
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen String rev = request.getParameter("r");
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen if (rev == null) {
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen rev = "";
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen } else if (rev.length() > 0) {
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen rev = "&r=" + rev;
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen }
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen%> <a id="annotate" href="<%=context%>/xref<%=path%>?a=true<%=rev%>">Annotate</a> |<%
c166a070553511e402de5ad216d3fb62b49bdacbTom Gundersen}
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek if (!isDir) {
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen String rev = request.getParameter("r");
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen if (rev == null || rev.equals("")) {
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen%> <a id="download" href="<%=context%>/raw<%=path%>">Download</a> | <%
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen } else {
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek%> <a id="download" href="<%=context%>/raw<%=path%>?r=<%=rev%>">Download</a> | <%
dd3efc0993b6e95ff04775e9125e2fc9d30fe261Tom Gundersen }
dd3efc0993b6e95ff04775e9125e2fc9d30fe261Tom Gundersen }
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen%> <input id="search" name="q" class="q"/>
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen<input type="submit" value="Search" class="submit"/><%
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersenif(isDir) {
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen if(path.length() > 0) {
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen %><input type="checkbox" name="path" value="<%=path%>"/> only in <b><%=path%></b><%
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen }
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen} else {
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen %><input type="checkbox" name="path" value="<%=parent%>"/> only in <b><%=parentBasename%></b><%
ef1ba6065c6ccea94d4ee867f36df7bbc53a5224Tom Gundersen}
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen
ef1ba6065c6ccea94d4ee867f36df7bbc53a5224Tom Gundersen%></div></form><%
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen
f5be560181d092c5f52a2b819aedcd48220f36abTom Gundersen} // date check
dd3efc0993b6e95ff04775e9125e2fc9d30fe261Tom Gundersen } // not a directory redirect
f882c247ad59776c3a7753bb963c1f8e2386cb79Tom Gundersen}
3333d748facc15f49935b6b793490ba0824976e6Zbigniew Jędrzejewski-Szmek%>
449f75549247b3b7b073a788f0f099ce6b7c5378Tom Gundersen