    001/*
    002 * Licensed to the Apache Software Foundation (ASF) under one or more
    003 * contributor license agreements.  See the NOTICE file distributed with
    004 * this work for additional information regarding copyright ownership.
    005 * The ASF licenses this file to You under the Apache License, Version 2.0
    006 * (the "License"); you may not use this file except in compliance with
    007 * the License.  You may obtain a copy of the License at
    008 *
    009 *     https://www.apache.org/licenses/LICENSE-2.0
    010 *
    011 * Unless required by applicable law or agreed to in writing, software
    012 * distributed under the License is distributed on an "AS IS" BASIS,
    013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014 * See the License for the specific language governing permissions and
    015 * limitations under the License.
    016 */
    017package org.apache.commons.text.lookup;
    018
    019/**
    020 * An enumeration defining {@link StringLookup} objects available through {@link StringLookupFactory}.
    021 * <p>
    022 * This enum was adapted and expanded from Apache Commons Configuration 2.4.
    023 * </p>
    024 * <p><strong>NOTE:</strong> Starting in version 1.10.0, not all lookups defined in this class are
    025 * included by default in the
    026 * {@link StringLookupFactory#addDefaultStringLookups(java.util.Map) StringLookupFactory.addDefaultStringLookups}
    027 * method. See the {@link StringLookupFactory} class documentation for details.
    028 * </p>
    029 *
    030 * @see StringLookupFactory
    031 * @see StringLookup
    032 * @since 1.7
    033 */
    034public enum DefaultStringLookup {
    035
    036    /**
    037     * The lookup for Base64 decoding using the key {@code "base64Decoder"}.
    038     *
    039     * @see StringLookupFactory#KEY_BASE64_DECODER
    040     * @see StringLookupFactory#base64DecoderStringLookup()
    041     */
    042    BASE64_DECODER(StringLookupFactory.KEY_BASE64_DECODER, StringLookupFactory.INSTANCE.base64DecoderStringLookup()),
    043
    044    /**
    045     * The lookup for Base64 encoding using the key {@code "base64Encoder"}.
    046     *
    047     * @see StringLookupFactory#KEY_BASE64_ENCODER
    048     * @see StringLookupFactory#base64EncoderStringLookup()
    049     */
    050    BASE64_ENCODER(StringLookupFactory.KEY_BASE64_ENCODER, StringLookupFactory.INSTANCE.base64EncoderStringLookup()),
    051
    052    /**
    053     * The lookup for Java static class member constants using the key {@code "const"}.
    054     *
    055     * @see StringLookupFactory#KEY_CONST
    056     * @see StringLookupFactory#constantStringLookup()
    057     */
    058    CONST(StringLookupFactory.KEY_CONST, StringLookupFactory.INSTANCE.constantStringLookup()),
    059
    060    /**
    061     * The lookup for formatting the current date using the key {@code "date"}.
    062     *
    063     * @see StringLookupFactory#KEY_DATE
    064     * @see StringLookupFactory#dateStringLookup()
    065     */
    066    DATE(StringLookupFactory.KEY_DATE, StringLookupFactory.INSTANCE.dateStringLookup()),
    067
    068    /**
    069     * The lookup for DNS using the key {@code "dns"}.
    070     *
    071     * @see StringLookupFactory#KEY_DNS
    072     * @see StringLookupFactory#dnsStringLookup()
    073     * @since 1.8
    074     */
    075    DNS(StringLookupFactory.KEY_DNS, StringLookupFactory.INSTANCE.dnsStringLookup()),
    076
    077    /**
    078     * The lookup for environment properties using the key {@code "env"}.
    079     *
    080     * @see StringLookupFactory#KEY_ENV
    081     * @see StringLookupFactory#environmentVariableStringLookup()
    082     */
    083    ENVIRONMENT(StringLookupFactory.KEY_ENV, StringLookupFactory.INSTANCE.environmentVariableStringLookup()),
    084
    085    /**
    086     * The lookup for files using the key {@code "file"}.
    087     *
    088     * @see StringLookupFactory#KEY_FILE
    089     * @see StringLookupFactory#fileStringLookup()
    090     */
    091    FILE(StringLookupFactory.KEY_FILE, StringLookupFactory.INSTANCE.fileStringLookup()),
    092
    093    /**
    094     * The lookup for Java platform information using the key {@code "java"}.
    095     *
    096     * @see StringLookupFactory#KEY_JAVA
    097     * @see StringLookupFactory#javaPlatformStringLookup()
    098     */
    099    JAVA(StringLookupFactory.KEY_JAVA, StringLookupFactory.INSTANCE.javaPlatformStringLookup()),
    100
    101    /**
    102     * The lookup for local host information using the key {@code "localhost"}.
    103     *
    104     * @see StringLookupFactory#KEY_LOCALHOST
    105     * @see StringLookupFactory#localHostStringLookup()
    106     */
    107    LOCAL_HOST(StringLookupFactory.KEY_LOCALHOST, StringLookupFactory.INSTANCE.localHostStringLookup()),
    108
    109    /**
    110     * The lookup for local host information using the key {@code "loopbackAddress"}.
    111     *
    112     * @see StringLookupFactory#KEY_LOOPBACK_ADDRESS
    113     * @see StringLookupFactory#loopbackAddressStringLookup()
    114     */
    115    LOOPBACK_ADDRESS(StringLookupFactory.KEY_LOOPBACK_ADDRESS, StringLookupFactory.INSTANCE.loopbackAddressStringLookup()),
    116
    117    /**
    118     * The lookup for properties using the key {@code "properties"}.
    119     *
    120     * @see StringLookupFactory#KEY_PROPERTIES
    121     * @see StringLookupFactory#propertiesStringLookup()
    122     */
    123    PROPERTIES(StringLookupFactory.KEY_PROPERTIES, StringLookupFactory.INSTANCE.propertiesStringLookup()),
    124
    125    /**
    126     * The lookup for resource bundles using the key {@code "resourceBundle"}.
    127     *
    128     * @see StringLookupFactory#KEY_RESOURCE_BUNDLE
    129     * @see StringLookupFactory#resourceBundleStringLookup()
    130     */
    131    RESOURCE_BUNDLE(StringLookupFactory.KEY_RESOURCE_BUNDLE, StringLookupFactory.INSTANCE.resourceBundleStringLookup()),
    132
    133    /**
    134     * The lookup for scripts using the key {@code "script"}.
    135     *
    136     * @see StringLookupFactory#KEY_SCRIPT
    137     * @see StringLookupFactory#scriptStringLookup()
    138     */
    139    SCRIPT(StringLookupFactory.KEY_SCRIPT, StringLookupFactory.INSTANCE.scriptStringLookup()),
    140
    141    /**
    142     * The lookup for system properties using the key {@code "sys"}.
    143     *
    144     * @see StringLookupFactory#KEY_SYS
    145     * @see StringLookupFactory#systemPropertyStringLookup()
    146     */
    147    SYSTEM_PROPERTIES(StringLookupFactory.KEY_SYS, StringLookupFactory.INSTANCE.systemPropertyStringLookup()),
    148
    149    /**
    150     * The lookup for URLs using the key {@code "url"}.
    151     *
    152     * @see StringLookupFactory#KEY_URL
    153     * @see StringLookupFactory#urlStringLookup()
    154     */
    155    URL(StringLookupFactory.KEY_URL, StringLookupFactory.INSTANCE.urlStringLookup()),
    156
    157    /**
    158     * The lookup for URL decoding using the key {@code "urlDecoder"}.
    159     *
    160     * @see StringLookupFactory#KEY_URL_DECODER
    161     * @see StringLookupFactory#urlDecoderStringLookup()
    162     */
    163    URL_DECODER(StringLookupFactory.KEY_URL_DECODER, StringLookupFactory.INSTANCE.urlDecoderStringLookup()),
    164
    165    /**
    166     * The lookup for URL encoding using the key {@code "urlEncoder"}.
    167     *
    168     * @see StringLookupFactory#KEY_URL_ENCODER
    169     * @see StringLookupFactory#urlEncoderStringLookup()
    170     */
    171    URL_ENCODER(StringLookupFactory.KEY_URL_ENCODER, StringLookupFactory.INSTANCE.urlEncoderStringLookup()),
    172
    173    /**
    174     * The lookup for XML decoding using the key {@code "xml"}.
    175     *
    176     * @see StringLookupFactory#KEY_XML
    177     * @see StringLookupFactory#xmlStringLookup()
    178     */
    179    XML(StringLookupFactory.KEY_XML, StringLookupFactory.INSTANCE.xmlStringLookup()),
    180
    181    /**
    182     * The lookup for XML decoding using the key {@code "xmlDecoder"}.
    183     *
    184     * @see StringLookupFactory#KEY_XML_DECODER
    185     * @see StringLookupFactory#xmlDecoderStringLookup()
    186     * @since 1.11.0
    187     */
    188    XML_DECODER(StringLookupFactory.KEY_XML_DECODER, StringLookupFactory.INSTANCE.xmlDecoderStringLookup()),
    189
    190    /**
    191     * The lookup for XML encoding using the key {@code "xmlEncoder"}.
    192     *
    193     * @see StringLookupFactory#KEY_XML_ENCODER
    194     * @see StringLookupFactory#xmlEncoderStringLookup()
    195     * @since 1.11.0
    196     */
    197    XML_ENCODER(StringLookupFactory.KEY_XML_ENCODER, StringLookupFactory.INSTANCE.xmlEncoderStringLookup());
    198
    199    /** The prefix under which the associated lookup object is registered. */
    200    private final String key;
    201
    202    /** The associated lookup instance. */
    203    private final StringLookup lookup;
    204
    205    /**
    206     * Constructs a new instance of {@link DefaultStringLookup} and sets the key and the associated lookup instance.
    207     *
    208     * @param prefix the prefix
    209     * @param lookup the {@link StringLookup} instance
    210     */
    211    DefaultStringLookup(final String prefix, final StringLookup lookup) {
    212        this.key = prefix;
    213        this.lookup = lookup;
    214    }
    215
    216    /**
    217     * Gets the standard prefix for the lookup object of this kind.
    218     *
    219     * @return the prefix
    220     */
    221    public String getKey() {
    222        return key;
    223    }
    224
    225    /**
    226     * Gets the standard {@link StringLookup} instance of this kind.
    227     *
    228     * @return the associated {@link StringLookup} object
    229     */
    230    public StringLookup getStringLookup() {
    231        return lookup;
    232    }
    233}