1*0d40e9d0SAdam Hornáček<%-- 2*0d40e9d0SAdam Hornáček$Id$ 3*0d40e9d0SAdam Hornáček 4*0d40e9d0SAdam HornáčekCDDL HEADER START 5*0d40e9d0SAdam Hornáček 6*0d40e9d0SAdam HornáčekThe contents of this file are subject to the terms of the 7*0d40e9d0SAdam HornáčekCommon Development and Distribution License (the "License"). 8*0d40e9d0SAdam HornáčekYou may not use this file except in compliance with the License. 9*0d40e9d0SAdam Hornáček 10*0d40e9d0SAdam HornáčekSee LICENSE.txt included in this distribution for the specific 11*0d40e9d0SAdam Hornáčeklanguage governing permissions and limitations under the License. 12*0d40e9d0SAdam Hornáček 13*0d40e9d0SAdam HornáčekWhen distributing Covered Code, include this CDDL HEADER in each 14*0d40e9d0SAdam Hornáčekfile and include the License file at LICENSE.txt. 15*0d40e9d0SAdam HornáčekIf applicable, add the following below this CDDL HEADER, with the 16*0d40e9d0SAdam Hornáčekfields enclosed by brackets "[]" replaced with your own identifying 17*0d40e9d0SAdam Hornáčekinformation: Portions Copyright [yyyy] [name of copyright owner] 18*0d40e9d0SAdam Hornáček 19*0d40e9d0SAdam HornáčekCDDL HEADER END 20*0d40e9d0SAdam Hornáček 21*0d40e9d0SAdam HornáčekCopyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. 22*0d40e9d0SAdam Hornáček 23*0d40e9d0SAdam HornáčekPortions Copyright 2011 Jens Elkner. 24*0d40e9d0SAdam Hornáček 25*0d40e9d0SAdam Hornáček--%><%@page import=" 26*0d40e9d0SAdam Hornáčekjava.io.File, 27*0d40e9d0SAdam Hornáčekjava.text.SimpleDateFormat, 28*0d40e9d0SAdam Hornáčekjava.util.Set, 29*0d40e9d0SAdam Hornáček 30*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.history.DirectoryHistoryReader, 31*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.history.History, 32*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.history.HistoryEntry, 33*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.history.HistoryGuru, 34*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.web.Util, 35*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.web.Prefix, 36*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.web.PageConfig" 37*0d40e9d0SAdam Hornáček%><%@ page session="false" errorPage="error.jsp"%><% 38*0d40e9d0SAdam Hornáček/* ---------------------- rss.jsp start --------------------- */ 39*0d40e9d0SAdam Hornáček{ 40*0d40e9d0SAdam Hornáček PageConfig cfg = PageConfig.get(request); 41*0d40e9d0SAdam Hornáček cfg.checkSourceRootExistence(); 42*0d40e9d0SAdam Hornáček 43*0d40e9d0SAdam Hornáček String redir = cfg.canProcess(); 44*0d40e9d0SAdam Hornáček if (redir == null || redir.length() > 0) { 45*0d40e9d0SAdam Hornáček if (redir != null) { 46*0d40e9d0SAdam Hornáček response.sendRedirect(redir); 47*0d40e9d0SAdam Hornáček } else { 48*0d40e9d0SAdam Hornáček response.sendError(HttpServletResponse.SC_NOT_FOUND); 49*0d40e9d0SAdam Hornáček } 50*0d40e9d0SAdam Hornáček return; 51*0d40e9d0SAdam Hornáček } 52*0d40e9d0SAdam Hornáček cfg.getEnv().setUrlPrefix(request.getContextPath() + Prefix.SEARCH_R + '?'); 53*0d40e9d0SAdam Hornáček String path = cfg.getPath(); 54*0d40e9d0SAdam Hornáček String dtag = cfg.getDefineTagsIndex(); 55*0d40e9d0SAdam Hornáček String ForwardedHost = request.getHeader("X-Forwarded-Host"); 56*0d40e9d0SAdam Hornáček response.setContentType("text/xml"); 57*0d40e9d0SAdam Hornáček%><?xml version="1.0"?> 58*0d40e9d0SAdam Hornáček<?xml-stylesheet type="text/xsl" href="<%= request.getContextPath() 59*0d40e9d0SAdam Hornáček %>/rss.xsl.xml"?> 60*0d40e9d0SAdam Hornáček<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> 61*0d40e9d0SAdam Hornáček<channel> 62*0d40e9d0SAdam Hornáček <title>Changes in <%= path.length() == 0 63*0d40e9d0SAdam Hornáček ? "Cross Reference" 64*0d40e9d0SAdam Hornáček : Util.htmlize(cfg.getResourceFile().getName()) %></title> 65*0d40e9d0SAdam Hornáček <description><%= Util.htmlize(dtag) %></description> 66*0d40e9d0SAdam Hornáček <language>en</language> 67*0d40e9d0SAdam Hornáček <copyright>Copyright 2015</copyright> 68*0d40e9d0SAdam Hornáček <generator>Java</generator><% 69*0d40e9d0SAdam Hornáček History hist = null; 70*0d40e9d0SAdam Hornáček String newline = System.getProperty("line.separator"); 71*0d40e9d0SAdam Hornáček if(cfg.isDir()) { 72*0d40e9d0SAdam Hornáček hist = new DirectoryHistoryReader(cfg.getHistoryDirs()).getHistory(); 73*0d40e9d0SAdam Hornáček } else { 74*0d40e9d0SAdam Hornáček hist = HistoryGuru.getInstance().getHistory(cfg.getResourceFile()); 75*0d40e9d0SAdam Hornáček } 76*0d40e9d0SAdam Hornáček if (hist != null) { 77*0d40e9d0SAdam Hornáček int i = 20; 78*0d40e9d0SAdam Hornáček for (HistoryEntry entry : hist.getHistoryEntries()) { 79*0d40e9d0SAdam Hornáček if (i-- <= 0) { 80*0d40e9d0SAdam Hornáček break; 81*0d40e9d0SAdam Hornáček } 82*0d40e9d0SAdam Hornáček if (entry.isActive()) { 83*0d40e9d0SAdam Hornáček %> 84*0d40e9d0SAdam Hornáček <item> 85*0d40e9d0SAdam Hornáček <title><% 86*0d40e9d0SAdam Hornáček /* 87*0d40e9d0SAdam Hornáček * Newlines would result in HTML tags inside the 'title' which 88*0d40e9d0SAdam Hornáček * causes the title to be displayed as 'null'. Print first line 89*0d40e9d0SAdam Hornáček * of the message. The whole message will be printed in description. 90*0d40e9d0SAdam Hornáček */ 91*0d40e9d0SAdam Hornáček String replaced = entry.getMessage().split("\n")[0]; 92*0d40e9d0SAdam Hornáček %><%= Util.htmlize(entry.getRevision()) %> - <%= Util.htmlize(replaced) %></title> 93*0d40e9d0SAdam Hornáček <link><% 94*0d40e9d0SAdam Hornáček // Play nice in proxy environment by using hostname from the original 95*0d40e9d0SAdam Hornáček // request to construct the URLs. 96*0d40e9d0SAdam Hornáček // Will not work well if the scheme or port is different for proxied server 97*0d40e9d0SAdam Hornáček // and original server. Unfortunately the X-Forwarded-Host does not seem to 98*0d40e9d0SAdam Hornáček // contain the port number so there is no way around it. 99*0d40e9d0SAdam Hornáček String requestURL = request.getScheme() + "://"; 100*0d40e9d0SAdam Hornáček if (ForwardedHost != null) { 101*0d40e9d0SAdam Hornáček requestURL += ForwardedHost; 102*0d40e9d0SAdam Hornáček } else { 103*0d40e9d0SAdam Hornáček requestURL += request.getServerName(); 104*0d40e9d0SAdam Hornáček String port = Integer.toString(request.getLocalPort()); 105*0d40e9d0SAdam Hornáček if (!port.isEmpty()) { 106*0d40e9d0SAdam Hornáček requestURL += ":" + port; 107*0d40e9d0SAdam Hornáček } 108*0d40e9d0SAdam Hornáček } 109*0d40e9d0SAdam Hornáček requestURL += request.getContextPath(); 110*0d40e9d0SAdam Hornáček requestURL += Prefix.HIST_L + cfg.getPath() + "#" + entry.getRevision(); 111*0d40e9d0SAdam Hornáček %><%= Util.htmlize(requestURL) %></link> 112*0d40e9d0SAdam Hornáček <description><% 113*0d40e9d0SAdam Hornáček for (String e : entry.getMessage().split("\n")) { 114*0d40e9d0SAdam Hornáček %> 115*0d40e9d0SAdam Hornáček <%= Util.htmlize(e) %><% 116*0d40e9d0SAdam Hornáček } 117*0d40e9d0SAdam Hornáček %> 118*0d40e9d0SAdam Hornáček 119*0d40e9d0SAdam Hornáček List of files: 120*0d40e9d0SAdam Hornáček <% 121*0d40e9d0SAdam Hornáček if (cfg.isDir()) { 122*0d40e9d0SAdam Hornáček Set<String> files = entry.getFiles(); 123*0d40e9d0SAdam Hornáček if (files != null) { 124*0d40e9d0SAdam Hornáček for (String ifile : files) { 125*0d40e9d0SAdam Hornáček %> 126*0d40e9d0SAdam Hornáček <%= Util.htmlize(ifile) %><% 127*0d40e9d0SAdam Hornáček } 128*0d40e9d0SAdam Hornáček } 129*0d40e9d0SAdam Hornáček } else { 130*0d40e9d0SAdam Hornáček %><%= Util.htmlize(path) %><% 131*0d40e9d0SAdam Hornáček } 132*0d40e9d0SAdam Hornáček %> 133*0d40e9d0SAdam Hornáček </description> 134*0d40e9d0SAdam Hornáček <pubDate><% 135*0d40e9d0SAdam Hornáček SimpleDateFormat df = 136*0d40e9d0SAdam Hornáček new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z"); 137*0d40e9d0SAdam Hornáček %><%= Util.htmlize(df.format(entry.getDate())) %></pubDate> 138*0d40e9d0SAdam Hornáček <dc:creator><%= Util.htmlize(entry.getAuthor()) %></dc:creator> 139*0d40e9d0SAdam Hornáček </item> 140*0d40e9d0SAdam Hornáček<% 141*0d40e9d0SAdam Hornáček } 142*0d40e9d0SAdam Hornáček } 143*0d40e9d0SAdam Hornáček } 144*0d40e9d0SAdam Hornáček%> 145*0d40e9d0SAdam Hornáček</channel> 146*0d40e9d0SAdam Hornáček</rss> 147*0d40e9d0SAdam Hornáček<% 148*0d40e9d0SAdam Hornáček} 149*0d40e9d0SAdam Hornáček/* ---------------------- rss.jsp end --------------------- */ 150*0d40e9d0SAdam Hornáček%> 151