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 *     http://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.configuration2.interpol;
018
019import org.apache.commons.text.lookup.StringLookupFactory;
020
021/**
022 * <p>
023 * An enumeration class defining constants for the {@code Lookup} objects available for each {@code Configuration}
024 * object per default.
025 * </p>
026 * <p>
027 * When a new configuration object derived from {@code AbstractConfiguration} is created it installs a
028 * {@link ConfigurationInterpolator} with a default set of {@link Lookup} objects. These lookups are defined by this
029 * enumeration class.
030 * </p>
031 * <p>
032 * All the default {@code Lookup} classes are state-less, thus their instances can be shared between multiple
033 * configuration objects. Therefore, it makes sense to keep shared instances in this enumeration class.
034 * </p>
035 *
036 * Provides access to lookups defined in Apache Commons Text:
037 * <ul>
038 * <li>"base64Decoder" for the {@code Base64DecoderStringLookup} since Apache Commons Text 1.6.</li>
039 * <li>"base64Encoder" for the {@code Base64EncoderStringLookup} since Apache Commons Text 1.6.</li>
040 * <li>"const" for the {@code ConstantStringLookup} since Apache Commons Text 1.5.</li>
041 * <li>"date" for the {@code DateStringLookup}.</li>
042 * <li>"env" for the {@code EnvironmentVariableStringLookup}.</li>
043 * <li>"file" for the {@code FileStringLookup} since Apache Commons Text 1.5.</li>
044 * <li>"java" for the {@code JavaPlatformStringLookup}.</li>
045 * <li>"localhost" for the {@code LocalHostStringLookup}, see {@code #localHostStringLookup()} for key names; since
046 * Apache Commons Text 1.3.</li>
047 * <li>"properties" for the {@code PropertiesStringLookup} since Apache Commons Text 1.5.</li>
048 * <li>"resourceBundle" for the {@code ResourceBundleStringLookup} since Apache Commons Text 1.5.</li>
049 * <li>"script" for the {@code ScriptStringLookup} since Apache Commons Text 1.5.</li>
050 * <li>"sys" for the {@code SystemPropertyStringLookup}.</li>
051 * <li>"url" for the {@code UrlStringLookup} since Apache Commons Text 1.5.</li>
052 * <li>"urlDecoder" for the {@code UrlDecoderStringLookup} since Apache Commons Text 1.6.</li>
053 * <li>"urlEncoder" for the {@code UrlEncoderStringLookup} since Apache Commons Text 1.6.</li>
054 * <li>"xml" for the {@code XmlStringLookup} since Apache Commons Text 1.5.</li>
055 * </ul>
056 *
057 * @since 2.0
058 */
059public enum DefaultLookups
060{
061
062    /**
063     * The lookup for Base64 decoding.
064     *
065     * @since 2.4
066     */
067    BASE64_DECODER(StringLookupFactory.KEY_BASE64_DECODER,
068            new StringLookupAdapter(StringLookupFactory.INSTANCE.base64DecoderStringLookup())),
069
070    /**
071     * The lookup for Base64 decoding.
072     *
073     * @since 2.4
074     */
075    BASE64_ENCODER(StringLookupFactory.KEY_BASE64_ENCODER,
076            new StringLookupAdapter(StringLookupFactory.INSTANCE.base64EncoderStringLookup())),
077
078    /**
079     * The lookup for constants.
080     *
081     * @since 2.4
082     */
083    CONST(StringLookupFactory.KEY_CONST, new StringLookupAdapter(StringLookupFactory.INSTANCE.constantStringLookup())),
084
085    /**
086     * The lookup for dates.
087     *
088     * @since 2.4
089     */
090    DATE(StringLookupFactory.KEY_DATE, new StringLookupAdapter(StringLookupFactory.INSTANCE.dateStringLookup())),
091
092    /**
093     * The lookup for DNS.
094     *
095     * @since 2.6
096     */
097    DNS(StringLookupFactory.KEY_DNS, new StringLookupAdapter(StringLookupFactory.INSTANCE.dnsStringLookup())),
098
099    /**
100     * The lookup for environment properties.
101     */
102    ENVIRONMENT(StringLookupFactory.KEY_ENV,
103            new StringLookupAdapter(StringLookupFactory.INSTANCE.environmentVariableStringLookup())),
104
105    /**
106     * The lookup for files.
107     *
108     * @since 2.4
109     */
110    FILE(StringLookupFactory.KEY_FILE, new StringLookupAdapter(StringLookupFactory.INSTANCE.fileStringLookup())),
111
112    /**
113     * The lookup for Java platform information.
114     *
115     * @since 2.4
116     */
117    JAVA(StringLookupFactory.KEY_JAVA,
118            new StringLookupAdapter(StringLookupFactory.INSTANCE.javaPlatformStringLookup())),
119
120    /**
121     * The lookup for localhost information.
122     *
123     * @since 2.4
124     */
125    LOCAL_HOST(StringLookupFactory.KEY_LOCALHOST,
126            new StringLookupAdapter(StringLookupFactory.INSTANCE.localHostStringLookup())),
127
128    /**
129     * The lookup for properties.
130     *
131     * @since 2.4
132     */
133    PROPERTIES(StringLookupFactory.KEY_PROPERTIES,
134            new StringLookupAdapter(StringLookupFactory.INSTANCE.propertiesStringLookup())),
135
136    /**
137     * The lookup for resource bundles.
138     *
139     * @since 2.4
140     */
141    RESOURCE_BUNDLE(StringLookupFactory.KEY_RESOURCE_BUNDLE,
142            new StringLookupAdapter(StringLookupFactory.INSTANCE.resourceBundleStringLookup())),
143
144    /**
145     * The lookup for scripts.
146     *
147     * @since 2.4
148     */
149    SCRIPT(StringLookupFactory.KEY_SCRIPT, new StringLookupAdapter(StringLookupFactory.INSTANCE.scriptStringLookup())),
150
151    /**
152     * The lookup for system properties.
153     */
154    SYSTEM_PROPERTIES(StringLookupFactory.KEY_SYS,
155            new StringLookupAdapter(StringLookupFactory.INSTANCE.systemPropertyStringLookup())),
156
157    /**
158     * The lookup for URLs.
159     *
160     * @since 2.4
161     */
162    URL(StringLookupFactory.KEY_URL, new StringLookupAdapter(StringLookupFactory.INSTANCE.urlStringLookup())),
163
164    /**
165     * The lookup for URL decoding.
166     *
167     * @since 2.4
168     */
169    URL_DECODER(StringLookupFactory.KEY_URL_DECODER,
170            new StringLookupAdapter(StringLookupFactory.INSTANCE.urlDecoderStringLookup())),
171
172    /**
173     * The lookup for URL decoding.
174     *
175     * @since 2.4
176     */
177    URL_ENCODER(StringLookupFactory.KEY_URL_ENCODER,
178            new StringLookupAdapter(StringLookupFactory.INSTANCE.urlEncoderStringLookup())),
179
180    /**
181     * The lookup for URL decoding.
182     *
183     * @since 2.4
184     */
185    XML(StringLookupFactory.KEY_XML, new StringLookupAdapter(StringLookupFactory.INSTANCE.xmlStringLookup()));
186
187    /** The associated lookup instance. */
188    private final Lookup lookup;
189
190    /** The prefix under which the associated lookup object is registered. */
191    private final String prefix;
192
193    /**
194     * Creates a new instance of {@code DefaultLookups} and sets the prefix and the associated lookup instance.
195     *
196     * @param prefix
197     *            the prefix
198     * @param lookup
199     *            the {@code Lookup} instance
200     */
201    private DefaultLookups(final String prefix, final Lookup lookup)
202    {
203        this.prefix = prefix;
204        this.lookup = lookup;
205    }
206
207    /**
208     * Returns the standard {@code Lookup} instance of this kind.
209     *
210     * @return the associated {@code Lookup} object
211     */
212    public Lookup getLookup()
213    {
214        return lookup;
215    }
216
217    /**
218     * Returns the standard prefix for the lookup object of this kind.
219     *
220     * @return the prefix
221     */
222    public String getPrefix()
223    {
224        return prefix;
225    }
226}