package org.chartsy.chatsy.chat.ui; import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.RosterEntry; import org.jivesoftware.smack.RosterGroup; import org.jivesoftware.smack.XMPPException; import org.chartsy.chatsy.chat.ChatsyManager; import javax.swing.JComponent; import javax.swing.JList; import javax.swing.TransferHandler; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; public class ContactGroupTransferHandler extends TransferHandler { private static final DataFlavor flavors[] = {DataFlavor.imageFlavor, DataFlavor.javaFileListFlavor}; public int getSourceActions(JComponent c) { return TransferHandler.MOVE; } public boolean canImport(JComponent comp, DataFlavor flavor[]) { return false; } protected void exportDone(JComponent c, Transferable data, int action) { } public Transferable createTransferable(JComponent comp) { if (comp instanceof JList) { JList list = (JList)comp; ContactItem source = (ContactItem)list.getSelectedValue(); return new ContactItemTransferable(source); } return null; } public boolean importData(JComponent comp, Transferable t) { return false; } public class ContactItemTransferable implements Transferable { private ContactItem item; public ContactItemTransferable(ContactItem item) { this.item = item; } public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[]{DataFlavor.imageFlavor}; } public boolean isDataFlavorSupported(DataFlavor flavor) { return DataFlavor.imageFlavor.equals(flavor); } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (!DataFlavor.imageFlavor.equals(flavor)) throw new UnsupportedFlavorException(flavor); return item; } } private ContactGroup getContactGroup(String groupName) { ContactList contactList = ChatsyManager.getWorkspace().getContactList(); return contactList.getContactGroup(groupName); } public boolean removeContactItem(ContactGroup contactGroup, ContactItem item) { if (contactGroup.isUnfiledGroup()) { contactGroup.removeContactItem(item); contactGroup.fireContactGroupUpdated(); return true; } Roster roster = ChatsyManager.getConnection().getRoster(); RosterEntry entry = roster.getEntry(item.getJID()); RosterGroup rosterGroup = null; for (RosterGroup group : roster.getGroups()) { if (group.getName().equals(contactGroup.getGroupName())) { try { rosterGroup = group; group.removeEntry(entry); } catch (XMPPException e) { return false; } } } if (rosterGroup == null) return false; if (!rosterGroup.contains(entry)) { contactGroup.removeContactItem(item); contactGroup.fireContactGroupUpdated(); return true; } return false; } }