alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*
 *                 Sun Public License Notice
 * 
 * The contents of this file are subject to the Sun Public License
 * Version 1.0 (the "License"). You may not use this file except in
 * compliance with the License. A copy of the License is available at
 * http://www.sun.com/
 * 
 * The Original Code is NetBeans. The Initial Developer of the Original
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun
 * Microsystems, Inc. All Rights Reserved.
 */

package org.netbeans.modules.extbrowser;

import java.util.Iterator;
import java.net.URL;
import java.net.MalformedURLException;

import org.openide.ErrorManager;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.URLMapper;
import org.openide.util.Lookup;

/** Utility class for various useful URL-related tasks.
 * 

There is similar class in extbrowser/webclient module doing almost the same work. * @author Petr Jiricka */ public class URLUtil { /** results with URLMapper instances*/ private static Lookup.Result result; static { result = Lookup.getDefault().lookup(new Lookup.Template (URLMapper.class)); } /** Creates a URL that is suitable for using in a different process on the * same node, similarly to URLMapper.EXTERNAL. May just return the original * URL if that's good enough. * @param url URL that needs to be displayed in browser * @param allowJar is jar: acceptable protocol? * @return browsable URL or null */ public static URL createExternalURL(URL url, boolean allowJar) { if (url == null) return null; // return if the protocol is fine if (isAcceptableProtocol(url.getProtocol().toLowerCase(), allowJar)) return url; // remove the anchor String anchor = url.getRef(); String urlString = url.toString (); int ind = urlString.indexOf('#'); if (ind >= 0) { urlString = urlString.substring(0, ind); } // map to an external URL using the anchor-less URL try { FileObject fos[] = URLMapper.findFileObjects(new URL(urlString)); if ((fos != null) && (fos.length > 0)) { URL newUrl = getURLOfAppropriateType(fos[0], allowJar); if (newUrl != null) { // re-add the anchor if exists urlString = newUrl.toString(); if (ind >=0) { urlString = urlString + "#" + anchor; // NOI18N } return new URL(urlString); } } } catch (MalformedURLException e) { ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, e); } return url; } /** Returns a URL for the given file object that can be correctly interpreted * by usual web browsers (including Netscape 4.71, IE and Mozilla). * First attempts to get an EXTERNAL URL, if that is a suitable URL, it is used; * otherwise a NETWORK URL is used. */ private static URL getURLOfAppropriateType(FileObject fo, boolean allowJar) { // PENDING - there is still the problem that the HTTP server will be started // (because the HttpServerURLMapper.getURL(...) method starts it), // even when it is not needed URL retVal; URL suitable = null; Iterator instances = result.allInstances ().iterator(); while (instances.hasNext()) { URLMapper mapper = (URLMapper) instances.next(); retVal = mapper.getURL (fo, URLMapper.EXTERNAL); if ((retVal != null) && isAcceptableProtocol(retVal.getProtocol().toLowerCase(), allowJar)) { // return if this is a 'file' or 'jar' URL String p = retVal.getProtocol().toLowerCase(); if ("file".equals(p) || "jar".equals(p)) { // NOI18N return retVal; } suitable = retVal; } } // if we found a suitable URL, return it if (suitable != null) { return suitable; } return URLMapper.findURL(fo, URLMapper.NETWORK); } /** Returns true if the protocol is acceptable for usual web browsers. * Specifically, returns true for file, http and ftp protocols. */ private static boolean isAcceptableProtocol(String protocol, boolean allowJar) { if ("http".equals(protocol) // NOI18N || "ftp".equals(protocol) // NOI18N || "file".equals(protocol)) // NOI18N return true; if (allowJar && "jar".equals(protocol)) return true; return false; } }

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.