Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright 2003-2007 Jive Software. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
 
 
 package org.jivesoftware.smackx.debugger;
 
 import java.awt.Color;
 import java.io.Reader;
 import java.io.Writer;
 
 
The LiteDebugger is a very simple debugger that allows to debug sent, received and interpreted messages.

Author(s):
Gaston Dombiak
 
 public class LiteDebugger implements SmackDebugger {
 
     private static final String NEWLINE = "\n";
 
     private JFrame frame = null;
     private XMPPConnection connection = null;
 
     private StanzaListener listener = null;
 
     private Writer writer;
     private Reader reader;
     private ReaderListener readerListener;
     private WriterListener writerListener;
 
     public LiteDebugger(XMPPConnection connectionWriter writerReader reader) {
         this. = connection;
         this. = writer;
         this. = reader;
         createDebug();
     }

    
Creates the debug process, which is a GUI window that displays XML traffic.
 
     private void createDebug() {
          = new JFrame("Smack Debug Window -- " + .getServiceName() + ":" +
                 .getPort());
 
         // Add listener for window closing event 
         .addWindowListener(new WindowAdapter() {
             public void windowClosing(WindowEvent evt) {
                 rootWindowClosing(evt);
             }
         });
 
         // We'll arrange the UI into four tabs. The first tab contains all data, the second
         // client generated XML, the third server generated XML, and the fourth is packet
         // data from the server as seen by Smack.
         JTabbedPane tabbedPane = new JTabbedPane();
 
         JPanel allPane = new JPanel();
        allPane.setLayout(new GridLayout(3, 1));
        tabbedPane.add("All"allPane);
        // Create UI elements for client generated XML traffic.
        final JTextArea sentText1 = new JTextArea();
        final JTextArea sentText2 = new JTextArea();
        sentText1.setEditable(false);
        sentText2.setEditable(false);
        sentText1.setForeground(new Color(112, 3, 3));
        sentText2.setForeground(new Color(112, 3, 3));
        allPane.add(new JScrollPane(sentText1));
        tabbedPane.add("Sent"new JScrollPane(sentText2));
        // Add pop-up menu.
        JPopupMenu menu = new JPopupMenu();
        JMenuItem menuItem1 = new JMenuItem("Copy");
        menuItem1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // Get the clipboard
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                // Set the sent text as the new content of the clipboard
                clipboard.setContents(new StringSelection(sentText1.getText()), null);
            }
        });
        JMenuItem menuItem2 = new JMenuItem("Clear");
        menuItem2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sentText1.setText("");
                sentText2.setText("");
            }
        });
        // Add listener to the text area so the popup menu can come up.
        MouseListener popupListener = new PopupListener(menu);
        sentText1.addMouseListener(popupListener);
        sentText2.addMouseListener(popupListener);
        menu.add(menuItem1);
        menu.add(menuItem2);
        // Create UI elements for server generated XML traffic.
        final JTextArea receivedText1 = new JTextArea();
        final JTextArea receivedText2 = new JTextArea();
        receivedText1.setEditable(false);
        receivedText2.setEditable(false);
        receivedText1.setForeground(new Color(6, 76, 133));
        receivedText2.setForeground(new Color(6, 76, 133));
        allPane.add(new JScrollPane(receivedText1));
        tabbedPane.add("Received"new JScrollPane(receivedText2));
        // Add pop-up menu.
        menu = new JPopupMenu();
        menuItem1 = new JMenuItem("Copy");
        menuItem1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // Get the clipboard
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                // Set the sent text as the new content of the clipboard
                clipboard.setContents(new StringSelection(receivedText1.getText()), null);
            }
        });
        menuItem2 = new JMenuItem("Clear");
        menuItem2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                receivedText1.setText("");
                receivedText2.setText("");
            }
        });
        // Add listener to the text area so the popup menu can come up.
        popupListener = new PopupListener(menu);
        receivedText1.addMouseListener(popupListener);
        receivedText2.addMouseListener(popupListener);
        menu.add(menuItem1);
        menu.add(menuItem2);
        // Create UI elements for interpreted XML traffic.
        final JTextArea interpretedText1 = new JTextArea();
        final JTextArea interpretedText2 = new JTextArea();
        interpretedText1.setEditable(false);
        interpretedText2.setEditable(false);
        interpretedText1.setForeground(new Color(1, 94, 35));
        interpretedText2.setForeground(new Color(1, 94, 35));
        allPane.add(new JScrollPane(interpretedText1));
        tabbedPane.add("Interpreted"new JScrollPane(interpretedText2));
        // Add pop-up menu.
        menu = new JPopupMenu();
        menuItem1 = new JMenuItem("Copy");
        menuItem1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // Get the clipboard
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                // Set the sent text as the new content of the clipboard
                clipboard.setContents(new StringSelection(interpretedText1.getText()), null);
            }
        });
        menuItem2 = new JMenuItem("Clear");
        menuItem2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                interpretedText1.setText("");
                interpretedText2.setText("");
            }
        });
        // Add listener to the text area so the popup menu can come up.
        popupListener = new PopupListener(menu);
        interpretedText1.addMouseListener(popupListener);
        interpretedText2.addMouseListener(popupListener);
        menu.add(menuItem1);
        menu.add(menuItem2);
        .getContentPane().add(tabbedPane);
        .setSize(550, 400);
        .setVisible(true);
        // Create a special Reader that wraps the main Reader and logs data to the GUI.
        ObservableReader debugReader = new ObservableReader();
         = new ReaderListener() {
                    public void read(String str) {
                        int index = str.lastIndexOf(">");
                        if (index != -1) {
                            receivedText1.append(str.substring(0, index + 1));
                            receivedText2.append(str.substring(0, index + 1));
                            receivedText1.append();
                            receivedText2.append();
                            if (str.length() > index) {
                                receivedText1.append(str.substring(index + 1));
                                receivedText2.append(str.substring(index + 1));
                            }
                        }
                        else {
                            receivedText1.append(str);
                            receivedText2.append(str);
                        }
                    }
                };
        debugReader.addReaderListener();
        // Create a special Writer that wraps the main Writer and logs data to the GUI.
        ObservableWriter debugWriter = new ObservableWriter();
         = new WriterListener() {
                    public void write(String str) {
                        sentText1.append(str);
                        sentText2.append(str);
                        if (str.endsWith(">")) {
                            sentText1.append();
                            sentText2.append();
                        }
                    }
                };
        debugWriter.addWriterListener();
        // Assign the reader/writer objects to use the debug versions. The packet reader
        // and writer will use the debug versions when they are created.
         = debugReader;
         = debugWriter;
        // Create a thread that will listen for all incoming packets and write them to
        // the GUI. This is what we call "interpreted" packet data, since it's the packet
        // data as Smack sees it and not as it's coming in as raw XML.
         = new StanzaListener() {
            public void processPacket(Stanza packet) {
                interpretedText1.append(packet.toXML().toString());
                interpretedText2.append(packet.toXML().toString());
                interpretedText1.append();
                interpretedText2.append();
            }
        };
    }

    
Notification that the root window is closing. Stop listening for received and transmitted packets.

Parameters:
evt the event that indicates that the root window is closing
    public void rootWindowClosing(WindowEvent evt) {
    }

    
Listens for debug window popup dialog events.
    private class PopupListener extends MouseAdapter {
        JPopupMenu popup;
        PopupListener(JPopupMenu popupMenu) {
             = popupMenu;
        }
        public void mousePressed(MouseEvent e) {
            maybeShowPopup(e);
        }
        public void mouseReleased(MouseEvent e) {
            maybeShowPopup(e);
        }
        private void maybeShowPopup(MouseEvent e) {
            if (e.isPopupTrigger()) {
                .show(e.getComponent(), e.getX(), e.getY());
            }
        }
    }
    public Reader newConnectionReader(Reader newReader) {
        ObservableReader debugReader = new ObservableReader(newReader);
        debugReader.addReaderListener();
         = debugReader;
        return ;
    }
    public Writer newConnectionWriter(Writer newWriter) {
        ObservableWriter debugWriter = new ObservableWriter(newWriter);
        debugWriter.addWriterListener();
         = debugWriter;
        return ;
    }
    public void userHasLogged(String user) {
        boolean isAnonymous = "".equals(XmppStringUtils.parseLocalpart(user));
        String title =
            "Smack Debug Window -- "
                + (isAnonymous ? "" : XmppStringUtils.parseBareJid(user))
                + "@"
                + .getServiceName()
                + ":"
                + .getPort();
        title += "/" + XmppStringUtils.parseResource(user);
        .setTitle(title);
    }
    public Reader getReader() {
        return ;
    }
    public Writer getWriter() {
        return ;
    }
    public StanzaListener getReaderListener() {
        return ;
    }
    public StanzaListener getWriterListener() {
        return null;
    }
New to GrepCode? Check out our FAQ X