org.htmlparser.lexerapplications.thumbelina
Class Thumbelina

java.lang.Object
  extended byjava.awt.Component
      extended byjava.awt.Container
          extended byjavax.swing.JComponent
              extended byjavax.swing.JPanel
                  extended byorg.htmlparser.lexerapplications.thumbelina.Thumbelina
All Implemented Interfaces:
javax.accessibility.Accessible, javax.swing.event.ChangeListener, java.util.EventListener, java.awt.image.ImageObserver, java.awt.event.ItemListener, javax.swing.event.ListSelectionListener, java.awt.MenuContainer, java.lang.Runnable, java.io.Serializable

public class Thumbelina
extends javax.swing.JPanel
implements java.lang.Runnable, java.awt.event.ItemListener, javax.swing.event.ChangeListener, javax.swing.event.ListSelectionListener

View images behind thumbnails.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
Nested classes inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
protected  boolean mActive
          Activity state.
protected  javax.swing.JCheckBox mBackgroundToggle
          Background thread checkbox in status bar.
protected  java.lang.String mCurrentURL
          The URL being currently being examined.
protected  boolean mDiscardCGI
          If true, does not follow links containing cgi calls.
protected  boolean mDiscardQueries
          If true, does not follow links containing queries (?).
protected  javax.swing.JList mHistory
          History list.
protected  javax.swing.JScrollPane mHistoryScroller
          Scroller for the history list.
protected  javax.swing.JSplitPane mMainArea
          Main panel in central area.
protected  PicturePanel mPicturePanel
          The central area for pictures.
protected  javax.swing.JScrollPane mPicturePanelScroller
          Scroller for the picture panel.
protected  javax.swing.JPanel mPowerBar
          Status bar.
protected  java.beans.PropertyChangeSupport mPropertySupport
          Bound property support.
protected  javax.swing.JProgressBar mQueueProgress
          Image request queue monitor in status bar.
protected  javax.swing.JLabel mQueueSize
          URL queue size display in status bar.
protected  javax.swing.JProgressBar mReadyProgress
          Image ready queue monitor in status bar.
protected  java.util.HashMap mRequested
          Images requested.
protected  javax.swing.JCheckBox mRunToggle
          Sequencer thread toggle in status bar.
protected  Sequencer mSequencer
          The picture sequencer.
protected  javax.swing.JSlider mSpeedSlider
          Sequencer speed slider in status bar.
protected  java.lang.Thread mThread
          Background thread.
protected  java.util.HashMap mTracked
          Images being tracked currently.
protected  javax.swing.JTextField mUrlText
          URL report in status bar.
protected  java.util.HashMap mVisited
          URL's visited.
protected  javax.swing.JLabel mVisitedSize
          URL visited count display in status bar.
protected static java.net.URL[][] NONE
          Value returned when no links are discovered.
static java.lang.String PROP_CURRENT_URL_PROPERTY
          Property name for current URL binding.
static java.lang.String PROP_URL_QUEUE_PROPERTY
          Property name for queue size binding.
static java.lang.String PROP_URL_VISITED_PROPERTY
          Property name for visited URL size binding.
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
Thumbelina()
          Creates a new instance of Thumbelina.
Thumbelina(java.lang.String url)
          Creates a new instance of Thumbelina.
Thumbelina(java.net.URL url)
          Creates a new instance of Thumbelina.
 
Method Summary
 void addHistory(java.lang.String url)
          Adds the given url to the history list.
 void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
          Add a PropertyChangeListener to the listener list.
 void append(java.util.ArrayList list)
          Append the given URLs to the queue.
 void append(java.net.URL url)
          Append the given URL to the queue.
protected  java.net.URL[][] extractImageLinks(Lexer lexer, java.net.URL docbase)
          Get the links of an element of a document.
protected  void fetch(java.net.URL[] images)
          Fetch images.
protected  java.util.ArrayList filter(java.net.URL[] urls)
          Filter URLs and add to queue.
 boolean getBackgroundThreadActive()
          Gets the state of the background thread.
 java.lang.String getCurrentURL()
          Return the URL currently being examined.
 boolean getHistoryListVisible()
          Gets the state of history list visibility.
protected  java.net.URL[][] getImageLinks(java.net.URL url)
          Get the image links from the current URL.
 PicturePanel getPicturePanel()
          Get the picture panel object encapsulated by this Thumbelina.
 java.util.ArrayList getQueue()
          Getter for property queue.
 int getQueueSize()
          Getter for property queue.
 boolean getSequencerActive()
          Gets the state of the sequencer thread.
 int getSpeed()
          Get the sequencer delay time.
 boolean getStatusBarVisible()
          Gets the state of status bar visibility.
protected static void help()
          Provide command line help.
 boolean isDiscardCGI()
          Getter for property discardCGI.
 boolean isDiscardQueries()
          Getter for property discardQueries.
protected  boolean isImage(java.lang.String url)
          Check if the url looks like an image.
 void itemStateChanged(java.awt.event.ItemEvent event)
          Handle checkbox events from the status bar.
static void main(java.lang.String[] args)
          Mainline.
protected  void memCheck()
          Check for low memory situation.
 void open(java.lang.String ref)
          Open a URL.
 void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
          Remove a PropertyChangeListener from the listener list.
 void reset()
          Reset this Thumbelina.
 void run()
          The main processing loop.
 void setBackgroundThreadActive(boolean active)
          Sets the state of the background thread activity.
protected  void setCurrentURL(java.lang.String url)
          Set the current URL being examined.
 void setDiscardCGI(boolean discard)
          Setter for property discardCGI.
 void setDiscardQueries(boolean discard)
          Setter for property discardQueries.
 void setHistoryListVisible(boolean visible)
          Sets the history list visibility.
 void setSequencerActive(boolean active)
          Sets the sequencer activity state.
 void setSpeed(int speed)
          Set the sequencer delay time.
 void setStatusBarVisible(boolean visible)
          Sets the status bar visibility.
 void stateChanged(javax.swing.event.ChangeEvent event)
          Handles the speed slider events.
protected  void updateQueueSize(int original, int current)
          Apply a change in 'to be examined' URL list size.
protected  void updateVisitedSize(int original, int current)
          Apply a change in 'visited' URL list size.
 void valueChanged(javax.swing.event.ListSelectionEvent event)
          Handles the history list events.
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addPropertyChangeListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getGraphics, getHeight, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isPreferredSizeSet, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removePropertyChangeListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFont, setForeground, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMouseWheelListeners, getName, getParent, getPeer, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

PROP_CURRENT_URL_PROPERTY

public static final java.lang.String PROP_CURRENT_URL_PROPERTY
Property name for current URL binding.

See Also:
Constant Field Values

PROP_URL_QUEUE_PROPERTY

public static final java.lang.String PROP_URL_QUEUE_PROPERTY
Property name for queue size binding.

See Also:
Constant Field Values

PROP_URL_VISITED_PROPERTY

public static final java.lang.String PROP_URL_VISITED_PROPERTY
Property name for visited URL size binding.

See Also:
Constant Field Values

mVisited

protected java.util.HashMap mVisited
URL's visited.


mRequested

protected java.util.HashMap mRequested
Images requested.


mTracked

protected java.util.HashMap mTracked
Images being tracked currently.


mThread

protected java.lang.Thread mThread
Background thread.


mActive

protected boolean mActive
Activity state. true means processing URLS, false not.


mSequencer

protected Sequencer mSequencer
The picture sequencer.


mPicturePanel

protected PicturePanel mPicturePanel
The central area for pictures.


NONE

protected static final java.net.URL[][] NONE
Value returned when no links are discovered.


mPropertySupport

protected java.beans.PropertyChangeSupport mPropertySupport
Bound property support.


mCurrentURL

protected java.lang.String mCurrentURL
The URL being currently being examined.


mDiscardCGI

protected boolean mDiscardCGI
If true, does not follow links containing cgi calls.


mDiscardQueries

protected boolean mDiscardQueries
If true, does not follow links containing queries (?).


mBackgroundToggle

protected javax.swing.JCheckBox mBackgroundToggle
Background thread checkbox in status bar.


mHistory

protected javax.swing.JList mHistory
History list.


mPicturePanelScroller

protected javax.swing.JScrollPane mPicturePanelScroller
Scroller for the picture panel.


mHistoryScroller

protected javax.swing.JScrollPane mHistoryScroller
Scroller for the history list.


mMainArea

protected javax.swing.JSplitPane mMainArea
Main panel in central area.


mPowerBar

protected javax.swing.JPanel mPowerBar
Status bar.


mQueueProgress

protected javax.swing.JProgressBar mQueueProgress
Image request queue monitor in status bar.


mReadyProgress

protected javax.swing.JProgressBar mReadyProgress
Image ready queue monitor in status bar.


mRunToggle

protected javax.swing.JCheckBox mRunToggle
Sequencer thread toggle in status bar.


mSpeedSlider

protected javax.swing.JSlider mSpeedSlider
Sequencer speed slider in status bar.


mUrlText

protected javax.swing.JTextField mUrlText
URL report in status bar.


mQueueSize

protected javax.swing.JLabel mQueueSize
URL queue size display in status bar.


mVisitedSize

protected javax.swing.JLabel mVisitedSize
URL visited count display in status bar.

Constructor Detail

Thumbelina

public Thumbelina()
Creates a new instance of Thumbelina.


Thumbelina

public Thumbelina(java.lang.String url)
           throws java.net.MalformedURLException
Creates a new instance of Thumbelina.

Parameters:
url - Single URL to enter into the 'to follow' list.
Throws:
java.net.MalformedURLException - If the url is malformed.

Thumbelina

public Thumbelina(java.net.URL url)
Creates a new instance of Thumbelina.

Parameters:
url - URL to enter into the 'to follow' list.
Method Detail

memCheck

protected void memCheck()
Check for low memory situation. Report to the user a bad situation.


reset

public void reset()
Reset this Thumbelina. Clears the sequencer of pending images, resets the picture panel, emptiies the 'to be examined' list of URLs.


append

public void append(java.net.URL url)
Append the given URL to the queue. Adds the url only if it isn't already in the queue, and notifys listeners about the addition.

Parameters:
url - The url to add.

append

public void append(java.util.ArrayList list)
Append the given URLs to the queue.

Parameters:
list - The list of URL objects to add.

filter

protected java.util.ArrayList filter(java.net.URL[] urls)
Filter URLs and add to queue. Removes already visited links and appends the rest (if any) to the visit pending list.

Parameters:
urls - The list of URL's to add to the 'to visit' list.
Returns:
Returns the filered list.

getStatusBarVisible

public boolean getStatusBarVisible()
Gets the state of status bar visibility.

Returns:
true if the status bar is visible.

setStatusBarVisible

public void setStatusBarVisible(boolean visible)
Sets the status bar visibility.

Parameters:
visible - The new visibility state. If true, the status bar will be unhidden.

getHistoryListVisible

public boolean getHistoryListVisible()
Gets the state of history list visibility.

Returns:
true if the history list is visible.

setHistoryListVisible

public void setHistoryListVisible(boolean visible)
Sets the history list visibility.

Parameters:
visible - The new visibility state. If true, the history list will be unhidden.

getSequencerActive

public boolean getSequencerActive()
Gets the state of the sequencer thread.

Returns:
true if the thread is pumping images.

setSequencerActive

public void setSequencerActive(boolean active)
Sets the sequencer activity state. The sequencer is the thread that moves images from the pending list to the picture panel on a timed basis.

Parameters:
active - The new activity state. If true, the sequencer will be turned on. This may alter the speed setting if it is set to zero.

getBackgroundThreadActive

public boolean getBackgroundThreadActive()
Gets the state of the background thread.

Returns:
true if the thread is examining web pages.

setBackgroundThreadActive

public void setBackgroundThreadActive(boolean active)
Sets the state of the background thread activity. The background thread is responsible for examining URLs that are on the queue for thumbnails, and starting the image fetch operation.

Parameters:
active - If true, the background thread will be turned on.

getSpeed

public int getSpeed()
Get the sequencer delay time.

Returns:
The number of milliseconds between image additions to the panel.

setSpeed

public void setSpeed(int speed)
Set the sequencer delay time. The sequencer is the thread that moves images from the pending list to the picture panel on a timed basis. This value sets the number of milliseconds it waits between pictures. Setting it to zero toggles the running state off.

Parameters:
speed - The sequencer delay in milliseconds.

isDiscardCGI

public boolean isDiscardCGI()
Getter for property discardCGI.

Returns:
Value of property discardCGI.

setDiscardCGI

public void setDiscardCGI(boolean discard)
Setter for property discardCGI.

Parameters:
discard - New value of property discardCGI.

isDiscardQueries

public boolean isDiscardQueries()
Getter for property discardQueries.

Returns:
Value of property discardQueries.

setDiscardQueries

public void setDiscardQueries(boolean discard)
Setter for property discardQueries.

Parameters:
discard - New value of property discardQueries.

isImage

protected boolean isImage(java.lang.String url)
Check if the url looks like an image.

Parameters:
url - The usrl to check for image characteristics.
Returns:
true if the url ends in a recognized image extension.

extractImageLinks

protected java.net.URL[][] extractImageLinks(Lexer lexer,
                                             java.net.URL docbase)
                                      throws java.io.IOException,
                                             ParserException
Get the links of an element of a document. Only gets the links on IMG elements that reference another image. The latter is based on suffix (.jpg, .gif and .png).

Parameters:
lexer - The fully conditioned lexer, ready to rock.
docbase - The url to read.
Returns:
The URLs, targets of the IMG links;
Throws:
java.io.IOException - If the underlying infrastructure throws it.
ParserException - If there is a problem parsing the url.

getImageLinks

protected java.net.URL[][] getImageLinks(java.net.URL url)
Get the image links from the current URL.

Parameters:
url - The URL to get the links from
Returns:
An array of two URL arrays, index 0 is a list of images, index 1 is a list of links to possibly follow.

getPicturePanel

public PicturePanel getPicturePanel()
Get the picture panel object encapsulated by this Thumbelina.

Returns:
The picture panel.

addPropertyChangeListener

public void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
Add a PropertyChangeListener to the listener list. The listener is registered for all properties.

Parameters:
listener - The PropertyChangeListener to be added.

removePropertyChangeListener

public void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
Remove a PropertyChangeListener from the listener list. This removes a PropertyChangeListener that was registered for all properties.

Parameters:
listener - The PropertyChangeListener to be removed.

getCurrentURL

public java.lang.String getCurrentURL()
Return the URL currently being examined. This is a bound property. Notifications are available via the PROP_CURRENT_URL_PROPERTY property.

Returns:
The size of the 'to be examined' list.

setCurrentURL

protected void setCurrentURL(java.lang.String url)
Set the current URL being examined.

Parameters:
url - The url that is being examined.

updateQueueSize

protected void updateQueueSize(int original,
                               int current)
Apply a change in 'to be examined' URL list size. Sends notification via the PROP_URL_QUEUE_PROPERTY property and updates the status bar.

Parameters:
original - The original size of the list.
current - The new size of the list.

updateVisitedSize

protected void updateVisitedSize(int original,
                                 int current)
Apply a change in 'visited' URL list size. Sends notification via the PROP_URL_VISITED_PROPERTY property and updates the status bar.

Parameters:
original - The original size of the list.
current - The new size of the list.

fetch

protected void fetch(java.net.URL[] images)
Fetch images. Ask the toolkit to make the image from a URL, and add a tracker to handle it when it's received. Add details to the rquested and tracked lists and update the status bar.

Parameters:
images - The list of images to fetch.

run

public void run()
The main processing loop. Pull suspect URLs off the queue one at a time, fetch and parse it, request images and enqueue further links.

Specified by:
run in interface java.lang.Runnable

itemStateChanged

public void itemStateChanged(java.awt.event.ItemEvent event)
Handle checkbox events from the status bar. Based on the thread toggles, activates or deactivates the background thread processes.

Specified by:
itemStateChanged in interface java.awt.event.ItemListener
Parameters:
event - The event describing the checkbox event.

stateChanged

public void stateChanged(javax.swing.event.ChangeEvent event)
Handles the speed slider events.

Specified by:
stateChanged in interface javax.swing.event.ChangeListener
Parameters:
event - The event describing the slider activity.

valueChanged

public void valueChanged(javax.swing.event.ListSelectionEvent event)
Handles the history list events.

Specified by:
valueChanged in interface javax.swing.event.ListSelectionListener
Parameters:
event - The event describing the list activity.

addHistory

public void addHistory(java.lang.String url)
Adds the given url to the history list. Also puts the URL in the url text of the status bar.

Parameters:
url - The URL to add to the history list.

open

public void open(java.lang.String ref)
Open a URL. Resets the urls list and appends the given url as the only item.

Parameters:
ref - The URL to add.

help

protected static void help()
Provide command line help.


main

public static void main(java.lang.String[] args)
Mainline.

Parameters:
args - the command line arguments. Can be one or more forms of -help to get command line help, or a URL to prime the program with. Checks for JDK 1.4 and if not found runs in crippled mode (no ThumbelinaFrame).

getQueue

public java.util.ArrayList getQueue()
Getter for property queue.

Returns:
List of URLs that are to be visited.

getQueueSize

public int getQueueSize()
Getter for property queue. This is a bound property. Notifications are available via the PROP_URL_QUEUE_PROPERTY property.

Returns:
The size of the list of URLs that are to be visited.