import java.net.*;
import java.util.Hashtable;
import java.io.*;

// Content handler that expects content to be Text String
class SimpleStringHandler extends ContentHandler {
    public Object getContent(URLConnection conn) throws IOException {
        InputStream input = conn.getInputStream();
        StringBuffer buf = new StringBuffer();
        int c;
        while ((c = input.read()) >= 0) {
            buf.append((char) c);
        }
        input.close();
        return (buf.toString());
    }
}

// Sample factory that uses same policy as default Java policy.
class SampleFactory implements ContentHandlerFactory {
    Hashtable handlers = new Hashtable();
    static private ContentHandler defaultHandler = new SimpleStringHandler();
    private static String content_class_prefix = "sun.net.www.content.";

    // Construct fully-qualified class name for content handler
    // for mimeType; expects default Sun configuration
    private String mapMIMETypeToClassName(String mimeType) {
        int i = content_class_prefix.length();
        int j = mimeType.length();
        char nm[] = new char[i + j];
        content_class_prefix.getChars(0, i, nm, 0);
        mimeType.getChars(0, j, nm, i);
        while (--j >= 0) {
            char c = nm[i];
            // clean up characters in class name
            if (c == '/')
                nm[i] = '.';
            else if (!('A' <= c && c <= 'Z' ||
                       'a' <= c && c <= 'z' ||
                       '0' <= c && c <= '9'))
                nm[i] = '_';
            i++;
        }
        return (new String(nm));
    }
    public ContentHandler createContentHandler(String mimeType) {
        ContentHandler handler = null;
        if (mimeType == null)
            return defaultHandler;        // no type specified

        // Check cache first
        handler = (ContentHandler)handlers.get(mimeType);
        if (handler != null)
            return handler;

        // Get class name from MIME Type and create handler
        String className = mapMIMETypeToClassName(mimeType);
        if (className != null) {
            try {
                handler = (ContentHandler)
                    Class.forName(className).newInstance();
            } catch(Exception e) {
                // cannot get handler, just use default
                handler = defaultHandler;
            }
        } else
            handler = defaultHandler;

        // Add newly found handler to cache
        handlers.put(mimeType, handler);
        return handler;
    }
}
class Main {
    public static void main(String[] args) {

        if (args.length != 1) {
            System.err.println("Usage: java Main <URL>");
            System.exit(1);
        }

        // Configure system to use our own factory
        URLConnection.setContentHandlerFactory(new SampleFactory());
        try {
            URL url = new URL(args[0]);
        
            Object pkgs_html = url.getContent();
            if (pkgs_html != null) {
                System.out.println("class: " + pkgs_html.getClass());
                System.out.println("obj: " + pkgs_html);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    };
}
