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 }