bookmarksui.java.svn-base
来自「开源项目openfire的完整源程序」· SVN-BASE 代码 · 共 607 行 · 第 1/2 页
SVN-BASE
607 行
Log.error("Unable to load MUC Service Names.", e);
}
return mucServices;
}
public void finished() {
if (mucServices == null) {
return;
}
Iterator services = mucServices.iterator();
while (services.hasNext()) {
String service = (String)services.next();
if (!hasService(service)) {
addServiceToList(service);
}
}
}
};
worker.start();
}
/**
* Adds a new service (ex. conferences@jabber.org) to the services list.
*
* @param service the new service.
* @return the new service node created.
*/
public JiveTreeNode addServiceToList(String service) {
final JiveTreeNode serviceNode = new JiveTreeNode(service, true, SparkRes.getImageIcon(SparkRes.SERVER_ICON));
rootNode.add(serviceNode);
final DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
model.nodeStructureChanged(rootNode);
// expand the tree for displaying
for (int i = 0; i <= tree.getRowCount(); i++) {
tree.expandPath(tree.getPathForRow(i));
}
return serviceNode;
}
/**
* Adds a new bookmark to a particular service node.
*
* @param serviceNode the service node.
* @param roomName the name of the room to bookmark.
* @param roomJID the jid of the room.
* @return the new bookmark created.
*/
public JiveTreeNode addBookmark(JiveTreeNode serviceNode, String roomName, String roomJID) {
JiveTreeNode roomNode = new JiveTreeNode(roomName, false, SparkRes.getImageIcon(SparkRes.BOOKMARK_ICON));
roomNode.setAssociatedObject(roomJID);
serviceNode.add(roomNode);
final DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
model.nodeStructureChanged(serviceNode);
return roomNode;
}
public void addBookmark(String roomName, String roomJID, boolean autoJoin) {
try {
manager.addBookmarkedConference(roomName, roomJID, autoJoin, null, null);
}
catch (XMPPException e) {
Log.error(e);
}
}
public void removeBookmark(String roomJID) {
try {
manager.removeBookmarkedConference(roomJID);
}
catch (XMPPException e) {
Log.error(e);
}
}
private JPanel getServicePanel() {
final JPanel servicePanel = new JPanel();
servicePanel.setOpaque(false);
servicePanel.setLayout(new GridBagLayout());
final JLabel serviceLabel = new JLabel();
final RolloverButton addButton = new RolloverButton(SparkRes.getImageIcon(SparkRes.SMALL_ADD_IMAGE));
addButton.setToolTipText(Res.getString("message.add.conference.service"));
final JTextField serviceField = new JTextField();
servicePanel.add(serviceLabel, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 2, 5), 0, 0));
servicePanel.add(serviceField, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 2, 5), 0, 0));
servicePanel.add(addButton, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 2, 5), 0, 0));
// Add resource utils
ResourceUtils.resLabel(serviceLabel, serviceField, Res.getString("label.add.conference.service"));
final Action conferenceAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
final String conferenceService = serviceField.getText();
if (hasService(conferenceService)) {
JOptionPane.showMessageDialog(null, Res.getString("message.service.already.exists"), Res.getString("title.error"), JOptionPane.ERROR_MESSAGE);
serviceField.setText("");
}
else {
final List serviceList = new ArrayList();
serviceField.setText(Res.getString("message.searching.please.wait"));
serviceField.setEnabled(false);
addButton.setEnabled(false);
SwingWorker worker = new SwingWorker() {
DiscoverInfo discoInfo;
public Object construct() {
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(SparkManager.getConnection());
try {
discoInfo = discoManager.discoverInfo(conferenceService);
Iterator iter = discoInfo.getIdentities();
while (iter.hasNext()) {
DiscoverInfo.Identity identity = (DiscoverInfo.Identity)iter.next();
if ("conference".equals(identity.getCategory())) {
serviceList.add(conferenceService);
break;
}
else if ("server".equals(identity.getCategory())) {
try {
Collection services = getConferenceServices(conferenceService);
Iterator serviceIterator = services.iterator();
while (serviceIterator.hasNext()) {
serviceList.add(serviceIterator.next());
}
}
catch (Exception e1) {
Log.error("Unable to load conference services in server.", e1);
}
}
}
}
catch (XMPPException e1) {
Log.error("Error in disco discovery.", e1);
}
return true;
}
public void finished() {
if (discoInfo != null) {
Iterator services = serviceList.iterator();
while (services.hasNext()) {
addServiceToList((String)services.next());
}
serviceField.setText("");
serviceField.setEnabled(true);
addButton.setEnabled(true);
}
else {
JOptionPane.showMessageDialog(SparkManager.getMainWindow(), Res.getString("message.conference.service.error"), Res.getString("title.error"), JOptionPane.ERROR_MESSAGE);
serviceField.setText("");
serviceField.setEnabled(true);
addButton.setEnabled(true);
}
}
};
worker.start();
}
}
};
addButton.addActionListener(conferenceAction);
serviceField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ENTER) {
conferenceAction.actionPerformed(null);
}
}
});
return servicePanel;
}
private Collection getConferenceServices(String server) throws Exception {
List answer = new ArrayList();
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(SparkManager.getConnection());
DiscoverItems items = discoManager.discoverItems(server);
for (Iterator it = items.getItems(); it.hasNext();) {
DiscoverItems.Item item = (DiscoverItems.Item)it.next();
if (item.getEntityID().startsWith("conference") || item.getEntityID().startsWith("private")) {
answer.add(item.getEntityID());
}
else {
try {
DiscoverInfo info = discoManager.discoverInfo(item.getEntityID());
if (info.containsFeature("http://jabber.org/protocol/muc")) {
answer.add(item.getEntityID());
}
}
catch (XMPPException e) {
Log.error("Problem when loading conference service.", e);
}
}
}
return answer;
}
private boolean hasService(String service) {
TreePath path = tree.findByName(tree, new String[]{rootNode.getUserObject().toString(), service});
return path != null;
}
/**
* Returns the Tree used to display bookmarks.
*
* @return Tree used to display bookmarks.
*/
public Tree getTree() {
return tree;
}
/**
* Sets the current bookmarks used with this account.
*
* @param bookmarks the current bookmarks used with this account.
*/
public void setBookmarks(Collection<BookmarkedConference> bookmarks) {
for (BookmarkedConference bookmark : bookmarks) {
String serviceName = StringUtils.parseServer(bookmark.getJid());
String roomJID = bookmark.getJid();
String roomName = bookmark.getName();
if (bookmark.isAutoJoin()) {
ConferenceUtils.joinConferenceOnSeperateThread(bookmark.getName(), bookmark.getJid(), bookmark.getPassword());
ConferenceUtils.addUnclosableChatRoom(roomJID);
autoJoinRooms.add(bookmark.getJid());
}
// Get Service Node
TreePath path = tree.findByName(tree, new String[]{rootNode.getUserObject().toString(), serviceName});
JiveTreeNode serviceNode = null;
if (path == null) {
serviceNode = addServiceToList(serviceName);
path = tree.findByName(tree, new String[]{rootNode.getUserObject().toString(), serviceName});
}
else {
serviceNode = (JiveTreeNode)path.getLastPathComponent();
}
addBookmark(serviceNode, roomName, roomJID);
tree.expandPath(path);
}
}
/**
* Returns all MUC services available.
*
* @return a collection of MUC services.
*/
public Collection getMucServices() {
return mucServices;
}
/**
* Adds a new ContextMenuListener.
*
* @param listener the listener.
*/
public void addContextMenuListener(ContextMenuListener listener) {
listeners.add(listener);
}
/**
* Removes a ContextMenuListener.
*
* @param listener the listener.
*/
public void removeContextMenuListener(ContextMenuListener listener) {
listeners.remove(listener);
}
private void fireContextMenuListeners(JPopupMenu popup, JiveTreeNode node) {
final Iterator iter = new ArrayList(listeners).iterator();
while (iter.hasNext()) {
ContextMenuListener listener = (ContextMenuListener)iter.next();
listener.poppingUp(node, popup);
}
}
/**
* Returns a list of bookmarks.
* @return a Collection of bookmarks.
*/
public Collection getBookmarks() {
try {
return manager.getBookmarkedConferences();
}
catch (XMPPException e) {
Log.error(e);
}
return Collections.EMPTY_LIST;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?