Class ZeroConfPlugin

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, Plugin, org.apache.log4j.spi.OptionHandler

    public class ZeroConfPlugin
    extends GUIPluginSkeleton
    This plugin is designed to detect specific Zeroconf zones (Rendevouz/Bonjour, whatever people are calling it) and allow the user to double click on 'devices' to try and connect to them with no configuration needed.

    TODO need to handle NON-log4j devices that may be broadcast in the interested zones TODO add the default Zone, and the list of user-specified zones to a preferenceModel

    See Also:
    Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private class  ZeroConfPlugin.ConnectorMouseListener
      When the user double clicks on a row, then the device is connected to, the only exception is when clicking in the check box column for auto connect.
      private class  ZeroConfPlugin.ZeroConfServiceListener
      Listens out on the JmDNS/ZeroConf network for new devices that appear and adds/removes these device information from the list/model.
      • Nested classes/interfaces inherited from class javax.swing.JPanel

        javax.swing.JPanel.AccessibleJPanel
      • Nested classes/interfaces inherited from class javax.swing.JComponent

        javax.swing.JComponent.AccessibleJComponent
      • 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
    • Constructor Summary

      Constructors 
      Constructor Description
      ZeroConfPlugin()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void activateOptions()  
      private void connectTo​(javax.jmdns.ServiceInfo info)
      Starts a receiver to the appender referenced within the ServiceInfo
      private void deviceDiscovered​(javax.jmdns.ServiceInfo info)
      When a device is discovered, we create a menu item for it so it can be connected to via that GUI mechanism, and also if the device is one of the auto-connect devices then a background thread is created to connect the device.
      private void deviceRemoved​(java.lang.String name)
      When a device is removed or disappears we need to remove any JMenu item associated with it.
      private void disconnectFrom​(javax.jmdns.ServiceInfo info)  
      private java.io.File getPreferenceFileLocation()  
      private Receiver getReceiver​(javax.jmdns.ServiceInfo info)  
      private void injectMenu()
      Attempts to find a JFrame container as a parent,and addse a "Connect to" menu
      private void insertToLeftOfHelp​(javax.swing.JMenuBar menuBar, javax.swing.JMenu item)
      Hack method to locate the JMenu that is the Help menu, and inserts the new menu just to the left of it.
      (package private) boolean isConnectedTo​(javax.jmdns.ServiceInfo info)
      returns true if the serviceInfo record already has a matching connected receiver
      private javax.swing.JMenuItem locateMatchingMenuItem​(java.lang.String name)
      Finds the matching JMenuItem based on name, may return null if there is no match.
      static void main​(java.lang.String[] args)  
      private void registerServiceListenersForAppenders()  
      private void save()  
      void shutdown()
      Call when the plugin should be stopped.
      • Methods inherited from class javax.swing.JPanel

        getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
      • Methods inherited from class javax.swing.JComponent

        addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, 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, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, 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, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, 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, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • LOG

        private static final org.apache.log4j.Logger LOG
      • deviceTable

        private javax.swing.JTable deviceTable
      • scrollPane

        private final javax.swing.JScrollPane scrollPane
      • serviceInfoToReceiveMap

        private final java.util.Map<javax.jmdns.ServiceInfo,​Plugin> serviceInfoToReceiveMap
      • connectToMenu

        private javax.swing.JMenu connectToMenu
      • helpItem

        private javax.swing.JMenuItem helpItem
      • nothingToConnectTo

        private javax.swing.JMenuItem nothingToConnectTo
      • MULTICAST_APPENDER_SERVICE_NAME

        private static final java.lang.String MULTICAST_APPENDER_SERVICE_NAME
        See Also:
        Constant Field Values
      • UDP_APPENDER_SERVICE_NAME

        private static final java.lang.String UDP_APPENDER_SERVICE_NAME
        See Also:
        Constant Field Values
      • XML_SOCKET_APPENDER_SERVICE_NAME

        private static final java.lang.String XML_SOCKET_APPENDER_SERVICE_NAME
        See Also:
        Constant Field Values
      • TCP_APPENDER_SERVICE_NAME

        private static final java.lang.String TCP_APPENDER_SERVICE_NAME
        See Also:
        Constant Field Values
      • NEW_UDP_APPENDER_SERVICE_NAME

        private static final java.lang.String NEW_UDP_APPENDER_SERVICE_NAME
        See Also:
        Constant Field Values
      • jmDNS

        private javax.jmdns.JmDNS jmDNS
    • Constructor Detail

      • ZeroConfPlugin

        public ZeroConfPlugin()
    • Method Detail

      • shutdown

        public void shutdown()
        Description copied from interface: Plugin
        Call when the plugin should be stopped.
      • save

        private void save()
      • getPreferenceFileLocation

        private java.io.File getPreferenceFileLocation()
      • activateOptions

        public void activateOptions()
      • registerServiceListenersForAppenders

        private void registerServiceListenersForAppenders()
      • injectMenu

        private void injectMenu()
        Attempts to find a JFrame container as a parent,and addse a "Connect to" menu
      • insertToLeftOfHelp

        private void insertToLeftOfHelp​(javax.swing.JMenuBar menuBar,
                                        javax.swing.JMenu item)
        Hack method to locate the JMenu that is the Help menu, and inserts the new menu just to the left of it.
        Parameters:
        menuBar -
        item -
      • deviceDiscovered

        private void deviceDiscovered​(javax.jmdns.ServiceInfo info)
        When a device is discovered, we create a menu item for it so it can be connected to via that GUI mechanism, and also if the device is one of the auto-connect devices then a background thread is created to connect the device.
        Parameters:
        info -
      • deviceRemoved

        private void deviceRemoved​(java.lang.String name)
        When a device is removed or disappears we need to remove any JMenu item associated with it.
        Parameters:
        name -
      • disconnectFrom

        private void disconnectFrom​(javax.jmdns.ServiceInfo info)
      • isConnectedTo

        boolean isConnectedTo​(javax.jmdns.ServiceInfo info)
        returns true if the serviceInfo record already has a matching connected receiver
        Parameters:
        info -
        Returns:
      • connectTo

        private void connectTo​(javax.jmdns.ServiceInfo info)
        Starts a receiver to the appender referenced within the ServiceInfo
        Parameters:
        info -
      • getReceiver

        private Receiver getReceiver​(javax.jmdns.ServiceInfo info)
      • locateMatchingMenuItem

        private javax.swing.JMenuItem locateMatchingMenuItem​(java.lang.String name)
        Finds the matching JMenuItem based on name, may return null if there is no match.
        Parameters:
        name -
        Returns:
      • main

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