Repository: commons-text Updated Branches: refs/heads/master 2f9ba5529 -> 7b783fd1f
[TEXT-117] Add a local host string lookup: LocalHostStringLookup Project: http://git-wip-us.apache.org/repos/asf/commons-text/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-text/commit/7b783fd1 Tree: http://git-wip-us.apache.org/repos/asf/commons-text/tree/7b783fd1 Diff: http://git-wip-us.apache.org/repos/asf/commons-text/diff/7b783fd1 Branch: refs/heads/master Commit: 7b783fd1fe04347769ec7c1402992941c9076bea Parents: 2f9ba55 Author: Gary Gregory <garydgreg...@gmail.com> Authored: Mon Feb 12 18:54:59 2018 -0700 Committer: Gary Gregory <garydgreg...@gmail.com> Committed: Mon Feb 12 18:54:59 2018 -0700 ---------------------------------------------------------------------- src/changes/changes.xml | 1 + .../text/lookup/InterpolatorStringLookup.java | 1 + .../text/lookup/LocalHostStringLookup.java | 81 ++++++++++++++++++++ .../text/lookup/StringLookupFactory.java | 22 +++++- ...titutorWithInterpolatorStringLookupTest.java | 24 ++++++ .../text/lookup/LocalHostStringLookupTest.java | 45 +++++++++++ 6 files changed, 172 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-text/blob/7b783fd1/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 4f1b8a6..114de08 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -52,6 +52,7 @@ The <action> type attribute can be add,update,fix,remove. <action issue="TEXT-114" type="add" dev="ggregory">Add a StrSubstitutor replacement based on interfaces: StringSubstitutor</action> <action issue="TEXT-115" type="add" dev="ggregory">Add a StrBuilder replacement based on the StringMatcher interface: TextStringBuilder</action> <action issue="TEXT-116" type="add" dev="ggregory">Add a StrTokenizer replacement based on the StringMatcher interface: StringTokenizer</action> + <action issue="TEXT-117" type="add" dev="ggregory">Add a local host string lookup: LocalHostStringLookup</action> </release> <release version="1.2" date="2017-12-12" description="Release 1.2"> http://git-wip-us.apache.org/repos/asf/commons-text/blob/7b783fd1/src/main/java/org/apache/commons/text/lookup/InterpolatorStringLookup.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/text/lookup/InterpolatorStringLookup.java b/src/main/java/org/apache/commons/text/lookup/InterpolatorStringLookup.java index 0a7b1b2..798c234 100644 --- a/src/main/java/org/apache/commons/text/lookup/InterpolatorStringLookup.java +++ b/src/main/java/org/apache/commons/text/lookup/InterpolatorStringLookup.java @@ -82,6 +82,7 @@ class InterpolatorStringLookup extends AbstractStringLookup { stringLookupMap.put("env", EnvironmentVariableStringLookup.INSTANCE); stringLookupMap.put("java", JavaPlatformStringLookup.INSTANCE); stringLookupMap.put("date", DateStringLookup.INSTANCE); + stringLookupMap.put("localhost", LocalHostStringLookup.INSTANCE); } /** http://git-wip-us.apache.org/repos/asf/commons-text/blob/7b783fd1/src/main/java/org/apache/commons/text/lookup/LocalHostStringLookup.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/text/lookup/LocalHostStringLookup.java b/src/main/java/org/apache/commons/text/lookup/LocalHostStringLookup.java new file mode 100644 index 0000000..e2970e7 --- /dev/null +++ b/src/main/java/org/apache/commons/text/lookup/LocalHostStringLookup.java @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ +package org.apache.commons.text.lookup; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * Looks up keys related to the local host: host name, canonical host name, host address. + * <p> + * The lookup keys are: + * </p> + * <ul> + * <li><b>name</b>: for the local host name, for example {@code EXAMPLE}.</li> + * <li><b>canonical-name</b>: for the local canonical host name, for example {@code EXAMPLE.apache.org}.</li> + * <li><b>address</b>: for the local host address, for example {@code 192.168.56.1}.</li> + * </ul> + * + * @since 1.3 + */ +final class LocalHostStringLookup extends AbstractStringLookup { + + /** + * Defines the singleton for this class. + */ + static final LocalHostStringLookup INSTANCE = new LocalHostStringLookup(); + + /** + * No need to build instances for now. + */ + private LocalHostStringLookup() { + // empty + } + + /** + * Looks up the value of the Java platform key. + * + * @param key + * the key to be looked up, may be null + * @return The value of the environment variable. + */ + @Override + public String lookup(final String key) { + switch (key) { + case "name": + try { + return InetAddress.getLocalHost().getHostName(); + } catch (final UnknownHostException e) { + return null; + } + case "canonical-name": + try { + return InetAddress.getLocalHost().getCanonicalHostName(); + } catch (final UnknownHostException e) { + return null; + } + case "address": + try { + return InetAddress.getLocalHost().getHostAddress(); + } catch (final UnknownHostException e) { + return null; + } + default: + throw new IllegalArgumentException(key); + } + } +} http://git-wip-us.apache.org/repos/asf/commons-text/blob/7b783fd1/src/main/java/org/apache/commons/text/lookup/StringLookupFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/text/lookup/StringLookupFactory.java b/src/main/java/org/apache/commons/text/lookup/StringLookupFactory.java index ce63ba8..ac4d4c9 100644 --- a/src/main/java/org/apache/commons/text/lookup/StringLookupFactory.java +++ b/src/main/java/org/apache/commons/text/lookup/StringLookupFactory.java @@ -49,7 +49,8 @@ public final class StringLookupFactory { } /** - * Returns the EnvironmentVariableStringLookup singleton instance. + * Returns the EnvironmentVariableStringLookup singleton instance where the lookup key is an environment variable + * name. * * @return the EnvironmentVariableStringLookup singleton instance. */ @@ -67,6 +68,7 @@ public final class StringLookupFactory { * <li>"env" for the {@link EnvironmentVariableStringLookup}.</li> * <li>"java" for the {@link JavaPlatformStringLookup}.</li> * <li>"date" for the {@link DateStringLookup}.</li> + * <li>"localhost" for the {@link LocalHostStringLookup}, see {@link #localHostStringLookup()} for key names.</li> * </ul> * * @return a new InterpolatorStringLookup. @@ -85,6 +87,7 @@ public final class StringLookupFactory { * <li>"env" for the {@link EnvironmentVariableStringLookup}.</li> * <li>"java" for the {@link JavaPlatformStringLookup}.</li> * <li>"date" for the {@link DateStringLookup}.</li> + * <li>"localhost" for the {@link LocalHostStringLookup}, see {@link #localHostStringLookup()} for key names.</li> * </ul> * * @param <V> @@ -107,6 +110,7 @@ public final class StringLookupFactory { * <li>"env" for the {@link EnvironmentVariableStringLookup}.</li> * <li>"java" for the {@link JavaPlatformStringLookup}.</li> * <li>"date" for the {@link DateStringLookup}.</li> + * <li>"localhost" for the {@link LocalHostStringLookup}, see {@link #localHostStringLookup()} for key names.</li> * </ul> * * @param defaultStringLookup @@ -127,6 +131,20 @@ public final class StringLookupFactory { } /** + * Returns the LocalHostStringLookup singleton instance where the lookup key is one of: + * <ul> + * <li><b>name</b>: for the local host name, for example {@code EXAMPLE}.</li> + * <li><b>canonical-name</b>: for the local canonical host name, for example {@code EXAMPLE.apache.org}.</li> + * <li><b>address</b>: for the local host address, for example {@code 192.168.56.1}.</li> + * </ul> + * + * @return the DateStringLookup singleton instance. + */ + public StringLookup localHostStringLookup() { + return LocalHostStringLookup.INSTANCE; + } + + /** * Returns a new map-based lookup where the request for a lookup is answered with the value for that key. * * @param <V> @@ -164,7 +182,7 @@ public final class StringLookupFactory { } /** - * Returns the SystemPropertyStringLookup singleton instance where the key is a system property name. + * Returns the SystemPropertyStringLookup singleton instance where the lookup key is a system property name. * * @return the SystemPropertyStringLookup singleton instance. */ http://git-wip-us.apache.org/repos/asf/commons-text/blob/7b783fd1/src/test/java/org/apache/commons/text/StringSubstitutorWithInterpolatorStringLookupTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/text/StringSubstitutorWithInterpolatorStringLookupTest.java b/src/test/java/org/apache/commons/text/StringSubstitutorWithInterpolatorStringLookupTest.java index e8bca78..bfac9c8 100644 --- a/src/test/java/org/apache/commons/text/StringSubstitutorWithInterpolatorStringLookupTest.java +++ b/src/test/java/org/apache/commons/text/StringSubstitutorWithInterpolatorStringLookupTest.java @@ -17,6 +17,8 @@ package org.apache.commons.text; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map; @@ -27,6 +29,28 @@ import org.junit.Test; public class StringSubstitutorWithInterpolatorStringLookupTest { @Test + public void testLocalHostLookup_Address() throws UnknownHostException { + final StringSubstitutor strSubst = new StringSubstitutor( + StringLookupFactory.INSTANCE.interpolatorStringLookup()); + Assert.assertEquals(InetAddress.getLocalHost().getHostAddress(), strSubst.replace("${localhost:address}")); + } + + @Test + public void testLocalHostLookup_CanonicalName() throws UnknownHostException { + final StringSubstitutor strSubst = new StringSubstitutor( + StringLookupFactory.INSTANCE.interpolatorStringLookup()); + Assert.assertEquals(InetAddress.getLocalHost().getCanonicalHostName(), + strSubst.replace("${localhost:canonical-name}")); + } + + @Test + public void testLocalHostLookup_Name() throws UnknownHostException { + final StringSubstitutor strSubst = new StringSubstitutor( + StringLookupFactory.INSTANCE.interpolatorStringLookup()); + Assert.assertEquals(InetAddress.getLocalHost().getHostName(), strSubst.replace("${localhost:name}")); + } + + @Test public void testMapAndSystemProperty() { final String key = "key"; final String value = "value"; http://git-wip-us.apache.org/repos/asf/commons-text/blob/7b783fd1/src/test/java/org/apache/commons/text/lookup/LocalHostStringLookupTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/text/lookup/LocalHostStringLookupTest.java b/src/test/java/org/apache/commons/text/lookup/LocalHostStringLookupTest.java new file mode 100644 index 0000000..ffcaf1c --- /dev/null +++ b/src/test/java/org/apache/commons/text/lookup/LocalHostStringLookupTest.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ + +package org.apache.commons.text.lookup; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +import org.junit.Assert; +import org.junit.Test; + +public class LocalHostStringLookupTest { + + @Test + public void testAddress() throws UnknownHostException { + Assert.assertEquals(LocalHostStringLookup.INSTANCE.lookup("address"), + InetAddress.getLocalHost().getHostAddress()); + } + + @Test + public void testCanonicalName() throws UnknownHostException { + Assert.assertEquals(LocalHostStringLookup.INSTANCE.lookup("canonical-name"), + InetAddress.getLocalHost().getCanonicalHostName()); + } + + @Test + public void testName() throws UnknownHostException { + Assert.assertEquals(LocalHostStringLookup.INSTANCE.lookup("name"), InetAddress.getLocalHost().getHostName()); + } + +}