Class FishClient

java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--java.awt.Window
                    |
                    +--java.awt.Frame
                          |
                          +--javax.swing.JFrame
                                |
                                +--FishClientGUI
                                      |
                                      +--FishClient
All Implemented Interfaces:
javax.accessibility.Accessible, java.awt.event.ActionListener, java.util.EventListener, java.awt.image.ImageObserver, java.awt.MenuContainer, javax.swing.RootPaneContainer, java.io.Serializable, javax.swing.WindowConstants

public class FishClient
extends FishClientGUI
implements java.awt.event.ActionListener

FISH for ducks client. Used to connect to servers to share, search and download files from other clients.

Version:
1.0
Author:
Björn Bertilsson
See Also:
Serialized Form

Nested Class Summary
 class FishClient.FishTable
          Extended JTable to implement read-only cells.
 class FishClient.ResultPost
          Container to keep searchresults.
 
Nested classes inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
 
Nested classes inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
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 static javax.swing.JButton capDldDone
          Set by download to trigger an update if file is downloaded in shared file path.
protected static java.io.File downloadDir
          Contains a link to the download directory.
protected static java.util.Vector fileList
          Contains the current set of files shared by local user.
protected static boolean updateOnDownload
          Indicates if download should trigger an update to the share.
 
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
FishClient()
          Build the client GUI, add actionlisteners and start clients serverpart.
 
Method Summary
 void actionPerformed(java.awt.event.ActionEvent ae)
          Eventhandler for the GUI.
 void clearSearch()
          Clears the search results.
 void connect()
          Try to connect to a FishServer and authorize with it.
 void createDownloadDir(java.lang.String directory)
          Creates a download subdirectory in current directory.
 void disconnect()
          Nicely unshare files at server and then disconnects.
static java.awt.Image getJarImage(java.lang.String jarFile, java.lang.String imageName)
          Reads out and returns an image from a Jar-file (max 100kB).
static void main(java.lang.String[] args)
          Main function to start the client.
 void pingServer()
          Ping the server and gets serverstatistics in return to display in logwindow.
 java.lang.String readLine()
          Reads a line from the server.
 java.lang.String readLineLow()
          Reads a line from the server and convert it to lowercase.
 java.lang.String readLineLowExc()
          Reads a line from the server and convert it to lowercase.
 void recurseDir(java.io.File file, boolean recurse)
          The actually search for files, and it can recurse through subdirectories.
 void search()
          Send a searchrequest to the server and then save the result and present it in the GUI.
 void sendShare()
          Sends the info of the local shared files to the server.
 void share()
          Checks if directory is valid and then gets the files and saves them in a local vector.
 void shareDialog()
          Pops up a dialoag to choose which directory with files to share.
 void unshare()
          Tells the server to remove all files shared by this client and then clear the local list of shared files.
static void writeLog(java.lang.String msg)
          Write to the top of the log in the GUI.
 
Methods inherited from class FishClientGUI
buildGUI, processWindowEvent
 
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getJMenuBar, getLayeredPane, getRootPane, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, remove, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, update
 
Methods inherited from class java.awt.Frame
addNotify, finalize, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setIconImage, 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, getInputContext, getListeners, getLocale, getMostRecentFocusOwner, getOwnedWindows, getOwner, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindowStateListeners, hide, isActive, isFocusableWindow, isFocusCycleRoot, isFocused, isShowing, pack, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, setCursor, setFocusableWindowState, setFocusCycleRoot, setLocationRelativeTo, 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, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setFocusTraversalKeys, setFocusTraversalPolicy, 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, getBackground, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, 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, isOpaque, 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, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, setBackground, setBounds, setBounds, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Field Detail

fileList

protected static java.util.Vector fileList
Contains the current set of files shared by local user.


downloadDir

protected static java.io.File downloadDir
Contains a link to the download directory.


capDldDone

protected static javax.swing.JButton capDldDone
Set by download to trigger an update if file is downloaded in shared file path.


updateOnDownload

protected static boolean updateOnDownload
Indicates if download should trigger an update to the share.

Constructor Detail

FishClient

public FishClient()
Build the client GUI, add actionlisteners and start clients serverpart.

Method Detail

main

public static void main(java.lang.String[] args)
Main function to start the client.

Parameters:
args - Contains arguments specified by user at commandline when starting the FishClient. They will be ignored.

createDownloadDir

public void createDownloadDir(java.lang.String directory)
Creates a download subdirectory in current directory.

Parameters:
directory - Name of subdirectory to be created.

actionPerformed

public void actionPerformed(java.awt.event.ActionEvent ae)
Eventhandler for the GUI.

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

pingServer

public void pingServer()
Ping the server and gets serverstatistics in return to display in logwindow. Disconnects client if server doesn't respond on the second try.


search

public void search()
Send a searchrequest to the server and then save the result and present it in the GUI.


clearSearch

public void clearSearch()
Clears the search results.


shareDialog

public void shareDialog()
Pops up a dialoag to choose which directory with files to share. It recurse through subdirectories as default but it can be turned off in the dialog. You can't share 0 files if you want to connect to the server, that isn't good manner.


share

public void share()
Checks if directory is valid and then gets the files and saves them in a local vector.


recurseDir

public void recurseDir(java.io.File file,
                       boolean recurse)
The actually search for files, and it can recurse through subdirectories.

Parameters:
file - Directory to start the search at
recurse - Set true if recursing through subdirectories should be done.

sendShare

public void sendShare()
Sends the info of the local shared files to the server.


unshare

public void unshare()
Tells the server to remove all files shared by this client and then clear the local list of shared files.


connect

public void connect()
Try to connect to a FishServer and authorize with it.


disconnect

public void disconnect()
Nicely unshare files at server and then disconnects.


readLine

public java.lang.String readLine()
Reads a line from the server.

Returns:
Read line from the server. Null if exception is thrown.

readLineLow

public java.lang.String readLineLow()
Reads a line from the server and convert it to lowercase.

Returns:
Read line in lowercase from the server. Null if exception is thrown.

readLineLowExc

public java.lang.String readLineLowExc()
                                throws java.io.IOException
Reads a line from the server and convert it to lowercase.

Returns:
Read line from the server.
Throws:
java.io.IOException - Thrown when read from server fails.

writeLog

public static void writeLog(java.lang.String msg)
Write to the top of the log in the GUI. If more then 200 lines, then clear the 50 first lines.

Parameters:
msg - Message to be displayd in the log.

getJarImage

public static java.awt.Image getJarImage(java.lang.String jarFile,
                                         java.lang.String imageName)
Reads out and returns an image from a Jar-file (max 100kB). Only GIF and JPG images can be handled .

Parameters:
jarFile - Filename of the Jar-file containing the image.
imageName - Image file to be read from the Jar-file.
Returns:
The extracted image specified.