private static URL findResourceURL()

in boot/src/main/java/net/java/html/boot/BrowserBuilder.java [363:437]


    private static URL findResourceURL(String resource, String suffix, IOException[] mal, Class<?> relativeTo) {
        if (suffix != null) {
            int lastDot = resource.lastIndexOf('.');
            if (lastDot != -1) {
                resource = resource.substring(0, lastDot) + suffix + resource.substring(lastDot);
            } else {
                resource = resource + suffix;
            }
        }
        
        URL url = null;
        try {
            String baseURL = System.getProperty("browser.rootdir"); // NOI18N
            if (baseURL != null) {
                URL u = new File(baseURL, resource).toURI().toURL();
                if (isReal(u)) {
                    url = u;
                }
            } 
            
            {
                URL u = new URL(resource);
                if (suffix == null || isReal(u)) {
                    url = u;
                }
                return url;
            }
        } catch (MalformedURLException ex) {
            mal[0] = ex;
        }
        
        if (url == null) {
            url = relativeTo.getResource(resource);
        }
        if (url == null) {
            final ProtectionDomain pd = relativeTo.getProtectionDomain();
            if (pd != null && pd.getCodeSource() != null) {
                URL jar = pd.getCodeSource().getLocation();
                try {
                    URL u = new URL(jar, resource);
                    if (isReal(u)) {
                        url = u;
                    }
                } catch (MalformedURLException ex) {
                    ex.initCause(mal[0]);
                    mal[0] = ex;
                }
            }
        }
        if (url == null) {
            URL res = BrowserBuilder.class.getResource("html4j.txt");
            LOG.log(Level.FINE, "Found html4j {0}", res);
            if (res != null) {
                try {
                    URLConnection c = res.openConnection();
                    LOG.log(Level.FINE, "testing : {0}", c);
                    if (c instanceof JarURLConnection) {
                        JarURLConnection jc = (JarURLConnection) c;
                        URL base = jc.getJarFileURL();
                        for (int i = 0; i < 50; i++) {
                            URL u = new URL(base, resource);
                            if (isReal(u)) {
                                url = u;
                                break;
                            }
                            base = new URL(base, "..");
                        }
                    }
                } catch (IOException ex) {
                    mal[0] = ex;
                }
            }
        }
        return url;
    }