From: <bra...@us...> - 2007-11-28 03:11:09
|
Revision: 2088 http://archive-access.svn.sourceforge.net/archive-access/?rev=2088&view=rev Author: bradtofel Date: 2007-11-27 19:11:14 -0800 (Tue, 27 Nov 2007) Log Message: ----------- FEATURE: allow parsing into base of AccessPoints when trailing slash is omitted from path Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/webapp/RequestMapper.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/webapp/RequestMapper.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/webapp/RequestMapper.java 2007-11-28 03:08:09 UTC (rev 2087) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/webapp/RequestMapper.java 2007-11-28 03:11:14 UTC (rev 2088) @@ -24,6 +24,7 @@ */ package org.archive.wayback.webapp; +import java.util.ArrayList; import java.util.logging.Logger; import javax.servlet.ServletContext; @@ -50,6 +51,8 @@ private final static String PORT_SEPARATOR = ":"; + private final static String ACCESS_POINT_CLASSNAME = + "org.archive.wayback.webapp.AccessPoint"; private final static String CONFIG_PATH = "config-path"; // private WaybackContext defaultContext = null; @@ -87,6 +90,8 @@ if(secondSlash != -1) { collection = PORT_SEPARATOR + requestPath.substring(1,requestPath.indexOf("/",1)); + } else { + collection = PORT_SEPARATOR + requestPath.substring(1); } } return String.valueOf(request.getLocalPort()) + collection; @@ -99,14 +104,14 @@ public RequestContext mapContext(HttpServletRequest request) { RequestContext context = null; - String contextID = String.valueOf(request.getLocalPort()); - if(factory.containsBean(contextID)) { - Object o = factory.getBean(contextID); + String portStr = String.valueOf(request.getLocalPort()); + if(factory.containsBean(portStr)) { + Object o = factory.getBean(portStr); if(o instanceof RequestContext) { context = (RequestContext) o; } } else { - contextID = getContextID(request); + String contextID = getContextID(request); if(factory.containsBean(contextID)) { Object o = factory.getBean(contextID); if(o instanceof RequestContext) { @@ -114,9 +119,31 @@ } } } + if(context == null) { + ArrayList<String> names = getAccessPointNamesOnPort(portStr); + request.setAttribute("AccessPointNames", names); + } return context; } + @SuppressWarnings("unchecked") + public ArrayList<String> getAccessPointNamesOnPort(String portStr) { + ArrayList<String> names = new ArrayList<String>(); + try { + Class accessPointClass = Class.forName(ACCESS_POINT_CLASSNAME); + String[] apNames = factory.getBeanNamesForType(accessPointClass); + String portStrColon = portStr + ":"; + for(String apName : apNames) { + if(apName.startsWith(portStrColon)) { + names.add(apName.substring(portStrColon.length())); + } + } + } catch (ClassNotFoundException e) { + // boy, we're in trouble now.. + e.printStackTrace(); + } + return names; + } /** * clean up all WaybackContexts, which should release resources gracefully. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |