list.jsp revision 1364
00cf03a1ca1624dac1fecc85f43fc34f8806aff9Luke SmithCDDL HEADER START
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen DesaiThe contents of this file are subject to the terms of the
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen DesaiCommon Development and Distribution License (the "License").
00cf03a1ca1624dac1fecc85f43fc34f8806aff9Luke SmithYou may not use this file except in compliance with the License.
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen DesaiSee LICENSE.txt included in this distribution for the specific
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desailanguage governing permissions and limitations under the License.
00cf03a1ca1624dac1fecc85f43fc34f8806aff9Luke SmithWhen distributing Covered Code, include this CDDL HEADER in each
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desaifile and include the License file at LICENSE.txt.
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen DesaiIf applicable, add the following below this CDDL HEADER, with the
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desaifields enclosed by brackets "[]" replaced with your own identifying
00cf03a1ca1624dac1fecc85f43fc34f8806aff9Luke Smithinformation: Portions Copyright [yyyy] [name of copyright owner]
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen DesaiCDDL HEADER END
00cf03a1ca1624dac1fecc85f43fc34f8806aff9Luke SmithCopyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen DesaiPortions Copyright 2011 Jens Elkner.
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai--%><%@ page session="false" errorPage="error.jsp" import="
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desaiorg.opensolaris.opengrok.analysis.FileAnalyzer.Genre,
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desaiorg.opensolaris.opengrok.analysis.FileAnalyzerFactory,
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai // need to set it here since requesting parameters
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai cfg = PageConfig.get(request);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Annotation annotation = cfg.getAnnotation();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai if (annotation != null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai float r = annotation.getWidestRevision() * 1.15f;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai float a = annotation.getWidestAuthor() * 1.15f;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai + ".blame .r { width: " + (r == 0 ? 6 : r) + "ex; } "
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai + ".blame .a { width: " + (a == 0 ? 6 : a) + "ex; } "
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai + "</style>");
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai/* ---------------------- list.jsp start --------------------- */
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai cfg = PageConfig.get(request);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai File resourceFile = cfg.getResourceFile();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai String path = cfg.getPath();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai String basename = resourceFile.getName();
98c1ab155c0e2148f69291b1abe1007c9d5a08e8Satyen Desai String rawPath = request.getContextPath() + Prefix.RAW_P + path;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Reader r = null;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // valid resource is requested
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // mast.jsp assures, that resourceFile is valid and not /
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Project activeProject = Project.getProject(resourceFile);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai String cookieValue = cfg.getRequestedProjectsAsString();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (activeProject != null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Set<String> projects = cfg.getRequestedProjects();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (!projects.contains(activeProject.getDescription())) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // update cookie
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai cookieValue = cookieValue.length() == 0
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai : activeProject.getDescription() + '/' + cookieValue;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Cookie cookie = new Cookie("OpenGrokProject", cookieValue);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // TODO hmmm, projects.jspf doesn't set a path
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai cookie.setPath(request.getContextPath() + '/');
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // directory listing
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai List<String> files = cfg.getResourceFileList();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai ArrayList<String> readMes = new ArrayList<String>();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai int offset = -1;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai EftarFileReader.FNode parentFNode = null;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai EftarFileReader desc = cfg.getEftarReader();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (desc != null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai parentFNode = desc.getNode(path);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (parentFNode != null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai%><table id="dirlist">
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai <th>Name</th>
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai <th>Date</th>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <th>Size</th><%
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (offset > 0) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai%> <th><tt>Description</tt></th><%
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai IgnoredNames ignoredNames = cfg.getIgnoredNames();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Format dateFormatter = new SimpleDateFormat("dd-MMM-yyyy");
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // upper directory
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai long lastm = resourceFile.getParentFile().lastModified();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <td><p class="r"/></td>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <td><b><a href="..">..</a></b></td>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <td><%= now-lastm < 86400000 ? "Today" : dateFormatter.format(lastm) %></td>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <td><%= Util.readableSize(resourceFile.getParentFile().length()) %></td><%
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (offset > 0) { %>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai for (String file : files) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai File child = new File(resourceFile, file);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (file.startsWith("README") || file.endsWith("README")
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai boolean isDir = child.isDirectory();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <td><p class="<%= isDir ? 'r' : 'p' %>"/></td>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <td><a href="<%= Util.URIEncodePath(file) %>"><%= isDir ? "<b>" + file + "</b>" : file %></a></td>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <td><%= now-lastm < 86400000 ? "Today" : dateFormatter.format(lastm) %></td>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <td><%= Util.readableSize(child.length()) %></td><%
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (offset > 0) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai String briefDesc = desc.getChildTag(parentFNode, file); %>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <td><%= briefDesc == null ? "" : briefDesc %></td><%
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // finally append READMEs to the listing
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai File[] catfiles = cfg.findDataFiles(readMes);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai for (int i=0; i < catfiles.length; i++) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (catfiles[i] == null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai%><h3><%= readMes.get(i) %></h3>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai<div id="src">
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Util.dump(out, catfiles[i], catfiles[i].getName().endsWith(".gz"));
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai } else if (rev.length() != 0) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // requesting a previous revision
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai FileAnalyzerFactory a = AnalyzerGuru.find(basename);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai String error = null;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (g == Genre.PLAIN|| g == Genre.HTML || g == null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai InputStream in = null;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai .getRevision(resourceFile.getParent(), basename, rev.substring(2));
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai } catch (Exception e) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // fall through to error message
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (in != null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (g == null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai || g == null)
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai<div id="src">
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Binary file [Click <a href="<%= rawPath %>?<%= rev
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai %>">here</a> to download]
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai<div id="src">
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <span class="pagetitle"><%= basename %> revision <%=
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // We don't have any way to get definitions
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // for old revisions currently.
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Definitions defs = null;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Annotation annotation = cfg.getAnnotation();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai //not needed yet
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai r = new InputStreamReader(in);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai annotation, Project.getProject(resourceFile));
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai } else if (g == Genre.IMAGE) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <img src="<%= rawPath %>?<%= rev %>"/>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai } else if (g == Genre.HTML) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai r = new InputStreamReader(in);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai %> Click <a href="<%= rawPath %>?<%= rev %>">download <%= basename %></a><%
d8f2b0dd5ac08b7e9256df9f92b204b33c7f9f69Satyen Desai } catch (IOException e) {
d8f2b0dd5ac08b7e9256df9f92b204b33c7f9f69Satyen Desai if (r != null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai try { r.close(); in = null;}
d8f2b0dd5ac08b7e9256df9f92b204b33c7f9f69Satyen Desai catch (Exception e) { /* ignore */ }
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (in != null) {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai catch (Exception e) { /* ignore */ }
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai<h3 class="error">Error reading file</h3><%
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (error != null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai<p class="error"><%= error %></p><%
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai } else if (g == Genre.IMAGE) {
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai<div id="src">
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai <img src="<%= rawPath %>?<%= rev %>"/>
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai<div id="src">
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Binary file [Click <a href="<%= rawPath %>?<%= rev
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai %>">here</a> to download]
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai // requesting cross referenced file
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai File xrefFile = null;
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (xrefFile != null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai<div id="src">
d8f2b0dd5ac08b7e9256df9f92b204b33c7f9f69Satyen Desai Util.dump(out, xrefFile, xrefFile.getName().endsWith(".gz"));
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai BufferedInputStream bin =
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai new BufferedInputStream(new FileInputStream(resourceFile));
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai FileAnalyzerFactory a = AnalyzerGuru.find(basename);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai if (g == null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai<div id="src">
d8f2b0dd5ac08b7e9256df9f92b204b33c7f9f69Satyen Desai <img src="<%= rawPath %>"/>
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai } else if ( g == Genre.HTML) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai r = new InputStreamReader(bin);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai } else if (g == Genre.PLAIN) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai<div id="src">
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // We're generating xref for the latest revision, so we can
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai // find the definitions in the index.
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Definitions defs = IndexDatabase.getDefinitions(resourceFile);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai Annotation annotation = cfg.getAnnotation();
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai r = new InputStreamReader(bin);
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai AnalyzerGuru.writeXref(a, r, out, defs, annotation,
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen DesaiClick <a href="<%= rawPath %>">download <%= basename %></a><%
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai if (r != null) {
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai try { r.close(); bin = null; }
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai catch (Exception e) { /* ignore */ }
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai if (bin != null) {
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai catch (Exception e) { /* ignore */ }
d4a90de3308f343c5d935b5f9b6bcc9f5bc4d05fSatyen Desai/* ---------------------- list.jsp end --------------------- */