Package org.apache.abdera.protocol.util

Source Code of org.apache.abdera.protocol.util.EncodingUtil

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  The ASF licenses this file to You
* 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.  For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.abdera.protocol.util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.abdera.i18n.iri.Constants;
import org.apache.abdera.i18n.iri.Escaping;
import org.apache.abdera.i18n.unicode.Normalizer;
import org.apache.abdera.util.CompressionUtil;
import org.apache.abdera.util.CompressionUtil.CompressionCodec;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.net.BCodec;
import org.apache.commons.codec.net.QCodec;

public class EncodingUtil {

  public static final String SANITIZE_PATTERN = "[^A-Za-z0-9\\%!$&\\\\'()*+,;=]";
 
  public static String sanitize(String slug) {
    return sanitize(slug, null, false, null, SANITIZE_PATTERN);
  }
 
  public static String sanitize(String slug, String filler) {
    return sanitize(slug, filler, false, null, SANITIZE_PATTERN);
  }
 
  public static String sanitize(String slug, String filler, boolean lower) {
    return sanitize(slug, filler, lower, null, SANITIZE_PATTERN);
  }
 
  public static String sanitize(String slug, String filler, String pattern) {
    return sanitize(slug, filler, false, null, pattern);
  }
 
  public static String sanitize(String slug, String filler, boolean lower, String pattern) {
    return sanitize(slug, filler, lower, null, pattern);
  }

  public static String sanitize(
      String slug,
      String filler,
      boolean lower,
      Normalizer.Form form) {
    return sanitize(slug,filler,lower,form,SANITIZE_PATTERN);
  }
 
  /**
   * Used to sanitize a string.  Optionally performs Unicode Form KD normalization
   * on a string to break extended characters down, then replaces non alphanumeric
   * characters with a specified filler replacement.
   * @param slug The source string
   * @param filler The replacement string
   * @param lower True if the result should be lowercase
   * @param form Unicode Normalization form to use (or null)
   */
  public static String sanitize(
    String slug,
    String filler,
    boolean lower,
    Normalizer.Form form,
    String pattern) {
      if (slug == null) return null;
      if (lower) slug = slug.toLowerCase();
      if (form != null) {
        try {
          StringBuffer value =
            Normalizer.normalize(
              slug, form);         
          slug = value.toString();
        } catch (Exception e) {}
      } else {
        slug = Escaping.encode(slug, Constants.PATH);
      }
      if (filler != null) {
        slug = slug.replaceAll(pattern,filler);
      } else {
        slug = Escaping.encode(slug, Constants.PATHNODELIMS);
      }
      return slug;
  }
 
  public static enum Codec { B, Q };
 
  public static String encode(String value) {
    return encode(value, "UTF-8", Codec.B);
  }
 
  public static String encode(String value, String charset) {
    return encode(value, charset, Codec.B);
  }
 
  /**
   * Used to encode a string as specified by RFC 2047
   * @param value The string to encode
   * @param charset The character set to use for the encoding
   */
  public static String encode(String value, String charset, Codec codec) {
    if (value == null) return null;
    try {
      switch(codec) {
        case Q:  return (new QCodec(charset)).encode(value);
        case B:
        default: return (new BCodec(charset)).encode(value);
      }
    } catch (Exception e) {
      return value;
    }
  }
 
  /**
   * Used to decode a string as specified by RFC 2047
   * @param value The encoded string
   */
  public static String decode(String value) {
    if (value == null) return null;
    try {
      // try BCodec first
      return (new BCodec()).decode(value);
    } catch (DecoderException de) {
      // try QCodec next
      try {
        return (new QCodec()).decode(value);
      } catch (Exception ex) {
        return value;
      }
    } catch (Exception e) {
      return value;
    }
  }
 
  public static InputStream getDecodingInputStream(InputStream in, String ce) throws IOException {
    String[] encodings = CacheControlUtil.CacheControlParser.splitAndTrim(ce, ",", false);
    for (int n = encodings.length -1; n >= 0; n--) {
      CompressionCodec encoding = CompressionCodec.valueOf(encodings[n].toUpperCase().replaceAll("-", ""));
      in = CompressionUtil.getDecodingInputStream(in, encoding);
    }
    return in;
  }
}
TOP

Related Classes of org.apache.abdera.protocol.util.EncodingUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.