001    /*
002     * Copyright 1999,2004 The Apache Software Foundation.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    package org.apache.commons.feedparser.network;
018    
019    
020    /**
021     * This is a portable and thin URL resolver.  The goal is to quickly resolve and
022     * normalize URLs.  This includes potentially saving redirects and having them
023     * fully qualified.
024     * 
025     * @author <a href="mailto:burton@openprivacy.org">Kevin A. Burton</a>
026     * @version $Id: URLResolver.java 373622 2006-01-30 22:53:00Z mvdb $
027     */
028    public class URLResolver {
029    
030        public static String resolve( String resource ) {
031    
032            //include "www" in hostnames like xmlhack.com
033            resource = resolveTrailingSlash( resource );
034            resource = resolveNoHostname( resource );
035    
036            return resource;
037            
038        }
039    
040        private static String resolveNoHostname( String resource ) {
041    
042            if ( resource.startsWith( "http://" ) ) {
043    
044                int first = resource.indexOf( "." );
045                int second = resource.indexOf( ".", first + 1 );
046    
047                if ( second == -1 ) {
048                    //then we don't have a hostname on this domain.
049                    return resource.substring( 0, "http://".length() ) +
050                           "www." + 
051                           resource.substring( "http://".length(), resource.length() );
052                } 
053    
054            }
055    
056            return resource;
057            
058        }
059    
060        private static String resolveTrailingSlash( String resource ) {
061    
062            if ( resource.startsWith( "http://" ) && ( resource.endsWith( "org" ) ||
063                                                       resource.endsWith( "com" ) ||
064                                                       resource.endsWith( "net" ) ) ) {
065    
066                return resource + "/";
067                
068            } 
069    
070            return resource;
071            
072        }
073        
074    }