diff --git a/common/src/main/java/io/netty/util/DomainMappingBuilder.java b/common/src/main/java/io/netty/util/DomainMappingBuilder.java index 0cdb9712b7..4d49745671 100644 --- a/common/src/main/java/io/netty/util/DomainMappingBuilder.java +++ b/common/src/main/java/io/netty/util/DomainMappingBuilder.java @@ -16,6 +16,8 @@ package io.netty.util; +import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; @@ -137,6 +139,16 @@ public final class DomainMappingBuilder { return defaultValue; } + @Override + public Set> entries() { + int length = domainNamePatterns.length; + Map map = new HashMap(length); + for (int index = 0; index < length; ++index) { + map.put(domainNamePatterns[index], values[index]); + } + return Collections.unmodifiableSet(map.entrySet()); + } + @Override public String toString() { String defaultValueStr = defaultValue.toString(); diff --git a/common/src/main/java/io/netty/util/DomainNameMapping.java b/common/src/main/java/io/netty/util/DomainNameMapping.java index ff9aeb9cb0..f31da8643c 100644 --- a/common/src/main/java/io/netty/util/DomainNameMapping.java +++ b/common/src/main/java/io/netty/util/DomainNameMapping.java @@ -19,9 +19,11 @@ package io.netty.util; import io.netty.util.internal.StringUtil; import java.net.IDN; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; +import java.util.Set; import static io.netty.util.internal.ObjectUtil.checkNotNull; import static io.netty.util.internal.StringUtil.commonSuffixOfLength; @@ -132,6 +134,13 @@ public class DomainNameMapping implements Mapping { return defaultValue; } + /** + * Returns a read-only {@link Set} of the domain mapping patterns and their associated value objects. + */ + public Set> entries() { + return Collections.unmodifiableSet(map.entrySet()); + } + @Override public String toString() { return StringUtil.simpleClassName(this) + "(default: " + defaultValue + ", map: " + map + ')'; diff --git a/common/src/test/java/io/netty/util/DomainNameMappingTest.java b/common/src/test/java/io/netty/util/DomainNameMappingTest.java index bd369e9301..606d6fca68 100644 --- a/common/src/test/java/io/netty/util/DomainNameMappingTest.java +++ b/common/src/test/java/io/netty/util/DomainNameMappingTest.java @@ -16,6 +16,9 @@ package io.netty.util; +import java.util.HashMap; +import java.util.Map; + import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -181,4 +184,37 @@ public class DomainNameMappingTest { "ImmutableDomainNameMapping(default: NotFound, map: {*.netty.io=Netty, downloads.netty.io=Netty-Download})", mapping.toString()); } + + @Test + public void testEntries() { + DomainNameMapping mapping = new DomainNameMapping("NotFound") + .add("netty.io", "Netty") + .add("downloads.netty.io", "Netty-Downloads"); + + Map entries = new HashMap(); + for (Map.Entry entry: mapping.entries()) { + entries.put(entry.getKey(), entry.getValue()); + } + + assertEquals(2, entries.size()); + assertEquals("Netty", entries.get("netty.io")); + assertEquals("Netty-Downloads", entries.get("downloads.netty.io")); + } + + @Test + public void testEntriesWithImmutableDomainNameMapping() { + DomainNameMapping mapping = new DomainMappingBuilder("NotFound") + .add("netty.io", "Netty") + .add("downloads.netty.io", "Netty-Downloads") + .build(); + + Map entries = new HashMap(); + for (Map.Entry entry: mapping.entries()) { + entries.put(entry.getKey(), entry.getValue()); + } + + assertEquals(2, entries.size()); + assertEquals("Netty", entries.get("netty.io")); + assertEquals("Netty-Downloads", entries.get("downloads.netty.io")); + } }