View Javadoc

1   /*
2    *
3    * The Seasar Software License, Version 1.1
4    *
5    * Copyright (c) 2003-2004 The Seasar Project. All rights reserved.
6    *
7    * Redistribution and use in source and binary forms, with or
8    * without modification, are permitted provided that the following
9    * conditions are met:
10   *
11   * 1. Redistributions of source code must retain the above
12   *    copyright notice, this list of conditions and the following
13   *    disclaimer.
14   *
15   * 2. Redistributions in binary form must reproduce the above
16   *    copyright notice, this list of conditions and the following
17   *    disclaimer in the documentation and/or other materials provided
18   *    with the distribution.
19   *
20   * 3. The end-user documentation included with the redistribution,
21   *    if any, must include the following acknowledgement:
22   *    "This product includes software developed by the
23   *    Seasar Project (http://www.seasar.org/)."
24   *    Alternately, this acknowledgement may appear in the software
25   *    itself, if and wherever such third-party acknowledgements
26   *    normally appear.
27   *
28   * 4. Neither the name "The Seasar Project" nor the names of its
29   *    contributors may be used to endorse or promote products derived
30   *    from this software without specific prior written permission of
31   *    the Seasar Project.
32   *
33   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR
34   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
35   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
36   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE SEASAR PROJECT
37   * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
38   * INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
39   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
40   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
41   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
42   * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING
43   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
44   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
45   */
46  package org.seasar.remoting.common.url;
47  
48  import java.net.URL;
49  import java.net.URLStreamHandler;
50  import java.net.URLStreamHandlerFactory;
51  import java.util.Collections;
52  import java.util.HashMap;
53  import java.util.Map;
54  
55  /***
56   * <code>URLStreamHandler</code> のレジストリです。 <br>
57   * このレジストリは <code>URLStreamHandlerFactory</code> であり、 <code>URL</code>
58   * クラスに設定されます。 {@link #createURLStreamHandler(String)}
59   * が呼び出されると、登録されている <code>URLStreamHandler</code> を返します。
60   * 
61   * @author koichik
62   */
63  public class URLStreamHandlerRegistry implements URLStreamHandlerFactory {
64      protected static final Map registry = Collections.synchronizedMap(new HashMap());
65  
66      static {
67          URL.setURLStreamHandlerFactory(new URLStreamHandlerRegistry());
68      }
69  
70      /***
71       * インスタンスを構築します。
72       */
73      private URLStreamHandlerRegistry() {
74      }
75  
76      /***
77       * 指定されたプロトコルのための、 <code>URLStreamHandler</code> の新しいインスタンスを作成します。
78       * 
79       * @param protocol
80       *            プロトコル (<code>rmi</code> など)
81       */
82      public URLStreamHandler createURLStreamHandler(final String protocol) {
83          return (URLStreamHandler) registry.get(protocol);
84      }
85  
86      /***
87       * プロトコルのための新しい <code>URLStreamHandler</code> を登録します。
88       * 
89       * @param protocol
90       *            プロトコル (<code>rmi</code> など
91       * @param handler
92       *            プロトコルのための <code>URLStreamHandler</code>
93       */
94      public static void registerHandler(final String protocol, final URLStreamHandler handler) {
95          registry.put(protocol, handler);
96      }
97  }