From: <bra...@us...> - 2010-04-14 21:33:25
|
Revision: 3042 http://archive-access.svn.sourceforge.net/archive-access/?rev=3042&view=rev Author: bradtofel Date: 2010-04-14 21:33:02 +0000 (Wed, 14 Apr 2010) Log Message: ----------- FEATURE: added getUrlParentDir() Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/util/url/UrlOperations.java trunk/archive-access/projects/wayback/wayback-core/src/test/java/org/archive/wayback/util/url/UrlOperationsTest.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/util/url/UrlOperations.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/util/url/UrlOperations.java 2010-04-14 21:28:35 UTC (rev 3041) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/util/url/UrlOperations.java 2010-04-14 21:33:02 UTC (rev 3042) @@ -28,6 +28,7 @@ import java.util.regex.Pattern; import org.apache.commons.httpclient.URIException; +import org.apache.log4j.Logger; import org.archive.net.UURI; import org.archive.net.UURIFactory; @@ -39,6 +40,8 @@ * @version $Date$, $Revision$ */ public class UrlOperations { + private static final Logger LOGGER = Logger.getLogger( + UrlOperations.class.getName()); public final static String DNS_SCHEME = "dns:"; public final static String HTTP_SCHEME = "http://"; @@ -116,7 +119,7 @@ try { return UURIFactory.getInstance(url).getEscapedURI(); } catch (URIException e) { - e.printStackTrace(); + LOGGER.warn(e.getLocalizedMessage() + ": " + url); // can't let a space exist... send back close to whatever came // in... return url.replace(" ", "%20"); @@ -129,7 +132,7 @@ absBaseURI = UURIFactory.getInstance(baseUrl); resolvedURI = UURIFactory.getInstance(absBaseURI, url); } catch (URIException e) { - e.printStackTrace(); + LOGGER.warn(e.getLocalizedMessage() + ": " + url); return url.replace(" ", "%20"); } return resolvedURI.getEscapedURI(); @@ -198,4 +201,33 @@ } return url; } + + /** + * Find and return the parent directory of the URL argument + * @param url to find the parent directory of + * @return parent directory of URL, or null, if either the url argument is + * invalid, or if the url is the root of the authority. + */ + public static String getUrlParentDir(String url) { + + try { + UURI uri = UURIFactory.getInstance(url); + String path = uri.getPath(); + if(path.length() > 1) { + int startIdx = path.length()-1; + if(path.charAt(path.length()-1) == '/') { + startIdx--; + } + int idx = path.lastIndexOf('/',startIdx); + if(idx >= 0) { + uri.setPath(path.substring(0,idx+1)); + uri.setQuery(null); + return uri.toString(); + } + } + } catch (URIException e) { + LOGGER.warn(e.getLocalizedMessage() + ": " + url); + } + return null; + } } Modified: trunk/archive-access/projects/wayback/wayback-core/src/test/java/org/archive/wayback/util/url/UrlOperationsTest.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/test/java/org/archive/wayback/util/url/UrlOperationsTest.java 2010-04-14 21:28:35 UTC (rev 3041) +++ trunk/archive-access/projects/wayback/wayback-core/src/test/java/org/archive/wayback/util/url/UrlOperationsTest.java 2010-04-14 21:33:02 UTC (rev 3042) @@ -9,6 +9,7 @@ * @version $Date$, $Revision$ */ public class UrlOperationsTest extends TestCase { + public void testIsAuthority() { checkAuthority("foo.com",true); checkAuthority("foo.con",false); @@ -93,5 +94,40 @@ assertEquals("rtsp://",UrlOperations.urlToScheme("rtsp://a.com/")); assertEquals("mms://",UrlOperations.urlToScheme("mms://a.com/")); assertNull(UrlOperations.urlToScheme("blah://a.com/")); - } + } + + public void testGetUrlParentDir() { + + assertEquals( "http://a.b/c/", + UrlOperations.getUrlParentDir("http://a.b/c/d")); + + assertEquals( "http://a.b/", + UrlOperations.getUrlParentDir("http://a.b/c/")); + + assertEquals( "http://a.b/", + UrlOperations.getUrlParentDir("http://a.b/c")); + + assertEquals( "http://a.b/c/d/e/", + UrlOperations.getUrlParentDir("http://a.b/c/d/e/f")); + + assertEquals( "http://a.b/", + UrlOperations.getUrlParentDir("http://a.b/c?d=e")); + + assertEquals( null, + UrlOperations.getUrlParentDir("http://a.b/")); + + assertEquals( null, + UrlOperations.getUrlParentDir("http//a.b/")); + + assertEquals( null, + UrlOperations.getUrlParentDir("http://")); + + assertEquals( null, + UrlOperations.getUrlParentDir("http://#4.8gifdijdf")); + + assertEquals( null, + UrlOperations.getUrlParentDir("http://#4.8gifdijdf/a/b")); + + + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |