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 classZeroConfPlugin.ConnectorMouseListenerWhen 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 classZeroConfPlugin.ZeroConfServiceListenerListens 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.JMenuconnectToMenuprivate javax.swing.JTabledeviceTableprivate ZeroConfDeviceModeldiscoveredDevicesprivate javax.swing.JMenuItemhelpItemprivate javax.jmdns.JmDNSjmDNSprivate static org.apache.log4j.LoggerLOGprivate static java.lang.StringMULTICAST_APPENDER_SERVICE_NAMEprivate static java.lang.StringNEW_UDP_APPENDER_SERVICE_NAMEprivate javax.swing.JMenuItemnothingToConnectToprivate ZeroConfPreferenceModelpreferenceModelprivate javax.swing.JScrollPanescrollPaneprivate java.util.Map<javax.jmdns.ServiceInfo,Plugin>serviceInfoToReceiveMapprivate static java.lang.StringTCP_APPENDER_SERVICE_NAMEprivate static java.lang.StringUDP_APPENDER_SERVICE_NAMEprivate static java.lang.StringXML_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 voidactivateOptions()private voidconnectTo(javax.jmdns.ServiceInfo info)Starts a receiver to the appender referenced within the ServiceInfoprivate voiddeviceDiscovered(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 voiddeviceRemoved(java.lang.String name)When a device is removed or disappears we need to remove any JMenu item associated with it.private voiddisconnectFrom(javax.jmdns.ServiceInfo info)private java.io.FilegetPreferenceFileLocation()private ReceivergetReceiver(javax.jmdns.ServiceInfo info)private voidinjectMenu()Attempts to find a JFrame container as a parent,and addse a "Connect to" menuprivate voidinsertToLeftOfHelp(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) booleanisConnectedTo(javax.jmdns.ServiceInfo info)returns true if the serviceInfo record already has a matching connected receiverprivate javax.swing.JMenuItemlocateMatchingMenuItem(java.lang.String name)Finds the matching JMenuItem based on name, may return null if there is no match.static voidmain(java.lang.String[] args)private voidregisterServiceListenersForAppenders()private voidsave()voidshutdown()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:PluginCall 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)
-
-