mast.jsp revision c23e82b612acd5e947c164114377578116f6d298
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch<%--
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo SirainenCDDL HEADER START
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo SirainenThe contents of this file are subject to the terms of the
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo SirainenCommon Development and Distribution License (the "License").
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenYou may not use this file except in compliance with the License.
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen
f9b6b5e9c4e18682321959883c888035a56b6be9Timo SirainenSee LICENSE.txt included in this distribution for the specific
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainenlanguage governing permissions and limitations under the License.
1f696b6f364516a2d79f946ca88149bafdc9d5adTimo Sirainen
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo SirainenWhen distributing Covered Code, include this CDDL HEADER in each
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainenfile and include the License file at LICENSE.txt.
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo SirainenIf applicable, add the following below this CDDL HEADER, with the
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainenfields enclosed by brackets "[]" replaced with your own identifying
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Siraineninformation: Portions Copyright [yyyy] [name of copyright owner]
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo SirainenCDDL HEADER END
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo SirainenCopyright 2005 Sun Microsystems, Inc. All rights reserved.
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo SirainenUse is subject to license terms.
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainenident "%Z%%M% %I% %E% SMI"
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen--%><%@ page import = "javax.servlet.*,
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainenjava.lang.*,
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainenjavax.servlet.http.*,
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainenjava.util.*,
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainenjava.io.*,
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainenjava.text.*,
b367011da1a2ba3e9113dfbc601aaa4b6b04317dTimo Sirainenorg.opensolaris.opengrok.index.*
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen"
b367011da1a2ba3e9113dfbc601aaa4b6b04317dTimo Sirainen%><%@ page session="false" %><%@ page errorPage="error.jsp"%><%
3281669db44d09a087a203201248abbc81b3cc1aTimo SirainenString context = request.getContextPath();
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenString servlet = request.getServletPath();
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenString reqURI = request.getRequestURI();
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenString path = request.getPathInfo();
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainenif (path == null) path = "";
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenString rawSource = getServletContext().getInitParameter("SRC_ROOT");
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenString resourcePath = rawSource + path;
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenFile resourceFile = new File(resourcePath);
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenresourcePath = resourceFile.getAbsolutePath();
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainenboolean valid;
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainenboolean noHistory = true;
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo SirainenString basename = resourceFile.getName();
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainenif("/".equals(path)) {
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen basename = "Cross Reference";
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen}
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainenboolean isDir = false;
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenEftarFileReader ef = null;
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenString parent = null;
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo SirainenString parentBasename = resourceFile.getParentFile().getName();
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainenif(resourcePath.length() < rawSource.length()
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen|| IgnoredNames.ignore.contains(basename)
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen|| IgnoredNames.ignore.contains(parentBasename)
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen|| !resourcePath.startsWith(rawSource)) {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen valid = false;
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen response.sendError(404);
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen} else if (!resourceFile.canRead() && resourcePath.startsWith(rawSource)) {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen String newPath = rawSource + "/on/" + path;
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen File newFile = new File(newPath);
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen if(newFile.canRead()) {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen if(newFile.isDirectory() && servlet.startsWith("/xref") && !path.endsWith("/")) {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen response.sendRedirect(context + servlet + "/on" + path + "/");
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen } else {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen response.sendRedirect(context + servlet + "/on" + path);
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen }
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen }
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen valid = false;
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen response.sendError(404);
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen} else {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen valid = true;
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen path = resourcePath.substring(rawSource.length());
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen if (File.separatorChar == '\\') {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen path = path.replace('\\','/');
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen }
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen isDir = resourceFile.isDirectory();
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen if (isDir && !servlet.startsWith("/xref") && !servlet.startsWith("/hist")) { //if it is an existing directory perhaps people wanted directory xref
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen if(!reqURI.endsWith("/")) {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen response.sendRedirect(context + "/xref" + path + "/");
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen } else {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen response.sendRedirect(context + "/xref" + path);
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen }
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen } if (isDir && !reqURI.endsWith("/")) {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen response.sendRedirect(context + servlet + path +"/");
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen } else {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen long flast = resourceFile.lastModified();
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen String dtag = "";
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen if (request.getDateHeader("If-Modified-Since") >= flast ) {
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen valid = false;
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen } else {
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen response.setDateHeader("Last-Modified", flast);
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen int lastSlash = path.lastIndexOf('/');
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen parent = (lastSlash != -1) ? path.substring(0, lastSlash) : "";
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen int pLastSlash = parent.lastIndexOf('/');
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen parentBasename = pLastSlash != -1 ? parent.substring(pLastSlash+1) : parent;
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen noHistory = !(isDir || HistoryGuru.getInstance().hasHistory(rawSource + "/" + parent));
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen try{
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen ef = new EftarFileReader(getServletContext().getInitParameter("DATA_ROOT") + "/index/dtags.eftar");
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen dtag = ef.get(path);
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen if(servlet.startsWith("/xr")) {
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen } else {
4c05697a4f3958c836e23e1eff5b4b7c49ef6617Timo Sirainen if(ef != null) {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen try {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen ef.close();
4c05697a4f3958c836e23e1eff5b4b7c49ef6617Timo Sirainen } catch (IOException e) {
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen } finally {
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen ef = null;
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen }
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen }
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen }
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen } catch (Exception e) {
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen dtag = "";
fe91058fafc4da453161aecde6f2d48a8fae4a96Timo Sirainen }
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen%><?xml version="1.0" encoding="iso-8859-1"?>
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen<head>
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen <title><%=basename%></title>
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen <link rel="icon" href="<%=context%>/img/icon.png" type="image/png"/>
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen <link rel="stylesheet" type="text/css" href="<%=context%>/style.css"/>
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen <link rel="stylesheet" type="text/css" href="<%=context%>/print.css" media="print" />
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen <link rel="alternate stylesheet" type="text/css" media="all" title="Paper White" href="<%=context%>/print.css"/>
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen</head>
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen<body><div id="page">
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen<form action="<%=context%>/search">
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen <div id="header">
76d4ff1c1b31a1a09f6cbfe613a8d0efe62cbfd2Timo Sirainen <%= getServletContext().getInitParameter("HEADER") %>
640c1f9731a2e0368546bf675110ced42a589a04Timo Sirainen <div id="pagetitle"><b id="filename"><%=basename%><%= isDir ? "/" : "" %></b><br/><%=dtag%></div>
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen </div>
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen<div id="Masthead"><tt><a href="<%=context%>/xref/">xref</a>: <%=org.opensolaris.opengrok.web.Util.breadcrumbPath(context + "/xref", path)%><%= isDir ? "/" : "" %></tt></div>
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen<div id="bar"><a href="<%=context%>" id="home">Home</a> |
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen<%
204ee6ed414f5e4eeb6f6c10763b55daf56f11acJosef 'Jeff' Sipek
6307d76096764e66bddc63d4a3e5a1aa19cc528fJosef 'Jeff' Sipekif ((!isDir && noHistory) || servlet.startsWith("/hi")) {
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen %> <span class="c" id="history">History</span> |<%
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen} else {
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen %><a id="history" href="<%=context%>/history<%=path%>">History</a> |<%
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen}
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen if (!isDir) {
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen %> <a id="download" href="<%=context%>/raw<%=path%>">Download</a> | <%
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen }
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen%> <input id="search" name="q" class="q"/>
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen<input type="submit" value="Search" class="submit"/><%
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainenif(isDir) {
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen if(path.length() > 0) {
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen %><input type="checkbox" name="path" value="<%=path%>"/> only in <b><%=basename%></b><%
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen }
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen} else {
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen %><input type="checkbox" name="path" value="<%=parent%>"/> only in <b><%=parentBasename%></b><%
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen}
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen%></div></form><%
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen} // date check
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen } // not a directory redirect
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen}
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen%>
f9b6b5e9c4e18682321959883c888035a56b6be9Timo Sirainen