mast.jsp revision 256
c80e152862cc3e3207dc837fde7116bd4c0e4b9dTinderbox UserCDDL HEADER START
8d1b3ceb4d491ce32572f1702f37ed585eede993Evan HuntThe contents of this file are subject to the terms of the
8d1b3ceb4d491ce32572f1702f37ed585eede993Evan HuntCommon Development and Distribution License (the "License").
d77cb075aae5595e460e3299bfc1e8ea5d42b560Evan HuntYou may not use this file except in compliance with the License.
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark AndrewsSee LICENSE.txt included in this distribution for the specific
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrewslanguage governing permissions and limitations under the License.
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark AndrewsWhen distributing Covered Code, include this CDDL HEADER in each
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrewsfile and include the License file at LICENSE.txt.
701a93f5a592e4652343e049aa495d409c3ee133Mark AndrewsIf applicable, add the following below this CDDL HEADER, with the
7ec97ae74e42ec21b354fd2d1366313b41d947d6Evan Huntfields enclosed by brackets "[]" replaced with your own identifying
701a93f5a592e4652343e049aa495d409c3ee133Mark Andrewsinformation: Portions Copyright [yyyy] [name of copyright owner]
002f1373374a0b72fc0329baa682917929bef168Tony FinchCDDL HEADER END
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark AndrewsCopyright 2005 Sun Microsystems, Inc. All rights reserved.
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark AndrewsUse is subject to license terms.
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrewsident "%Z%%M% %I% %E% SMI"
73cf0ba4e82c6baef638ecc4e31321223f841d28Mark Andrews--%><%@ page import = "javax.servlet.*,
f1740da065d4555039fe8bb53beb4153e3f94de3Mark Andrews%><%@ page session="false" %><%@ page errorPage="error.jsp"%><%
f1740da065d4555039fe8bb53beb4153e3f94de3Mark AndrewsString context = request.getContextPath();
f1740da065d4555039fe8bb53beb4153e3f94de3Mark AndrewsString servlet = request.getServletPath();
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark AndrewsString reqURI = request.getRequestURI();
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark Andrewsif (path == null) path = "";
ad309e8dfa0601d6053aaa12770a98a6940f89deEvan Hunt path = URLDecoder.decode(path, "ISO-8859-1");
ad309e8dfa0601d6053aaa12770a98a6940f89deEvan Hunt } catch (UnsupportedEncodingException e) {
fc04365d2f83f197c8a54545dd9cd4ce6a209940Mark AndrewsRuntimeEnvironment environment = RuntimeEnvironment.getInstance();
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark AndrewsString rawSource = environment.getSourceRootPath();
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark AndrewsString resourcePath = rawSource + path;
1cf118a656f5fd210787908b845362077fc507f8Evan HuntFile resourceFile = new File(resourcePath);
1cf118a656f5fd210787908b845362077fc507f8Evan Huntboolean valid = true;
1cf118a656f5fd210787908b845362077fc507f8Evan Huntboolean noHistory = true;
1cf118a656f5fd210787908b845362077fc507f8Evan Huntboolean noAnnotation = true;
1cf118a656f5fd210787908b845362077fc507f8Evan Huntboolean annotate = false;
1cf118a656f5fd210787908b845362077fc507f8Evan HuntString basename = resourceFile.getName();
1cf118a656f5fd210787908b845362077fc507f8Evan Huntboolean isDir = false;
6fb3db01acad7f5c1f4e23789fb0f2ce56cc07deMukund SivaramanEftarFileReader ef = null;
6fb3db01acad7f5c1f4e23789fb0f2ce56cc07deMukund SivaramanString parent = null;
6fb3db01acad7f5c1f4e23789fb0f2ce56cc07deMukund SivaramanString parentBasename = resourceFile.getParentFile().getName();
fd82c70695888c134287b8018296028c252d100eMukund SivaramanIgnoredNames ignoredNames = environment.getIgnoredNames();
fd82c70695888c134287b8018296028c252d100eMukund SivaramanString uriEncodedName = Util.URIEncodePath(path);
fd82c70695888c134287b8018296028c252d100eMukund Sivaramanif(resourcePath.length() < rawSource.length()
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews|| ignoredNames.ignore(parentBasename)
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews valid = false;
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews} else if (!resourceFile.canRead() && resourcePath.startsWith(rawSource)) {
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt String newPath = rawSource + "/on/" + path;
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt File newFile = new File(newPath);
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt if(newFile.isDirectory() && servlet.startsWith("/xref") && !path.endsWith("/")) {
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt response.sendRedirect(context + servlet + "/on" + path + "/");
f9c410d93711fbf312a0162f1e2d3f2a5ede69afFrancis Dupont response.sendRedirect(context + servlet + "/on" + path);
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień valid = false;
929329d2d66a7e1083c70a9c918381935bf12799Mukund Sivaraman valid = true;
929329d2d66a7e1083c70a9c918381935bf12799Mukund Sivaraman path = resourcePath.substring(rawSource.length());
929329d2d66a7e1083c70a9c918381935bf12799Mukund Sivaraman if ("".equals(path)) {
afefd754734f896bf3e0590177fff83e7cdfdf35Mark Andrews path = path.replace('\\','/');
f0353a586c2bfbae999193cb644b6bc94c7944d8Mark Andrews if (isDir && !servlet.startsWith("/xref") && !servlet.startsWith("/hist")) { //if it is an existing directory perhaps people wanted directory xref
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt response.sendRedirect(context + "/xref" + path + "/");
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt response.sendRedirect(context + "/xref" + path);
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt } if (isDir && !reqURI.endsWith("/")) {
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt response.sendRedirect(context + servlet + path +"/");
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt String dtag = "";
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews if (request.getDateHeader("If-Modified-Since") >= flast ) {
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews valid = false;
adfe58e8e5cd1890585e92b67f1fd01989a1fa7dMark Andrews response.setDateHeader("Last-Modified", flast);
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews int lastSlash = path.lastIndexOf('/');
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews parent = (lastSlash != -1) ? path.substring(0, lastSlash) : "";
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews int pLastSlash = parent.lastIndexOf('/');
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews parentBasename = pLastSlash != -1 ? parent.substring(pLastSlash+1) : parent;
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews noHistory = !HistoryGuru.getInstance().hasHistory(resourceFile);
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews noAnnotation = isDir ||
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews !HistoryGuru.getInstance().hasAnnotation(resourceFile);
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews annotate = !noAnnotation &&
c0a2210466dec0cc81ebf2ffbe21693b57b9c29cMark Andrews Boolean.parseBoolean(request.getParameter("a"));
c0a2210466dec0cc81ebf2ffbe21693b57b9c29cMark Andrews ef = new EftarFileReader(environment.getDataRootPath() + "/index/dtags.eftar");
534057c9f91a3eb6e0541f3526459c716239b337Mark Andrews dtag = ef.get(path);
0f14b041328c062b1fa391887376388dfc8b2fe5Mark Andrews if(ef != null) {
0f14b041328c062b1fa391887376388dfc8b2fe5Mark Andrews } catch (IOException e) {
2d82ed9456e72dc4373bea19d63411afe1c48962Mark Andrews } catch (Exception e) {
a5a1cbece45e6ca68aafe3b9b995eac6b0f45dd2Mark Andrews String pageTitle="Cross Reference: " + path;
0d6328ce5f6b799f8e7c6cbbb3b965cf29bfb7baMark Andrews%><%@ include file="httpheader.jspf" %>
0d6328ce5f6b799f8e7c6cbbb3b965cf29bfb7baMark Andrews<body><div id="page">
e01ef6f01c7e8f80122cd80a2e011425a0135489Mark Andrews<form action="<%=context%>/search">
677f507de7c546c187c1505c48bc7b440545485cMark Andrews <div id="header"><%@ include file="pageheader.jspf" %>
677f507de7c546c187c1505c48bc7b440545485cMark Andrews <div id="pagetitle"><b id="filename">Cross Reference: <%=basename%></b><br/><%=dtag%></div>
124cc0660c7eff8021c2422fb47441e9ca08b3f9Tinderbox User<div id="Masthead"><tt><a href="<%=context%>/xref/">xref</a>: <%=org.opensolaris.opengrok.web.Util.breadcrumbPath(context + "/xref", path)%></tt></div>
e01ef6f01c7e8f80122cd80a2e011425a0135489Mark Andrews<div id="bar"><a href="<%=context%>" id="home">Home</a> |
677f507de7c546c187c1505c48bc7b440545485cMark Andrewsif (noHistory || servlet.startsWith("/hi")) {
677f507de7c546c187c1505c48bc7b440545485cMark Andrews %> <span class="c" id="history">History</span> |<%
677f507de7c546c187c1505c48bc7b440545485cMark Andrews %><a id="history" href="<%=context%>/history<%=path%>">History</a> |<%
bf459d24a117ae2c54c37016430b41cd6d73491cMark Andrewsif (noAnnotation) {
bf459d24a117ae2c54c37016430b41cd6d73491cMark Andrews%> <span class="c" id="annotate">Annotate</span> |<%
677f507de7c546c187c1505c48bc7b440545485cMark Andrews String rev = request.getParameter("r");
677f507de7c546c187c1505c48bc7b440545485cMark Andrews if (rev == null) {
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt } else if (rev.length() > 0) {
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt rev = "&r=" + rev;
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt if (Boolean.parseBoolean(request.getParameter("a"))) {
81e3e3084980afcd61416f572c6e72d38a3808abMichał Kępień %> <span id="toggle-annotate-by-javascript" style="display: none">
81e3e3084980afcd61416f572c6e72d38a3808abMichał Kępień<a href="#" onClick="javascript:toggle_annotations(); return false;">Annotate</a>
81e3e3084980afcd61416f572c6e72d38a3808abMichał Kępień<span id="toggle-annotate">
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews<a href="<%=context%>/xref<%=path%><%
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews %>?<%=rev%><%
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews} %>">Annotate</a></span>
75505befa93c993aa5d2df24a2b64eac0c34cbffMark Andrewsvar toggle_js = document.getElementById('toggle-annotate-by-javascript');
75505befa93c993aa5d2df24a2b64eac0c34cbffMark Andrewsvar toggle_ss = document.getElementById('toggle-annotate');
39d5523a8afc73cbdb4fa426de2ce071267a5d6fMark Andrews %> <a href="<%=context%>/xref<%=path%>?a=true<%=rev%>">Annotate</a><%
1f4a3c7088594d1b64cd734eb69e1fd023fde8bfMichał Kępień if (!isDir) {
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews String rev = request.getParameter("r");
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews if (rev == null || rev.equals("")) {
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews%> <a id="download" href="<%=context%>/raw<%=path%>">Download</a> | <%
35aae5884f410180706a89a9715bf9a85eeeb4b7Michał Kępień%> <a id="download" href="<%=context%>/raw<%=path%>?r=<%=rev%>">Download</a> | <%
57b1d64d9ae12d56973716e96f9743a00d47af4aMichał Kępień%> <input id="search" name="q" class="q"/>
2d517e233ff3b3fcd272eb5b2e2d3db6d31a1681Michał Kępień<input type="submit" value="Search" class="submit"/><%
09c3efda414314d7edcfb2aed9463fb935fc95a6Mark Andrews %><input type="checkbox" name="path" value="<%=path%>"/> only in <b><%=path%></b><%
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews %><input type="checkbox" name="path" value="<%=parent%>"/> only in <b><%=parentBasename%></b><%
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews%></div></form><%
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews} // date check
09c3efda414314d7edcfb2aed9463fb935fc95a6Mark Andrews } // not a directory redirect