mast.jsp revision 865ea0b94260b721a2f6ec872b914d6e0b4d3e08
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass<%--
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassCDDL HEADER START
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassThe contents of this file are subject to the terms of the
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassCommon Development and Distribution License (the "License").
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassYou may not use this file except in compliance with the License.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassSee LICENSE.txt included in this distribution for the specific
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glasslanguage governing permissions and limitations under the License.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassWhen distributing Covered Code, include this CDDL HEADER in each
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassfile and include the License file at LICENSE.txt.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassIf applicable, add the following below this CDDL HEADER, with the
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassfields enclosed by brackets "[]" replaced with your own identifying
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassinformation: Portions Copyright [yyyy] [name of copyright owner]
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassCDDL HEADER END
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassCopyright 2005 Sun Microsystems, Inc. All rights reserved.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassUse is subject to license terms.
4106577eb9389768607e9d9a51f614faa6bdb8bcEric Ferraiuolo
4106577eb9389768607e9d9a51f614faa6bdb8bcEric Ferraiuoloident "%Z%%M% %I% %E% SMI"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass--%><%@ page import = "javax.servlet.*,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassjava.lang.*,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassjavax.servlet.http.*,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassjava.util.*,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassjava.io.*,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassorg.opensolaris.opengrok.index.*,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassorg.opensolaris.opengrok.configuration.*
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass%><%@ page session="false" %><%@ page errorPage="error.jsp"%><%
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassString context = request.getContextPath();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassString servlet = request.getServletPath();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassString reqURI = request.getRequestURI();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassString path = request.getPathInfo();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassif (path == null) path = "";
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassRuntimeEnvironment environment = RuntimeEnvironment.getInstance();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassenvironment.register();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassString rawSource = environment.getSourceRootPath();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassString resourcePath = rawSource + path;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassFile resourceFile = new File(resourcePath);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassresourcePath = resourceFile.getAbsolutePath();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassboolean valid = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassboolean noHistory = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassboolean noAnnotation = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassboolean annotate = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassString basename = resourceFile.getName();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassboolean isDir = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassEftarFileReader ef = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassString parent = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassString parentBasename = resourceFile.getParentFile().getName();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassIgnoredNames ignoredNames = environment.getIgnoredNames();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassif(resourcePath.length() < rawSource.length()
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass|| ignoredNames.ignore(path)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass|| ignoredNames.ignore(parentBasename)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass|| !resourcePath.startsWith(rawSource)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass valid = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass response.sendError(404);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass} else if (!resourceFile.canRead() && resourcePath.startsWith(rawSource)) {
c0d83403b13f02bc6fdcf62a712de150a7f974e2Dav Glass String newPath = rawSource + "/on/" + path;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass File newFile = new File(newPath);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(newFile.canRead()) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(newFile.isDirectory() && servlet.startsWith("/xref") && !path.endsWith("/")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass response.sendRedirect(context + servlet + "/on" + path + "/");
c0d83403b13f02bc6fdcf62a712de150a7f974e2Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass response.sendRedirect(context + servlet + "/on" + path);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass valid = false;
c0d83403b13f02bc6fdcf62a712de150a7f974e2Dav Glass response.sendError(404);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass} else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass valid = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass path = resourcePath.substring(rawSource.length());
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if ("".equals(path)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass path = "/";
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (File.separatorChar == '\\') {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass path = path.replace('\\','/');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass isDir = resourceFile.isDirectory();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (isDir && !servlet.startsWith("/xref") && !servlet.startsWith("/hist")) { //if it is an existing directory perhaps people wanted directory xref
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(!reqURI.endsWith("/")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass response.sendRedirect(context + "/xref" + path + "/");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass response.sendRedirect(context + "/xref" + path);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } if (isDir && !reqURI.endsWith("/")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass response.sendRedirect(context + servlet + path +"/");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass long flast = resourceFile.lastModified();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass String dtag = "";
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (request.getDateHeader("If-Modified-Since") >= flast ) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass valid = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass response.setDateHeader("Last-Modified", flast);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass int lastSlash = path.lastIndexOf('/');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parent = (lastSlash != -1) ? path.substring(0, lastSlash) : "";
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass int pLastSlash = parent.lastIndexOf('/');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parentBasename = pLastSlash != -1 ? parent.substring(pLastSlash+1) : parent;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass noHistory = !(isDir || HistoryGuru.getInstance().hasHistory(rawSource + "/" + parent));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass noAnnotation = isDir ||
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass !HistoryGuru.getInstance().hasAnnotation(resourceFile);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass annotate = !noAnnotation &&
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Boolean.parseBoolean(request.getParameter("a"));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass try{
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ef = new EftarFileReader(environment.getDataRootPath() + "/index/dtags.eftar");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass dtag = ef.get(path);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(servlet.startsWith("/xr")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(ef != null) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass try {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ef.close();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } catch (IOException e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } finally {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ef = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } catch (Exception e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass dtag = "";
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass%><?xml version="1.0" encoding="iso-8859-1"?>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass<head>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass <meta name="robots" content="noindex,nofollow">
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass <title>Cross Reference: <%=path%></title>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass <link rel="icon" href="<%=context%>/img/icon.png" type="image/png"/>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass <link rel="stylesheet" type="text/css" href="<%=context%>/style.css"/>
<link rel="stylesheet" type="text/css" href="<%=context%>/print.css" media="print" />
<link rel="alternate stylesheet" type="text/css" media="all" title="Paper White" href="<%=context%>/print.css"/>
</head>
<body><div id="page">
<form action="<%=context%>/search">
<div id="header">
<%= getServletContext().getInitParameter("HEADER") %>
<div id="pagetitle"><b id="filename">Cross Reference: <%=path%></b><br/><%=dtag%></div>
</div>
<div id="Masthead"><tt><a href="<%=context%>/xref/">xref</a>: <%=org.opensolaris.opengrok.web.Util.breadcrumbPath(context + "/xref", path)%></tt></div>
<div id="bar"><a href="<%=context%>" id="home">Home</a> |
<%
if ((!isDir && noHistory) || servlet.startsWith("/hi")) {
%> <span class="c" id="history">History</span> |<%
} else {
%><a id="history" href="<%=context%>/history<%=path%>">History</a> |<%
}
if (noAnnotation || annotate) {
%> <span class="c" id="annotate">Annotate</span> |<%
} else {
String rev = request.getParameter("r");
if (rev == null) {
rev = "";
} else if (rev.length() > 0) {
rev = "&r=" + rev;
}
%> <a id="annotate" href="<%=context%>/xref<%=path%>?a=true<%=rev%>">Annotate</a> |<%
}
if (!isDir) {
String rev = request.getParameter("r");
if (rev == null || rev.equals("")) {
%> <a id="download" href="<%=context%>/raw<%=path%>">Download</a> | <%
} else {
%> <a id="download" href="<%=context%>/raw<%=path%>?r=<%=rev%>">Download</a> | <%
}
}
%> <input id="search" name="q" class="q"/>
<input type="submit" value="Search" class="submit"/><%
if(isDir) {
if(path.length() > 0) {
%><input type="checkbox" name="path" value="<%=path%>"/> only in <b><%=path%></b><%
}
} else {
%><input type="checkbox" name="path" value="<%=parent%>"/> only in <b><%=parentBasename%></b><%
}
%></div></form><%
} // date check
} // not a directory redirect
}
%>