org.hd.d.pg2k.clApp.uploader
Class UploaderMain

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by javax.swing.JFrame
                      extended by org.hd.d.pg2k.clApp.uploader.UploaderMain
All Implemented Interfaces:
java.awt.event.ActionListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public final class UploaderMain
extends javax.swing.JFrame
implements java.awt.event.ActionListener

Main (UI) class of JWS-based exhibit uploader. Runs as a Swing App using JNLP resource-access facilities such as persistence and file read/write.

This class/file contains as little non-UI code as is reasonably practical, so that if we change the UI details then other classes should be unaffected.

Derived initially from Sun's "WebPad" sample JWS/JNLP code.

We don't really want/need this class to be Serializable, but this class inherits Serializable from JFrame.

See Also:
Serialized Form

Nested Class Summary
private static class UploaderMain.MouseHandler
          This adapter is constructed to handle mouse-over component events.
private static class UploaderMain.SISListener
          Listener class used to veto attempts to start another app instance.
 
Nested classes/interfaces inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
 
Nested classes/interfaces inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
private  AboutAction aboutAction
          The action performed by the "About" menu entry.
private static java.lang.String APPLICATION_WINDOW_TITLE
          Title shown for application.
private  javax.swing.JCheckBox autoSuffixCheckBox
          Contains user-selected auto/manual file-type extraction; never null.
private static java.awt.Color BG_RO_COL
          Background colour we set for read-only informational areas.
private static boolean ENABLE_FILE_DROP
          If true, try to enable file drag-and-drop into the table.
private  ExitAction exitAction
          The action performed by the "Exit" menu entry.
(package private) static boolean JWS_UPLOAD_ONLY
          If true, only allow upload in a JWS environment.
private  LocaleBeanBase lbb
          Select our locale; never null.
private  SimpleLoggerIF logger
          Central logger instance for uploader; never null.
private  UploaderLogic logic
          Our companion "business-logic" class; never null.
private  UploaderMain.MouseHandler mouseHandler
          Handles Mouse over messages on toolbar buttons and menu items; never null.
private  java.awt.event.ActionListener pollAL
          ActionListener invoked by pollUI; never null.
private  javax.swing.table.AbstractTableModel queueTableModel
          The table model for the files queued for upload; never null.
private  SelectAction selectAction
          The action performed by the "Select" button.
private static long serialVersionUID
          Unique Serialisation class ID generated by http://random.hd.org/.
private  UploaderMain.SISListener sisListener
          Single listener instance.
private  javax.swing.JLabel status
          Status bar; never null.
private static int TEXT_ENTRY_TIMEOUT_MS
          Idle time in text entry box before we take opportunity to show updates, ms; strictly positive.
(package private)  UploadInfoBean uib
          Bean to hold our current view of the exhibit we are naming; never null.
private  java.util.concurrent.atomic.AtomicInteger uploadTableEditRow
          Row marked for editing in uploadTable; -1 if none; never null.
private  javax.swing.table.AbstractTableModel uploadTableModel
          The table model instance for the files selected for upload; never null.
 
Fields inherited from class javax.swing.JFrame
accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
private UploaderMain()
          Create an instance of the Uploader app main window.
 
Method Summary
 void actionPerformed(java.awt.event.ActionEvent evt)
          This method acts as the Action handler delegate for all the actions.
private  Tuple.Pair<javax.swing.JComponent,java.awt.event.ActionListener> createChooserPanel()
          Make the chooser/naming component; never null.
private  Tuple.Pair<javax.swing.JComponent,java.awt.event.ActionListener> createMainPane()
          Create the (main) tabbed pane component and a lister for UI polling.
private  javax.swing.JMenuBar createMenu()
          Create the application menu bar.
private  Tuple.Pair<javax.swing.JComponent,java.awt.event.ActionListener> createProgressPanel()
          Make the progress component; never null.
private  javax.swing.JLabel createStatusBar()
          Creates and initialises a status bar.
private  Tuple.Pair<javax.swing.JComponent,java.awt.event.ActionListener> createStatusPanel()
          Make the login/status component; never null.
private  void initActions()
          This method should be called before creating the UI to create all the Actions.
static void main(java.lang.String[] args)
          Main method invoked from JWS.
private static java.awt.Insets makeStandardInsets()
          Make the standard insets to wrap round most components.
private  void pollUI(java.awt.event.ActionEvent e)
          Poll UI (in Swing thread, ie Swing-safe).
private  void registerAction(JLFAbstractAction action)
           
private  void selectFilesForUpload()
          Select (in a file-chooser) some files for upload.
private  void shutdown()
          Perform any activity required to shut down cleanly, eg save state, then exit.
 
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Frame
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, 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, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Field Detail

logger

private final SimpleLoggerIF logger
Central logger instance for uploader; never null. This instance may log to the status bar and elsewhere.


JWS_UPLOAD_ONLY

static final boolean JWS_UPLOAD_ONLY
If true, only allow upload in a JWS environment.

See Also:
Constant Field Values

logic

private final UploaderLogic logic
Our companion "business-logic" class; never null.


selectAction

private final SelectAction selectAction
The action performed by the "Select" button.


aboutAction

private final AboutAction aboutAction
The action performed by the "About" menu entry.


exitAction

private final ExitAction exitAction
The action performed by the "Exit" menu entry.


lbb

private final LocaleBeanBase lbb
Select our locale; never null.


status

private final javax.swing.JLabel status
Status bar; never null.


sisListener

private final UploaderMain.SISListener sisListener
Single listener instance.


uib

final UploadInfoBean uib
Bean to hold our current view of the exhibit we are naming; never null.


autoSuffixCheckBox

private final javax.swing.JCheckBox autoSuffixCheckBox
Contains user-selected auto/manual file-type extraction; never null.


mouseHandler

private final UploaderMain.MouseHandler mouseHandler
Handles Mouse over messages on toolbar buttons and menu items; never null.


BG_RO_COL

private static final java.awt.Color BG_RO_COL
Background colour we set for read-only informational areas. We use this to avoid confusion with data-entry areas.

We may co-ordinate this with the Web site uploader colours.


uploadTableEditRow

private final java.util.concurrent.atomic.AtomicInteger uploadTableEditRow
Row marked for editing in uploadTable; -1 if none; never null. Should be ignored if out of range for the current table content.

We use AtomicInteger for lockless thread-safety.


uploadTableModel

private final javax.swing.table.AbstractTableModel uploadTableModel
The table model instance for the files selected for upload; never null. This doesn't hold any data itself, simply interfaces to the data in logic.selectedFiles.

Call fireTableDataChanged() or something more fine-grained when the data has changed to allow proper redrawing.


queueTableModel

private final javax.swing.table.AbstractTableModel queueTableModel
The table model for the files queued for upload; never null. This doesn't hold any data itself, simply interfaces to the data in logic.uploadingFiles.

Call fireTableDataChanged() or something more fine-grained when the data has changed to allow proper redrawing.


APPLICATION_WINDOW_TITLE

private static final java.lang.String APPLICATION_WINDOW_TITLE
Title shown for application.

See Also:
Constant Field Values

TEXT_ENTRY_TIMEOUT_MS

private static final int TEXT_ENTRY_TIMEOUT_MS
Idle time in text entry box before we take opportunity to show updates, ms; strictly positive.

See Also:
Constant Field Values

ENABLE_FILE_DROP

private static final boolean ENABLE_FILE_DROP
If true, try to enable file drag-and-drop into the table. This may not be allowed, eg in the JNLP/JWS sandbox.

See Also:
Constant Field Values

pollAL

private final java.awt.event.ActionListener pollAL
ActionListener invoked by pollUI; never null.


serialVersionUID

private static final long serialVersionUID
Unique Serialisation class ID generated by http://random.hd.org/.

See Also:
Constant Field Values
Constructor Detail

UploaderMain

private UploaderMain()
Create an instance of the Uploader app main window. Designed to be called by main().

Method Detail

shutdown

private void shutdown()
               throws java.lang.UnsupportedOperationException
Perform any activity required to shut down cleanly, eg save state, then exit. This should try to avoid taking a long time.

This may throw an UnsupportedOperationException to try to veto an exit that the user changes their mind about, eg because we have work in progress!

Throws:
java.lang.UnsupportedOperationException - if the user vetoes the shut-down

initActions

private void initActions()
This method should be called before creating the UI to create all the Actions.


registerAction

private void registerAction(JLFAbstractAction action)

createMenu

private javax.swing.JMenuBar createMenu()
Create the application menu bar.


createMainPane

private Tuple.Pair<javax.swing.JComponent,java.awt.event.ActionListener> createMainPane()
Create the (main) tabbed pane component and a lister for UI polling.


createStatusPanel

private Tuple.Pair<javax.swing.JComponent,java.awt.event.ActionListener> createStatusPanel()
Make the login/status component; never null. Also creates a listener suitable to poll regularly from the Swing thread to do async UI updates.


createChooserPanel

private Tuple.Pair<javax.swing.JComponent,java.awt.event.ActionListener> createChooserPanel()
Make the chooser/naming component; never null. Also creates a listener suitable to poll regularly from the Swing thread to do async UI updates.


createProgressPanel

private Tuple.Pair<javax.swing.JComponent,java.awt.event.ActionListener> createProgressPanel()
Make the progress component; never null. Also creates a listener suitable to poll regularly from the Swing thread to do async UI updates.


makeStandardInsets

private static java.awt.Insets makeStandardInsets()
Make the standard insets to wrap round most components. Note that the returned Insets() object is mutable.


createStatusBar

private javax.swing.JLabel createStatusBar()
Creates and initialises a status bar.


actionPerformed

public void actionPerformed(java.awt.event.ActionEvent evt)
This method acts as the Action handler delegate for all the actions.

Specified by:
actionPerformed in interface java.awt.event.ActionListener

selectFilesForUpload

private void selectFilesForUpload()
Select (in a file-chooser) some files for upload. Since we will have to interact with disc, eg to compute hashes, this may take a while for many and/or large files.


pollUI

private void pollUI(java.awt.event.ActionEvent e)
Poll UI (in Swing thread, ie Swing-safe).


main

public static void main(java.lang.String[] args)
Main method invoked from JWS.


DHD Multimedia Gallery V1.50.55

Copyright (c) 1996-2008, Damon Hart-Davis. All rights reserved.