Development Class Java

/*
 * Copyright 2008-2010 the T2 Project ant the Others.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
//package org.t2framework.commons.util;
/**
 * <#if locale="en">
 * 


 * Escape html entities. You can plug in HtmlEscapeStrategy and change behavior.
 * 
 * 


 * <#else>
 * 


 * 
 * 


 * 
 * 
 * @author shot
 */
public class HtmlEscapeUtil {
  private static HtmlEscapeStrategy escapeStrategy = new DefaultHtmlEscapeStrategy();
  public static HtmlEscapeStrategy getHtmlEscapeStrategy() {
    return escapeStrategy;
  }
  public static void setHtmlEscapeStrategy(
      HtmlEscapeStrategy htmlEscapeStrategy) {
    escapeStrategy = htmlEscapeStrategy;
  }
  public static String escape(final String s) {
    return escape(s, true, true);
  }
  public static String escape(final String s, final boolean quote,
      final boolean amp) {
    return escapeStrategy.escape(s, quote, amp);
  }
  public static interface HtmlEscapeStrategy {
    public String escape(final String s, final boolean quote,
        final boolean amp);
  }
  public static abstract class AbstractHtmlEscapeStrategy implements
      HtmlEscapeStrategy {
    public String escape(final String s, final boolean quote,
        final boolean amp) {
      char[] chars = s.toCharArray();
      StringBuffer sb = new StringBuffer(s.length() + 64);
      for (int i = 0; i < chars.length; i++) {
        char c = chars[i];
        escapeEach(sb, c, quote, amp);
      }
      return new String(sb);
    }
    protected abstract void escapeEach(final StringBuffer buf,
        final char c, final boolean quote, final boolean amp);
  }
  public static class DefaultHtmlEscapeStrategy extends
      AbstractHtmlEscapeStrategy {
    protected void escapeEach(final StringBuffer sb, final char c,
        final boolean quote, final boolean amp) {
      if ((int) c == '\u00A0') {
        sb.append(" ");
      } else if (c == '<') {
        sb.append("<");
      } else if (c == '>') {
        sb.append(">");
      } else if (amp && c == '&') {
        sb.append("&");
      } else if (c == '"') {
        sb.append(""");
      } else if (quote && c == '\'') {
        sb.append("'");
      } else if ((int) c == '\u00A5') {
        sb.append("¥");
      } else {
        sb.append(c);
      }
    }
  }
  public static class JapaneseHtmlEscapeStrategy extends
      AbstractHtmlEscapeStrategy {
    protected void escapeEach(final StringBuffer sb, final char c,
        final boolean quote, final boolean amp) {
      if ((int) c == '\u00A0') {
        sb.append(" ");
      } else if (c == '<') {
        sb.append("<");
      } else if (c == '>') {
        sb.append(">");
      } else if (amp && c == '&') {
        sb.append("&");
      } else if (c == '"') {
        sb.append(""");
      } else if (quote && c == '\'') {
        sb.append("'");
      } else if ((int) c == '\u00A5' || (int) c == '\u005C\') {
        sb.append("¥");
      } else {
        sb.append(c);
      }
    }
  }
}
---------------------
/*
 * Copyright 2008-2009 the T2 Project ant the Others.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.t2framework.commons.util;
import org.t2framework.commons.util.HtmlEscapeUtil;
import org.t2framework.commons.util.HtmlEscapeUtil.HtmlEscapeStrategy;
import junit.framework.TestCase;
public class HtmlEscapeUtilTest extends TestCase {
  public void testescape_amp() throws Exception {
    assertEquals(" ", HtmlEscapeUtil.escape(" ", false, false));
    assertEquals("&nbsp;", HtmlEscapeUtil.escape(" ", true, true));
  }
  public void testescape_quote() throws Exception {
    assertEquals("'hoge'", HtmlEscapeUtil.escape("'hoge'", false, false));
    assertEquals("'hoge'", HtmlEscapeUtil.escape("'hoge'", true,
        true));
  }
  public void testescape_lt() throws Exception {
    assertEquals("<<", HtmlEscapeUtil.escape("<<", false, false));
    assertEquals("<<", HtmlEscapeUtil.escape("<<", true, true));
  }
  public void testescape_gt() throws Exception {
    assertEquals(">>", HtmlEscapeUtil.escape(">>", false, false));
    assertEquals(">>", HtmlEscapeUtil.escape(">>", true, true));
  }
  public void testescape_00A5_withDefaultStrategy() throws Exception {
    char c = '\u00a5';
    assertEquals("¥", HtmlEscapeUtil.escape(Character.toString(c),
        false, false));
    assertEquals("¥", HtmlEscapeUtil.escape(Character.toString(c),
        true, true));
    c = '\u005c\';
    assertNotSame("¥", HtmlEscapeUtil.escape(Character.toString(c),
        false, false));
    assertNotSame("¥", HtmlEscapeUtil.escape(Character.toString(c),
        true, true));
    assertEquals("\\", HtmlEscapeUtil.escape(Character.toString(c), false,
        false));
    assertEquals("\\", HtmlEscapeUtil.escape(Character.toString(c), true,
        true));
  }
  public void testescape_yen() throws Exception {
    HtmlEscapeStrategy orgStrategy = HtmlEscapeUtil.getHtmlEscapeStrategy();
    HtmlEscapeUtil
        .setHtmlEscapeStrategy(new HtmlEscapeUtil.JapaneseHtmlEscapeStrategy());
    assertEquals("¥¥", HtmlEscapeUtil.escape("\\\\", false, false));
    assertEquals("¥¥", HtmlEscapeUtil.escape("\\\\", true, true));
    HtmlEscapeUtil.setHtmlEscapeStrategy(orgStrategy);
  }
}