mast.jsp revision b3ead6812ab6558fee305853599021bd6901d90a
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 Andrews<%@ page import = "javax.servlet.*,
f1740da065d4555039fe8bb53beb4153e3f94de3Mark Andrews<%@ page session="false" %><%@ page errorPage="error.jsp"%><%
f1740da065d4555039fe8bb53beb4153e3f94de3Mark AndrewsString context = request.getContextPath();
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark AndrewsString servlet = request.getServletPath();
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark AndrewsString reqURI = request.getRequestURI();
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark Andrewsif (path == null) path = "";
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark AndrewsRuntimeEnvironment environment = RuntimeEnvironment.getInstance();
635e4351b04fd61ca6d853bdac6268c090b55129Mark AndrewsString rawSource = environment.getSourceRootPath();
635e4351b04fd61ca6d853bdac6268c090b55129Mark AndrewsString resourcePath = rawSource + path;
fc04365d2f83f197c8a54545dd9cd4ce6a209940Mark AndrewsFile resourceFile = new File(resourcePath);
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark Andrewsboolean valid = true;
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark Andrewsboolean noHistory = true;
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark Andrewsboolean noAnnotation = true;
1cf118a656f5fd210787908b845362077fc507f8Evan Huntboolean annotate = false;
1cf118a656f5fd210787908b845362077fc507f8Evan HuntString basename = resourceFile.getName();
1cf118a656f5fd210787908b845362077fc507f8Evan Huntboolean isDir = false;
1cf118a656f5fd210787908b845362077fc507f8Evan HuntEftarFileReader ef = null;
1cf118a656f5fd210787908b845362077fc507f8Evan HuntString parent = null;
1cf118a656f5fd210787908b845362077fc507f8Evan HuntString parentBasename = resourceFile.getParentFile().getName();
1cf118a656f5fd210787908b845362077fc507f8Evan HuntIgnoredNames ignoredNames = environment.getIgnoredNames();
1cf118a656f5fd210787908b845362077fc507f8Evan HuntString uriEncodedName = Util.URIEncodePath(path);
6fb3db01acad7f5c1f4e23789fb0f2ce56cc07deMukund Sivaramanif(resourcePath.length() < rawSource.length()
fd82c70695888c134287b8018296028c252d100eMukund Sivaraman|| ignoredNames.ignore(parentBasename)
fd82c70695888c134287b8018296028c252d100eMukund Sivaraman valid = false;
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews} else if (!resourceFile.canRead() && resourcePath.startsWith(rawSource)) {
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews String newPath = rawSource + "/on/" + path;
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews File newFile = new File(newPath);
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews if(newFile.isDirectory() && servlet.startsWith("/xref") && !path.endsWith("/")) {
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews response.sendRedirect(context + servlet + "/on" + path + "/");
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt response.sendRedirect(context + servlet + "/on" + path);
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt valid = false;
f9c410d93711fbf312a0162f1e2d3f2a5ede69afFrancis Dupont valid = true;
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień path = resourcePath.substring(rawSource.length());
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień if ("".equals(path)) {
929329d2d66a7e1083c70a9c918381935bf12799Mukund Sivaraman path = path.replace('\\','/');
ec29d217ba3a2bf3e617a7b5b6708ae221bee999Mark Andrews if (isDir && !servlet.startsWith("/xref") && !servlet.startsWith("/hist")) { //if it is an existing directory perhaps people wanted directory xref
afefd754734f896bf3e0590177fff83e7cdfdf35Mark Andrews response.sendRedirect(context + "/xref" + path + "/");
afefd754734f896bf3e0590177fff83e7cdfdf35Mark Andrews response.sendRedirect(context + "/xref" + path);
f0353a586c2bfbae999193cb644b6bc94c7944d8Mark Andrews } if (isDir && !reqURI.endsWith("/")) {
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt response.sendRedirect(context + servlet + path +"/");
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt String dtag = "";
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt if (request.getDateHeader("If-Modified-Since") >= flast ) {
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt valid = false;
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews response.setDateHeader("Last-Modified", flast);
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews int lastSlash = path.lastIndexOf('/');
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews parent = (lastSlash != -1) ? path.substring(0, lastSlash) : "";
adfe58e8e5cd1890585e92b67f1fd01989a1fa7dMark Andrews int pLastSlash = parent.lastIndexOf('/');
adfe58e8e5cd1890585e92b67f1fd01989a1fa7dMark Andrews parentBasename = pLastSlash != -1 ? parent.substring(pLastSlash+1) : parent;
adfe58e8e5cd1890585e92b67f1fd01989a1fa7dMark Andrews noHistory = !HistoryGuru.getInstance().hasHistory(resourceFile);
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews noAnnotation = isDir ||
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews !HistoryGuru.getInstance().hasAnnotation(resourceFile);
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews annotate = !noAnnotation &&
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews Boolean.parseBoolean(request.getParameter("a"));
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews ef = new EftarFileReader(environment.getDataRootPath() + "/index/dtags.eftar");
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews dtag = ef.get(path);
c0a2210466dec0cc81ebf2ffbe21693b57b9c29cMark Andrews if(ef != null) {
534057c9f91a3eb6e0541f3526459c716239b337Mark Andrews } catch (IOException e) {
f7f4730e563a2749629fe7fef4cd9513cd2bfab7Mark Andrews } catch (Exception e) {
1848d38f441ebf70ab21f6151bc3487a92d25b63Mark Andrews String pageTitle="Cross Reference: " + path;
2d82ed9456e72dc4373bea19d63411afe1c48962Mark Andrews%><%@ include file="httpheader.jspf" %>
2d82ed9456e72dc4373bea19d63411afe1c48962Mark Andrews<body><div id="page">
a5a1cbece45e6ca68aafe3b9b995eac6b0f45dd2Mark Andrews<form action="<%=context%>/search">
a5a1cbece45e6ca68aafe3b9b995eac6b0f45dd2Mark Andrews <div id="header"><%@ include file="pageheader.jspf" %>
0d6328ce5f6b799f8e7c6cbbb3b965cf29bfb7baMark Andrews <div id="pagetitle"><b id="filename">Cross Reference: <%=basename%></b><br/><%=dtag%></div>
0d6328ce5f6b799f8e7c6cbbb3b965cf29bfb7baMark Andrews <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 Andrews if (noHistory || servlet.startsWith("/hi")) {
124cc0660c7eff8021c2422fb47441e9ca08b3f9Tinderbox User %> <span class="c" id="history">History</span><%
677f507de7c546c187c1505c48bc7b440545485cMark Andrews %><a id="history" href="<%=context%>/history<%=path%>">History</a><%
677f507de7c546c187c1505c48bc7b440545485cMark Andrews if (noAnnotation) {
677f507de7c546c187c1505c48bc7b440545485cMark Andrews %> | <span class="c" id="annotate">Annotate</span><%
677f507de7c546c187c1505c48bc7b440545485cMark Andrews String rev = request.getParameter("r");
bf459d24a117ae2c54c37016430b41cd6d73491cMark Andrews if (rev == null) {
bf459d24a117ae2c54c37016430b41cd6d73491cMark Andrews } else if (rev.length() > 0) {
677f507de7c546c187c1505c48bc7b440545485cMark Andrews rev = "&r=" + rev;
bf459d24a117ae2c54c37016430b41cd6d73491cMark Andrews if (Boolean.parseBoolean(request.getParameter("a"))) {
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt %> | <span id="toggle-annotate-by-javascript" style="display: none">
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt <a href="#" onClick="javascript:toggle_annotations(); return false;">Annotate</a>
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt <span id="toggle-annotate">
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt <a href="<%=context%>/xref<%=path%><%
81e3e3084980afcd61416f572c6e72d38a3808abMichał Kępień %>?<%=rev%><%
81e3e3084980afcd61416f572c6e72d38a3808abMichał Kępień } %>">Annotate</a></span>
81e3e3084980afcd61416f572c6e72d38a3808abMichał Kępień <script type="text/javascript">
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews var toggle_js = document.getElementById('toggle-annotate-by-javascript');
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews var toggle_ss = document.getElementById('toggle-annotate');
75505befa93c993aa5d2df24a2b64eac0c34cbffMark Andrews </script> <%
a38f07c73790170842e4523b4a474d01ca0dede1Michał Kępień %> | <a href="<%=context%>/xref<%=path%>?a=true<%=rev%>">Annotate</a><%
39d5523a8afc73cbdb4fa426de2ce071267a5d6fMark Andrews %> | <a onClick="javascript:lntoggle();">Line #</a><%
39d5523a8afc73cbdb4fa426de2ce071267a5d6fMark Andrews if (!isDir) {
39d5523a8afc73cbdb4fa426de2ce071267a5d6fMark Andrews String rev = request.getParameter("r");
39d5523a8afc73cbdb4fa426de2ce071267a5d6fMark Andrews if (rev == null || rev.equals("")) {
1f4a3c7088594d1b64cd734eb69e1fd023fde8bfMichał Kępień %> | <a id="download" href="<%=context%>/raw<%=path%>">Download</a><%
1f4a3c7088594d1b64cd734eb69e1fd023fde8bfMichał Kępień %> | <a id="download" href="<%=context%>/raw<%=path%>?r=<%=rev%>">Download</a><%
35aae5884f410180706a89a9715bf9a85eeeb4b7Michał Kępień Project proj = Project.getProject(resourceFile);
35aae5884f410180706a89a9715bf9a85eeeb4b7Michał Kępień if (proj != null || !environment.hasProjects()) {
35aae5884f410180706a89a9715bf9a85eeeb4b7Michał Kępień %> | <input id="search" name="q" class="q"/>
57b1d64d9ae12d56973716e96f9743a00d47af4aMichał Kępień <input type="submit" value="Search" class="submit"/>
57b1d64d9ae12d56973716e96f9743a00d47af4aMichał Kępień if (proj != null) {
2d517e233ff3b3fcd272eb5b2e2d3db6d31a1681Michał Kępień %><input type="hidden" name="project" value="<%=proj.getId()%>"/><%
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>
09c3efda414314d7edcfb2aed9463fb935fc95a6Mark Andrews} // date check
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews } // not a directory redirect