Change the image for status in the chat activity.
various correction in strings.
diff -Nbdru org/jivesoftware/smack/ConnectionConfiguration.java /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/ConnectionConfiguration.java
--- org/jivesoftware/smack/ConnectionConfiguration.java 2009-06-26 21:11:24.609252239 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/ConnectionConfiguration.java 2009-06-25 22:41:46.281648000 +0200
@@ -63,7 +63,7 @@
*/
private CallbackHandler callbackHandler;
- private boolean debuggerEnabled = XMPPConnection.DEBUG_ENABLED;
+ private boolean debuggerEnabled = false;
// Flag that indicates if a reconnection should be attempted when abruptly disconnected
private boolean reconnectionAllowed = true;
diff -Nbdru org/jivesoftware/smack/debugger/LiteDebugger.java /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/debugger/LiteDebugger.java
--- org/jivesoftware/smack/debugger/LiteDebugger.java 2009-06-26 21:11:22.316252115 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/debugger/LiteDebugger.java 1970-01-01 01:00:00.000000000 +0100
@@ -1,336 +0,0 @@
-/**
- * $RCSfile$
- * $Revision: 7071 $
- * $Date: 2007-02-12 01:59:05 +0100 (Mon, 12 Feb 2007) $
- *
- * Copyright 2003-2007 Jive Software.
- *
- * All rights reserved. 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.smack.debugger;
-
-import java.awt.*;
-import java.awt.datatransfer.*;
-import java.awt.event.*;
-import java.io.*;
-
-import javax.swing.*;
-
-import org.jivesoftware.smack.*;
-import org.jivesoftware.smack.packet.*;
-import org.jivesoftware.smack.util.*;
-
-/**
- * The LiteDebugger is a very simple debugger that allows to debug sent, received and
- * interpreted messages.
- *
- * @author Gaston Dombiak
- */
-public class LiteDebugger implements SmackDebugger {
-
- private static final String NEWLINE = "\n";
-
- private JFrame frame = null;
- private XMPPConnection connection = null;
-
- private PacketListener listener = null;
-
- private Writer writer;
- private Reader reader;
- private ReaderListener readerListener;
- private WriterListener writerListener;
-
- public LiteDebugger(XMPPConnection connection, Writer writer, Reader reader) {
- this.connection = connection;
- this.writer = writer;
- this.reader = reader;
- createDebug();
- }
-
- /**
- * Creates the debug process, which is a GUI window that displays XML traffic.
- */
- private void createDebug() {
- frame = new JFrame("Smack Debug Window -- " + connection.getServiceName() + ":" +
- connection.getPort());
-
- // Add listener for window closing event
- frame.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);
-
- frame.getContentPane().add(tabbedPane);
-
- frame.setSize(550, 400);
- frame.setVisible(true);
-
- // Create a special Reader that wraps the main Reader and logs data to the GUI.
- ObservableReader debugReader = new ObservableReader(reader);
- readerListener = 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(NEWLINE);
- receivedText2.append(NEWLINE);
- 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(readerListener);
-
- // Create a special Writer that wraps the main Writer and logs data to the GUI.
- ObservableWriter debugWriter = new ObservableWriter(writer);
- writerListener = new WriterListener() {
- public void write(String str) {
- sentText1.append(str);
- sentText2.append(str);
- if (str.endsWith(">")) {
- sentText1.append(NEWLINE);
- sentText2.append(NEWLINE);
- }
- }
- };
- debugWriter.addWriterListener(writerListener);
-
- // Assign the reader/writer objects to use the debug versions. The packet reader
- // and writer will use the debug versions when they are created.
- reader = debugReader;
- writer = 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.
- listener = new PacketListener() {
- public void processPacket(Packet packet) {
- interpretedText1.append(packet.toXML());
- interpretedText2.append(packet.toXML());
- interpretedText1.append(NEWLINE);
- interpretedText2.append(NEWLINE);
- }
- };
- }
-
- /**
- * Notification that the root window is closing. Stop listening for received and
- * transmitted packets.
- *
- * @param evt the event that indicates that the root window is closing
- */
- public void rootWindowClosing(WindowEvent evt) {
- connection.removePacketListener(listener);
- ((ObservableReader)reader).removeReaderListener(readerListener);
- ((ObservableWriter)writer).removeWriterListener(writerListener);
- }
-
- /**
- * Listens for debug window popup dialog events.
- */
- private class PopupListener extends MouseAdapter {
- JPopupMenu popup;
-
- PopupListener(JPopupMenu popupMenu) {
- popup = popupMenu;
- }
-
- public void mousePressed(MouseEvent e) {
- maybeShowPopup(e);
- }
-
- public void mouseReleased(MouseEvent e) {
- maybeShowPopup(e);
- }
-
- private void maybeShowPopup(MouseEvent e) {
- if (e.isPopupTrigger()) {
- popup.show(e.getComponent(), e.getX(), e.getY());
- }
- }
- }
-
- public Reader newConnectionReader(Reader newReader) {
- ((ObservableReader)reader).removeReaderListener(readerListener);
- ObservableReader debugReader = new ObservableReader(newReader);
- debugReader.addReaderListener(readerListener);
- reader = debugReader;
- return reader;
- }
-
- public Writer newConnectionWriter(Writer newWriter) {
- ((ObservableWriter)writer).removeWriterListener(writerListener);
- ObservableWriter debugWriter = new ObservableWriter(newWriter);
- debugWriter.addWriterListener(writerListener);
- writer = debugWriter;
- return writer;
- }
-
- public void userHasLogged(String user) {
- boolean isAnonymous = "".equals(StringUtils.parseName(user));
- String title =
- "Smack Debug Window -- "
- + (isAnonymous ? "" : StringUtils.parseBareAddress(user))
- + "@"
- + connection.getServiceName()
- + ":"
- + connection.getPort();
- title += "/" + StringUtils.parseResource(user);
- frame.setTitle(title);
- }
-
- public Reader getReader() {
- return reader;
- }
-
- public Writer getWriter() {
- return writer;
- }
-
- public PacketListener getReaderListener() {
- return listener;
- }
-
- public PacketListener getWriterListener() {
- return null;
- }
-}
diff -Nbdru org/jivesoftware/smack/sasl/SASLGSSAPIMechanism.java /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/sasl/SASLGSSAPIMechanism.java
--- org/jivesoftware/smack/sasl/SASLGSSAPIMechanism.java 2009-06-26 21:11:23.436473310 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/sasl/SASLGSSAPIMechanism.java 2009-06-26 20:56:01.656252399 +0200
@@ -25,8 +25,9 @@
import java.io.IOException;
import java.util.Map;
import java.util.HashMap;
-import javax.security.sasl.Sasl;
-import javax.security.sasl.SaslClient;
+
+import security.javax.security.sasl.Sasl;
+
import javax.security.auth.callback.CallbackHandler;
/**
@@ -63,7 +64,7 @@
String[] mechanisms = { getName() };
Map props = new HashMap();
props.put(Sasl.SERVER_AUTH,"TRUE");
- sc = Sasl.createSaslClient(mechanisms, username, "xmpp", host, props, cbh);
+ sc = Sasl.createSaslClient(mechanisms, username, "xmpp", host, props, (javax.security.auth.callback.CallbackHandler)cbh);
authenticate();
}
diff -Nbdru org/jivesoftware/smack/sasl/SASLMechanism.java /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/sasl/SASLMechanism.java
--- org/jivesoftware/smack/sasl/SASLMechanism.java 2009-06-26 21:11:23.436473310 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/sasl/SASLMechanism.java 2009-06-26 21:23:03.244251498 +0200
@@ -20,23 +20,25 @@
package org.jivesoftware.smack.sasl;
-import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smack.SASLAuthentication;
-import org.jivesoftware.smack.util.Base64;
-
import java.io.IOException;
-import java.util.Map;
import java.util.HashMap;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
+import java.util.Map;
+
import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.PasswordCallback;
-import javax.security.sasl.RealmCallback;
-import javax.security.sasl.RealmChoiceCallback;
-import javax.security.sasl.Sasl;
-import javax.security.sasl.SaslClient;
-import javax.security.sasl.SaslException;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+import org.jivesoftware.smack.SASLAuthentication;
+import org.jivesoftware.smack.XMPPException;
+import org.jivesoftware.smack.util.Base64;
+
+import security.javax.security.auth.callback.NameCallback;
+import security.javax.security.sasl.RealmCallback;
+import security.javax.security.sasl.RealmChoiceCallback;
+import security.javax.security.sasl.Sasl;
+import security.javax.security.sasl.SaslClient;
+import security.javax.security.sasl.SaslException;
/**
* Base class for SASL mechanisms. Subclasses must implement these methods:
@@ -148,12 +150,13 @@
} else {
response = sc.evaluateChallenge(null);
}
-
- String authenticationText = Base64.encodeBytes(response,Base64.DONT_BREAK_LINES);
+ String authenticationText = "";
+ if (response != null) {
+ authenticationText = Base64.encodeBytes(response,Base64.DONT_BREAK_LINES);
if(authenticationText.equals("")) {
authenticationText = "=";
}
-
+ }
stanza.append("<response xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">");
stanza.append(authenticationText);
stanza.append("</response>");
diff -Nbdru org/jivesoftware/smack/SASLAuthentication.java /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/SASLAuthentication.java
--- org/jivesoftware/smack/SASLAuthentication.java 2009-06-26 21:11:24.597252589 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/SASLAuthentication.java 2009-06-26 21:31:16.445251493 +0200
@@ -84,17 +84,15 @@
// Register SASL mechanisms supported by Smack
registerSASLMechanism("EXTERNAL", SASLExternalMechanism.class);
- registerSASLMechanism("GSSAPI", SASLGSSAPIMechanism.class);
registerSASLMechanism("DIGEST-MD5", SASLDigestMD5Mechanism.class);
registerSASLMechanism("CRAM-MD5", SASLCramMD5Mechanism.class);
registerSASLMechanism("PLAIN", SASLPlainMechanism.class);
registerSASLMechanism("ANONYMOUS", SASLAnonymous.class);
- supportSASLMechanism("GSSAPI",0);
- supportSASLMechanism("DIGEST-MD5",1);
- supportSASLMechanism("CRAM-MD5",2);
- supportSASLMechanism("PLAIN",3);
- supportSASLMechanism("ANONYMOUS",4);
+ supportSASLMechanism("DIGEST-MD5",0);
+ supportSASLMechanism("CRAM-MD5",1);
+ supportSASLMechanism("PLAIN",2);
+ supportSASLMechanism("ANONYMOUS",3);
}
diff -Nbdru org/jivesoftware/smack/util/DNSUtil.java /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/util/DNSUtil.java
--- org/jivesoftware/smack/util/DNSUtil.java 2009-06-26 21:11:24.585252398 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/util/DNSUtil.java 2009-06-26 00:41:16.932251881 +0200
@@ -22,12 +22,6 @@
import java.util.Hashtable;
import java.util.Map;
-import javax.naming.NamingEnumeration;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.InitialDirContext;
-
/**
* Utilty class to perform DNS lookups for XMPP services.
*
@@ -41,13 +35,13 @@
*/
private static Map cache = new Cache(100, 1000*60*10);
- private static DirContext context;
+// private static DirContext context;
static {
try {
Hashtable env = new Hashtable();
env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
- context = new InitialDirContext(env);
+ // context = new InitialDirContext(env);
}
catch (Exception e) {
// Ignore.
@@ -79,65 +73,8 @@
* server can be reached at for the specified domain.
*/
public static HostAddress resolveXMPPDomain(String domain) {
- if (context == null) {
return new HostAddress(domain, 5222);
}
- String key = "c" + domain;
- // Return item from cache if it exists.
- if (cache.containsKey(key)) {
- HostAddress address = (HostAddress)cache.get(key);
- if (address != null) {
- return address;
- }
- }
- String bestHost = domain;
- int bestPort = 5222;
- int bestPriority = 0;
- int bestWeight = 0;
- try {
- Attributes dnsLookup = context.getAttributes("_xmpp-client._tcp." + domain, new String[]{"SRV"});
- Attribute srvAttribute = dnsLookup.get("SRV");
- NamingEnumeration srvRecords = srvAttribute.getAll();
- while(srvRecords.hasMore()) {
- String srvRecord = (String) srvRecords.next();
- String [] srvRecordEntries = srvRecord.split(" ");
- int priority = Integer.parseInt(srvRecordEntries[srvRecordEntries.length - 4]);
- int port = Integer.parseInt(srvRecordEntries[srvRecordEntries.length-2]);
- int weight = Integer.parseInt(srvRecordEntries[srvRecordEntries.length - 3]);
- String host = srvRecordEntries[srvRecordEntries.length-1];
-
- // Randomize the weight.
- weight *= Math.random() * weight;
-
- if ((bestPriority == 0) || (priority < bestPriority)) {
- // Choose a server with the lowest priority.
- bestPriority = priority;
- bestWeight = weight;
- bestHost = host;
- bestPort = port;
- } else if (priority == bestPriority) {
- // When we have like priorities then randomly choose a server based on its weight
- // The weights were randomized above.
- if (weight > bestWeight) {
- bestWeight = weight;
- bestHost = host;
- bestPort = port;
- }
- }
- }
- }
- catch (Exception e) {
- // Ignore.
- }
- // Host entries in DNS should end with a ".".
- if (bestHost.endsWith(".")) {
- bestHost = bestHost.substring(0, bestHost.length()-1);
- }
- HostAddress address = new HostAddress(bestHost, bestPort);
- // Add item to cache.
- cache.put(key, address);
- return address;
- }
/**
* Returns the host name and port that the specified XMPP server can be
@@ -157,50 +94,8 @@
* server can be reached at for the specified domain.
*/
public static HostAddress resolveXMPPServerDomain(String domain) {
- if (context == null) {
return new HostAddress(domain, 5269);
}
- String key = "s" + domain;
- // Return item from cache if it exists.
- if (cache.containsKey(key)) {
- HostAddress address = (HostAddress)cache.get(key);
- if (address != null) {
- return address;
- }
- }
- String host = domain;
- int port = 5269;
- try {
- Attributes dnsLookup =
- context.getAttributes("_xmpp-server._tcp." + domain, new String[]{"SRV"});
- String srvRecord = (String)dnsLookup.get("SRV").get();
- String [] srvRecordEntries = srvRecord.split(" ");
- port = Integer.parseInt(srvRecordEntries[srvRecordEntries.length-2]);
- host = srvRecordEntries[srvRecordEntries.length-1];
- }
- catch (Exception e) {
- // Attempt lookup with older "jabber" name.
- try {
- Attributes dnsLookup =
- context.getAttributes("_jabber._tcp." + domain, new String[]{"SRV"});
- String srvRecord = (String)dnsLookup.get("SRV").get();
- String [] srvRecordEntries = srvRecord.split(" ");
- port = Integer.parseInt(srvRecordEntries[srvRecordEntries.length-2]);
- host = srvRecordEntries[srvRecordEntries.length-1];
- }
- catch (Exception e2) {
- // Ignore.
- }
- }
- // Host entries in DNS should end with a ".".
- if (host.endsWith(".")) {
- host = host.substring(0, host.length()-1);
- }
- HostAddress address = new HostAddress(host, port);
- // Add item to cache.
- cache.put(key, address);
- return address;
- }
/**
* Encapsulates a hostname and port.
diff -Nbdru org/jivesoftware/smack/util/PacketParserUtils.java /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/util/PacketParserUtils.java
--- org/jivesoftware/smack/util/PacketParserUtils.java 2009-06-26 21:11:24.585252398 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/util/PacketParserUtils.java 2009-06-25 22:34:41.252416000 +0200
@@ -25,7 +25,7 @@
import org.jivesoftware.smack.provider.ProviderManager;
import org.xmlpull.v1.XmlPullParser;
-import java.beans.PropertyDescriptor;
+//import java.beans.PropertyDescriptor;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;
@@ -428,26 +428,26 @@
{
boolean done = false;
Object object = objectClass.newInstance();
- while (!done) {
- int eventType = parser.next();
- if (eventType == XmlPullParser.START_TAG) {
- String name = parser.getName();
- String stringValue = parser.nextText();
- PropertyDescriptor descriptor = new PropertyDescriptor(name, objectClass);
- // Load the class type of the property.
- Class propertyType = descriptor.getPropertyType();
- // Get the value of the property by converting it from a
- // String to the correct object type.
- Object value = decode(propertyType, stringValue);
- // Set the value of the bean.
- descriptor.getWriteMethod().invoke(object, value);
- }
- else if (eventType == XmlPullParser.END_TAG) {
- if (parser.getName().equals(elementName)) {
- done = true;
- }
- }
- }
+// while (!done) {
+// int eventType = parser.next();
+// if (eventType == XmlPullParser.START_TAG) {
+// String name = parser.getName();
+// String stringValue = parser.nextText();
+// PropertyDescriptor descriptor = new PropertyDescriptor(name, objectClass);
+// // Load the class type of the property.
+// Class propertyType = descriptor.getPropertyType();
+// // Get the value of the property by converting it from a
+// // String to the correct object type.
+// Object value = decode(propertyType, stringValue);
+// // Set the value of the bean.
+// descriptor.getWriteMethod().invoke(object, value);
+// }
+// else if (eventType == XmlPullParser.END_TAG) {
+// if (parser.getName().equals(elementName)) {
+// done = true;
+// }
+// }
+// }
return object;
}
diff -Nbdru org/jivesoftware/smack/XMPPConnection.java /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/XMPPConnection.java
--- org/jivesoftware/smack/XMPPConnection.java 2009-06-26 21:11:24.601252412 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smack/XMPPConnection.java 2009-06-25 22:34:41.252416000 +0200
@@ -1082,7 +1082,7 @@
catch (Exception ex) {
try {
debuggerClass =
- Class.forName("org.jivesoftware.smack.debugger.LiteDebugger");
+ Class.forName("org.jivesoftware.smack.debugger.ConsoleDebugger");
}
catch (Exception ex2) {
ex2.printStackTrace();
diff -Nbdru org/jivesoftware/smackx/debugger/EnhancedDebugger.java /home/nikita/devel/beem-ui/src/org/jivesoftware/smackx/debugger/EnhancedDebugger.java
--- org/jivesoftware/smackx/debugger/EnhancedDebugger.java 2009-06-26 21:11:18.348252001 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smackx/debugger/EnhancedDebugger.java 1970-01-01 01:00:00.000000000 +0100
@@ -1,1005 +0,0 @@
-/**
- * $RCSfile$
- * $Revision: 11024 $
- * $Date: 2009-06-04 13:58:25 +0200 (Thu, 04 Jun 2009) $
- *
- * Copyright 2003-2007 Jive Software.
- *
- * All rights reserved. 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 org.jivesoftware.smack.ConnectionListener;
-import org.jivesoftware.smack.PacketListener;
-import org.jivesoftware.smack.XMPPConnection;
-import org.jivesoftware.smack.debugger.SmackDebugger;
-import org.jivesoftware.smack.packet.IQ;
-import org.jivesoftware.smack.packet.Message;
-import org.jivesoftware.smack.packet.Packet;
-import org.jivesoftware.smack.packet.Presence;
-import org.jivesoftware.smack.util.*;
-
-import javax.swing.*;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.table.DefaultTableModel;
-import javax.swing.text.BadLocationException;
-import javax.xml.transform.*;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-import java.awt.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.StringSelection;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.net.URL;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * The EnhancedDebugger is a debugger that allows to debug sent, received and interpreted messages
- * but also provides the ability to send ad-hoc messages composed by the user.<p>
- * <p/>
- * A new EnhancedDebugger will be created for each connection to debug. All the EnhancedDebuggers
- * will be shown in the same debug window provided by the class EnhancedDebuggerWindow.
- *
- * @author Gaston Dombiak
- */
-public class EnhancedDebugger implements SmackDebugger {
-
- private static final String NEWLINE = "\n";
-
- private static ImageIcon packetReceivedIcon;
- private static ImageIcon packetSentIcon;
- private static ImageIcon presencePacketIcon;
- private static ImageIcon iqPacketIcon;
- private static ImageIcon messagePacketIcon;
- private static ImageIcon unknownPacketTypeIcon;
-
- {
- URL url;
- // Load the image icons
- url =
- Thread.currentThread().getContextClassLoader().getResource("images/nav_left_blue.png");
- if (url != null) {
- packetReceivedIcon = new ImageIcon(url);
- }
- url =
- Thread.currentThread().getContextClassLoader().getResource("images/nav_right_red.png");
- if (url != null) {
- packetSentIcon = new ImageIcon(url);
- }
- url =
- Thread.currentThread().getContextClassLoader().getResource("images/photo_portrait.png");
- if (url != null) {
- presencePacketIcon = new ImageIcon(url);
- }
- url =
- Thread.currentThread().getContextClassLoader().getResource(
- "images/question_and_answer.png");
- if (url != null) {
- iqPacketIcon = new ImageIcon(url);
- }
- url = Thread.currentThread().getContextClassLoader().getResource("images/message.png");
- if (url != null) {
- messagePacketIcon = new ImageIcon(url);
- }
- url = Thread.currentThread().getContextClassLoader().getResource("images/unknown.png");
- if (url != null) {
- unknownPacketTypeIcon = new ImageIcon(url);
- }
- }
-
- private DefaultTableModel messagesTable = null;
- private JTextArea messageTextArea = null;
- private JFormattedTextField userField = null;
- private JFormattedTextField statusField = null;
-
- private XMPPConnection connection = null;
-
- private PacketListener packetReaderListener = null;
- private PacketListener packetWriterListener = null;
- private ConnectionListener connListener = null;
-
- private Writer writer;
- private Reader reader;
- private ReaderListener readerListener;
- private WriterListener writerListener;
-
- private Date creationTime = new Date();
-
- // Statistics variables
- private DefaultTableModel statisticsTable = null;
- private int sentPackets = 0;
- private int receivedPackets = 0;
- private int sentIQPackets = 0;
- private int receivedIQPackets = 0;
- private int sentMessagePackets = 0;
- private int receivedMessagePackets = 0;
- private int sentPresencePackets = 0;
- private int receivedPresencePackets = 0;
- private int sentOtherPackets = 0;
- private int receivedOtherPackets = 0;
-
- JTabbedPane tabbedPane;
-
- public EnhancedDebugger(XMPPConnection connection, Writer writer, Reader reader) {
- this.connection = connection;
- this.writer = writer;
- this.reader = reader;
- createDebug();
- EnhancedDebuggerWindow.addDebugger(this);
- }
-
- /**
- * Creates the debug process, which is a GUI window that displays XML traffic.
- */
- private void createDebug() {
- // We'll arrange the UI into six tabs. The first tab contains all data, the second
- // client generated XML, the third server generated XML, the fourth allows to send
- // ad-hoc messages and the fifth contains connection information.
- tabbedPane = new JTabbedPane();
-
- // Add the All Packets, Sent, Received and Interpreted panels
- addBasicPanels();
-
- // Add the panel to send ad-hoc messages
- addAdhocPacketPanel();
-
- // Add the connection information panel
- addInformationPanel();
-
- // 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.
- packetReaderListener = new PacketListener() {
- SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm:ss aaa");
-
- public void processPacket(final Packet packet) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- addReadPacketToTable(dateFormatter, packet);
- }
- });
-
- }
- };
-
- // Create a thread that will listen for all outgoing packets and write them to
- // the GUI.
- packetWriterListener = new PacketListener() {
- SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm:ss aaa");
-
- public void processPacket(final Packet packet) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- addSentPacketToTable(dateFormatter, packet);
- }
- });
-
- }
- };
-
- // Create a thread that will listen for any connection closed event
- connListener = new ConnectionListener() {
- public void connectionClosed() {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- statusField.setValue("Closed");
- EnhancedDebuggerWindow.connectionClosed(EnhancedDebugger.this);
- }
- });
-
- }
-
- public void connectionClosedOnError(final Exception e) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- statusField.setValue("Closed due to an exception");
- EnhancedDebuggerWindow.connectionClosedOnError(EnhancedDebugger.this, e);
- }
- });
-
- }
- public void reconnectingIn(final int seconds){
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- statusField.setValue("Attempt to reconnect in " + seconds + " seconds");
- }
- });
- }
-
- public void reconnectionSuccessful() {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- statusField.setValue("Reconnection stablished");
- EnhancedDebuggerWindow.connectionEstablished(EnhancedDebugger.this);
- }
- });
- }
-
- public void reconnectionFailed(Exception e) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- statusField.setValue("Reconnection failed");
- }
- });
- }
- };
- }
-
- private void addBasicPanels() {
- JSplitPane allPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
- allPane.setOneTouchExpandable(true);
-
- messagesTable =
- new DefaultTableModel(
- new Object[]{"Hide", "Timestamp", "", "", "Message", "Id", "Type", "To", "From"},
- 0) {
- private static final long serialVersionUID = 8136121224474217264L;
- public boolean isCellEditable(int rowIndex, int mColIndex) {
- return false;
- }
-
- public Class getColumnClass(int columnIndex) {
- if (columnIndex == 2 || columnIndex == 3) {
- return Icon.class;
- }
- return super.getColumnClass(columnIndex);
- }
-
- };
- JTable table = new JTable(messagesTable);
- // Allow only single a selection
- table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- // Hide the first column
- table.getColumnModel().getColumn(0).setMaxWidth(0);
- table.getColumnModel().getColumn(0).setMinWidth(0);
- table.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(0);
- table.getTableHeader().getColumnModel().getColumn(0).setMinWidth(0);
- // Set the column "timestamp" size
- table.getColumnModel().getColumn(1).setMaxWidth(300);
- table.getColumnModel().getColumn(1).setPreferredWidth(70);
- // Set the column "direction" icon size
- table.getColumnModel().getColumn(2).setMaxWidth(50);
- table.getColumnModel().getColumn(2).setPreferredWidth(30);
- // Set the column "packet type" icon size
- table.getColumnModel().getColumn(3).setMaxWidth(50);
- table.getColumnModel().getColumn(3).setPreferredWidth(30);
- // Set the column "Id" size
- table.getColumnModel().getColumn(5).setMaxWidth(100);
- table.getColumnModel().getColumn(5).setPreferredWidth(55);
- // Set the column "type" size
- table.getColumnModel().getColumn(6).setMaxWidth(200);
- table.getColumnModel().getColumn(6).setPreferredWidth(50);
- // Set the column "to" size
- table.getColumnModel().getColumn(7).setMaxWidth(300);
- table.getColumnModel().getColumn(7).setPreferredWidth(90);
- // Set the column "from" size
- table.getColumnModel().getColumn(8).setMaxWidth(300);
- table.getColumnModel().getColumn(8).setPreferredWidth(90);
- // Create a table listener that listen for row selection events
- SelectionListener selectionListener = new SelectionListener(table);
- table.getSelectionModel().addListSelectionListener(selectionListener);
- table.getColumnModel().getSelectionModel().addListSelectionListener(selectionListener);
- allPane.setTopComponent(new JScrollPane(table));
- messageTextArea = new JTextArea();
- messageTextArea.setEditable(false);
- // 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(messageTextArea.getText()), null);
- }
- });
- menu.add(menuItem1);
- // Add listener to the text area so the popup menu can come up.
- messageTextArea.addMouseListener(new PopupListener(menu));
- allPane.setBottomComponent(new JScrollPane(messageTextArea));
- allPane.setDividerLocation(150);
-
- tabbedPane.add("All Packets", allPane);
- tabbedPane.setToolTipTextAt(0, "Sent and received packets processed by Smack");
-
- // Create UI elements for client generated XML traffic.
- final JTextArea sentText = new JTextArea();
- sentText.setWrapStyleWord(true);
- sentText.setLineWrap(true);
- sentText.setEditable(false);
- sentText.setForeground(new Color(112, 3, 3));
- tabbedPane.add("Raw Sent Packets", new JScrollPane(sentText));
- tabbedPane.setToolTipTextAt(1, "Raw text of the sent packets");
-
- // 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(sentText.getText()), null);
- }
- });
-
- JMenuItem menuItem2 = new JMenuItem("Clear");
- menuItem2.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- sentText.setText("");
- }
- });
-
- // Add listener to the text area so the popup menu can come up.
- sentText.addMouseListener(new PopupListener(menu));
- menu.add(menuItem1);
- menu.add(menuItem2);
-
- // Create UI elements for server generated XML traffic.
- final JTextArea receivedText = new JTextArea();
- receivedText.setWrapStyleWord(true);
- receivedText.setLineWrap(true);
- receivedText.setEditable(false);
- receivedText.setForeground(new Color(6, 76, 133));
- tabbedPane.add("Raw Received Packets", new JScrollPane(receivedText));
- tabbedPane.setToolTipTextAt(
- 2,
- "Raw text of the received packets before Smack process them");
-
- // 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(receivedText.getText()), null);
- }
- });
-
- menuItem2 = new JMenuItem("Clear");
- menuItem2.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- receivedText.setText("");
- }
- });
-
- // Add listener to the text area so the popup menu can come up.
- receivedText.addMouseListener(new PopupListener(menu));
- menu.add(menuItem1);
- menu.add(menuItem2);
-
- // Create a special Reader that wraps the main Reader and logs data to the GUI.
- ObservableReader debugReader = new ObservableReader(reader);
- readerListener = new ReaderListener() {
- public void read(final String str) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- if (EnhancedDebuggerWindow.PERSISTED_DEBUGGER &&
- !EnhancedDebuggerWindow.getInstance().isVisible()) {
- // Do not add content if the parent is not visible
- return;
- }
-
- int index = str.lastIndexOf(">");
- if (index != -1) {
- if (receivedText.getLineCount() >= EnhancedDebuggerWindow.MAX_TABLE_ROWS)
- {
- try {
- receivedText.replaceRange("", 0, receivedText.getLineEndOffset(0));
- }
- catch (BadLocationException e) {
- e.printStackTrace();
- }
- }
- receivedText.append(str.substring(0, index + 1));
- receivedText.append(NEWLINE);
- if (str.length() > index) {
- receivedText.append(str.substring(index + 1));
- }
- }
- else {
- receivedText.append(str);
- }
- }
- });
- }
- };
- debugReader.addReaderListener(readerListener);
-
- // Create a special Writer that wraps the main Writer and logs data to the GUI.
- ObservableWriter debugWriter = new ObservableWriter(writer);
- writerListener = new WriterListener() {
- public void write(final String str) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- if (EnhancedDebuggerWindow.PERSISTED_DEBUGGER &&
- !EnhancedDebuggerWindow.getInstance().isVisible()) {
- // Do not add content if the parent is not visible
- return;
- }
-
- if (sentText.getLineCount() >= EnhancedDebuggerWindow.MAX_TABLE_ROWS) {
- try {
- sentText.replaceRange("", 0, sentText.getLineEndOffset(0));
- }
- catch (BadLocationException e) {
- e.printStackTrace();
- }
- }
-
- sentText.append(str);
- if (str.endsWith(">")) {
- sentText.append(NEWLINE);
- }
- }
- });
-
-
- }
- };
- debugWriter.addWriterListener(writerListener);
-
- // Assign the reader/writer objects to use the debug versions. The packet reader
- // and writer will use the debug versions when they are created.
- reader = debugReader;
- writer = debugWriter;
-
- }
-
- private void addAdhocPacketPanel() {
- // Create UI elements for sending ad-hoc messages.
- final JTextArea adhocMessages = new JTextArea();
- adhocMessages.setEditable(true);
- adhocMessages.setForeground(new Color(1, 94, 35));
- tabbedPane.add("Ad-hoc message", new JScrollPane(adhocMessages));
- tabbedPane.setToolTipTextAt(3, "Panel that allows you to send adhoc packets");
-
- // Add pop-up menu.
- JPopupMenu menu = new JPopupMenu();
- JMenuItem menuItem = new JMenuItem("Message");
- menuItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- adhocMessages.setText(
- "<message to=\"\" id=\""
- + StringUtils.randomString(5)
- + "-X\"><body></body></message>");
- }
- });
- menu.add(menuItem);
-
- menuItem = new JMenuItem("IQ Get");
- menuItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- adhocMessages.setText(
- "<iq type=\"get\" to=\"\" id=\""
- + StringUtils.randomString(5)
- + "-X\"><query xmlns=\"\"></query></iq>");
- }
- });
- menu.add(menuItem);
-
- menuItem = new JMenuItem("IQ Set");
- menuItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- adhocMessages.setText(
- "<iq type=\"set\" to=\"\" id=\""
- + StringUtils.randomString(5)
- + "-X\"><query xmlns=\"\"></query></iq>");
- }
- });
- menu.add(menuItem);
-
- menuItem = new JMenuItem("Presence");
- menuItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- adhocMessages.setText(
- "<presence to=\"\" id=\"" + StringUtils.randomString(5) + "-X\"/>");
- }
- });
- menu.add(menuItem);
- menu.addSeparator();
-
- menuItem = new JMenuItem("Send");
- menuItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- if (!"".equals(adhocMessages.getText())) {
- AdHocPacket packetToSend = new AdHocPacket(adhocMessages.getText());
- connection.sendPacket(packetToSend);
- }
- }
- });
- menu.add(menuItem);
-
- menuItem = new JMenuItem("Clear");
- menuItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- adhocMessages.setText(null);
- }
- });
- menu.add(menuItem);
-
- // Add listener to the text area so the popup menu can come up.
- adhocMessages.addMouseListener(new PopupListener(menu));
- }
-
- private void addInformationPanel() {
- // Create UI elements for connection information.
- JPanel informationPanel = new JPanel();
- informationPanel.setLayout(new BorderLayout());
-
- // Add the Host information
- JPanel connPanel = new JPanel();
- connPanel.setLayout(new GridBagLayout());
- connPanel.setBorder(BorderFactory.createTitledBorder("Connection information"));
-
- JLabel label = new JLabel("Host: ");
- label.setMinimumSize(new java.awt.Dimension(150, 14));
- label.setMaximumSize(new java.awt.Dimension(150, 14));
- connPanel.add(
- label,
- new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 21, 0, new Insets(0, 0, 0, 0), 0, 0));
- JFormattedTextField field = new JFormattedTextField(connection.getServiceName());
- field.setMinimumSize(new java.awt.Dimension(150, 20));
- field.setMaximumSize(new java.awt.Dimension(150, 20));
- field.setEditable(false);
- field.setBorder(null);
- connPanel.add(
- field,
- new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, 10, 2, new Insets(0, 0, 0, 0), 0, 0));
-
- // Add the Port information
- label = new JLabel("Port: ");
- label.setMinimumSize(new java.awt.Dimension(150, 14));
- label.setMaximumSize(new java.awt.Dimension(150, 14));
- connPanel.add(
- label,
- new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 21, 0, new Insets(0, 0, 0, 0), 0, 0));
- field = new JFormattedTextField(connection.getPort());
- field.setMinimumSize(new java.awt.Dimension(150, 20));
- field.setMaximumSize(new java.awt.Dimension(150, 20));
- field.setEditable(false);
- field.setBorder(null);
- connPanel.add(
- field,
- new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, 10, 2, new Insets(0, 0, 0, 0), 0, 0));
-
- // Add the connection's User information
- label = new JLabel("User: ");
- label.setMinimumSize(new java.awt.Dimension(150, 14));
- label.setMaximumSize(new java.awt.Dimension(150, 14));
- connPanel.add(
- label,
- new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, 21, 0, new Insets(0, 0, 0, 0), 0, 0));
- userField = new JFormattedTextField();
- userField.setMinimumSize(new java.awt.Dimension(150, 20));
- userField.setMaximumSize(new java.awt.Dimension(150, 20));
- userField.setEditable(false);
- userField.setBorder(null);
- connPanel.add(
- userField,
- new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, 10, 2, new Insets(0, 0, 0, 0), 0, 0));
-
- // Add the connection's creationTime information
- label = new JLabel("Creation time: ");
- label.setMinimumSize(new java.awt.Dimension(150, 14));
- label.setMaximumSize(new java.awt.Dimension(150, 14));
- connPanel.add(
- label,
- new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, 21, 0, new Insets(0, 0, 0, 0), 0, 0));
- field = new JFormattedTextField(new SimpleDateFormat("yyyy.MM.dd hh:mm:ss aaa"));
- field.setMinimumSize(new java.awt.Dimension(150, 20));
- field.setMaximumSize(new java.awt.Dimension(150, 20));
- field.setValue(creationTime);
- field.setEditable(false);
- field.setBorder(null);
- connPanel.add(
- field,
- new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0, 10, 2, new Insets(0, 0, 0, 0), 0, 0));
-
- // Add the connection's creationTime information
- label = new JLabel("Status: ");
- label.setMinimumSize(new java.awt.Dimension(150, 14));
- label.setMaximumSize(new java.awt.Dimension(150, 14));
- connPanel.add(
- label,
- new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0, 21, 0, new Insets(0, 0, 0, 0), 0, 0));
- statusField = new JFormattedTextField();
- statusField.setMinimumSize(new java.awt.Dimension(150, 20));
- statusField.setMaximumSize(new java.awt.Dimension(150, 20));
- statusField.setValue("Active");
- statusField.setEditable(false);
- statusField.setBorder(null);
- connPanel.add(
- statusField,
- new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0, 10, 2, new Insets(0, 0, 0, 0), 0, 0));
- // Add the connection panel to the information panel
- informationPanel.add(connPanel, BorderLayout.NORTH);
-
- // Add the Number of sent packets information
- JPanel packetsPanel = new JPanel();
- packetsPanel.setLayout(new GridLayout(1, 1));
- packetsPanel.setBorder(BorderFactory.createTitledBorder("Transmitted Packets"));
-
- statisticsTable =
- new DefaultTableModel(new Object[][]{{"IQ", 0, 0}, {"Message", 0, 0},
- {"Presence", 0, 0}, {"Other", 0, 0}, {"Total", 0, 0}},
- new Object[]{"Type", "Received", "Sent"}) {
- private static final long serialVersionUID = -6793886085109589269L;
- public boolean isCellEditable(int rowIndex, int mColIndex) {
- return false;
- }
- };
- JTable table = new JTable(statisticsTable);
- // Allow only single a selection
- table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- packetsPanel.add(new JScrollPane(table));
-
- // Add the packets panel to the information panel
- informationPanel.add(packetsPanel, BorderLayout.CENTER);
-
- tabbedPane.add("Information", new JScrollPane(informationPanel));
- tabbedPane.setToolTipTextAt(4, "Information and statistics about the debugged connection");
- }
-
- public Reader newConnectionReader(Reader newReader) {
- ((ObservableReader) reader).removeReaderListener(readerListener);
- ObservableReader debugReader = new ObservableReader(newReader);
- debugReader.addReaderListener(readerListener);
- reader = debugReader;
- return reader;
- }
-
- public Writer newConnectionWriter(Writer newWriter) {
- ((ObservableWriter) writer).removeWriterListener(writerListener);
- ObservableWriter debugWriter = new ObservableWriter(newWriter);
- debugWriter.addWriterListener(writerListener);
- writer = debugWriter;
- return writer;
- }
-
- public void userHasLogged(final String user) {
- final EnhancedDebugger debugger = this;
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- userField.setText(user);
- EnhancedDebuggerWindow.userHasLogged(debugger, user);
- // Add the connection listener to the connection so that the debugger can be notified
- // whenever the connection is closed.
- connection.addConnectionListener(connListener);
- }
- });
-
- }
-
- public Reader getReader() {
- return reader;
- }
-
- public Writer getWriter() {
- return writer;
- }
-
- public PacketListener getReaderListener() {
- return packetReaderListener;
- }
-
- public PacketListener getWriterListener() {
- return packetWriterListener;
- }
-
- /**
- * Updates the statistics table
- */
- private void updateStatistics() {
- statisticsTable.setValueAt(Integer.valueOf(receivedIQPackets), 0, 1);
- statisticsTable.setValueAt(Integer.valueOf(sentIQPackets), 0, 2);
-
- statisticsTable.setValueAt(Integer.valueOf(receivedMessagePackets), 1, 1);
- statisticsTable.setValueAt(Integer.valueOf(sentMessagePackets), 1, 2);
-
- statisticsTable.setValueAt(Integer.valueOf(receivedPresencePackets), 2, 1);
- statisticsTable.setValueAt(Integer.valueOf(sentPresencePackets), 2, 2);
-
- statisticsTable.setValueAt(Integer.valueOf(receivedOtherPackets), 3, 1);
- statisticsTable.setValueAt(Integer.valueOf(sentOtherPackets), 3, 2);
-
- statisticsTable.setValueAt(Integer.valueOf(receivedPackets), 4, 1);
- statisticsTable.setValueAt(Integer.valueOf(sentPackets), 4, 2);
- }
-
- /**
- * Adds the received packet detail to the messages table.
- *
- * @param dateFormatter the SimpleDateFormat to use to format Dates
- * @param packet the read packet to add to the table
- */
- private void addReadPacketToTable(final SimpleDateFormat dateFormatter, final Packet packet) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- String messageType;
- String from = packet.getFrom();
- String type = "";
- Icon packetTypeIcon;
- receivedPackets++;
- if (packet instanceof IQ) {
- packetTypeIcon = iqPacketIcon;
- messageType = "IQ Received (class=" + packet.getClass().getName() + ")";
- type = ((IQ) packet).getType().toString();
- receivedIQPackets++;
- }
- else if (packet instanceof Message) {
- packetTypeIcon = messagePacketIcon;
- messageType = "Message Received";
- type = ((Message) packet).getType().toString();
- receivedMessagePackets++;
- }
- else if (packet instanceof Presence) {
- packetTypeIcon = presencePacketIcon;
- messageType = "Presence Received";
- type = ((Presence) packet).getType().toString();
- receivedPresencePackets++;
- }
- else {
- packetTypeIcon = unknownPacketTypeIcon;
- messageType = packet.getClass().getName() + " Received";
- receivedOtherPackets++;
- }
-
- // Check if we need to remove old rows from the table to keep memory consumption low
- if (EnhancedDebuggerWindow.MAX_TABLE_ROWS > 0 &&
- messagesTable.getRowCount() >= EnhancedDebuggerWindow.MAX_TABLE_ROWS) {
- messagesTable.removeRow(0);
- }
-
- messagesTable.addRow(
- new Object[]{
- formatXML(packet.toXML()),
- dateFormatter.format(new Date()),
- packetReceivedIcon,
- packetTypeIcon,
- messageType,
- packet.getPacketID(),
- type,
- "",
- from});
- // Update the statistics table
- updateStatistics();
- }
- });
- }
-
- /**
- * Adds the sent packet detail to the messages table.
- *
- * @param dateFormatter the SimpleDateFormat to use to format Dates
- * @param packet the sent packet to add to the table
- */
- private void addSentPacketToTable(final SimpleDateFormat dateFormatter, final Packet packet) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- String messageType;
- String to = packet.getTo();
- String type = "";
- Icon packetTypeIcon;
- sentPackets++;
- if (packet instanceof IQ) {
- packetTypeIcon = iqPacketIcon;
- messageType = "IQ Sent (class=" + packet.getClass().getName() + ")";
- type = ((IQ) packet).getType().toString();
- sentIQPackets++;
- }
- else if (packet instanceof Message) {
- packetTypeIcon = messagePacketIcon;
- messageType = "Message Sent";
- type = ((Message) packet).getType().toString();
- sentMessagePackets++;
- }
- else if (packet instanceof Presence) {
- packetTypeIcon = presencePacketIcon;
- messageType = "Presence Sent";
- type = ((Presence) packet).getType().toString();
- sentPresencePackets++;
- }
- else {
- packetTypeIcon = unknownPacketTypeIcon;
- messageType = packet.getClass().getName() + " Sent";
- sentOtherPackets++;
- }
-
- // Check if we need to remove old rows from the table to keep memory consumption low
- if (EnhancedDebuggerWindow.MAX_TABLE_ROWS > 0 &&
- messagesTable.getRowCount() >= EnhancedDebuggerWindow.MAX_TABLE_ROWS) {
- messagesTable.removeRow(0);
- }
-
- messagesTable.addRow(
- new Object[]{
- formatXML(packet.toXML()),
- dateFormatter.format(new Date()),
- packetSentIcon,
- packetTypeIcon,
- messageType,
- packet.getPacketID(),
- type,
- to,
- ""});
-
- // Update the statistics table
- updateStatistics();
- }
- });
- }
-
- private String formatXML(String str) {
- try {
- // Use a Transformer for output
- TransformerFactory tFactory = TransformerFactory.newInstance();
- // Surround this setting in a try/catch for compatibility with Java 1.4. This setting is required
- // for Java 1.5
- try {
- tFactory.setAttribute("indent-number", 2);
- }
- catch (IllegalArgumentException e) {
- // Ignore
- }
- Transformer transformer = tFactory.newTransformer();
- transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
-
- // Transform the requested string into a nice formatted XML string
- StreamSource source = new StreamSource(new StringReader(str));
- StringWriter sw = new StringWriter();
- StreamResult result = new StreamResult(sw);
- transformer.transform(source, result);
- return sw.toString();
-
- }
- catch (TransformerConfigurationException tce) {
- // Error generated by the parser
- System.out.println("\n** Transformer Factory error");
- System.out.println(" " + tce.getMessage());
-
- // Use the contained exception, if any
- Throwable x = tce;
- if (tce.getException() != null)
- x = tce.getException();
- x.printStackTrace();
-
- }
- catch (TransformerException te) {
- // Error generated by the parser
- System.out.println("\n** Transformation error");
- System.out.println(" " + te.getMessage());
-
- // Use the contained exception, if any
- Throwable x = te;
- if (te.getException() != null)
- x = te.getException();
- x.printStackTrace();
-
- }
- return str;
- }
-
- /**
- * Returns true if the debugger's connection with the server is up and running.
- *
- * @return true if the connection with the server is active.
- */
- boolean isConnectionActive() {
- return connection.isConnected();
- }
-
- /**
- * Stops debugging the connection. Removes any listener on the connection.
- */
- void cancel() {
- connection.removeConnectionListener(connListener);
- connection.removePacketListener(packetReaderListener);
- connection.removePacketWriterListener(packetWriterListener);
- ((ObservableReader) reader).removeReaderListener(readerListener);
- ((ObservableWriter) writer).removeWriterListener(writerListener);
- messagesTable = null;
- }
-
- /**
- * An ad-hoc packet is like any regular packet but with the exception that it's intention is
- * to be used only <b>to send packets</b>.<p>
- * <p/>
- * The whole text to send must be passed to the constructor. This implies that the client of
- * this class is responsible for sending a valid text to the constructor.
- */
- private class AdHocPacket extends Packet {
-
- private String text;
-
- /**
- * Create a new AdHocPacket with the text to send. The passed text must be a valid text to
- * send to the server, no validation will be done on the passed text.
- *
- * @param text the whole text of the packet to send
- */
- public AdHocPacket(String text) {
- this.text = text;
- }
-
- public String toXML() {
- return text;
- }
-
- }
-
- /**
- * Listens for debug window popup dialog events.
- */
- private class PopupListener extends MouseAdapter {
-
- JPopupMenu popup;
-
- PopupListener(JPopupMenu popupMenu) {
- popup = popupMenu;
- }
-
- public void mousePressed(MouseEvent e) {
- maybeShowPopup(e);
- }
-
- public void mouseReleased(MouseEvent e) {
- maybeShowPopup(e);
- }
-
- private void maybeShowPopup(MouseEvent e) {
- if (e.isPopupTrigger()) {
- popup.show(e.getComponent(), e.getX(), e.getY());
- }
- }
- }
-
- private class SelectionListener implements ListSelectionListener {
-
- JTable table;
-
- // It is necessary to keep the table since it is not possible
- // to determine the table from the event's source
- SelectionListener(JTable table) {
- this.table = table;
- }
-
- public void valueChanged(ListSelectionEvent e) {
- if (table.getSelectedRow() == -1) {
- // Clear the messageTextArea since there is none packet selected
- messageTextArea.setText(null);
- }
- else {
- // Set the detail of the packet in the messageTextArea
- messageTextArea.setText(
- (String) table.getModel().getValueAt(table.getSelectedRow(), 0));
- // Scroll up to the top
- messageTextArea.setCaretPosition(0);
- }
- }
- }
-}
diff -Nbdru org/jivesoftware/smackx/debugger/EnhancedDebuggerWindow.java /home/nikita/devel/beem-ui/src/org/jivesoftware/smackx/debugger/EnhancedDebuggerWindow.java
--- org/jivesoftware/smackx/debugger/EnhancedDebuggerWindow.java 2009-06-26 21:11:18.348252001 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smackx/debugger/EnhancedDebuggerWindow.java 1970-01-01 01:00:00.000000000 +0100
@@ -1,375 +0,0 @@
-/**
- * $RCSfile$
- * $Revision: 7071 $
- * $Date: 2007-02-12 01:59:05 +0100 (Mon, 12 Feb 2007) $
- *
- * Copyright 2003-2007 Jive Software.
- *
- * All rights reserved. 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 org.jivesoftware.smack.SmackConfiguration;
-import org.jivesoftware.smack.provider.ProviderManager;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Vector;
-
-/**
- * The EnhancedDebuggerWindow is the main debug window that will show all the EnhancedDebuggers.
- * For each connection to debug there will be an EnhancedDebugger that will be shown in the
- * EnhancedDebuggerWindow.<p>
- * <p/>
- * This class also provides information about Smack like for example the Smack version and the
- * installed providers.
- *
- * @author Gaston Dombiak
- */
-public class EnhancedDebuggerWindow {
-
- private static EnhancedDebuggerWindow instance;
-
- private static ImageIcon connectionCreatedIcon;
- private static ImageIcon connectionActiveIcon;
- private static ImageIcon connectionClosedIcon;
- private static ImageIcon connectionClosedOnErrorIcon;
-
- public static boolean PERSISTED_DEBUGGER = false;
- /**
- * Keeps the max number of rows to keep in the tables. A value less than 0 means that packets
- * will never be removed. If you are planning to use this debugger in a
- * production environment then you should set a lower value (e.g. 50) to prevent the debugger
- * from consuming all the JVM memory.
- */
- public static int MAX_TABLE_ROWS = 150;
-
- {
- URL url;
-
- url =
- Thread.currentThread().getContextClassLoader().getResource(
- "images/trafficlight_off.png");
- if (url != null) {
- connectionCreatedIcon = new ImageIcon(url);
- }
- url =
- Thread.currentThread().getContextClassLoader().getResource(
- "images/trafficlight_green.png");
- if (url != null) {
- connectionActiveIcon = new ImageIcon(url);
- }
- url =
- Thread.currentThread().getContextClassLoader().getResource(
- "images/trafficlight_red.png");
- if (url != null) {
- connectionClosedIcon = new ImageIcon(url);
- }
- url = Thread.currentThread().getContextClassLoader().getResource("images/warning.png");
- if (url != null) {
- connectionClosedOnErrorIcon = new ImageIcon(url);
- }
-
- }
-
- private JFrame frame = null;
- private JTabbedPane tabbedPane = null;
- private java.util.List<EnhancedDebugger> debuggers = new ArrayList<EnhancedDebugger>();
-
- private EnhancedDebuggerWindow() {
- }
-
- /**
- * Returns the unique EnhancedDebuggerWindow instance available in the system.
- *
- * @return the unique EnhancedDebuggerWindow instance
- */
- public static EnhancedDebuggerWindow getInstance() {
- if (instance == null) {
- instance = new EnhancedDebuggerWindow();
- }
- return instance;
- }
-
- /**
- * Adds the new specified debugger to the list of debuggers to show in the main window.
- *
- * @param debugger the new debugger to show in the debug window
- */
- synchronized static void addDebugger(EnhancedDebugger debugger) {
- getInstance().showNewDebugger(debugger);
- }
-
- /**
- * Shows the new debugger in the debug window.
- *
- * @param debugger the new debugger to show
- */
- private void showNewDebugger(EnhancedDebugger debugger) {
- if (frame == null) {
- createDebug();
- }
- debugger.tabbedPane.setName("Connection_" + tabbedPane.getComponentCount());
- tabbedPane.add(debugger.tabbedPane, tabbedPane.getComponentCount() - 1);
- tabbedPane.setIconAt(tabbedPane.indexOfComponent(debugger.tabbedPane), connectionCreatedIcon);
- frame.setTitle(
- "Smack Debug Window -- Total connections: " + (tabbedPane.getComponentCount() - 1));
- // Keep the added debugger for later access
- debuggers.add(debugger);
- }
-
- /**
- * Notification that a user has logged in to the server. A new title will be set
- * to the tab of the given debugger.
- *
- * @param debugger the debugger whose connection logged in to the server
- * @param user the user@host/resource that has just logged in
- */
- synchronized static void userHasLogged(EnhancedDebugger debugger, String user) {
- int index = getInstance().tabbedPane.indexOfComponent(debugger.tabbedPane);
- getInstance().tabbedPane.setTitleAt(
- index,
- user);
- getInstance().tabbedPane.setIconAt(
- index,
- connectionActiveIcon);
- }
-
- /**
- * Notification that the connection was properly closed.
- *
- * @param debugger the debugger whose connection was properly closed.
- */
- synchronized static void connectionClosed(EnhancedDebugger debugger) {
- getInstance().tabbedPane.setIconAt(
- getInstance().tabbedPane.indexOfComponent(debugger.tabbedPane),
- connectionClosedIcon);
- }
-
- /**
- * Notification that the connection was closed due to an exception.
- *
- * @param debugger the debugger whose connection was closed due to an exception.
- * @param e the exception.
- */
- synchronized static void connectionClosedOnError(EnhancedDebugger debugger, Exception e) {
- int index = getInstance().tabbedPane.indexOfComponent(debugger.tabbedPane);
- getInstance().tabbedPane.setToolTipTextAt(
- index,
- "Connection closed due to the exception: " + e.getMessage());
- getInstance().tabbedPane.setIconAt(
- index,
- connectionClosedOnErrorIcon);
- }
-
- synchronized static void connectionEstablished(EnhancedDebugger debugger) {
- getInstance().tabbedPane.setIconAt(
- getInstance().tabbedPane.indexOfComponent(debugger.tabbedPane),
- connectionActiveIcon);
- }
-
- /**
- * Creates the main debug window that provides information about Smack and also shows
- * a tab panel for each connection that is being debugged.
- */
- private void createDebug() {
-
- frame = new JFrame("Smack Debug Window");
-
- if (!PERSISTED_DEBUGGER) {
- // Add listener for window closing event
- frame.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent evt) {
- rootWindowClosing(evt);
- }
- });
- }
-
- // We'll arrange the UI into tabs. The last tab contains Smack's information.
- // All the connection debugger tabs will be shown before the Smack info tab.
- tabbedPane = new JTabbedPane();
-
- // Create the Smack info panel
- JPanel informationPanel = new JPanel();
- informationPanel.setLayout(new BoxLayout(informationPanel, BoxLayout.Y_AXIS));
-
- // Add the Smack version label
- JPanel versionPanel = new JPanel();
- versionPanel.setLayout(new BoxLayout(versionPanel, BoxLayout.X_AXIS));
- versionPanel.setMaximumSize(new Dimension(2000, 31));
- versionPanel.add(new JLabel(" Smack version: "));
- JFormattedTextField field = new JFormattedTextField(SmackConfiguration.getVersion());
- field.setEditable(false);
- field.setBorder(null);
- versionPanel.add(field);
- informationPanel.add(versionPanel);
-
- // Add the list of installed IQ Providers
- JPanel iqProvidersPanel = new JPanel();
- iqProvidersPanel.setLayout(new GridLayout(1, 1));
- iqProvidersPanel.setBorder(BorderFactory.createTitledBorder("Installed IQ Providers"));
- Vector<String> providers = new Vector<String>();
- for (Object provider : ProviderManager.getInstance().getIQProviders()) {
- if (provider.getClass() == Class.class) {
- providers.add(((Class) provider).getName());
- }
- else {
- providers.add(provider.getClass().getName());
- }
- }
- // Sort the collection of providers
- Collections.sort(providers);
- JList list = new JList(providers);
- iqProvidersPanel.add(new JScrollPane(list));
- informationPanel.add(iqProvidersPanel);
-
- // Add the list of installed Extension Providers
- JPanel extensionProvidersPanel = new JPanel();
- extensionProvidersPanel.setLayout(new GridLayout(1, 1));
- extensionProvidersPanel.setBorder(BorderFactory.createTitledBorder("Installed Extension Providers"));
- providers = new Vector<String>();
- for (Object provider : ProviderManager.getInstance().getExtensionProviders()) {
- if (provider.getClass() == Class.class) {
- providers.add(((Class) provider).getName());
- }
- else {
- providers.add(provider.getClass().getName());
- }
- }
- // Sort the collection of providers
- Collections.sort(providers);
- list = new JList(providers);
- extensionProvidersPanel.add(new JScrollPane(list));
- informationPanel.add(extensionProvidersPanel);
-
- tabbedPane.add("Smack Info", informationPanel);
-
- // Add pop-up menu.
- JPopupMenu menu = new JPopupMenu();
- // Add a menu item that allows to close the current selected tab
- JMenuItem menuItem = new JMenuItem("Close");
- menuItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- // Remove the selected tab pane if it's not the Smack info pane
- if (tabbedPane.getSelectedIndex() < tabbedPane.getComponentCount() - 1) {
- int index = tabbedPane.getSelectedIndex();
- // Notify to the debugger to stop debugging
- EnhancedDebugger debugger = debuggers.get(index);
- debugger.cancel();
- // Remove the debugger from the root window
- tabbedPane.remove(debugger.tabbedPane);
- debuggers.remove(debugger);
- // Update the root window title
- frame.setTitle(
- "Smack Debug Window -- Total connections: "
- + (tabbedPane.getComponentCount() - 1));
- }
- }
- });
- menu.add(menuItem);
- // Add a menu item that allows to close all the tabs that have their connections closed
- menuItem = new JMenuItem("Close All Not Active");
- menuItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- ArrayList<EnhancedDebugger> debuggersToRemove = new ArrayList<EnhancedDebugger>();
- // Remove all the debuggers of which their connections are no longer valid
- for (int index = 0; index < tabbedPane.getComponentCount() - 1; index++) {
- EnhancedDebugger debugger = debuggers.get(index);
- if (!debugger.isConnectionActive()) {
- // Notify to the debugger to stop debugging
- debugger.cancel();
- debuggersToRemove.add(debugger);
- }
- }
- for (EnhancedDebugger debugger : debuggersToRemove) {
- // Remove the debugger from the root window
- tabbedPane.remove(debugger.tabbedPane);
- debuggers.remove(debugger);
- }
- // Update the root window title
- frame.setTitle(
- "Smack Debug Window -- Total connections: "
- + (tabbedPane.getComponentCount() - 1));
- }
- });
- menu.add(menuItem);
- // Add listener to the text area so the popup menu can come up.
- tabbedPane.addMouseListener(new PopupListener(menu));
-
- frame.getContentPane().add(tabbedPane);
-
- frame.setSize(650, 400);
-
- if (!PERSISTED_DEBUGGER) {
- frame.setVisible(true);
- }
- }
-
- /**
- * Notification that the root window is closing. Stop listening for received and
- * transmitted packets in all the debugged connections.
- *
- * @param evt the event that indicates that the root window is closing
- */
- public void rootWindowClosing(WindowEvent evt) {
- // Notify to all the debuggers to stop debugging
- for (EnhancedDebugger debugger : debuggers) {
- debugger.cancel();
- }
- // Release any reference to the debuggers
- debuggers.removeAll(debuggers);
- // Release the default instance
- instance = null;
- }
-
- /**
- * Listens for debug window popup dialog events.
- */
- private class PopupListener extends MouseAdapter {
-
- JPopupMenu popup;
-
- PopupListener(JPopupMenu popupMenu) {
- popup = popupMenu;
- }
-
- public void mousePressed(MouseEvent e) {
- maybeShowPopup(e);
- }
-
- public void mouseReleased(MouseEvent e) {
- maybeShowPopup(e);
- }
-
- private void maybeShowPopup(MouseEvent e) {
- if (e.isPopupTrigger()) {
- popup.show(e.getComponent(), e.getX(), e.getY());
- }
- }
- }
-
- public void setVisible(boolean visible) {
- if (frame != null) {
- frame.setVisible(visible);
- }
- }
-
- public boolean isVisible() {
- return frame != null && frame.isVisible();
- }
-}
diff -Nbdru org/jivesoftware/smackx/debugger/package.html /home/nikita/devel/beem-ui/src/org/jivesoftware/smackx/debugger/package.html
--- org/jivesoftware/smackx/debugger/package.html 2009-06-26 21:11:18.352250912 +0200
+++ /home/nikita/devel/beem-ui/src/org/jivesoftware/smackx/debugger/package.html 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-<body>Smack optional Debuggers.</body>
\ No newline at end of file