@Override public LookupRegistry<T> get() { return new UriPatternMatcher<>(); }
@Override public LookupRegistry<T> get() { return new UriPatternMatcher<>(); }
public AsyncPushConsumerRegistry() { this.primary = new UriPatternMatcher<>(); this.hostMap = new ConcurrentHashMap<>(); }
public static <T> LookupRegistry<T> newMatcher(final UriPatternType type) { if (type == null) { return new UriPatternMatcher<>(); } switch (type) { case REGEX: return new UriRegexMatcher<>(); default: return new UriPatternMatcher<>(); } }
public static <T> LookupRegistry<T> newMatcher(final UriPatternType type) { if (type == null) { return new UriPatternMatcher<>(); } switch (type) { case REGEX: return new UriRegexMatcher<>(); default: return new UriPatternMatcher<>(); } }
@Override public LookupRegistry<String> get() { return new UriPatternMatcher<>(); }
public void register(final String hostname, final String uriPattern, final Supplier<AsyncPushConsumer> supplier) { Args.notBlank(uriPattern, "URI pattern"); Args.notNull(supplier, "Supplier"); if (hostname == null) { primary.register(uriPattern, supplier); } else { final String key = hostname.toLowerCase(Locale.ROOT); UriPatternMatcher<Supplier<AsyncPushConsumer>> matcher = hostMap.get(key); if (matcher == null) { final UriPatternMatcher<Supplier<AsyncPushConsumer>> newMatcher = new UriPatternMatcher<>(); matcher = hostMap.putIfAbsent(key, newMatcher); if (matcher == null) { matcher = newMatcher; } } matcher.register(uriPattern, supplier); } }
@Test(expected=IllegalArgumentException.class) public void testLookupInvalidInput() throws Exception { final LookupRegistry<Object> matcher = new UriPatternMatcher<>(); matcher.lookup(null); }
@Test(expected=IllegalArgumentException.class) public void testRegisterInvalidInput() throws Exception { final LookupRegistry<Object> matcher = new UriPatternMatcher<>(); matcher.register(null, null); }
@Test(expected=IllegalArgumentException.class) public void testRegisterNull() throws Exception { final LookupRegistry<Object> matcher = new UriPatternMatcher<>(); matcher.register(null, null); }
@Test public void testSuffixPatternOverPrefixPatternMatch() throws Exception { final Object h1 = new Object(); final Object h2 = new Object(); final LookupRegistry<Object> matcher = new UriPatternMatcher<>(); matcher.register("/ma*", h1); matcher.register("*tch", h2); final Object h = matcher.lookup("/match"); Assert.assertNotNull(h); Assert.assertTrue(h1 == h); }
@Test public void testEntrySet() throws Exception { final Object h1 = new Object(); final Object h2 = new Object(); final Object h3 = new Object(); final UriPatternMatcher<Object> matcher = new UriPatternMatcher<>(); Assert.assertEquals(0, matcher.entrySet().size()); matcher.register("/h1", h1); Assert.assertEquals(1, matcher.entrySet().size()); matcher.register("/h2", h2); Assert.assertEquals(2, matcher.entrySet().size()); matcher.register("/h3", h3); Assert.assertEquals(3, matcher.entrySet().size()); }
@Test public void testWildCardMatching2() throws Exception { final Object h1 = new Object(); final Object h2 = new Object(); final Object def = new Object(); final LookupRegistry<Object> matcher = new UriPatternMatcher<>(); matcher.register("*", def); matcher.register("*.view", h1); matcher.register("*.form", h2); Object h; h = matcher.lookup("/that.view"); Assert.assertNotNull(h); Assert.assertTrue(h1 == h); h = matcher.lookup("/that.form"); Assert.assertNotNull(h); Assert.assertTrue(h2 == h); h = matcher.lookup("/whatever"); Assert.assertNotNull(h); Assert.assertTrue(def == h); }
@Test public void testWildCardMatching1() throws Exception { final Object h1 = new Object(); final Object h2 = new Object(); final Object h3 = new Object(); final Object def = new Object(); final LookupRegistry<Object> matcher = new UriPatternMatcher<>(); matcher.register("*", def); matcher.register("/one/*", h1); matcher.register("/one/two/*", h2); matcher.register("/one/two/three/*", h3); Object h; h = matcher.lookup("/one/request"); Assert.assertNotNull(h); Assert.assertTrue(h1 == h); h = matcher.lookup("/one/two/request"); Assert.assertNotNull(h); Assert.assertTrue(h2 == h); h = matcher.lookup("/one/two/three/request"); Assert.assertNotNull(h); Assert.assertTrue(h3 == h); h = matcher.lookup("default/request"); Assert.assertNotNull(h); Assert.assertTrue(def == h); }
@Test public void testRegisterUnregister() throws Exception { final Object h1 = new Object(); final Object h2 = new Object(); final Object h3 = new Object(); final LookupRegistry<Object> matcher = new UriPatternMatcher<>(); matcher.register("/h1", h1); matcher.register("/h2", h2); matcher.register("/h3", h3); Object h; h = matcher.lookup("/h1"); Assert.assertNotNull(h); Assert.assertTrue(h1 == h); h = matcher.lookup("/h2"); Assert.assertNotNull(h); Assert.assertTrue(h2 == h); h = matcher.lookup("/h3"); Assert.assertNotNull(h); Assert.assertTrue(h3 == h); matcher.unregister("/h1"); h = matcher.lookup("/h1"); Assert.assertNull(h); }