net.jforum.util.URLNormalizer.java Source code

Java tutorial

Introduction

Here is the source code for net.jforum.util.URLNormalizer.java

Source

    /*
     * Copyright (c) JForum Team
     * All rights reserved.
     * 
     * Redistribution and use in source and binary forms, 
     * with or without modification, are permitted provided 
     * that the following conditions are met:
     * 
     * 1) Redistributions of source code must retain the above 
     * copyright notice, this list of conditions and the 
     * following  disclaimer.
     * 2)  Redistributions in binary form must reproduce the 
     * above copyright notice, this list of conditions and 
     * the following disclaimer in the documentation and/or 
     * other materials provided with the distribution.
     * 3) Neither the name of "Rafael Steil" nor 
     * the names of its contributors may be used to endorse 
     * or promote products derived from this software without 
     * specific prior written permission.
     * 
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT 
     * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
     * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
     * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
     * MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
     * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 
     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
     * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
     * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
     * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
     * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
     * IN CONTRACT, STRICT LIABILITY, OR TORT 
     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
     * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
     * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
     * 
     * Created on 11/07/2005 00:32:01
     * The JForum Project
     * http://www.jforum.net
     */

/**
 * Normalizes an URL. 
 * Normalization means replacing blank spaces by underlines, 
 * changing special chars by its regular form and etc.
 * @author Rafael Steil
 * @version $Id: URLNormalizer.java,v 1.4 2006/08/20 22:47:42 rafaelsteil Exp $
 */
public class URLNormalizer
{
  public static final int LIMIT = 30;
  
  /**
   * Normalizes an URL.
   * The url will be truncated at {@link #LIMIT} chars
   * @param url the url to normalize
   * @return the normalized url
   * @see #normalize(String, int, boolean)
   */
  public static String normalize(String url)
  {
    return normalize(url, LIMIT, true);
  }
  
  /**
   * 
   * @param url the url to normalize
   * @param limit do not process more than <code>limit + 1</code> chars
   * @param friendlyTruncate If <code>true</code>, will try to not cut a word if
   * more than <code>limit</code> chars were processed. It will stop in the next
   * special char
   * @return the normalized url
   */
  public static String normalize(String url, int limit, boolean friendlyTruncate)
  {
    char[] chars = url.toCharArray();
    
    StringBuffer sb = new StringBuffer(url.length());
    
    for (int i = 0; i < chars.length; i++) {
      if (i <= limit || (friendlyTruncate && i > limit && sb.charAt(sb.length() - 1) != '_')) {
        
        if (Character.isSpaceChar(chars[i]) || chars[i] == '-') {
          if (friendlyTruncate && i > limit) {
            break;
          }
          
          if (i > 0 && sb.charAt(sb.length() - 1) != '_') {
            sb.append('_');
          }
        }
        
        if (Character.isLetterOrDigit(chars[i])) {
          sb.append(chars[i]);
        }
        else if (friendlyTruncate && i > limit) {
          break;
        }
      }
    }
    
    return sb.toString().toLowerCase();
  }
}
    ///////////////
    /*
     * Created on 11/07/2005 00:25:19
     */
    package net.jforum.util;

    import junit.framework.TestCase;

    /**
     * Remove special chars, spaces and etc from a string
     * @author Rafael Steil
     * @version $Id: URLNormalizerTest.java,v 1.4 2005/07/26 04:01:12 diegopires Exp $
     */
    public class URLNormalizerTest extends TestCase {
        public void testReplaceSpaceByUnderline() {
            String s = "this is a test";
            String normalized = URLNormalizer.normalize(s);

            assertEquals("this_is_a_test", normalized);
        }

        public void testFriendlyLimit() {
            String s = "this is long string used for testing the limit";
            String normalized = URLNormalizer.normalize(s);

            assertEquals("this_is_long_string_used_for_testing", normalized);
        }

        public void testUnfriendlyLimit() {
            String s = "this is long string used for testing the limit";
            String normalized = URLNormalizer.normalize(s, URLNormalizer.LIMIT, false);

            assertEquals("this_is_long_string_used_for_te", normalized);
        }

        public void testFriendlyLimitWithParentesis() {
            String s = "this is long string used for testing(the limit)";
            String normalized = URLNormalizer.normalize(s);

            assertEquals("this_is_long_string_used_for_testing", normalized);
        }

        public void testRemovePlusParentesis() {
            String s = "a test + some + 2 thing(s)";
            String normalized = URLNormalizer.normalize(s);

            assertEquals("a_test_some_2_things", normalized);
        }

        public void testRemovePorcentageDollarStarEtc() {
            String s = "!@#$%^&*";
            String normalized = URLNormalizer.normalize(s);

            assertEquals("", normalized);
        }
    }