list.jsp revision 921
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherCDDL HEADER START
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherThe contents of this file are subject to the terms of the
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherCommon Development and Distribution License (the "License").
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherYou may not use this file except in compliance with the License.
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherSee LICENSE.txt included in this distribution for the specific
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagherlanguage governing permissions and limitations under the License.
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherWhen distributing Covered Code, include this CDDL HEADER in each
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagherfile and include the License file at LICENSE.txt.
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherIf applicable, add the following below this CDDL HEADER, with the
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagherfields enclosed by brackets "[]" replaced with your own identifying
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagherinformation: Portions Copyright [yyyy] [name of copyright owner]
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherCDDL HEADER END
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherCopyright 2009 Sun Microsystems, Inc. All rights reserved.
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherUse is subject to license terms.
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher--%><%@ page import = "javax.servlet.*,
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagherorg.opensolaris.opengrok.configuration.Project,
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagherorg.opensolaris.opengrok.analysis.FileAnalyzer.Genre,
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher%><%@include file="mast.jsp"%><script type="text/javascript">/* <![CDATA[ */
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagherfunction lntoggle() {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher var a = document.getElementsByTagName("a");
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher for (var i = 0; i < a.length; i++) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher var el = a[i];
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (el.className == 'l' || el.className == 'hl') {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher else if (el.className == 'l-hide' || el.className == 'hl-hide') {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher el.className=el.className.substr(0,el.className.indexOf('-'));
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher/* ]]> */</script><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen GallagherString rev = null;
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagherif(!isDir && ef != null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } catch (IOException e) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher // verify that the current path is part of the selected project
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Project activeProject = Project.getProject(resourceFile);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher//TODO: somehow integrate below with projects.jspf
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (activeProject != null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher List<String> project = new ArrayList<String>();
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Cookie[] cookies = request.getCookies();
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (cookies != null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher for (Cookie cookie : cookies) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (cookie.getName().equals("OpenGrok/project")) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher for (String proj : cookie.getValue().split(",")) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (proj != "") {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (Project.getByDescription(proj) != null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher boolean set = false;
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (project != null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher boolean found = false;
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher for (Iterator it = project.iterator(); it.hasNext();) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (activeProject.getDescription().equalsIgnoreCase( (String)it.next() ) ) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher// set this in case there is no project selected or current cookie doesn't contain current project from the link, so the rest of search works 100% :)
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher StringBuffer sproject=new StringBuffer(activeProject.getDescription()+",");
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (project!=null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher //only save found projects into cookies
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher for (Iterator it = project.iterator(); it.hasNext();) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher // update the cookie
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Cookie cookie = new Cookie("OpenGrok/project", sproject.toString());
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher // If requesting a Directory listing -------------
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher DirectoryListing dl = new DirectoryListing(ef);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher String[] files = resourceFile.list();
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (files != null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Arrays.sort(files, String.CASE_INSENSITIVE_ORDER);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher List<String> readMes = dl.listTo(resourceFile, out, path, files);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if(readMes != null && readMes.size() > 0) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher File xdir = new File(environment.getDataRootPath() + "/xref" + path);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (xdir.exists() && xdir.isDirectory()) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher char[] buf = new char[8192];
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher for (String readme : readMes) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher File readmeFile = new File(xdir, readme + ".gz");
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Reader br = null;
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (environment.isCompressXref() && readmeFile.exists()) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher br = new InputStreamReader(new GZIPInputStream(new FileInputStream(readmeFile)));
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher readmeFile = new File(xdir, readme);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher br = new FileReader(readmeFile);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (br != null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %><h3><%=readme%></h3><div id="src"><pre><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher while((len = br.read(buf)) > 0) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %></pre></div><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } catch(IOException e) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher OpenGrokLogger.getLogger().log(Level.WARNING, "An error occured while reading/writing readme:", e);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (br != null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } catch (IOException e) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher OpenGrokLogger.getLogger().log(Level.WARNING, "An error occured while closing file:", e);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } else if ((rev = request.getParameter("r")) != null && !rev.equals("")) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher // Else if requesting a previous revision -------------
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (noHistory) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher response.sendError(404, "Revision not found");
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher FileAnalyzerFactory a = AnalyzerGuru.find(basename);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (g == Genre.PLAIN|| g == Genre.HTML || g == null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher InputStream in = null;
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher in = HistoryGuru.getInstance().getRevision(resourceFile.getParent(), basename, rev);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } catch (Exception e) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher response.sendError(404, "Revision not found");
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (in != null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (g == null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (g == Genre.DATA || g == Genre.XREFABLE || g == null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %><div id="src">Binary file [Click <a href="<%=context%>/raw<%=path%>?r=<%=rev%>">here</a> to download] </div><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %><div id="src"><span class="pagetitle"><%=basename%> revision <%=rev%> </span><pre><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Annotation annotation = annotate ? HistoryGuru.getInstance().annotate(resourceFile, rev) : null;
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher //annotation.writeTooltipMap(out); //not needed yet
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Reader r = new InputStreamReader(in);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher AnalyzerGuru.writeXref(a, r, out, annotation, Project.getProject(resourceFile));
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } else if (g == Genre.IMAGE) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %><img src="<%=context%>/raw<%=path%>?r=<%=rev%>"/><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } else if (g == Genre.HTML) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher char[] buf = new char[8192];
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Reader br = new InputStreamReader(in);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher while((len = br.read(buf)) > 0) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %> Click <a href="<%=context%>/raw<%=path%>?r=<%=rev%>">download <%=basename%></a><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } catch (IOException e) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %> <h3 class="error">IO Error</h3> <p> <%=e.getMessage() %> </p> <%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %></pre></div><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %> <h3 class="error">Error reading file</h3> <%
e79d23932ef9d52cf4eb32ddec2d0a9b3af9a9ebJan Zeleny } else if(g == Genre.IMAGE) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %><div id="src"><img src="<%=context%>/raw<%=path%>?r=<%=rev%>"/></div><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %><div id="src"> Binary file [Click <a href="<%=context%>/raw<%=path%>?r=<%=rev%>">here</a> to download] </div><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher // requesting cross referenced file -------------
c6257286e9a31dfd42d28c99a22a69e2c4717a61Stephen Gallagher File xrefSource = new File(environment.getDataRootFile(), "/xref");
c6257286e9a31dfd42d28c99a22a69e2c4717a61Stephen Gallagher File xrefFile = new File(xrefSource, path + ".gz");
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Reader fileReader = null;
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher fileReader = new InputStreamReader(new GZIPInputStream(new FileInputStream(xrefFile)));
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher xrefFile = new File(xrefSource, path);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher fileReader = new FileReader(xrefFile);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if (fileReader != null && !annotate) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher char[] buf = new char[8192];
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher BufferedReader br = new BufferedReader(fileReader);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %><div id="src"><pre><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher while((len = br.read(buf)) > 0) {
e79d23932ef9d52cf4eb32ddec2d0a9b3af9a9ebJan Zeleny out.write(buf, 0, len);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %></pre></div><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher BufferedInputStream bin = new BufferedInputStream(new FileInputStream(resourceFile));
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher FileAnalyzerFactory a = AnalyzerGuru.find(basename);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher if(g == null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %><div id="src"><img src="<%=context%>/raw<%=path%>"/></div><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } else if( g == Genre.HTML) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher char[] buf = new char[8192];
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Reader br = new InputStreamReader(bin);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher while((len = br.read(buf)) > 0) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } else if(g == Genre.PLAIN) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %><div id="src"><pre><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Annotation annotation = annotate ? HistoryGuru.getInstance().annotate(resourceFile, rev) : null;
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher Reader r = new InputStreamReader(bin);
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher AnalyzerGuru.writeXref(a, r, out, annotation, Project.getProject(resourceFile));
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %></pre></div><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %> Click <a href="<%=context%>/raw<%=path%>">download <%=basename%></a><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher %><%@include file="foot.jspf"%><%
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagherif (ef != null) {
2dd3faebcd3cfd00efda38ffd2585d675e696b12Stephen Gallagher } catch (IOException e) {