libreccm-legacy/ccm-rssfeed/src/com/arsdigita/rssfeed/RSSFileResolver.java

114 lines
3.9 KiB
Java
Executable File

/*
* Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.arsdigita.rssfeed;
import com.arsdigita.web.DefaultApplicationFileResolver;
import com.arsdigita.web.Application;
import com.arsdigita.web.Web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.RequestDispatcher;
import org.apache.log4j.Logger;
public class RSSFileResolver extends DefaultApplicationFileResolver {
/** Internal logger instance to faciliate debugging. Enable logging output
* by editing /WEB-INF/conf/log4j.properties int hte runtime environment
* and set com.arsdigita.rssfeed.RSSFileResolver=DEBUG by
* uncommenting or adding the line. */
private static final Logger s_log = Logger.getLogger(RSSFileResolver.class);
/**
*
* @param templatePath
* @param sreq
* @param sresp
* @param app
* @return
*/
@Override
public RequestDispatcher resolve(String templatePath,
HttpServletRequest sreq,
HttpServletResponse sresp,
Application app) {
String[] webapps = new String[] {
app.getContextPath(), "ROOT"
};
String pathInfo = sreq.getPathInfo();
if (pathInfo.endsWith(".rss") ||
pathInfo.endsWith(".xml")) {
// Translate .rss or .xml into .jsp
pathInfo = pathInfo.substring(0, pathInfo.length() - 3) + "jsp";
String node = app.getPath();
do {
String path = templatePath + node + pathInfo;
if (path.endsWith("/")) {
path = path + "index.jsp";
}
if (s_log.isDebugEnabled()) {
s_log.debug("Trying resource " + path);
}
// Old style, no longer valid. All CCM modules are nox installed
// into one context, treating CCM as one web application in a
// servlet conainer
//RequestDispatcher rd = Web.findResourceDispatcher(
// webapps,
// path);
// Looks now for a esource at path in the current context
RequestDispatcher rd = Web.findResourceDispatcher(path);
if (rd != null) {
if (s_log.isDebugEnabled()) {
s_log.debug("Got dispatcher " + rd);
}
return rd;
}
if ("".equals(node)) {
node = null;
} else {
int index = node.lastIndexOf("/", node.length() - 2);
node = node.substring(0, index);
}
} while (node != null);
if (s_log.isDebugEnabled()) {
s_log.debug("No dispatcher found");
}
return null;
} else {
return super.resolve(templatePath,
sreq,
sresp,
app);
}
}
}