From 3dc1f75297bb5fd20e0e9ae4bb707e602cd4574e Mon Sep 17 00:00:00 2001 From: Damian Minkov Date: Thu, 27 Mar 2014 12:31:13 +0200 Subject: [PATCH] Adds drag and drop for contacts to the root group Contacts. --- .../MetaContactListServiceImpl.java | 8 +++++++- .../ContactListTransferHandler.java | 20 ++++++++++++++++--- .../AbstractContactGroupJabberImpl.java | 3 +-- .../jabber/ContactGroupJabberImpl.java | 2 +- ...rationSetPersistentPresenceJabberImpl.java | 4 ++-- .../jabber/RootContactGroupJabberImpl.java | 2 +- .../ServerStoredContactListJabberImpl.java | 6 ++---- 7 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java b/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java index c12e8175e..a17d3fcb7 100644 --- a/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java +++ b/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java @@ -1282,7 +1282,13 @@ public void moveMetaContact(MetaContact metaContact, } else { - opSetPresence.moveContactToGroup(protoContact, protoGroup); + if(newMetaGroup.equals(getRoot())) + opSetPresence.moveContactToGroup( + protoContact, + opSetPresence.getServerStoredContactListRoot()); + else + opSetPresence.moveContactToGroup( + protoContact, protoGroup); } } } diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTransferHandler.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTransferHandler.java index 98ec64540..8b3a1e4e4 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTransferHandler.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTransferHandler.java @@ -108,7 +108,10 @@ protected Transferable createTransferable(JComponent component) @Override public boolean canImport(JComponent comp, DataFlavor flavor[]) { - Object selectedObject = ((UIContact)((ContactNode)transferredObject) + if(!(transferredObject instanceof ContactNode)) + return false; + + Object selectedObject = (((ContactNode)transferredObject) .getContactDescriptor()).getDescriptor(); if (selectedObject instanceof MetaContact) { @@ -307,10 +310,14 @@ else if (dest instanceof GroupNode) = ((GroupNode) dest).getGroupDescriptor(); // We support darg&drop for MetaContacts only for now. - if (!(destGroup instanceof MetaUIGroup)) + if (!(destGroup instanceof MetaUIGroup) + && !destGroup.equals(list.getRootUIGroup())) + { return false; + } - if (!transferredContact + if (destGroup instanceof MetaUIGroup + && !transferredContact .getParentGroup().equals(destGroup) && !(ConfigurationUtils.isContactMoveDisabled() && ConfigurationUtils.isCreateGroupDisabled())) @@ -319,6 +326,13 @@ else if (dest instanceof GroupNode) (MetaContact) transferredContact.getDescriptor(), (MetaContactGroup) destGroup.getDescriptor()); } + else if(destGroup.equals(list.getRootUIGroup())) + { + MetaContactListManager.moveMetaContactToGroup( + (MetaContact) transferredContact.getDescriptor(), + GuiActivator.getContactListService().getRoot()); + } + return true; } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/AbstractContactGroupJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/AbstractContactGroupJabberImpl.java index 50898c172..132679ca7 100755 --- a/src/net/java/sip/communicator/impl/protocol/jabber/AbstractContactGroupJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/AbstractContactGroupJabberImpl.java @@ -24,6 +24,5 @@ public abstract class AbstractContactGroupJabberImpl implements ContactGroup { - - + public abstract void addContact(ContactJabberImpl contact); } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/ContactGroupJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/ContactGroupJabberImpl.java index eb7a8edf4..c64f44fd0 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/ContactGroupJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/ContactGroupJabberImpl.java @@ -167,7 +167,7 @@ public ContactGroup getParentContactGroup() * Adds the specified contact to the end of this group. * @param contact the new contact to add to this group */ - void addContact(ContactJabberImpl contact) + public void addContact(ContactJabberImpl contact) { buddies.put(contact.getAddress().toLowerCase(), contact); } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetPersistentPresenceJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetPersistentPresenceJabberImpl.java index eed527044..e6d0211f2 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetPersistentPresenceJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetPersistentPresenceJabberImpl.java @@ -396,13 +396,13 @@ public void moveContactToGroup(Contact contactToMove, throw new IllegalArgumentException( "The specified contact is not an jabber contact." + contactToMove); - if( !(newParent instanceof ContactGroupJabberImpl) ) + if( !(newParent instanceof AbstractContactGroupJabberImpl) ) throw new IllegalArgumentException( "The specified group is not an jabber contact group." + newParent); ssContactList.moveContact((ContactJabberImpl)contactToMove, - (ContactGroupJabberImpl)newParent); + (AbstractContactGroupJabberImpl)newParent); } /** diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/RootContactGroupJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/RootContactGroupJabberImpl.java index 6853fb5cf..c98a6b129 100755 --- a/src/net/java/sip/communicator/impl/protocol/jabber/RootContactGroupJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/RootContactGroupJabberImpl.java @@ -82,7 +82,7 @@ void removeContact(ContactJabberImpl contact) * Adds the specified contact to the end of this group. * @param contact the new contact to add to this group */ - void addContact(ContactJabberImpl contact) + public void addContact(ContactJabberImpl contact) { contacts.put(contact.getAddress(), contact); } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/ServerStoredContactListJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/ServerStoredContactListJabberImpl.java index 6e180ff67..076e5fa2e 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/ServerStoredContactListJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/ServerStoredContactListJabberImpl.java @@ -464,7 +464,7 @@ public void addContact(ContactGroup parent, String id) { String[] parentNames = null; - if(parent != null) + if(parent != null && parent != getRootGroup()) parentNames = new String[]{parent.getGroupName()}; // modify our reply timeout because some XMPP may send "result" IQ @@ -749,7 +749,7 @@ public void renameGroup(ContactGroupJabberImpl groupToRename, String newName) * @param newParent the group where we'd like the parent placed. */ public void moveContact(ContactJabberImpl contact, - ContactGroupJabberImpl newParent) + AbstractContactGroupJabberImpl newParent) throws OperationFailedException { // when the contact is not persistent, coming @@ -1032,8 +1032,6 @@ private void initRoster() } } } - - } /**