00001 /* 00002 * Copyright (c) 2003-2004, KNOPFLERFISH project 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following 00007 * conditions are met: 00008 * 00009 * - Redistributions of source code must retain the above copyright 00010 * notice, this list of conditions and the following disclaimer. 00011 * 00012 * - Redistributions in binary form must reproduce the above 00013 * copyright notice, this list of conditions and the following 00014 * disclaimer in the documentation and/or other materials 00015 * provided with the distribution. 00016 * 00017 * - Neither the name of the KNOPFLERFISH project nor the names of its 00018 * contributors may be used to endorse or promote products derived 00019 * from this software without specific prior written permission. 00020 * 00021 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00022 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00023 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00024 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00025 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00026 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00027 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00028 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00029 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 00030 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00031 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 00032 * OF THE POSSIBILITY OF SUCH DAMAGE. 00033 */ 00034 00035 package org.knopflerfish.framework; 00036 00037 import java.io.*; 00038 import java.net.*; 00039 00040 00056 public class ReferenceURLStreamHandler extends URLStreamHandler { 00057 00058 final public static String PROTOCOL = "reference"; 00059 00060 ReferenceURLStreamHandler() { 00061 super(); 00062 } 00063 00069 public URLConnection openConnection(URL url) throws IOException { 00070 URL actual = new URL(getActual(url)); 00071 00072 if(!"file".equals(actual.getProtocol())) { 00073 throw 00074 new IOException("Only file: URLs are allowed as references, got " + url); 00075 } 00076 00077 return actual.openConnection(); 00078 } 00079 00080 00088 protected static String getActual(URL u) { 00089 String s = u.toString(); 00090 if(!s.startsWith(PROTOCOL + ":")) { 00091 throw new IllegalArgumentException("URL " + u + " does not start with " + 00092 PROTOCOL + ":"); 00093 } 00094 return s.substring(PROTOCOL.length() + 1); 00095 } 00096 }