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 }