list.jsp revision 477
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen<%--
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenCDDL HEADER START
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenThe contents of this file are subject to the terms of the
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenCommon Development and Distribution License (the "License").
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenYou may not use this file except in compliance with the License.
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenSee LICENSE.txt included in this distribution for the specific
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenlanguage governing permissions and limitations under the License.
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenWhen distributing Covered Code, include this CDDL HEADER in each
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenfile and include the License file at LICENSE.txt.
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenIf applicable, add the following below this CDDL HEADER, with the
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenfields enclosed by brackets "[]" replaced with your own identifying
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Siraineninformation: Portions Copyright [yyyy] [name of copyright owner]
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenCDDL HEADER END
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenCopyright 2005 Sun Microsystems, Inc. All rights reserved.
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenUse is subject to license terms.
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen--%><%@ page import = "javax.servlet.*,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenjava.lang.*,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenjavax.servlet.http.*,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenjava.util.*,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenjava.io.*,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenjava.util.zip.GZIPInputStream,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenjava.util.logging.Level,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenorg.opensolaris.opengrok.OpenGrokLogger,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenorg.opensolaris.opengrok.analysis.*,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenorg.opensolaris.opengrok.configuration.Project,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenorg.opensolaris.opengrok.index.*,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenorg.opensolaris.opengrok.analysis.FileAnalyzer.Genre,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenorg.opensolaris.opengrok.web.*,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenorg.opensolaris.opengrok.history.*
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen"
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen%><%@include file="mast.jsp"%><%
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo SirainenString rev = null;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenif(!isDir && ef != null) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen try {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen ef.close();
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen } catch (IOException e) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen ef = null;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen}
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenif (valid) {
e2a88d59c0d47d63ce1ad5b1fd95e487124a3fd4Timo Sirainen if (isDir) {
e2a88d59c0d47d63ce1ad5b1fd95e487124a3fd4Timo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen // verify that the current path is part of the selected project
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen Project activeProject = Project.getProject(resourceFile);
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (activeProject != null) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen String project = null;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen Cookie[] cookies = request.getCookies();
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (cookies != null) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen for (Cookie cookie : cookies) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (cookie.getName().equals("OpenGrok/project")) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen project = cookie.getValue();
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen break;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen boolean set = false;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (project != null) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen boolean found = false;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen for (String aproj : project.split(" ")) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (activeProject.getPath().equalsIgnoreCase(aproj)) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen found = true;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen break;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (!found) {
e2a88d59c0d47d63ce1ad5b1fd95e487124a3fd4Timo Sirainen set = true;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen } else {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen set = true;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (set) {
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen Cookie cookie = new Cookie("OpenGrok/project", activeProject.getPath());
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen cookie.setPath(context + "/");
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen response.addCookie(cookie);
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen }
a10ed8c47534b4c6b6bf2711ccfe577e720a47b4Timo Sirainen }
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen // If requesting a Directory listing -------------
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen DirectoryListing dl = new DirectoryListing(ef);
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen String[] files = resourceFile.list();
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (files != null) {
e2a88d59c0d47d63ce1ad5b1fd95e487124a3fd4Timo Sirainen Arrays.sort(files, String.CASE_INSENSITIVE_ORDER);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen List<String> readMes = dl.listTo(resourceFile, out, path, files);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if(readMes != null && readMes.size() > 0) {
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen File xdir = new File(environment.getDataRootPath() + "/xref" + path);
e2a88d59c0d47d63ce1ad5b1fd95e487124a3fd4Timo Sirainen if (xdir.exists() && xdir.isDirectory()) {
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen char[] buf = new char[8192];
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen for (String readme : readMes) {
e2a88d59c0d47d63ce1ad5b1fd95e487124a3fd4Timo Sirainen File readmeFile = new File(xdir, readme + ".gz");
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen Reader br = null;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen try {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (environment.isCompressXref() && readmeFile.exists()) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen br = new InputStreamReader(new GZIPInputStream(new FileInputStream(readmeFile)));
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen } else {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen readmeFile = new File(xdir, readme);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (readmeFile.exists()) {
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen br = new FileReader(readmeFile);
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen }
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen }
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen if (br != null) {
eef20a55e19a239244b14963d716cf0d070fe1bbTimo Sirainen int len = 0;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen %><h3><%=readme%></h3><div id="src"><pre><%
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen while((len = br.read(buf)) > 0) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen out.write(buf, 0, len);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen %></pre></div><%
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen } catch(IOException e) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen OpenGrokLogger.getLogger().log(Level.WARNING, "An error occured while reading/writing readme:", e);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen } finally {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (br != null) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen try {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen br.close();
e93184a9055c2530366dfe617e07199603c399ddMartti Rannanjärvi } catch (IOException e) {
e93184a9055c2530366dfe617e07199603c399ddMartti Rannanjärvi OpenGrokLogger.getLogger().log(Level.WARNING, "An error occured while closing file:", e);
e2a88d59c0d47d63ce1ad5b1fd95e487124a3fd4Timo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen } else if ((rev = request.getParameter("r")) != null && !rev.equals("")) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen // Else if requesting a previous revision -------------
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (noHistory) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen response.sendError(404, "Revision not found");
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen } else {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen FileAnalyzerFactory a = AnalyzerGuru.find(basename);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen Genre g = AnalyzerGuru.getGenre(a);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (g == Genre.PLAIN|| g == Genre.HTML || g == null) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen InputStream in = null;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen try {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen in = HistoryGuru.getInstance().getRevision(resourceFile.getParent(), basename, rev);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen } catch (Exception e) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen response.sendError(404, "Revision not found");
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen return;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (in != null) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen try {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (g == null) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen a = AnalyzerGuru.find(in);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen g = AnalyzerGuru.getGenre(a);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen }
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen if (g == Genre.DATA || g == Genre.XREFABLE || g == null) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen %><div id="src">Binary file [Click <a href="<%=context%>/raw<%=path%>?r=<%=rev%>">here</a> to download] </div><%
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen } else {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen %><div id="src"><span class="pagetitle"><%=basename%> revision <%=rev%> </span><pre><%
if (g == Genre.PLAIN) {
Annotation annotation = annotate ? HistoryGuru.getInstance().annotate(resourceFile, rev) : null;
AnalyzerGuru.writeXref(a, in, out, annotation, Project.getProject(resourceFile));
} else if (g == Genre.IMAGE) {
%><img src="<%=context%>/raw<%=path%>?r=<%=rev%>"/><%
} else if (g == Genre.HTML) {
char[] buf = new char[8192];
Reader br = new InputStreamReader(in);
int len = 0;
while((len = br.read(buf)) > 0) {
out.write(buf, 0, len);
}
} else {
%> Click <a href="<%=context%>/raw<%=path%>?r=<%=rev%>">download <%=basename%></a><%
}
}
} catch (IOException e) {
%> <h3 class="error">IO Error</h3> <p> <%=e.getMessage() %> </p> <%
}
%></pre></div><%
in.close();
} else {
%> <h3 class="error">Error reading file</h3> <%
}
} else if(g == Genre.IMAGE) {
%><div id="src"><img src="<%=context%>/raw<%=path%>?r=<%=rev%>"/></div><%
} else {
%><div id="src"> Binary file [Click <a href="<%=context%>/raw<%=path%>?r=<%=rev%>">here</a> to download] </div><%
}
}
} else {
// requesting cross referenced file -------------
File xrefSource = new File(environment.getDataRootFile(), "/xref");
File xrefFile = new File(xrefSource, path + ".gz");
Reader fileReader = null;
if (environment.isCompressXref() && xrefFile.exists()) {
fileReader = new InputStreamReader(new GZIPInputStream(new FileInputStream(xrefFile)));
} else {
xrefFile = new File(xrefSource, path);
if (xrefFile.exists()) {
fileReader = new FileReader(xrefFile);
}
}
if (fileReader != null && !annotate) {
char[] buf = new char[8192];
BufferedReader br = new BufferedReader(fileReader);
int len = 0;
%><div id="src"><pre><%
while((len = br.read(buf)) > 0) {
out.write(buf, 0, len);
}
%></pre></div><%
br.close();
} else {
BufferedInputStream bin = new BufferedInputStream(new FileInputStream(resourceFile));
FileAnalyzerFactory a = AnalyzerGuru.find(basename);
Genre g = AnalyzerGuru.getGenre(a);
if(g == null) {
a = AnalyzerGuru.find(bin);
g = AnalyzerGuru.getGenre(a);
}
if (g == Genre.IMAGE) {
%><div id="src"><img src="<%=context%>/raw<%=path%>"/></div><%
} else if( g == Genre.HTML) {
char[] buf = new char[8192];
Reader br = new InputStreamReader(bin);
int len = 0;
while((len = br.read(buf)) > 0) {
out.write(buf, 0, len);
}
} else if(g == Genre.PLAIN) {
%><div id="src"><pre><%
Annotation annotation = annotate ? HistoryGuru.getInstance().annotate(resourceFile, rev) : null;
AnalyzerGuru.writeXref(a, bin, out, annotation, Project.getProject(resourceFile));
%></pre></div><%
} else {
%> Click <a href="<%=context%>/raw<%=path%>">download <%=basename%></a><%
}
}
}
%><%@include file="foot.jspf"%><%
}
if (ef != null) {
try {
ef.close();
} catch (IOException e) {
}
}
%>