10d40e9d0SAdam Hornáček<%-- 20d40e9d0SAdam Hornáček$Id$ 30d40e9d0SAdam Hornáček 40d40e9d0SAdam HornáčekCDDL HEADER START 50d40e9d0SAdam Hornáček 60d40e9d0SAdam HornáčekThe contents of this file are subject to the terms of the 70d40e9d0SAdam HornáčekCommon Development and Distribution License (the "License"). 80d40e9d0SAdam HornáčekYou may not use this file except in compliance with the License. 90d40e9d0SAdam Hornáček 100d40e9d0SAdam HornáčekSee LICENSE.txt included in this distribution for the specific 110d40e9d0SAdam Hornáčeklanguage governing permissions and limitations under the License. 120d40e9d0SAdam Hornáček 130d40e9d0SAdam HornáčekWhen distributing Covered Code, include this CDDL HEADER in each 140d40e9d0SAdam Hornáčekfile and include the License file at LICENSE.txt. 150d40e9d0SAdam HornáčekIf applicable, add the following below this CDDL HEADER, with the 160d40e9d0SAdam Hornáčekfields enclosed by brackets "[]" replaced with your own identifying 170d40e9d0SAdam Hornáčekinformation: Portions Copyright [yyyy] [name of copyright owner] 180d40e9d0SAdam Hornáček 190d40e9d0SAdam HornáčekCDDL HEADER END 200d40e9d0SAdam Hornáček 2156f072caSAdam HornáčekCopyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 220d40e9d0SAdam HornáčekPortions Copyright 2011 Jens Elkner. 237d004396SChris FrairePortions Copyright (c) 2017-2019, Chris Fraire <cfraire@me.com>. 240d40e9d0SAdam Hornáček 250d40e9d0SAdam Hornáček--%> 260d40e9d0SAdam Hornáček<%@page errorPage="error.jsp" import=" 270d40e9d0SAdam Hornáčekjava.io.BufferedInputStream, 280d40e9d0SAdam Hornáčekjava.io.FileInputStream, 290d40e9d0SAdam Hornáčekjava.io.InputStream, 300d40e9d0SAdam Hornáčekjava.io.InputStreamReader, 310d40e9d0SAdam Hornáčekjava.io.Reader, 320d40e9d0SAdam Hornáčekjava.net.URLEncoder, 330d40e9d0SAdam Hornáčekjava.nio.charset.StandardCharsets, 340d40e9d0SAdam Hornáčekjava.util.List, 3552dccac1SChris Frairejava.util.Locale, 36e829566cSChris Frairejava.util.logging.Level, 370d40e9d0SAdam Hornáčekjava.util.Set, 38e829566cSChris Frairejava.util.logging.Logger, 39686556f2SAdam Hornáčekorg.opengrok.indexer.analysis.AnalyzerGuru, 40e829566cSChris Fraireorg.opengrok.indexer.analysis.Ctags, 41686556f2SAdam Hornáčekorg.opengrok.indexer.analysis.Definitions, 42e829566cSChris Fraireorg.opengrok.indexer.analysis.AbstractAnalyzer, 43e829566cSChris Fraireorg.opengrok.indexer.analysis.AbstractAnalyzer.Genre, 44e829566cSChris Fraireorg.opengrok.indexer.analysis.AnalyzerFactory, 45686556f2SAdam Hornáčekorg.opengrok.indexer.history.Annotation, 46686556f2SAdam Hornáčekorg.opengrok.indexer.index.IndexDatabase, 47e829566cSChris Fraireorg.opengrok.indexer.logger.LoggerFactory, 48686556f2SAdam Hornáčekorg.opengrok.indexer.search.DirectoryEntry, 49686556f2SAdam Hornáčekorg.opengrok.indexer.search.DirectoryExtraReader, 50686556f2SAdam Hornáčekorg.opengrok.indexer.search.FileExtra, 51686556f2SAdam Hornáčekorg.opengrok.indexer.util.FileExtraZipper, 527d004396SChris Fraireorg.opengrok.indexer.util.ForbiddenSymlinkException, 53e829566cSChris Fraireorg.opengrok.indexer.util.ObjectPool, 54686556f2SAdam Hornáčekorg.opengrok.indexer.util.IOUtils, 5556f072caSAdam Hornáčekorg.opengrok.web.DirectoryListing, 56686556f2SAdam Hornáčekorg.opengrok.indexer.web.SearchHelper" 5757eefa47SKryštof Tulinger%> 5857eefa47SKryštof Tulinger<% 59*55774b8bSChris Frairefinal String DUMMY_REVISION = "unknown"; 60*55774b8bSChris Fraire 610d40e9d0SAdam Hornáček{ 620d40e9d0SAdam Hornáček // need to set it here since requesting parameters 630d40e9d0SAdam Hornáček if (request.getCharacterEncoding() == null) { 640d40e9d0SAdam Hornáček request.setCharacterEncoding("UTF-8"); 650d40e9d0SAdam Hornáček } 660d40e9d0SAdam Hornáček 670d40e9d0SAdam Hornáček PageConfig cfg = PageConfig.get(request); 680d40e9d0SAdam Hornáček cfg.checkSourceRootExistence(); 690d40e9d0SAdam Hornáček 70*55774b8bSChris Fraire String rev = cfg.getRequestedRevision(); 71*55774b8bSChris Fraire if (!cfg.isDir() && rev.length() == 0) { 72*55774b8bSChris Fraire /* 73*55774b8bSChris Fraire * Get the latest revision and redirect so that the revision number 74*55774b8bSChris Fraire * appears in the URL. 75*55774b8bSChris Fraire */ 76*55774b8bSChris Fraire String location = cfg.getRevisionLocation(cfg.getLatestRevision()); 77*55774b8bSChris Fraire if (location != null) { 78*55774b8bSChris Fraire response.sendRedirect(location); 79*55774b8bSChris Fraire return; 80*55774b8bSChris Fraire } 81*55774b8bSChris Fraire if (!cfg.getEnv().isGenerateHtml()) { 82*55774b8bSChris Fraire /* 83*55774b8bSChris Fraire * Economy mode is on and failed to get the last revision 84*55774b8bSChris Fraire * (presumably running with history turned off). Use dummy 85*55774b8bSChris Fraire * revision string so that xref can be generated from the resource 86*55774b8bSChris Fraire * file directly. 87*55774b8bSChris Fraire */ 88*55774b8bSChris Fraire location = cfg.getRevisionLocation(DUMMY_REVISION); 89*55774b8bSChris Fraire response.sendRedirect(location); 90*55774b8bSChris Fraire return; 91*55774b8bSChris Fraire } 92*55774b8bSChris Fraire } 93*55774b8bSChris Fraire 940d40e9d0SAdam Hornáček Annotation annotation = cfg.getAnnotation(); 950d40e9d0SAdam Hornáček if (annotation != null) { 960d40e9d0SAdam Hornáček int r = annotation.getWidestRevision(); 970d40e9d0SAdam Hornáček int a = annotation.getWidestAuthor(); 980d40e9d0SAdam Hornáček cfg.addHeaderData("<style type=\"text/css\">" 990d40e9d0SAdam Hornáček + ".blame .r { width: " + (r == 0 ? 6 : Math.ceil(r * 0.7)) + "em; } " 1000d40e9d0SAdam Hornáček + ".blame .a { width: " + (a == 0 ? 6 : Math.ceil(a * 0.7)) + "em; } " 1010d40e9d0SAdam Hornáček + "</style>"); 1020d40e9d0SAdam Hornáček } 1030d40e9d0SAdam Hornáček} 1040d40e9d0SAdam Hornáček%><%@include 1050d40e9d0SAdam Hornáček 1060d40e9d0SAdam Hornáčekfile="mast.jsp" 1070d40e9d0SAdam Hornáček 1080d40e9d0SAdam Hornáček%><script type="text/javascript">/* <![CDATA[ */ 1090d40e9d0SAdam Hornáčekdocument.pageReady.push(function() { pageReadyList();}); 1100d40e9d0SAdam Hornáček/* ]]> */</script> 1110d40e9d0SAdam Hornáček<% 1120d40e9d0SAdam Hornáček/* ---------------------- list.jsp start --------------------- */ 1130d40e9d0SAdam Hornáček{ 114e829566cSChris Fraire final Logger LOGGER = LoggerFactory.getLogger(getClass()); 115e829566cSChris Fraire 1160d40e9d0SAdam Hornáček PageConfig cfg = PageConfig.get(request); 1170d40e9d0SAdam Hornáček String rev = cfg.getRequestedRevision(); 118e393cb49SAdam Hornáček Project project = cfg.getProject(); 1190d40e9d0SAdam Hornáček 120e393cb49SAdam Hornáček String navigateWindowEnabled = project != null ? Boolean.toString( 121e393cb49SAdam Hornáček project.isNavigateWindowEnabled()) : "false"; 1220d40e9d0SAdam Hornáček File resourceFile = cfg.getResourceFile(); 1230d40e9d0SAdam Hornáček String path = cfg.getPath(); 1240d40e9d0SAdam Hornáček String basename = resourceFile.getName(); 1250d40e9d0SAdam Hornáček String rawPath = request.getContextPath() + Prefix.DOWNLOAD_P + path; 1260d40e9d0SAdam Hornáček Reader r = null; 1270d40e9d0SAdam Hornáček if (cfg.isDir()) { 1280d40e9d0SAdam Hornáček // valid resource is requested 1290d40e9d0SAdam Hornáček // mast.jsp assures, that resourceFile is valid and not / 1300d40e9d0SAdam Hornáček // see cfg.resourceNotAvailable() 1310d40e9d0SAdam Hornáček String cookieValue = cfg.getRequestedProjectsAsString(); 132e393cb49SAdam Hornáček if (project != null) { 1330d40e9d0SAdam Hornáček Set<String> projects = cfg.getRequestedProjects(); 134e393cb49SAdam Hornáček if (!projects.contains(project.getName())) { 135e393cb49SAdam Hornáček projects.add(project.getName()); 1360d40e9d0SAdam Hornáček // update cookie 1370d40e9d0SAdam Hornáček cookieValue = cookieValue.length() == 0 138e393cb49SAdam Hornáček ? project.getName() 139e393cb49SAdam Hornáček : project.getName() + ',' + cookieValue; 1400d40e9d0SAdam Hornáček Cookie cookie = new Cookie(PageConfig.OPEN_GROK_PROJECT, URLEncoder.encode(cookieValue, "utf-8")); 1410d40e9d0SAdam Hornáček // TODO hmmm, projects.jspf doesn't set a path 1420d40e9d0SAdam Hornáček cookie.setPath(request.getContextPath() + '/'); 1430d40e9d0SAdam Hornáček response.addCookie(cookie); 1440d40e9d0SAdam Hornáček } 1450d40e9d0SAdam Hornáček } 1460d40e9d0SAdam Hornáček // requesting a directory listing 1470d40e9d0SAdam Hornáček DirectoryListing dl = new DirectoryListing(cfg.getEftarReader()); 1480d40e9d0SAdam Hornáček List<String> files = cfg.getResourceFileList(); 1490d40e9d0SAdam Hornáček if (!files.isEmpty()) { 1500d40e9d0SAdam Hornáček List<FileExtra> extras = null; 151e393cb49SAdam Hornáček if (project != null) { 1520d40e9d0SAdam Hornáček SearchHelper searchHelper = cfg.prepareInternalSearch(); 1530d40e9d0SAdam Hornáček // N.b. searchHelper.destroy() is called via 1540d40e9d0SAdam Hornáček // WebappListener.requestDestroyed() on presence of the 1550d40e9d0SAdam Hornáček // following REQUEST_ATTR. 1560d40e9d0SAdam Hornáček request.setAttribute(SearchHelper.REQUEST_ATTR, searchHelper); 157e393cb49SAdam Hornáček searchHelper.prepareExec(project); 1580d40e9d0SAdam Hornáček 1590d40e9d0SAdam Hornáček if (searchHelper.searcher != null) { 1600d40e9d0SAdam Hornáček DirectoryExtraReader extraReader = 1610d40e9d0SAdam Hornáček new DirectoryExtraReader(); 1627d004396SChris Fraire String primePath = path; 1637d004396SChris Fraire try { 1647d004396SChris Fraire primePath = searchHelper.getPrimeRelativePath(project.getName(), path); 1657d004396SChris Fraire } catch (IOException | ForbiddenSymlinkException ex) { 1667d004396SChris Fraire LOGGER.log(Level.WARNING, String.format( 1677d004396SChris Fraire "Error getting prime relative for %s", path), ex); 1687d004396SChris Fraire } 1697d004396SChris Fraire extras = extraReader.search(searchHelper.searcher, primePath); 1700d40e9d0SAdam Hornáček } 1710d40e9d0SAdam Hornáček } 1720d40e9d0SAdam Hornáček 1730d40e9d0SAdam Hornáček FileExtraZipper zipper = new FileExtraZipper(); 1740d40e9d0SAdam Hornáček List<DirectoryEntry> entries = zipper.zip(resourceFile, files, 1750d40e9d0SAdam Hornáček extras); 1760d40e9d0SAdam Hornáček 1770d40e9d0SAdam Hornáček List<String> readMes = dl.extraListTo( 1780d40e9d0SAdam Hornáček Util.URIEncodePath(request.getContextPath()), 1790d40e9d0SAdam Hornáček resourceFile, out, path, entries); 1800d40e9d0SAdam Hornáček File[] catfiles = cfg.findDataFiles(readMes); 1810d40e9d0SAdam Hornáček for (int i=0; i < catfiles.length; i++) { 1820d40e9d0SAdam Hornáček if (catfiles[i] == null) { 1830d40e9d0SAdam Hornáček continue; 1840d40e9d0SAdam Hornáček } 1850d40e9d0SAdam Hornáček%> 1860d40e9d0SAdam Hornáček<% 18752dccac1SChris Fraire String lcName = readMes.get(i).toLowerCase(Locale.ROOT); 1880d40e9d0SAdam Hornáček if (lcName.endsWith(".md") || lcName.endsWith(".markdown")) { 1890d40e9d0SAdam Hornáček %><div id="src<%=i%>" data-markdown> 1900d40e9d0SAdam Hornáček <div class="markdown-heading"> 1910d40e9d0SAdam Hornáček <h3><%= readMes.get(i) %></h3> 1920d40e9d0SAdam Hornáček </div> 1930d40e9d0SAdam Hornáček <div class="markdown-content" 1940d40e9d0SAdam Hornáček data-markdown-download="<%= request.getContextPath() + Prefix.DOWNLOAD_P + Util.URIEncodePath(cfg.getPath() + readMes.get(i)) %>"> 1950d40e9d0SAdam Hornáček </div> 1960d40e9d0SAdam Hornáček <pre data-markdown-original><% 1970d40e9d0SAdam Hornáček Util.dump(out, catfiles[i], catfiles[i].getName().endsWith(".gz")); 1980d40e9d0SAdam Hornáček %></pre> 1990d40e9d0SAdam Hornáček </div> 2000d40e9d0SAdam Hornáček<% } else { %> 2010d40e9d0SAdam Hornáček <h3><%= readMes.get(i) %></h3> 2020d40e9d0SAdam Hornáček <div id="src<%=i%>"> 2030d40e9d0SAdam Hornáček <pre><% 2040d40e9d0SAdam Hornáček Util.dump(out, catfiles[i], catfiles[i].getName().endsWith(".gz")); 2050d40e9d0SAdam Hornáček %></pre> 2060d40e9d0SAdam Hornáček </div> 2070d40e9d0SAdam Hornáček<% 2080d40e9d0SAdam Hornáček } 2090d40e9d0SAdam Hornáček 2100d40e9d0SAdam Hornáček } 2110d40e9d0SAdam Hornáček } 212a03922c4SAdam Hornáček } else if (rev.length() != 0) { 213a03922c4SAdam Hornáček // requesting a revision 214*55774b8bSChris Fraire File xrefFile; 215ee13dbaeSChris Fraire if (cfg.isLatestRevision(rev) && 216ee13dbaeSChris Fraire (xrefFile = cfg.findDataFile()) != null) { 217a03922c4SAdam Hornáček if (cfg.annotate()) { 2180d40e9d0SAdam Hornáček // annotate 2190d40e9d0SAdam Hornáček BufferedInputStream bin = 2200d40e9d0SAdam Hornáček new BufferedInputStream(new FileInputStream(resourceFile)); 2210d40e9d0SAdam Hornáček try { 22257eefa47SKryštof Tulinger AnalyzerFactory a = AnalyzerGuru.find(basename); 22357eefa47SKryštof Tulinger AbstractAnalyzer.Genre g = AnalyzerGuru.getGenre(a); 2240d40e9d0SAdam Hornáček if (g == null) { 2250d40e9d0SAdam Hornáček a = AnalyzerGuru.find(bin); 2260d40e9d0SAdam Hornáček g = AnalyzerGuru.getGenre(a); 2270d40e9d0SAdam Hornáček } 22857eefa47SKryštof Tulinger if (g == AbstractAnalyzer.Genre.IMAGE) { 2290d40e9d0SAdam Hornáček%> 2300d40e9d0SAdam Hornáček<div id="src"> 2310d40e9d0SAdam Hornáček <img src="<%= rawPath %>"/> 2320d40e9d0SAdam Hornáček</div><% 23357eefa47SKryštof Tulinger } else if ( g == AbstractAnalyzer.Genre.HTML) { 2340d40e9d0SAdam Hornáček /** 2350d40e9d0SAdam Hornáček * For backward compatibility, read the OpenGrok-produced 2360d40e9d0SAdam Hornáček * document using the system default charset. 2370d40e9d0SAdam Hornáček */ 2380d40e9d0SAdam Hornáček r = new InputStreamReader(bin); 239e393cb49SAdam Hornáček // dumpXref() is also useful here for translating links. 240e393cb49SAdam Hornáček Util.dumpXref(out, r, request.getContextPath()); 24157eefa47SKryštof Tulinger } else if (g == AbstractAnalyzer.Genre.PLAIN) { 2420d40e9d0SAdam Hornáček%> 2430d40e9d0SAdam Hornáček<div id="src" data-navigate-window-enabled="<%= navigateWindowEnabled %>"> 2440d40e9d0SAdam Hornáček <pre><% 2450d40e9d0SAdam Hornáček // We're generating xref for the latest revision, so we can 2460d40e9d0SAdam Hornáček // find the definitions in the index. 2470d40e9d0SAdam Hornáček Definitions defs = IndexDatabase.getDefinitions(resourceFile); 2480d40e9d0SAdam Hornáček Annotation annotation = cfg.getAnnotation(); 2490d40e9d0SAdam Hornáček // SRCROOT is read with UTF-8 as a default. 2500d40e9d0SAdam Hornáček r = IOUtils.createBOMStrippedReader(bin, 2510d40e9d0SAdam Hornáček StandardCharsets.UTF_8.name()); 252e393cb49SAdam Hornáček AnalyzerGuru.writeDumpedXref(request.getContextPath(), a, 253e393cb49SAdam Hornáček r, out, defs, annotation, project); 2540d40e9d0SAdam Hornáček %></pre> 2550d40e9d0SAdam Hornáček</div><% 2560d40e9d0SAdam Hornáček } else { 2570d40e9d0SAdam Hornáček%> 2580d40e9d0SAdam HornáčekClick <a href="<%= rawPath %>">download <%= basename %></a><% 2590d40e9d0SAdam Hornáček } 2600d40e9d0SAdam Hornáček } finally { 2610d40e9d0SAdam Hornáček if (r != null) { 2620d40e9d0SAdam Hornáček try { r.close(); bin = null; } 2630d40e9d0SAdam Hornáček catch (Exception e) { /* ignore */ } 2640d40e9d0SAdam Hornáček } 2650d40e9d0SAdam Hornáček if (bin != null) { 2660d40e9d0SAdam Hornáček try { bin.close(); } 2670d40e9d0SAdam Hornáček catch (Exception e) { /* ignore */ } 2680d40e9d0SAdam Hornáček } 2690d40e9d0SAdam Hornáček } 270a03922c4SAdam Hornáček 271a03922c4SAdam Hornáček } else { 2720d40e9d0SAdam Hornáček%> 2730d40e9d0SAdam Hornáček<div id="src" data-navigate-window-enabled="<%= navigateWindowEnabled %>"> 2740d40e9d0SAdam Hornáček <pre><% 275e393cb49SAdam Hornáček boolean compressed = xrefFile.getName().endsWith(".gz"); 276e393cb49SAdam Hornáček Util.dumpXref(out, xrefFile, compressed, 277e393cb49SAdam Hornáček request.getContextPath()); 2780d40e9d0SAdam Hornáček %></pre> 2790d40e9d0SAdam Hornáček</div><% 2800d40e9d0SAdam Hornáček } 2810d40e9d0SAdam Hornáček } else { 282f3e7c6e8SVladimir Kotal // requesting a previous revision or needed to generate xref on the fly (economy mode). 28357eefa47SKryštof Tulinger AnalyzerFactory a = AnalyzerGuru.find(basename); 284e829566cSChris Fraire Genre g = AnalyzerGuru.getGenre(a); 2850d40e9d0SAdam Hornáček String error = null; 286e829566cSChris Fraire if (g == Genre.PLAIN || g == Genre.HTML || g == null) { 2870d40e9d0SAdam Hornáček InputStream in = null; 288e829566cSChris Fraire File tempf = null; 2890d40e9d0SAdam Hornáček try { 29017c862aeSVladimir Kotal if (rev.equals(DUMMY_REVISION)) { 29117c862aeSVladimir Kotal in = new FileInputStream(resourceFile); 29217c862aeSVladimir Kotal } else { 293e829566cSChris Fraire tempf = File.createTempFile("ogtags", basename); 294e829566cSChris Fraire if (HistoryGuru.getInstance().getRevision(tempf, 295e829566cSChris Fraire resourceFile.getParent(), basename, rev)) { 296e829566cSChris Fraire in = new BufferedInputStream( 297e829566cSChris Fraire new FileInputStream(tempf)); 298e829566cSChris Fraire } else { 299e829566cSChris Fraire tempf.delete(); 300e829566cSChris Fraire tempf = null; 301e829566cSChris Fraire } 30217c862aeSVladimir Kotal } 3030d40e9d0SAdam Hornáček } catch (Exception e) { 3040d40e9d0SAdam Hornáček // fall through to error message 3050d40e9d0SAdam Hornáček error = e.getMessage(); 306e829566cSChris Fraire if (tempf != null) { 307e829566cSChris Fraire tempf.delete(); 308e829566cSChris Fraire tempf = null; 309e829566cSChris Fraire } 3100d40e9d0SAdam Hornáček } 3110d40e9d0SAdam Hornáček if (in != null) { 3120d40e9d0SAdam Hornáček try { 3130d40e9d0SAdam Hornáček if (g == null) { 314e829566cSChris Fraire a = AnalyzerGuru.find(in, basename); 3150d40e9d0SAdam Hornáček g = AnalyzerGuru.getGenre(a); 3160d40e9d0SAdam Hornáček } 31757eefa47SKryštof Tulinger if (g == AbstractAnalyzer.Genre.DATA || g == AbstractAnalyzer.Genre.XREFABLE || g == null) { 3180d40e9d0SAdam Hornáček %> 3190d40e9d0SAdam Hornáček <div id="src"> 3200d40e9d0SAdam Hornáček Binary file [Click <a href="<%= rawPath %>?r=<%= Util.URIEncode(rev) %>">here</a> to download] 3210d40e9d0SAdam Hornáček </div><% 3220d40e9d0SAdam Hornáček } else { 3230d40e9d0SAdam Hornáček %> 3240d40e9d0SAdam Hornáček <div id="src"> 3250d40e9d0SAdam Hornáček <pre><% 32657eefa47SKryštof Tulinger if (g == AbstractAnalyzer.Genre.PLAIN) { 3270d40e9d0SAdam Hornáček Definitions defs = null; 328e829566cSChris Fraire ObjectPool<Ctags> ctagsPool = cfg.getEnv(). 329e829566cSChris Fraire getIndexerParallelizer().getCtagsPool(); 330e829566cSChris Fraire int tries = 2; 331e829566cSChris Fraire while (cfg.getEnv().isWebappCtags()) { 332e829566cSChris Fraire Ctags ctags = ctagsPool.get(); 333e829566cSChris Fraire try { 334e829566cSChris Fraire ctags.setTabSize(project != null ? 335e829566cSChris Fraire project.getTabSize() : 0); 336e829566cSChris Fraire defs = ctags.doCtags(tempf.getPath()); 337e829566cSChris Fraire break; 338e829566cSChris Fraire } catch (InterruptedException ex) { 339e829566cSChris Fraire if (--tries > 0) { 340e829566cSChris Fraire LOGGER.log(Level.WARNING, 341e829566cSChris Fraire "doCtags() interrupted--{0}", 342e829566cSChris Fraire ex.getMessage()); 343e829566cSChris Fraire continue; 344e829566cSChris Fraire } 345e829566cSChris Fraire LOGGER.log(Level.WARNING, "doCtags()", ex); 346e829566cSChris Fraire break; 347e829566cSChris Fraire } catch (Exception ex) { 348e829566cSChris Fraire LOGGER.log(Level.WARNING, "doCtags()", ex); 349e829566cSChris Fraire break; 350e829566cSChris Fraire } finally { 351e829566cSChris Fraire ctags.reset(); 352e829566cSChris Fraire ctagsPool.release(ctags); 353e829566cSChris Fraire } 354e829566cSChris Fraire } 3550d40e9d0SAdam Hornáček Annotation annotation = cfg.getAnnotation(); 3560d40e9d0SAdam Hornáček //not needed yet 3570d40e9d0SAdam Hornáček //annotation.writeTooltipMap(out); 3580d40e9d0SAdam Hornáček // SRCROOT is read with UTF-8 as a default. 3590d40e9d0SAdam Hornáček r = IOUtils.createBOMStrippedReader(in, 3600d40e9d0SAdam Hornáček StandardCharsets.UTF_8.name()); 361e393cb49SAdam Hornáček AnalyzerGuru.writeDumpedXref( 362a03922c4SAdam Hornáček request.getContextPath(), 363a03922c4SAdam Hornáček a, r, out, 364e393cb49SAdam Hornáček defs, annotation, project); 36557eefa47SKryštof Tulinger } else if (g == AbstractAnalyzer.Genre.IMAGE) { 3660d40e9d0SAdam Hornáček %></pre> 3670d40e9d0SAdam Hornáček <img src="<%= rawPath %>?r=<%= Util.URIEncode(rev) %>"/> 3680d40e9d0SAdam Hornáček <pre><% 36957eefa47SKryštof Tulinger } else if (g == AbstractAnalyzer.Genre.HTML) { 3700d40e9d0SAdam Hornáček /** 3710d40e9d0SAdam Hornáček * For backward compatibility, read the 3720d40e9d0SAdam Hornáček * OpenGrok-produced document using the system 3730d40e9d0SAdam Hornáček * default charset. 3740d40e9d0SAdam Hornáček */ 3750d40e9d0SAdam Hornáček r = new InputStreamReader(in); 376e393cb49SAdam Hornáček /** 377e393cb49SAdam Hornáček * dumpXref() is also useful here for 378e393cb49SAdam Hornáček * translating links. 379e393cb49SAdam Hornáček */ 380e393cb49SAdam Hornáček Util.dumpXref(out, r, request.getContextPath()); 3810d40e9d0SAdam Hornáček } else { 3820d40e9d0SAdam Hornáček %> Click <a href="<%= rawPath %>?r=<%= Util.URIEncode(rev) %>">download <%= basename %></a><% 3830d40e9d0SAdam Hornáček } 3840d40e9d0SAdam Hornáček } 3850d40e9d0SAdam Hornáček } catch (IOException e) { 3860d40e9d0SAdam Hornáček error = e.getMessage(); 3870d40e9d0SAdam Hornáček } finally { 3880d40e9d0SAdam Hornáček if (r != null) { 3890d40e9d0SAdam Hornáček try { r.close(); in = null;} 3900d40e9d0SAdam Hornáček catch (Exception e) { /* ignore */ } 3910d40e9d0SAdam Hornáček } 3920d40e9d0SAdam Hornáček if (in != null) { 3930d40e9d0SAdam Hornáček try { in.close(); } 3940d40e9d0SAdam Hornáček catch (Exception e) { /* ignore */ } 3950d40e9d0SAdam Hornáček } 396e829566cSChris Fraire if (tempf != null) { 397e829566cSChris Fraire tempf.delete(); 398e829566cSChris Fraire } 3990d40e9d0SAdam Hornáček } 4000d40e9d0SAdam Hornáček %></pre> 4010d40e9d0SAdam Hornáček </div><% 4020d40e9d0SAdam Hornáček } else { 4030d40e9d0SAdam Hornáček %> 4040d40e9d0SAdam Hornáček <h3 class="error">Error reading file</h3><% 4050d40e9d0SAdam Hornáček if (error != null) { 4060d40e9d0SAdam Hornáček %> 4070d40e9d0SAdam Hornáček <p class="error"><%= error %></p><% 4080d40e9d0SAdam Hornáček } 4090d40e9d0SAdam Hornáček } 41057eefa47SKryštof Tulinger } else if (g == AbstractAnalyzer.Genre.IMAGE) { 4110d40e9d0SAdam Hornáček %> 4120d40e9d0SAdam Hornáček <div id="src"> 4130d40e9d0SAdam Hornáček <img src="<%= rawPath %>?r=<%= Util.URIEncode(rev) %>"/> 4140d40e9d0SAdam Hornáček </div><% 4150d40e9d0SAdam Hornáček } else { 4160d40e9d0SAdam Hornáček %> 4170d40e9d0SAdam Hornáček <div id="src"> 4180d40e9d0SAdam Hornáček Binary file [Click <a href="<%= rawPath %>?r=<%= Util.URIEncode(rev) %>">here</a> to download] 4190d40e9d0SAdam Hornáček </div><% 4200d40e9d0SAdam Hornáček } 4210d40e9d0SAdam Hornáček } 4220d40e9d0SAdam Hornáček } else { 4230d40e9d0SAdam Hornáček // requesting cross referenced file 4240d40e9d0SAdam Hornáček 425*55774b8bSChris Fraire File xrefFile = cfg.findDataFile(); 4260d40e9d0SAdam Hornáček if (xrefFile != null) { 4270d40e9d0SAdam Hornáček%> 4280d40e9d0SAdam Hornáček<div id="src" data-navigate-window-enabled="<%= navigateWindowEnabled %>"> 4290d40e9d0SAdam Hornáček <pre><% 430e393cb49SAdam Hornáček boolean compressed = xrefFile.getName().endsWith(".gz"); 431e393cb49SAdam Hornáček Util.dumpXref(out, xrefFile, compressed, request.getContextPath()); 4320d40e9d0SAdam Hornáček %></pre> 4330d40e9d0SAdam Hornáček</div><% 43417c862aeSVladimir Kotal } else { 43517c862aeSVladimir Kotal%> 4365c4b57feSVladimir Kotal<p class="error">Failed to get xref file</p><% 4370d40e9d0SAdam Hornáček } 4380d40e9d0SAdam Hornáček } 4390d40e9d0SAdam Hornáček} 4400d40e9d0SAdam Hornáček/* ---------------------- list.jsp end --------------------- */ 4410d40e9d0SAdam Hornáček%><%@ 4420d40e9d0SAdam Hornáček 4430d40e9d0SAdam Hornáčekinclude file="foot.jspf" 4440d40e9d0SAdam Hornáček 4450d40e9d0SAdam Hornáček%> 446