mast.jsp revision 962
36488004520b3a22fbd37ef8e10e5641be154ac1sliveCDDL HEADER START
36488004520b3a22fbd37ef8e10e5641be154ac1sliveThe contents of this file are subject to the terms of the
36488004520b3a22fbd37ef8e10e5641be154ac1sliveCommon Development and Distribution License (the "License").
36488004520b3a22fbd37ef8e10e5641be154ac1sliveYou may not use this file except in compliance with the License.
36488004520b3a22fbd37ef8e10e5641be154ac1sliveSee LICENSE.txt included in this distribution for the specific
36488004520b3a22fbd37ef8e10e5641be154ac1slivelanguage governing permissions and limitations under the License.
36488004520b3a22fbd37ef8e10e5641be154ac1sliveWhen distributing Covered Code, include this CDDL HEADER in each
36488004520b3a22fbd37ef8e10e5641be154ac1slivefile and include the License file at LICENSE.txt.
36488004520b3a22fbd37ef8e10e5641be154ac1sliveIf applicable, add the following below this CDDL HEADER, with the
36488004520b3a22fbd37ef8e10e5641be154ac1slivefields enclosed by brackets "[]" replaced with your own identifying
36488004520b3a22fbd37ef8e10e5641be154ac1sliveinformation: Portions Copyright [yyyy] [name of copyright owner]
36488004520b3a22fbd37ef8e10e5641be154ac1sliveCDDL HEADER END
36488004520b3a22fbd37ef8e10e5641be154ac1sliveCopyright 2009 Sun Microsystems, Inc. All rights reserved.
36488004520b3a22fbd37ef8e10e5641be154ac1sliveUse is subject to license terms.
36488004520b3a22fbd37ef8e10e5641be154ac1slive--%><%@ page import = "javax.servlet.*,
36488004520b3a22fbd37ef8e10e5641be154ac1slive %><%@ page session="false" %><%@ page errorPage="error.jsp"%><%
36488004520b3a22fbd37ef8e10e5641be154ac1sliveString context = request.getContextPath();
36488004520b3a22fbd37ef8e10e5641be154ac1sliveString servlet = request.getServletPath();
36488004520b3a22fbd37ef8e10e5641be154ac1sliveString reqURI = request.getRequestURI();
36488004520b3a22fbd37ef8e10e5641be154ac1sliveString path = request.getPathInfo();
36488004520b3a22fbd37ef8e10e5641be154ac1sliveif (path == null) path = "";
36488004520b3a22fbd37ef8e10e5641be154ac1sliveRuntimeEnvironment environment = RuntimeEnvironment.getInstance();
36488004520b3a22fbd37ef8e10e5641be154ac1sliveenvironment.setUrlPrefix(context + "/s?");
36488004520b3a22fbd37ef8e10e5641be154ac1sliveString rawSource = environment.getSourceRootPath();
36488004520b3a22fbd37ef8e10e5641be154ac1sliveString resourcePath = rawSource + path;
36488004520b3a22fbd37ef8e10e5641be154ac1sliveFile resourceFile = new File(resourcePath);
36488004520b3a22fbd37ef8e10e5641be154ac1sliveboolean valid = true;
36488004520b3a22fbd37ef8e10e5641be154ac1sliveboolean noHistory = true;
36488004520b3a22fbd37ef8e10e5641be154ac1sliveboolean noAnnotation = true;
36488004520b3a22fbd37ef8e10e5641be154ac1sliveboolean annotate = false;
36488004520b3a22fbd37ef8e10e5641be154ac1sliveString basename = resourceFile.getName();
36488004520b3a22fbd37ef8e10e5641be154ac1sliveboolean isDir = false;
36488004520b3a22fbd37ef8e10e5641be154ac1sliveEftarFileReader ef = null;
36488004520b3a22fbd37ef8e10e5641be154ac1sliveString parent = null;
36488004520b3a22fbd37ef8e10e5641be154ac1sliveString parentBasename = resourceFile.getParentFile().getName();
36488004520b3a22fbd37ef8e10e5641be154ac1sliveIgnoredNames ignoredNames = environment.getIgnoredNames();
36488004520b3a22fbd37ef8e10e5641be154ac1sliveString uriEncodedName = Util.URIEncodePath(path);
36488004520b3a22fbd37ef8e10e5641be154ac1slive|| ignoredNames.ignore(parentBasename)
36488004520b3a22fbd37ef8e10e5641be154ac1slive|| !resourcePath.startsWith(rawSource)) {
36488004520b3a22fbd37ef8e10e5641be154ac1slive valid = false;
36488004520b3a22fbd37ef8e10e5641be154ac1slive} else if (!resourceFile.canRead() && resourcePath.startsWith(rawSource)) {
36488004520b3a22fbd37ef8e10e5641be154ac1slive String newPath = rawSource + "/on/" + path; //TODO do we still use "on" ???
36488004520b3a22fbd37ef8e10e5641be154ac1slive File newFile = new File(newPath);
36488004520b3a22fbd37ef8e10e5641be154ac1slive if(newFile.isDirectory() && servlet.startsWith("/xref") && !path.endsWith("/")) {
36488004520b3a22fbd37ef8e10e5641be154ac1slive response.sendRedirect(context + servlet + "/on" + path + "/");
36488004520b3a22fbd37ef8e10e5641be154ac1slive response.sendRedirect(context + servlet + "/on" + path);
36488004520b3a22fbd37ef8e10e5641be154ac1slive valid = false;
36488004520b3a22fbd37ef8e10e5641be154ac1slive valid = true;
36488004520b3a22fbd37ef8e10e5641be154ac1slive if ("".equals(path)) {
36488004520b3a22fbd37ef8e10e5641be154ac1slive path = "/";
36488004520b3a22fbd37ef8e10e5641be154ac1slive if (File.separatorChar == '\\') {
36488004520b3a22fbd37ef8e10e5641be154ac1slive path = path.replace('\\','/');
36488004520b3a22fbd37ef8e10e5641be154ac1slive if (isDir && !servlet.startsWith("/xref") && !servlet.startsWith("/hist")) { //if it is an existing directory perhaps people wanted directory xref
36488004520b3a22fbd37ef8e10e5641be154ac1slive response.sendRedirect(context + "/xref" + path + "/");
083c5339583e94bf811cf61bdbc1dbc6a382a89edpejesh response.sendRedirect(context + "/xref" + path);
36488004520b3a22fbd37ef8e10e5641be154ac1slive } if (isDir && !reqURI.endsWith("/")) {
083c5339583e94bf811cf61bdbc1dbc6a382a89edpejesh response.sendRedirect(context + servlet + path +"/");
36488004520b3a22fbd37ef8e10e5641be154ac1slive String dtag = "";
36488004520b3a22fbd37ef8e10e5641be154ac1slive if (request.getDateHeader("If-Modified-Since") >= flast ) {
36488004520b3a22fbd37ef8e10e5641be154ac1slive response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
36488004520b3a22fbd37ef8e10e5641be154ac1slive valid = false;
36488004520b3a22fbd37ef8e10e5641be154ac1slive response.setDateHeader("Last-Modified", flast);
36488004520b3a22fbd37ef8e10e5641be154ac1slive int lastSlash = path.lastIndexOf('/');
36488004520b3a22fbd37ef8e10e5641be154ac1slive parent = (lastSlash != -1) ? path.substring(0, lastSlash) : "";
36488004520b3a22fbd37ef8e10e5641be154ac1slive int pLastSlash = parent.lastIndexOf('/');
36488004520b3a22fbd37ef8e10e5641be154ac1slive parentBasename = pLastSlash != -1 ? parent.substring(pLastSlash+1) : parent;
36488004520b3a22fbd37ef8e10e5641be154ac1slive noHistory = !HistoryGuru.getInstance().hasHistory(resourceFile);
36488004520b3a22fbd37ef8e10e5641be154ac1slive noAnnotation = isDir ||
083c5339583e94bf811cf61bdbc1dbc6a382a89edpejesh !HistoryGuru.getInstance().hasAnnotation(resourceFile);
36488004520b3a22fbd37ef8e10e5641be154ac1slive annotate = !noAnnotation &&
083c5339583e94bf811cf61bdbc1dbc6a382a89edpejesh ef = new EftarFileReader(environment.getDataRootPath() + "/index/dtags.eftar");
36488004520b3a22fbd37ef8e10e5641be154ac1slive dtag = ef.get(path);
36488004520b3a22fbd37ef8e10e5641be154ac1slive if(ef != null) {
36488004520b3a22fbd37ef8e10e5641be154ac1slive } catch (IOException e) {
36488004520b3a22fbd37ef8e10e5641be154ac1slive } finally {
083c5339583e94bf811cf61bdbc1dbc6a382a89edpejesh } catch (Exception e) {
36488004520b3a22fbd37ef8e10e5641be154ac1slive String pageTitle="Cross Reference: " + path;
36488004520b3a22fbd37ef8e10e5641be154ac1slive%><%@ include file="httpheader.jspf" %>
36488004520b3a22fbd37ef8e10e5641be154ac1slive<% if (annotate) { %>
36488004520b3a22fbd37ef8e10e5641be154ac1slive<script type="text/javascript" src="<%=context%>/jquery-1.4.2.min.js"></script>
36488004520b3a22fbd37ef8e10e5641be154ac1slive<script type="text/javascript" src="<%=context%>/jquery.tooltip-1.3.pack.js"></script>
36488004520b3a22fbd37ef8e10e5641be154ac1slive<script type="text/javascript">/* <![CDATA[ */
36488004520b3a22fbd37ef8e10e5641be154ac1slivefunction toggle_annotations() {
36488004520b3a22fbd37ef8e10e5641be154ac1slive $("span").each(function() {
36488004520b3a22fbd37ef8e10e5641be154ac1slive if (this.className == 'blame') {
36488004520b3a22fbd37ef8e10e5641be154ac1slive this.className = 'blame-hidden';
36488004520b3a22fbd37ef8e10e5641be154ac1slive } else if (this.className == 'blame-hidden') {
<div id="header"><%@ include file="pageheader.jspf" %>
<div id="pagetitle"><b id="filename">Cross Reference: <%=basename%></b><% if (dtag!=null & dtag!="") { %><br/><%=dtag%><% } %></div>
<div id="Masthead"><tt><a href="<%=context%>/xref/">xref</a>: <%=org.opensolaris.opengrok.web.Util.breadcrumbPath(context + "/xref", path)%></tt></div>
if (noHistory || servlet.startsWith("/hi")) {
String rev = request.getParameter("r");
} else if (rev.length() > 0) {
<a href="#" onclick="javascript:toggle_annotations(); return false;" title="Show or hide line annotation(commit revisions,authors)." >Annotate</a>
if (rev.length() > 0) {
<script type="text/javascript">
var toggle_js = document.getElementById('toggle-annotate-by-javascript');
var toggle_ss = document.getElementById('toggle-annotate');
toggle_js.style.display = 'inline';
toggle_ss.style.display = 'none';
if ( servlet.startsWith("/xr") ) {
%> | <a href="#" onclick="javascript:lntoggle();return false;" title="Show or hide line numbers (might be slower if file has more than 10 000 lines).">Line #</a><%
String rev = request.getParameter("r");
if (rev == null || rev.equals("")) {
Project proj = Project.getProject(resourceFile);
if (proj != null || !environment.hasProjects()) {
%><input type="hidden" name="project" value="<%=proj.getDescription()%>"/><%
if(path.length() > 0) {