View Javadoc
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  
18  package org.apache.commons.text.lookup;
19  
20  import java.io.UnsupportedEncodingException;
21  import java.net.URLEncoder;
22  import java.nio.charset.StandardCharsets;
23  
24  /**
25   * Encodes URL Strings using the UTF-8 encoding.
26   *
27   * @see URLEncoder
28   * @since 1.5
29   */
30  final class UrlEncoderStringLookup extends AbstractStringLookup {
31  
32      /**
33       * Defines the singleton for this class.
34       */
35      static final UrlEncoderStringLookup INSTANCE = new UrlEncoderStringLookup();
36  
37      /**
38       * Constructs a new instance.
39       */
40      private UrlEncoderStringLookup() {
41          // empty
42      }
43  
44      String encode(final String key, final String enc) throws UnsupportedEncodingException {
45          return URLEncoder.encode(key, enc);
46      }
47  
48      @Override
49      public String lookup(final String key) {
50          if (key == null) {
51              return null;
52          }
53          final String enc = StandardCharsets.UTF_8.name();
54          try {
55              return encode(key, enc);
56          } catch (final UnsupportedEncodingException e) {
57              // Can't happen since UTF-8 is required by the Java specification.
58              throw IllegalArgumentExceptions.format(e, "%s: source=%s, encoding=%s", e, key, enc);
59          }
60      }
61  
62  }