Package com.bbn.openmap.vpfservlet

Source Code of com.bbn.openmap.vpfservlet.URLCheck

// **********************************************************************
// <copyright>
//  BBN Technologies
//  10 Moulton Street
//  Cambridge, MA 02138
//  (617) 873-8000
//
//  Copyright (C) BBNT Solutions LLC. All rights reserved.
// </copyright>
// **********************************************************************
// $Source: /cvs/distapps/openmap/src/vpfservlet/WEB-INF/src/com/bbn/openmap/vpfservlet/URLCheck.java,v $
// $Revision: 1.2.2.2 $ $Date: 2005/08/11 21:03:07 $ $Author: dietrick $
// **********************************************************************
package com.bbn.openmap.vpfservlet;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

/**
* Command line program to wander the vpfservlet pages, to make sure
* all URLs generated are valid.
*/
public class URLCheck {
    public static Set check(String surl, PrintStream out) throws IOException {
        Set urls = new TreeSet();
        out.println("URL " + surl);
        Reader r;
        URL url;
        try {
            url = new URL(surl);
            r = new InputStreamReader(url.openStream());
        } catch (MalformedURLException mue) {
            out.println("   bad URL");
            return urls;
        }
        Set names = new HashSet();
        Set localrefs = new HashSet();
        StringBuffer sb = new StringBuffer();
        char buf[] = new char[8096];
        int len;
        while ((len = r.read(buf)) != -1) {
            sb.append(buf, 0, len);
            String str = sb.toString();
            int fromIx = 0;
            int gt;
            while ((gt = str.indexOf('>', fromIx)) != -1) {
                int lt = str.indexOf('<', fromIx);
                fromIx = gt + 1;
                char firstChar = str.charAt(lt + 1);
                if ((firstChar != 'A') && (firstChar != 'a')) {
                    continue;
                }
                String substr = str.substring(lt + 1, gt);
                String lsubstr = substr.toLowerCase();

                int hquote = lsubstr.indexOf(href);
                if (hquote != -1) {
                    hquote += href.length();
                    int lquote = substr.indexOf('"', hquote);
                    String rurl = substr.substring(hquote, lquote);
                    if (rurl.charAt(0) == '#') {
                        names.add(rurl.substring(1));
                    } else {
                        try {
                            urls.add(new URL(url, rurl).toExternalForm());
                        } catch (MalformedURLException mue) {
                            out.println("   MUE: " + mue.getMessage());
                        }
                    }
                } else {
                    int nquote = lsubstr.indexOf(name);
                    if (nquote != -1) {
                        nquote += name.length();
                        int lquote = substr.indexOf('"', nquote);
                        String n = substr.substring(nquote, lquote);
                        localrefs.add(n);
                    }
                }

            }
            sb.delete(0, fromIx);
        }
        for (Iterator i = localrefs.iterator(); i.hasNext();) {
            String localref = (String) i.next();
            if (!names.contains(localref)) {
                out.println("MISSING REF: " + localref);
            }
        }
        return urls;
    }
    final static String href = "href=\"";
    final static String name = "name=\"";

    public static Set workOn(Set master, Set urls, PrintStream out) {
        Set newurls = null;
        for (Iterator i = urls.iterator(); i.hasNext();) {
            String surl = (String) i.next();
            if (master.add(surl)) {
                try {
                    Set rets = check(surl, out);
                    if (newurls == null) {
                        newurls = rets;
                    } else {
                        newurls.addAll(rets);
                    }
                } catch (FileNotFoundException fnfe) {
                    out.println("Bogus URL: " + surl);
                } catch (IOException ioe) {
                    out.println("   " + surl + " " + ioe.getClass() + " "
                            + ioe.getMessage());
                }
            }
        }
        return newurls;
    }

    public static void main(String[] args) {
        Set master = new HashSet();
        Set workon = new HashSet();
        workon.addAll(Arrays.asList(args));
        do {
            workon = workOn(master, workon, System.out);
        } while (workon != null);
        System.out.println("Done.");
    }
}
TOP

Related Classes of com.bbn.openmap.vpfservlet.URLCheck

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.