UrlDecoderStringLookup.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.URLDecoder;
  20. import java.net.URLEncoder;
  21. import java.nio.charset.StandardCharsets;

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

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

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

  39.     String decode(final String key, final String enc) throws UnsupportedEncodingException {
  40.         return URLDecoder.decode(key, enc);
  41.     }

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

  55. }