Class ZeroConfPlugin
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.JPanel
-
- org.apache.log4j.chainsaw.plugins.GUIPluginSkeleton
-
- org.apache.log4j.chainsaw.zeroconf.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
-
-
Field Summary
Fields Modifier and Type Field Description private javax.swing.JMenu
connectToMenu
private javax.swing.JTable
deviceTable
private ZeroConfDeviceModel
discoveredDevices
private javax.swing.JMenuItem
helpItem
private javax.jmdns.JmDNS
jmDNS
private static org.apache.log4j.Logger
LOG
private static java.lang.String
MULTICAST_APPENDER_SERVICE_NAME
private static java.lang.String
NEW_UDP_APPENDER_SERVICE_NAME
private javax.swing.JMenuItem
nothingToConnectTo
private ZeroConfPreferenceModel
preferenceModel
private javax.swing.JScrollPane
scrollPane
private java.util.Map<javax.jmdns.ServiceInfo,Plugin>
serviceInfoToReceiveMap
private static java.lang.String
TCP_APPENDER_SERVICE_NAME
private static java.lang.String
UDP_APPENDER_SERVICE_NAME
private static java.lang.String
XML_SOCKET_APPENDER_SERVICE_NAME
-
Fields inherited from class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
-
-
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 ServiceInfoprivate 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" menuprivate 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 receiverprivate 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 org.apache.log4j.chainsaw.plugins.GUIPluginSkeleton
getLoggerRepository, isActive, isEquivalent, setActive, setLoggerRepository
-
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
-
Methods inherited from interface org.apache.log4j.plugins.Plugin
addPropertyChangeListener, addPropertyChangeListener, getName, removePropertyChangeListener, removePropertyChangeListener, setName
-
-
-
-
Field Detail
-
LOG
private static final org.apache.log4j.Logger LOG
-
discoveredDevices
private ZeroConfDeviceModel discoveredDevices
-
deviceTable
private javax.swing.JTable deviceTable
-
scrollPane
private final javax.swing.JScrollPane scrollPane
-
preferenceModel
private ZeroConfPreferenceModel preferenceModel
-
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
-
-
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)
-
-