All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.htmlparser.lexerapplications.thumbelina.ThumbelinaFrame Maven / Gradle / Ivy

Go to download

bboss is a j2ee framework include aop/ioc,mvc,persistent,taglib,rpc,event ,bean-xml serializable and so on.http://www.bbossgroups.com

The newest version!
// HTMLParser Library $Name: v1_5 $ - A java-based parser for HTML
// http://sourceforge.org/projects/htmlparser
// Copyright (C) 2003 Derrick Oswald
//
// Revision Control Information
//
// $Source: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexerapplications/thumbelina/ThumbelinaFrame.java,v $
// $Author: derrickoswald $
// $Date: 2004/09/02 02:28:14 $
// $Revision: 1.4 $
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//

package org.htmlparser.lexerapplications.thumbelina;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import org.htmlparser.lexer.Lexer;

/**
 * Encapsulate a Thumbelina bean and add menu and preferences support.
 * Provides a JFrame base in which to place a Thumbelina bean, and
 * adds a menu system with MRU (Most Recently Used) list.
 * Also provides a Google search capability.
 * Will eventually provide Javahelp too.
 */
public class ThumbelinaFrame
    extends
        JFrame
    implements
        WindowListener,
        ActionListener,
        ItemListener,
        PropertyChangeListener
{
    /**
     * Window title.
     */
    private static final String TITLE = "Thumbelina";

    /**
     * Preference name for frame location and size.
     */
    private static final String FRAMESIZE = "FrameSize";

    /**
     * Percent of screen to leave as border when no preferences available.
     */
    private static final int BORDERPERCENT = 5;

    /**
     * Preference name for most recently used count.
     */
    private static final String MRULENGTH = "MRULength";

    /**
     * Preference name for most recently used maximum count.
     */
    private static final String MRUMAX = "MRUMax";

    /**
     * Preference prefix for most recently used list items.
     */
    private static final String MRUPREFIX = "MRUListItem";

    /**
     * Preference name for google query.
     */
    private static final String GOOGLEQUERY = "GoogleQuery";

    /**
     * Default google query when no preferences are available.
     */
    private static final String DEFAULTGOOGLEQUERY = "thumbs";

    /**
     * List of URLs to prime the MRU list with.
     */
    private static final String[] DEFAULTMRULIST =
    {
        "www.a2zcds.com",
        "www.stoneschool.com/Japan/",
        "www.tommys-bookmarks.com",
        "www.unitedmedia.com/comics/dilbert/archive",
        "www.pastelartists.com",
    };

    /**
     * Send Mozilla headers in request if true.
     */
    private static final boolean USE_MOZILLA_HEADERS = false;

    /**
     * Preference name for status bar visibility state.
     */
    private static final String STATUSBARSTATE = "StatusBarVisible";

    /**
     * Preference name for history list visibility state.
     */
    private static final String HISTORYLISTSTATE = "HistoryListVisible";

    /**
     * Preference name for sequencer active state.
     */
    private static final String SEQUENCERACTIVE = "SequencerActive";

    /**
     * Preference name for background thread active state.
     */
    private static final String BACKGROUNDTHREADACTIVE =
        "BackgroundThreadActive";

    /**
     * Preference name for sequencer display speed.
     */
    private static final String DISPLAYSPEED = "DisplaySpeed";

    /**
     * Main menu.
     */
    protected JMenuBar mMenu;

    /**
     * URL submenu.
     */
    protected JMenu mURL;

    /**
     * Open menu item.
     */
    protected JMenuItem mOpen;

    /**
     * Google menu item.
     */
    protected JMenuItem mGoogle;

    /**
     * MRU list separator #1.
     */
    protected JSeparator mSeparator1;

    /**
     * MRU list separator #2.
     */
    protected JSeparator mSeparator2;

    /**
     * Exit menu item.
     */
    protected JMenuItem mExit;

    /**
     * View submenu.
     */
    protected JMenu mView;

    /**
     * Status bar visible menu item.
     */
    protected JCheckBoxMenuItem mStatusVisible;

    /**
     * History list visible menu item.
     */
    protected JCheckBoxMenuItem mHistoryVisible;

    /**
     * Vommand menu.
     */
    protected JMenu mCommand;

    /**
     * Reset menu item.
     */
    protected JMenuItem mReset;

    /**
     * Clear menu item
     */
    protected JMenuItem mClear;

    /**
     * Help submenu.
     */
    protected JMenu mHelp;

    /**
     * About menu item.
     */
    protected JMenuItem mAbout;

    /**
     * Construct a new Thumbelina frame with an idle Thumbelina.
     */
    public ThumbelinaFrame ()
    {
        this (new Thumbelina ());
    }

    /**
     * Construct a new Thumbelina frame with a Thumbelina primed with one URL.
     * @param url The URL to prime the Thumbelina with.
     * @exception MalformedURLException If the given string doesn't represent
     * a valid url.
     */
    public ThumbelinaFrame (final String url)
        throws
            MalformedURLException
    {
        this (new Thumbelina (url));
    }

    /**
     * Construct a new Thumbelina frame with a Thumbelina primed with one URL.
     * @param url The URL to prime the Thumbelina with.
     */
    public ThumbelinaFrame (final URL url)
    {
        this (new Thumbelina (url));
    }

    /**
     * Construct a new Thumbelina frame with a given Thumbelina.
     * @param thumbelina The Thumbelina to encapsulate.
     */
    public ThumbelinaFrame (final Thumbelina thumbelina)
    {
        setTitle (TITLE);
        thumbelina.addPropertyChangeListener (this);
        getContentPane ().add (thumbelina, BorderLayout.CENTER);
        addWindowListener (this);
        makeMenu ();
        setJMenuBar (mMenu);
        restoreSize ();
        initState ();
        updateMenu ();
    }

    /**
     * Access the Thumbelina object contained in the frame.
     * @return The Thumbelina bean.
     */
    public Thumbelina getThumbelina ()
    {
        return ((Thumbelina)getContentPane ().getComponent (0));
    }

    /**
     * Initialize the user preferences.
     * Reads from the existing user preferences,
     * or initializes values from the bean directly if they don't exist.
     * Sets the state of the view checkboxes to match.
     */
    public void initState ()
    {
        Preferences prefs;

        prefs = Preferences.userNodeForPackage (getClass ());
        if (-1 == prefs.getInt (MRULENGTH, -1))
            for (int i = 0; i < DEFAULTMRULIST.length; i++)
                updateMRU (DEFAULTMRULIST[i]);
        getThumbelina ().setStatusBarVisible (
            prefs.getBoolean (STATUSBARSTATE,
                getThumbelina ().getStatusBarVisible ()));
        mStatusVisible.setSelected (getThumbelina ().getStatusBarVisible ());
        getThumbelina ().setHistoryListVisible (
            prefs.getBoolean (HISTORYLISTSTATE,
                getThumbelina ().getHistoryListVisible ()));
        mHistoryVisible.setSelected (getThumbelina ().getHistoryListVisible ());
        getThumbelina ().setSequencerActive (
            prefs.getBoolean (SEQUENCERACTIVE,
                getThumbelina ().getSequencerActive ()));
        getThumbelina ().setBackgroundThreadActive (
            prefs.getBoolean (BACKGROUNDTHREADACTIVE,
                getThumbelina ().getBackgroundThreadActive ()));
        getThumbelina ().setSpeed (
            prefs.getInt (DISPLAYSPEED, getThumbelina ().getSpeed ()));
    }

    /**
     * Saves the current settings in the user preferences.
     * By default this writes to the thumbelina subdirectory under
     * .java in the users home directory.
     */
    public void saveState ()
    {
        Preferences prefs;

        prefs = Preferences.userNodeForPackage (getClass ());
        // don't save size unless we're in normal state
        if (NORMAL == getExtendedState ())
            prefs.put (FRAMESIZE, toString (getBounds ()));
        prefs.putBoolean (STATUSBARSTATE,
            getThumbelina ().getStatusBarVisible ());
        prefs.putBoolean (HISTORYLISTSTATE,
            getThumbelina ().getHistoryListVisible ());
        prefs.putBoolean (SEQUENCERACTIVE,
            getThumbelina ().getSequencerActive ());
        prefs.putBoolean (BACKGROUNDTHREADACTIVE,
            getThumbelina ().getBackgroundThreadActive ());
        prefs.putInt (DISPLAYSPEED,
            getThumbelina ().getSpeed ());
        try
        {
            prefs.flush ();
        }
        catch (BackingStoreException bse)
        {
            bse.printStackTrace ();
        }
    }

    /**
     * Sets the frame size if no previous preference has been stored.
     * It creates a window covering all but BORDERPERCENT
     * margins.
     */
    public void initSize ()
    {
        Toolkit tk;
        Dimension dim;
        int borderx;
        int bordery;

        tk = getToolkit ();
        dim = tk.getScreenSize ();
        borderx = dim.width * BORDERPERCENT / 100;
        bordery = dim.height * BORDERPERCENT / 100;
        setBounds (
            borderx,
            bordery,
            dim.width - (2 * borderx),
            dim.height - (2 * bordery));
    }

    /**
     * Restores the window size based on stored preferences.
     * If no preferences exist, it calls initSize().
     */
    public void restoreSize ()
    {
        Preferences prefs;
        String size;
        Rectangle rectangle;

        prefs = Preferences.userNodeForPackage (getClass ());
        size = prefs.get (FRAMESIZE, "");
        if ("".equals (size))
            initSize ();
        else
            try
            {
                rectangle = fromString (size);
                if (rational (rectangle))
                    setBounds (
                        rectangle.x,
                        rectangle.y,
                        rectangle.width,
                        rectangle.height);
                else
                    initSize ();
            }
            catch (IllegalArgumentException iae)
            {
                initSize ();
            }
    }

    /**
     * Converts the rectangle to a string.
     * The rectangle is converted into a string that is of the form
     * 
     * [x,y,width,height].
     * 
* @return The string equivalent of the rectangle. * @param r The rectangle containing the window position and size, * as returned by getBounds(). */ protected String toString (final Rectangle r) { return ("[" + r.x + "," + r.y + "," + r.width + "," + r.height + "]"); } /** * Convert the given string to a valid rectangle. * The string is converted to a Rectangle. * @param value The value to parse. * @exception IllegalArgumentException if the format does not match the * form "[x,y,width,height]" with all values integers. * @return Returns the rectangle extracted from the string. */ protected Rectangle fromString (final String value) throws IllegalArgumentException { String guts; int current; int[] values; int index; Rectangle ret; try { // parse "[x,y,width,height]" if (value.startsWith ("[") && value.endsWith ("]")) { guts = value.substring (1, value.length () - 1) + ","; current = 0; values = new int[4]; for (int i = 0; i < 4; i++) { index = guts.indexOf (",", current); if (-1 == index) throw new IllegalArgumentException ( "invalid format \"" + value + "\""); else { values[i] = Integer.parseInt ( guts.substring (current, index)); current = index + 1; } } ret = new Rectangle ( values[0], values[1], values[2], values[3]); } else throw new IllegalArgumentException ( "invalid format \"" + value + "\""); } catch (NumberFormatException nfe) { throw new IllegalArgumentException (nfe.getMessage ()); } return (ret); } /** * Check if the rectangle represents a valid screen position and size. * @param r The rectangle to check. * @return true if this could be a valid frame bounds. */ private boolean rational (final Rectangle r) { Toolkit tk; Dimension winsize; tk = getToolkit (); winsize = tk.getScreenSize(); // all elements must be not stupid w.r.t. the screen size // we assume here that that means no more than 10% off screen // on the left, right and bottom sides return ( (r.x >= r.width / -10) && (r.y >= 0) && (r.width > 0) && (r.height > 0) && (r.x + r.width <= winsize.width + r.width / 10) && (r.y + r.height <= winsize.height + r.height / 10)); } /** * Create the menu. * Initializes the menu and adds it to the frame. */ public void makeMenu () { mMenu = new JMenuBar (); mURL = new JMenu (); mOpen = new JMenuItem (); mGoogle = new JMenuItem (); mSeparator1 = new JSeparator (); mSeparator2 = new JSeparator (); mExit = new JMenuItem (); mView = new JMenu (); mStatusVisible = new JCheckBoxMenuItem (); mHistoryVisible = new JCheckBoxMenuItem (); mHelp = new JMenu (); mAbout = new JMenuItem (); mCommand = new JMenu (); mReset = new JMenuItem (); mClear = new JMenuItem (); mURL.setMnemonic ('U'); mURL.setText ("URL"); mOpen.setMnemonic ('O'); mOpen.setText ("Open"); mOpen.setToolTipText ("Open a URL."); mURL.add (mOpen); mGoogle.setMnemonic ('G'); mGoogle.setText ("Google"); mGoogle.setToolTipText ("Search Google."); mURL.add (mGoogle); mURL.add (mSeparator1); mURL.add (mSeparator2); mExit.setMnemonic ('E'); mExit.setText ("Exit"); mExit.setToolTipText ("Quit Thumbelina."); mURL.add (mExit); mMenu.add (mURL); mView.setMnemonic ('V'); mView.setText ("View"); mStatusVisible.setMnemonic ('S'); mStatusVisible.setSelected (getThumbelina ().getStatusBarVisible ()); mStatusVisible.setText ("Status Bar"); mStatusVisible.setToolTipText ("Show/Hide the status bar."); mView.add (mStatusVisible); mHistoryVisible.setMnemonic ('H'); mHistoryVisible.setSelected (getThumbelina ().getHistoryListVisible ()); mHistoryVisible.setText ("History List"); mHistoryVisible.setToolTipText ("Show/Hide the history list."); mView.add (mHistoryVisible); mMenu.add (mView); mCommand.setMnemonic ('C'); mCommand.setText ("Command"); mReset.setMnemonic ('R'); mReset.setText ("Reset"); mReset.setToolTipText ("Reset Thumbelina."); mClear.setMnemonic ('L'); mClear.setText ("Clear"); mClear.setToolTipText ("Clear display."); mCommand.add (mReset); mCommand.add (mClear); mCommand.add (mHelp); mMenu.add (mCommand); mHelp.setMnemonic ('H'); mHelp.setText ("Help"); mAbout.setMnemonic ('A'); mAbout.setText ("About"); mAbout.setToolTipText ("Information about Thumbelina."); mHelp.add (mAbout); mMenu.add (mHelp); mOpen.addActionListener (this); mGoogle.addActionListener (this); mExit.addActionListener (this); mStatusVisible.addItemListener (this); mHistoryVisible.addItemListener (this); mReset.addActionListener (this); mClear.addActionListener (this); mAbout.addActionListener (this); } /** * Adjusts the menu, by inserting the current MRU list. * Removes the old MRU (Most Recently Used) items and inserts new * ones betweeen the two separators. */ public void updateMenu () { Preferences prefs; int start; int end; Component component; JMenuItem item; int count; String string; prefs = Preferences.userNodeForPackage (getClass ()); start = -1; end = -1; for (int i = 0; i < mURL.getItemCount (); i++) { component = mURL.getMenuComponent (i); if (component == mSeparator1) start = i + 1; else if (component == mSeparator2) end = i; } if ((-1 != start) && (-1 != end)) { for (int i = start; i < end; i++) mURL.remove (start); count = prefs.getInt (MRULENGTH, 0); for (int i = 0; i < count; i++) { string = prefs.get (MRUPREFIX + i, ""); if (!"".equals (string)) { item = new JMenuItem (); item.setActionCommand (string); if (string.length () > 40) string = string.substring (0, 38) + "..."; item.setText (string); item.addActionListener (this); mURL.add (item, start++); } } } } // // WindowListener interface // /** * Invoked the first time a window is made visible. * Not used. * @param event The window event. */ public void windowOpened (final WindowEvent event) { } /** * Handles window closing event. * Performs function exitApplication(). * @param event The window event. */ public void windowClosing (final WindowEvent event) { exit (); } /** * Invoked when a window has been closed as the result * of calling dispose on the window. * Not used. * @param event The window event. */ public void windowClosed (final WindowEvent event) { } /** * Invoked when a window is changed from a normal to a * minimized state. For many platforms, a minimized window * is displayed as the icon specified in the window's * iconImage property. * Not used. * @param event The window event. */ public void windowIconified (final WindowEvent event) { } /** * Invoked when a window is changed from a minimized * to a normal state. * Not used. * @param event The window event. */ public void windowDeiconified (final WindowEvent event) { } /** * Invoked when the window is set to be the user's * active window, which means the window (or one of its * subcomponents) will receive keyboard events. * Not used. * @param event The window event. */ public void windowActivated (final WindowEvent event) { } /** * Invoked when a window is no longer the user's active * window, which means that keyboard events will no longer * be delivered to the window or its subcomponents. * Not used. * @param event The window event. */ public void windowDeactivated (final WindowEvent event) { } // // ActionListener interface // /** * Handles events from the menu. * Based on the action of the event, executes the necessary subroutine. * @param actionEvent The event describing the user action. */ public void actionPerformed (final ActionEvent actionEvent) { String action; action = actionEvent.getActionCommand (); if (action.equals ("Open")) open (); else if (action.equals ("Google")) googlesearch (); else if (action.equals ("Reset")) getThumbelina ().reset (); else if (action.equals ("Clear")) getThumbelina ().getPicturePanel ().reset (); else if (action.equals ("About")) about (); else if (action.equals ("Exit")) exit (); else { // must be a URL from the most recently used list getThumbelina ().open (action); updateMRU (action); updateMenu (); } } // // ItemListener interface // /** * Handles selections on the view state checkboxes. * @param event The event describing the checkbox affected. */ public void itemStateChanged (final ItemEvent event) { Object source; boolean visible; source = event.getItemSelectable (); visible = ItemEvent.SELECTED == event.getStateChange (); if (source == mStatusVisible) getThumbelina ().setStatusBarVisible (visible); else if (source == mHistoryVisible) getThumbelina ().setHistoryListVisible (visible); } // // PropertyChangeListener // /** * Handle a property change. * @param event The property old and new values. */ public void propertyChange (final PropertyChangeEvent event) { String url; if (event.getPropertyName ().equals ( Thumbelina.PROP_CURRENT_URL_PROPERTY)) { url = (String)event.getNewValue (); if (null == url) setTitle ("Thumbelina"); else setTitle ("Thumbelina - " + url); } } /** * Updates the user preferences based on the most recently used list. * @param url The URL that is to be placed at the top of the MRU list. */ public void updateMRU (String url) { Preferences prefs; int count; ArrayList list; String string; int max; if (url.startsWith ("http://")) url = url.substring (7); prefs = Preferences.userNodeForPackage (getClass ()); count = prefs.getInt (MRULENGTH, -1); list = new ArrayList (); for (int i = 0; i < count; i++) { string = prefs.get (MRUPREFIX + i, ""); if (!"".equals (string) && !url.equalsIgnoreCase (string)) list.add (string); } list.add (0, url); max = prefs.getInt (MRUMAX, -1); if (-1 == max) max = 8; while (list.size () > max) list.remove (max); prefs.putInt (MRULENGTH, list.size ()); prefs.putInt (MRUMAX, max); for (int i = 0; i < list.size (); i++) prefs.put (MRUPREFIX + i, (String)list.get (i)); try { prefs.flush (); } catch (BackingStoreException bse) { bse.printStackTrace (); } } /** * Opens a user specified URL. */ public void open () { String result; result = JOptionPane.showInputDialog ( this, "Enter the URL:", "Open URL", JOptionPane.PLAIN_MESSAGE); if (null != result) { getThumbelina ().open (result); updateMRU (result); updateMenu (); } } /** * Query google via user specified keywords and queue results. * Asks the user for keywords, and then submits them as input to the * usual google form: *
     * 
* * * * * * * * * * *
  * * * *
* * *
*  • Advanced Search *
 • Preferences *
 • Language Tools *
*
* Search: * * * * *
*
*
* Creates a query of the form: *
     * http://www.google.ca/search?hl=en&ie=UTF-8&oe=UTF-8&q=thumbs&btnG=Google+Search&meta=
     * 
*/ public void googlesearch () { Preferences prefs; String query; String terms; StringBuilder buffer; HttpURLConnection connection; URL url; Lexer lexer; URL[][] results; prefs = Preferences.userNodeForPackage (getClass ()); query = prefs.get (GOOGLEQUERY, DEFAULTGOOGLEQUERY); try { query = (String)JOptionPane.showInputDialog ( this, "Enter the search term:", "Search Google", JOptionPane.PLAIN_MESSAGE, null, null, query); if (null != query) { // replace spaces with + terms = query.replace (' ', '+'); buffer = new StringBuilder (1024); buffer.append ("http://www.google.ca/search?"); buffer.append ("q="); buffer.append (terms); buffer.append ("&ie=UTF-8"); buffer.append ("&oe=UTF-8"); buffer.append ("&hl=en"); buffer.append ("&btnG=Google+Search"); buffer.append ("&meta="); url = new URL (buffer.toString ()); connection = (HttpURLConnection)url.openConnection (); if (USE_MOZILLA_HEADERS) { // These are the Mozilla header fields: //Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1 //Accept-Language: en-us, en;q=0.50 //Connection: keep-alive //Host: grc.com //Referer: https://grc.com/x/ne.dll?bh0bkyd2 //User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20030225 //Content-Length: 27 //Content-Type: application/x-www-form-urlencoded //Accept-Encoding: gzip, deflate, compress;q=0.9 //Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66 //Keep-Alive: 300 connection.setRequestProperty ("Referer", "http://www.google.ca"); connection.setRequestProperty ("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1"); connection.setRequestProperty ("Accept-Language", "en-us, en;q=0.50"); connection.setRequestProperty ("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20030225"); connection.setRequestProperty ("Accept-Charset", "ISO-8859-1, utf-8;q=0.66, *;q=0.66"); } else { // These are the IE header fields: //Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* //Accept-Language: en-ca //Connection: Keep-Alive //Host: grc.com //User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; trieste; .NET CLR 1.1.4322; .NET CLR 1.0.3705) //Content-Length: 32 //Content-Type: application/x-www-form-urlencoded //Accept-Encoding: gzip, deflate //Cache-Control: no-cache connection.setRequestProperty ("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"); connection.setRequestProperty ("Accept-Language", "en-ca"); connection.setRequestProperty ("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; trieste; .NET CLR 1.1.4322; .NET CLR 1.0.3705)"); } connection.setDoOutput (true); connection.setDoInput (true); connection.setUseCaches (false); lexer = new Lexer (connection); results = getThumbelina ().extractImageLinks (lexer, url); // add 'em getThumbelina ().reset (); // remove google links, not just append (results[1]); for (int i = 0; i < results[1].length; i++) { String found = results[1][i].toExternalForm (); if (-1 == found.indexOf ("google")) getThumbelina ().append (results[1][i]); } prefs.put (GOOGLEQUERY, query); try { prefs.flush (); } catch (BackingStoreException bse) { bse.printStackTrace (); } } } catch (Exception e) { System.out.println (e.getMessage ()); } } /** * Display information about Thumbelina. */ public void about () { URL url; try { url = new URL ("http://sourceforge.net/sflogo.php?group_id=24399"); } catch (MalformedURLException murle) { url = null; } JOptionPane.showMessageDialog ( this, "Scan and display the images behind thumbnails.\n" + "\n" + "An example application using the HTML Parser project.\n" + "Visit http://htmlparser.sourceforge.org for the latest\n" + "version and source code.\n", "Thumbelina - About", JOptionPane.PLAIN_MESSAGE, new ImageIcon (url)); } /** * Exits the application. * Saves user preferences before exiting. */ public void exit () { saveState (); System.exit (0); } /** * Alternate mainline for Thumbelina. * Similar code exists in the Thumbelina class, but this version doesn't * worry about java version. * @param args The command line arguments. * Optionally, arg[0] can be the URL to preload the Thumeblina bean with. */ public static void main (final String[] args) { String url; ThumbelinaFrame thumbelina; System.setProperty ("sun.net.client.defaultReadTimeout", "7000"); System.setProperty ("sun.net.client.defaultConnectTimeout", "7000"); url = null; if (0 != args.length) if (args[0].equalsIgnoreCase ("help") || args[0].equalsIgnoreCase ("-help") || args[0].equalsIgnoreCase ("-h") || args[0].equalsIgnoreCase ("?") || args[0].equalsIgnoreCase ("-?")) Thumbelina.help (); else url = args[0]; try { thumbelina = new ThumbelinaFrame (url); thumbelina.setVisible (true); } catch (MalformedURLException murle) { System.err.println (murle.getMessage ()); Thumbelina.help (); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy