HttpRequestHandlerRegistry.java revision 069490a5ca2fd1988d29daf45d892f47ad665115
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/protocol/HttpRequestHandlerRegistry.java $
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * $Revision: 630662 $
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * $Date: 2008-02-24 11:40:51 -0800 (Sun, 24 Feb 2008) $
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ====================================================================
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed to the Apache Software Foundation (ASF) under one
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * or more contributor license agreements.  See the NOTICE file
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distributed with this work for additional information
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * regarding copyright ownership.  The ASF licenses this file
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to you under the Apache License, Version 2.0 (the
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "License"); you may not use this file except in compliance
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * with the License.  You may obtain a copy of the License at
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   http://www.apache.org/licenses/LICENSE-2.0
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Unless required by applicable law or agreed to in writing,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * software distributed under the License is distributed on an
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * KIND, either express or implied.  See the License for the
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * specific language governing permissions and limitations
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * under the License.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ====================================================================
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * This software consists of voluntary contributions made by many
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * individuals on behalf of the Apache Software Foundation.  For more
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * information on the Apache Software Foundation, please see
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * <http://www.apache.org/>.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.apache.http.protocol;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.Map;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Maintains a map of HTTP request handlers keyed by a request URI pattern.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * {@link HttpRequestHandler} instances can be looked up by request URI
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * using the {@link HttpRequestHandlerResolver} interface.<br/>
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Patterns may have three formats:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * <ul>
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   <li><code>*</code></li>
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   <li><code>*&lt;uri&gt;</code></li>
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   <li><code>&lt;uri&gt;*</code></li>
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * </ul>
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @version $Revision: 630662 $
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class HttpRequestHandlerRegistry implements HttpRequestHandlerResolver {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private final UriPatternMatcher matcher;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public HttpRequestHandlerRegistry() {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        matcher = new UriPatternMatcher();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void register(final String pattern, final HttpRequestHandler handler) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        matcher.register(pattern, handler);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void unregister(final String pattern) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        matcher.unregister(pattern);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void setHandlers(final Map map) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        matcher.setHandlers(map);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public HttpRequestHandler lookup(final String requestURI) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return (HttpRequestHandler) matcher.lookup(requestURI);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @deprecated
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected boolean matchUriRequestPattern(final String pattern, final String requestUri) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return matcher.matchUriRequestPattern(pattern, requestUri);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)