UrlEncoderStringLookup.java

  1. /*
  2.  * Licensed to the Apache Software Foundation (ASF) under one or more
  3.  * contributor license agreements. See the NOTICE file distributed with
  4.  * this work for additional information regarding copyright ownership.
  5.  * The ASF licenses this file to You under the Apache license, Version 2.0
  6.  * (the "License"); you may not use this file except in compliance with
  7.  * the License. You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the license for the specific language governing permissions and
  15.  * limitations under the license.
  16.  */

  17. package org.apache.commons.text.lookup;

  18. import java.io.UnsupportedEncodingException;
  19. import java.net.URLEncoder;
  20. import java.nio.charset.StandardCharsets;

  21. /**
  22.  * Encodes URL Strings using the UTF-8 encoding.
  23.  *
  24.  * @see URLEncoder
  25.  * @since 1.5
  26.  */
  27. final class UrlEncoderStringLookup extends AbstractStringLookup {

  28.     /**
  29.      * Defines the singleton for this class.
  30.      */
  31.     static final UrlEncoderStringLookup INSTANCE = new UrlEncoderStringLookup();

  32.     /**
  33.      * Constructs a new instance.
  34.      */
  35.     private UrlEncoderStringLookup() {
  36.         // empty
  37.     }

  38.     String encode(final String key, final String enc) throws UnsupportedEncodingException {
  39.         return URLEncoder.encode(key, enc);
  40.     }

  41.     @Override
  42.     public String lookup(final String key) {
  43.         if (key == null) {
  44.             return null;
  45.         }
  46.         final String enc = StandardCharsets.UTF_8.name();
  47.         try {
  48.             return encode(key, enc);
  49.         } catch (final UnsupportedEncodingException e) {
  50.             // Can't happen since UTF-8 is required by the Java specification.
  51.             throw IllegalArgumentExceptions.format(e, "%s: source=%s, encoding=%s", e, key, enc);
  52.         }
  53.     }

  54. }