1 /* 2 * Copyright (c) 1996, 1998, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 /*- 27 * netdoc urls point either into the local filesystem or externally 28 * through an http url, with network documents being preferred. Useful for 29 * FAQs & other documents which are likely to be changing over time at the 30 * central site, and where the user will want the most recent edition. 31 * 32 * @author Steven B. Byrne 33 */ 34 35 package sun.net.www.protocol.netdoc; 36 37 import java.net.URL; 38 import java.net.URLConnection; 39 import java.net.MalformedURLException; 40 import java.net.URLStreamHandler; 41 import java.io.InputStream; 42 import java.io.IOException; 43 44 public class Handler extends URLStreamHandler { 45 static URL base; 46 47 /* 48 * Attempt to find a load the given url using the default (network) 49 * documentation location. If that fails, use the local copy 50 */ openConnection(URL u)51 public synchronized URLConnection openConnection(URL u) 52 throws IOException 53 { 54 URLConnection uc = null; 55 URL ru; 56 57 Boolean tmp = java.security.AccessController.doPrivileged( 58 new sun.security.action.GetBooleanAction("newdoc.localonly")); 59 boolean localonly = tmp.booleanValue(); 60 61 String docurl = java.security.AccessController.doPrivileged( 62 new sun.security.action.GetPropertyAction("doc.url")); 63 64 String file = u.getFile(); 65 if (!localonly) { 66 try { 67 if (base == null) { 68 base = new URL(docurl); 69 } 70 ru = new URL(base, file); 71 } catch (MalformedURLException e) { 72 ru = null; 73 } 74 if (ru != null) { 75 uc = ru.openConnection(); 76 } 77 } 78 79 if (uc == null) { 80 try { 81 ru = new URL("file", "~", file); 82 83 uc = ru.openConnection(); 84 InputStream is = uc.getInputStream(); // Check for success. 85 } catch (MalformedURLException e) { 86 uc = null; 87 } catch (IOException e) { 88 uc = null; 89 } 90 } 91 92 if (uc == null) { 93 throw new IOException("Can't find file for URL: " 94 +u.toExternalForm()); 95 } 96 return uc; 97 } 98 } 99