diff --git a/build.xml b/build.xml
index 510537682..8467c77ed 100644
--- a/build.xml
+++ b/build.xml
@@ -456,7 +456,7 @@
-
+
@@ -1035,6 +1035,7 @@ javax.swing.event, javax.swing.border"/>
prefix="net/java/sip/communicator/impl/protocol/msn"/>
+
diff --git a/lib/felix.unit.test.properties b/lib/felix.unit.test.properties
index dc8b6193c..dd16be91d 100644
--- a/lib/felix.unit.test.properties
+++ b/lib/felix.unit.test.properties
@@ -29,6 +29,7 @@ org.osgi.framework.system.packages= org.osgi.framework; \
javax.sound.sampled; \
javax.naming; \
javax.naming.directory; \
+ javax.crypto.spec; \
javax.net; \
javax.net.ssl;
diff --git a/lib/installer-exclude/jml-1.0b2.jar b/lib/installer-exclude/jml-1.0b2.jar
index 7445191b8..0a32411cc 100644
Binary files a/lib/installer-exclude/jml-1.0b2.jar and b/lib/installer-exclude/jml-1.0b2.jar differ
diff --git a/src/net/java/sip/communicator/impl/protocol/msn/EventAdapter.java b/src/net/java/sip/communicator/impl/protocol/msn/EventAdapter.java
index ee50780b5..6726d771e 100644
--- a/src/net/java/sip/communicator/impl/protocol/msn/EventAdapter.java
+++ b/src/net/java/sip/communicator/impl/protocol/msn/EventAdapter.java
@@ -10,7 +10,7 @@
/**
* Contactlist modification listener receives events
- * for successful chngings
+ * for successful changing
*
* @author Damian Minkov
*/
@@ -27,47 +27,15 @@ public void messageDelivered(int transactionID){}
* @param transactionID int the transaction that send the message
*/
public void messageDeliveredFailed(int transactionID){}
- /**
- * Indicates that a contact is successfully added
- * @param contact MsnContact the contact
- */
- public void contactAdded(MsnContact contact){}
- /**
- * Indicates that a contact is successfully added to the group
- * @param contact MsnContact the contact
- * @param group MsnGroup the group
- */
- public void contactAddedInGroup(MsnContact contact, MsnGroup group){}
- /**
- * Indicates successful removing of a contact
- * @param contact MsnContact the removed contact
- */
- public void contactRemoved(MsnContact contact){}
- /**
- * Indicates successful removing of a contact from a group
- * @param contact MsnContact the contact removed
- * @param group MsnGroup the group
- */
- public void contactRemovedFromGroup(MsnContact contact, MsnGroup group){}
- /**
- * Indicates that a group is successfully added
- * @param group MsnGroup the added group
- */
- public void groupAdded(MsnGroup group){}
/**
* Indicates that a group is successfully renamed
- * @param group MsnGroup the renmaed group with the new name
+ * @param group MsnGroup the renamed group with the new name
*/
public void groupRenamed(MsnGroup group){}
- /**
- * Indicates successful removing of a group
- * @param id String the id of the removed group
- */
- public void groupRemoved(String id){}
/**
* Indicates that we are logged out
- * beacuse account logged in from other location
+ * because account logged in from other location
*/
public void loggingFromOtherLocation(){}
}
diff --git a/src/net/java/sip/communicator/impl/protocol/msn/EventManager.java b/src/net/java/sip/communicator/impl/protocol/msn/EventManager.java
index bb2116fde..a9c0ef607 100644
--- a/src/net/java/sip/communicator/impl/protocol/msn/EventManager.java
+++ b/src/net/java/sip/communicator/impl/protocol/msn/EventManager.java
@@ -40,7 +40,7 @@ public class EventManager
/**
* Creates the manager
- * @param msnMessenger BasicMessenger the messanger
+ * @param msnMessenger BasicMessenger the messenger
*/
public EventManager(ProtocolProviderServiceMsnImpl msnProvider,
BasicMessenger msnMessenger)
@@ -53,7 +53,7 @@ public EventManager(ProtocolProviderServiceMsnImpl msnProvider,
/**
* Adds listener of the modification fired events
- * @param listener the modifification listener we're adding
+ * @param listener the modification listener we're adding
*/
public void addModificationListener(MsnContactListEventListener listener)
{
@@ -102,54 +102,11 @@ public void messageReceived(Session session, Message message)
logger.trace(msnMessenger.getOwner().getEmail().getEmailAddress() +
" incoming : " + incoming);
- // These are the incoming messages that are NOT handled
- //IncomingADC,IncomingANS,IncomingBLP,IncomingBPR,IncomingBYE
- //IncomingCAL,IncomingCHL,IncomingCHG,IncomingCVR,IncomingFLN
- //IncomingGTC,IncomingILN,IncomingIRO,IncomingJOI,IncomingLSG
- //IncomingLST,IncomingMSG,IncomingNLN
- //IncomingOUT - The notice message that logout. Maybe because of MSN
- // server maintenance or someone login in other place.
- //IncomingPRP,IncomingQNG,IncomingQRY,IncomingREA,IncomingRNG
- //IncomingSYN,IncomingUBX,IncomingURL,IncomingUSR,IncomingUUX
- //IncomingUnknown,IncomingVER,IncomingXFR
-
if(incoming instanceof IncomingACK)
{
//indicate the message has successed send to remote user.
fireMessageDelivered(((IncomingACK)incoming).getTransactionId());
}
- else if(incoming instanceof IncomingADC)
- {
- // add user to contact list
- IncomingADC incomingADC = (IncomingADC) incoming;
- if (incomingADC.getId() != null &&
- incomingADC.getList().equals(MsnList.FL))
- {
- MsnContact contact = msnMessenger.getContactList().
- getContactById(incomingADC.getId());
-
- if (incomingADC.getGroupId() != null)
- {
- MsnGroup group = msnMessenger.getContactList().
- getGroup(incomingADC.getGroupId());
-
- fireContactAddedInGroup(contact, group);
- }
- else
- fireContactAdded(contact);
- }
-
- }
- else if(incoming instanceof IncomingADG)
- {
- //indicate add a group success
- IncomingADG incomingADG = (IncomingADG)incoming;
-
- MsnGroupImpl group =
- (MsnGroupImpl)msnMessenger.getContactList().getGroup(incomingADG.getGroupId());
-
- fireGroupAdded(group);
- }
else if(incoming instanceof IncomingNAK)
{
//indicate the message has not successed send to remote user.
@@ -164,45 +121,6 @@ else if(incoming instanceof IncomingREG)
getGroup(incomingREG.getGroupId());
fireGroupRenamed(group);
}
- else if(incoming instanceof IncomingRMG)
- {
- // indicate delete the group successfully.
- IncomingRMG incomingRMG = (IncomingRMG)incoming;
- fireGroupRemoved(incomingRMG.getGroupId());
- }
- else if(incoming instanceof IncomingREM)
- {
- // indicate delete the contact successfully.
- IncomingREM incomingREM = (IncomingREM)incoming;
-
- if(incomingREM.getList().equals(MsnList.FL))
- {
- if(incomingREM.getGroupId() == null)
- {
- // just contact removed
- MsnContactImpl contact = (MsnContactImpl)
- msnMessenger.getContactList().getContactById(incomingREM.getId());
-
- if(contact != null)
- {
- fireContactRemoved(contact);
- }
- }
- else
- {
- // contact removed from group
- MsnContact contact =
- msnMessenger.getContactList().
- getContactById(incomingREM.getId());
-
- MsnGroup group =
- msnMessenger.getContactList().
- getGroup(incomingREM.getGroupId());
-
- fireContactRemovedFromGroup(contact, group);
- }
- }
- }
else if(incoming instanceof IncomingOUT)
{
IncomingOUT incomingOUT = (IncomingOUT)incoming;
@@ -268,85 +186,6 @@ private void fireMessageDeliveredFailed(int transactionID)
}
}
- /**
- * Fired when a contact is added successfully
- * @param contact MsnContact
- */
- private void fireContactAdded(MsnContact contact)
- {
- synchronized(listeners){
- Iterator iter = listeners.iterator();
- while (iter.hasNext())
- {
- ((MsnContactListEventListener)iter.next()).contactAdded(contact);
- }
- }
- }
-
- /**
- * Fired when a contact is added in a group successfully
- * @param contact MsnContact
- * @param group MsnGroup
- */
- private void fireContactAddedInGroup(MsnContact contact, MsnGroup group)
- {
- synchronized(listeners){
- Iterator iter = listeners.iterator();
- while (iter.hasNext())
- {
- ((MsnContactListEventListener)iter.next()).
- contactAddedInGroup(contact, group);
- }
- }
- }
-
- /**
- * Fired when a contact is removed successfully
- * @param contact MsnContact
- */
- private void fireContactRemoved(MsnContact contact)
- {
- synchronized(listeners){
- Iterator iter = listeners.iterator();
- while (iter.hasNext())
- {
- ((MsnContactListEventListener)iter.next()).contactRemoved(contact);
- }
- }
- }
-
- /**
- * Fired when a contact is removed from group successfully
- * @param contact MsnContact
- * @param group MsnGroup
- */
- private void fireContactRemovedFromGroup(MsnContact contact, MsnGroup group)
- {
- synchronized(listeners){
- Iterator iter = listeners.iterator();
- while (iter.hasNext())
- {
- ((MsnContactListEventListener)iter.next()).
- contactRemovedFromGroup(contact, group);
- }
- }
- }
-
- /**
- * Fired when a group is added successfully
- * @param group MsnGroup
- */
- private void fireGroupAdded(MsnGroup group)
- {
- synchronized(listeners){
- Iterator iter = listeners.iterator();
- while (iter.hasNext())
- {
- ((MsnContactListEventListener)iter.next()).groupAdded(group);
- }
- }
- }
-
/**
* Fired when a group is renamed successfully
* @param group MsnGroup
@@ -363,22 +202,7 @@ private void fireGroupRenamed(MsnGroup group)
}
/**
- * Fired when a group is removed successfully
- * @param id String
- */
- private void fireGroupRemoved(String id)
- {
- synchronized(listeners){
- Iterator iter = listeners.iterator();
- while (iter.hasNext())
- {
- ((MsnContactListEventListener)iter.next()).groupRemoved(id);
- }
- }
- }
-
- /**
- * Fired when we recived event for logging in from other location
+ * Fired when we received event for logging in from other location
*/
private void fireLoggingFromOtherLocation()
{
diff --git a/src/net/java/sip/communicator/impl/protocol/msn/MsnContactListEventListener.java b/src/net/java/sip/communicator/impl/protocol/msn/MsnContactListEventListener.java
index 0cec4823f..06a1c5141 100644
--- a/src/net/java/sip/communicator/impl/protocol/msn/MsnContactListEventListener.java
+++ b/src/net/java/sip/communicator/impl/protocol/msn/MsnContactListEventListener.java
@@ -10,7 +10,7 @@
/**
* Contactlist modification listener receives events
- * for successful chngings
+ * for successful changing
*
* @author Damian Minkov
*/
@@ -29,53 +29,15 @@ public interface MsnContactListEventListener
*/
public void messageDeliveredFailed(int transactionID);
- /**
- * Indicates that a contact is successfully added
- * @param contact MsnContact the contact
- */
- public void contactAdded(MsnContact contact);
-
- /**
- * Indicates that a contact is successfully added to the group
- * @param contact MsnContact the contact
- * @param group MsnGroup the group
- */
- public void contactAddedInGroup(MsnContact contact, MsnGroup group);
-
- /**
- * Indicates successful removing of a contact
- * @param contact MsnContact the removed contact
- */
- public void contactRemoved(MsnContact contact);
-
- /**
- * Indicates successful removing of a contact from a group
- * @param contact MsnContact the contact removed
- * @param group MsnGroup the group
- */
- public void contactRemovedFromGroup(MsnContact contact, MsnGroup group);
-
- /**
- * Indicates that a group is successfully added
- * @param group MsnGroup the added group
- */
- public void groupAdded(MsnGroup group);
-
/**
* Indicates that a group is successfully renamed
- * @param group MsnGroup the renmaed group with the new name
+ * @param group MsnGroup the renamed group with the new name
*/
public void groupRenamed(MsnGroup group);
- /**
- * Indicates successful removing of a group
- * @param id String the id of the removed group
- */
- public void groupRemoved(String id);
-
/**
* Indicates that we are logged out
- * beacuse account logged in from other location
+ * because account logged in from other location
*/
public void loggingFromOtherLocation();
}
diff --git a/src/net/java/sip/communicator/impl/protocol/msn/ServerStoredContactListMsnImpl.java b/src/net/java/sip/communicator/impl/protocol/msn/ServerStoredContactListMsnImpl.java
index ff1a08f36..d14132b45 100644
--- a/src/net/java/sip/communicator/impl/protocol/msn/ServerStoredContactListMsnImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/msn/ServerStoredContactListMsnImpl.java
@@ -12,7 +12,6 @@
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.util.*;
import net.sf.jml.*;
-import net.sf.jml.event.*;
import net.sf.jml.impl.*;
import net.sf.jml.message.p2p.*;
@@ -71,6 +70,8 @@ public class ServerStoredContactListMsnImpl
* indicates whether or not the contactlist is initialized and ready.
*/
private boolean isInitialized = false;
+
+ private Vector skipAddEvent = new Vector();
/**
* Creates a ServerStoredContactList wrapper for the specified BuddyList.
@@ -379,22 +380,13 @@ public void addContact(final ContactGroupMsnImpl parent, final String id)
if(parent != null)
{
- contactListModListenerImpl.waitForAddInGroup(id);
-
- ModListenerAddContactInGroup modListenerAddContactInGroup =
- new ModListenerAddContactInGroup(id, parent);
-
- contactListModManager.
- addModificationListener(modListenerAddContactInGroup);
-
// add the buddy to the list as its not there
msnProvider.getMessenger().unblockFriend(Email.parseStr(id));
+ skipAddEvent.add(id);
msnProvider.getMessenger().addFriend(Email.parseStr(id), id);
-
- modListenerAddContactInGroup.waitForEvent(1500);
-
- contactListModManager.
- removeModificationListener(modListenerAddContactInGroup);
+ msnProvider.getMessenger().copyFriend(
+ Email.parseStr(id),
+ parent.getSourceGroup().getGroupId());
}
else
{
@@ -550,7 +542,7 @@ public void removeGroup(ContactGroupMsnImpl groupToRemove)
MsnContact[] contacts = groupToRemove.getSourceGroup().getContacts();
ModListenerRemoveGroup removedContactsListener =
- new ModListenerRemoveGroup();
+ new ModListenerRemoveGroup(contacts.length);
contactListModManager.addModificationListener(removedContactsListener);
for (int i = 0; i < contacts.length; i++)
@@ -618,8 +610,6 @@ public void moveContact(ContactMsnImpl contact,
if(oldParent instanceof RootContactGroupMsnImpl)
{
logger.trace("Will Move from root " + contact);
- contactListModListenerImpl.moveFromRoot(
- contact.getSourceContact().getEmail().getEmailAddress());
msnProvider.getMessenger().copyFriend(
contact.getSourceContact().getEmail(),
newParent.getSourceGroup().getGroupId());
@@ -643,7 +633,7 @@ public void moveContact(ContactMsnImpl contact,
{
logger.trace("Will Move from " + contact.getParentContactGroup()
+ " to : " + newParent + " - contact: " + contact);
- contactListModListenerImpl.waitForMove(contact.getAddress());
+// contactListModListenerImpl.waitForMove(contact.getAddress());
msnProvider.getMessenger().moveFriend(
contact.getSourceContact().getEmail(),
( (ContactGroupMsnImpl) contact.getParentContactGroup()).
@@ -901,331 +891,174 @@ public void contactRemovedMe(MsnMessenger messenger, MsnContact contact)
{
}
- public void contactAddCompleted(MsnMessenger messenger, MsnContact contact){}
- public void contactRemoveCompleted(MsnMessenger messenger, MsnContact contact){}
- public void groupAddCompleted(MsnMessenger messenger, MsnGroup group){}
- public void groupRemoveCompleted(MsnMessenger messenger, MsnGroup group){}
- }
-
- /**
- * Waits for removing a group
- */
- private class ModListenerRemoveGroup
- extends EventAdapter
- {
- private Vector removedContacts = new Vector();
-
- public void contactRemoved(MsnContact contact)
+ public void contactAddCompleted1(MsnMessenger messenger, MsnContact contact)
{
- synchronized(this)
+ String contactID = contact.getEmail().getEmailAddress();
+
+ if(!skipAddEvent.remove(contactID))
{
- removedContacts.remove(contact.getId());
-
- if(removedContacts.size() == 0)
- notifyAll();
+ ContactMsnImpl contactToAdd =
+ new ContactMsnImpl(
+ contact,
+ ServerStoredContactListMsnImpl.this, true, true);
+ rootGroup.addContact(contactToAdd);
+ fireContactAdded(rootGroup, contactToAdd);
}
}
-
- public void waitForLastEvent(long waitFor)
+
+ public void contactRemoveCompleted1(MsnMessenger messenger, MsnContact contact)
{
- synchronized(this)
- {
- if(removedContacts.size() == 0)
- return;
+ ContactMsnImpl contactToRemove =
+ findContactById(contact.getEmail().getEmailAddress());
- try{
- wait(waitFor);
- }
- catch (InterruptedException ex)
- {
- logger.debug(
- "Interrupted while waiting for a subscription evt", ex);
- }
+ if(contactToRemove == null)
+ {
+ logger.trace("Contact not found!" + contact);
+ return;
}
- }
- }
- /**
- * Waits for adding contact and if pointed
- * copy the contact in the specified group
- * This listener emulates firing event for adding buddy in group.
- * The msn does not support adding a contact directly to a group.
- * The contact first must be added to the list then it is copied to a group
- */
- private class ModListenerAddContactInGroup
- extends EventAdapter
- {
- boolean isAddRecieved = false;
- private String contactID = null;
- private ContactGroupMsnImpl parent = null;
- ModListenerAddContactInGroup(String contactID, ContactGroupMsnImpl parent)
- {
- this.contactID = contactID;
- this.parent = parent;
- }
-
- public void contactAdded(MsnContact contact)
- {
- synchronized (this)
+ if(contactToRemove.getParentContactGroup() instanceof RootContactGroupMsnImpl)
{
- if (contact.getEmail().getEmailAddress().equals(contactID))
- {
- isAddRecieved = true;
- msnProvider.getMessenger().copyFriend(
- Email.parseStr(contactID),
- parent.getSourceGroup().getGroupId());
- notifyAll();
- }
+ rootGroup.removeContact(contactToRemove);
+ fireContactRemoved(rootGroup, contactToRemove);
}
- }
-
- public void waitForEvent(long waitFor)
- {
- synchronized (this)
+ else
{
- if (isAddRecieved)
- return;
-
- try
- {
- wait(waitFor);
- }
- catch (InterruptedException ex)
- {
- logger.debug(
- "Interrupted while waiting for a subscription evt", ex);
- }
+ ContactGroupMsnImpl parentGroup =
+ (ContactGroupMsnImpl)contactToRemove.getParentContactGroup();
+ parentGroup.removeContact(contactToRemove);
+ fireContactRemoved(parentGroup, contactToRemove);
}
}
- }
-
- /**
- * Emulates firing adding contact in group and moving contact to group.
- * When moving contact it is first adding to the new group then
- * it is removed from the old one.
- */
- private class ContactListModListenerImpl
- extends EventAdapter
- {
- private Hashtable waitAddInGroup = new Hashtable();
- private Hashtable waitMove = new Hashtable();
- private Hashtable waitMoveFromRoot = new Hashtable();
-
- public void waitForAddInGroup(String id)
- {
- waitAddInGroup.put(id, new Integer(0));
- }
-
- public void waitForMove(String id)
+
+ public void groupAddCompleted(MsnMessenger messenger, MsnGroup group)
{
- waitMove.put(id, new Integer(0));
- }
+ logger.trace("groupAdded " + group);
+ ContactGroupMsnImpl newGroup =
+ new ContactGroupMsnImpl(group,
+ new MsnContact[]{},
+ ServerStoredContactListMsnImpl.this,
+ true);
- public void moveFromRoot(String id)
- {
- waitMoveFromRoot.put(id, new Integer(0));
+ rootGroup.addSubGroup(newGroup);
+ fireGroupEvent(newGroup, ServerStoredGroupEvent.GROUP_CREATED_EVENT);
}
-
- public void contactAdded(MsnContact newContact)
+ public void groupRemoveCompleted(MsnMessenger messenger, MsnGroup g)
{
- ContactMsnImpl contact =
- findContactById(newContact.getEmail().getEmailAddress());
+ ContactGroupMsnImpl group = findContactGroupByMsnId(g.getGroupId());
- if(contact != null && contact.isPersistent())
+ if(group == null)
{
- contact.setResolved(newContact);
- fireContactResolved(contact.getParentContactGroup(), contact);
+ logger.trace("Group not found!" + g);
return;
}
- else
- {
- Integer isWaitingForAddInGroup =
- (Integer)waitAddInGroup.get(newContact.getEmail().getEmailAddress());
- if(isWaitingForAddInGroup != null)
- {
- if(isWaitingForAddInGroup.intValue() == 0)
- waitAddInGroup.put(
- newContact.getEmail().getEmailAddress(),
- new Integer(1));
- else // something is wrong
- waitAddInGroup.remove(newContact.getEmail().getEmailAddress());
- }
- else
- {
- contact = new ContactMsnImpl(
- newContact,
- ServerStoredContactListMsnImpl.this, true, true);
- rootGroup.addContact(contact);
- fireContactAdded(rootGroup, contact);
- }
- }
+ rootGroup.removeSubGroup(group);
+ fireGroupEvent(group, ServerStoredGroupEvent.GROUP_REMOVED_EVENT);
}
-
- public void contactAddedInGroup(MsnContact contact, MsnGroup group)
+ public void contactAddInGroupCompleted(MsnMessenger messenger, MsnContact c, MsnGroup g)
{
- String contactID = contact.getEmail().getEmailAddress();
- ContactMsnImpl contactToAdd = findContactById(contactID);
-
- ContactGroupMsnImpl dstGroup =
- findContactGroupByMsnId(group.getGroupId());
-
- Integer isWaitingForAddInGroup = (Integer)waitAddInGroup.get(contactID);
-
- Integer isWaitingForMove = (Integer)waitMove.get(contactID);
-
- Integer isWaitingForMoveFromRoot =
- (Integer)waitMoveFromRoot.get(contactID);
-
- if(dstGroup == null){
- logger.trace("Group not found!" + group);
- return;
- }
-
- if(isWaitingForMoveFromRoot != null &&
- isWaitingForMoveFromRoot.intValue() == 0)
- {
- // we are moving from root to a group
- logger.trace("Moving from root to a group: firing event");
- waitMoveFromRoot.remove(contactID);
- rootGroup.removeContact(contactToAdd);
- dstGroup.addContact(contactToAdd);
- fireContactMoved(rootGroup, dstGroup, contactToAdd);
- return;
- }
-
- if(isWaitingForMove != null && isWaitingForMove.intValue() == 0)
+ ContactMsnImpl contactToAdd =
+ new ContactMsnImpl(
+ c,
+ ServerStoredContactListMsnImpl.this, true, true);
+
+ ContactGroupMsnImpl group =
+ findContactGroupByMsnId(g.getGroupId());
+
+ if(group == null)
{
- // we wait for remove from the previous group to fire
- // event contact moved
- dstGroup.addContact(contactToAdd);
- waitMove.put(contactID, dstGroup);
+ logger.error("Group is missing!");
return;
}
- if(contactToAdd == null || isWaitingForAddInGroup != null)
- {
- //something wrong or we are waiting for adding contact in group
- if(isWaitingForAddInGroup.intValue() == 1)
- {
- if(contactToAdd == null)
- {
- contactToAdd =
- new ContactMsnImpl(
- contact, ServerStoredContactListMsnImpl.this, true, true);
-
- waitAddInGroup.remove(contactID);
- dstGroup.addContact(contactToAdd);
-
- fireContactAdded(dstGroup, contactToAdd);
- }
- else
- {
- if(!contactToAdd.isPersistent())
- {
- waitAddInGroup.remove(contactID);
- contactToAdd.setResolved(contact);
- dstGroup.addContact(contactToAdd);
-
- fireContactMoved(contactToAdd.getParentContactGroup(),
- dstGroup, contactToAdd);
- }
- else
- {
- waitAddInGroup.remove(contactID);
- dstGroup.addContact(contactToAdd);
-
- fireContactAdded(dstGroup, contactToAdd);
- }
- }
- }
- else
- {
- // smth. wrong
- logger.trace("Contact not found!" + contact);
- return;
- }
- }
- else
- {
- dstGroup.addContact(contactToAdd);
- fireContactAdded(dstGroup, contactToAdd);
- }
+ group.addContact(contactToAdd);
+
+ fireContactAdded(group, contactToAdd);
}
-
- public void contactRemoved(MsnContact contact)
+ public void contactRemoveFromGroupCompleted(MsnMessenger messenger,
+ MsnContact c, MsnGroup g)
{
- ContactMsnImpl contactToRemove =
- findContactById(contact.getEmail().getEmailAddress());
-
- if(contactToRemove == null){
- logger.trace("Contact not found!" + contact);
- return;
- }
+ String contactID = c.getEmail().getEmailAddress();
+ ContactMsnImpl contactToRemove = findContactById(contactID);
- if(contactToRemove.getParentContactGroup() instanceof RootContactGroupMsnImpl)
- {
- rootGroup.removeContact(contactToRemove);
- fireContactRemoved(rootGroup, contactToRemove);
- }
- else
+ if(g == null)
{
- ContactGroupMsnImpl parentGroup =
- (ContactGroupMsnImpl)contactToRemove.getParentContactGroup();
- parentGroup.removeContact(contactToRemove);
- fireContactRemoved(parentGroup, contactToRemove);
+ logger.trace("Group is null! ");
+ return;
}
- }
-
- public void contactRemovedFromGroup(MsnContact contact, MsnGroup group)
- {
- String contactID = contact.getEmail().getEmailAddress();
- ContactMsnImpl contactToRemove = findContactById(contactID);
-
+
ContactGroupMsnImpl dstGroup =
- findContactGroupByMsnId(group.getGroupId());
+ findContactGroupByMsnId(g.getGroupId());
if(contactToRemove == null)
{
- logger.trace("Contact not found " + contact);
+ logger.trace("Contact not found " + c);
return;
}
if(dstGroup == null)
{
- logger.trace("Group not found " + group);
- return;
- }
-
- Object waitForMoveObj = waitMove.get(contactID);
- if(waitForMoveObj != null &&
- waitForMoveObj instanceof ContactGroupMsnImpl)
- {
- dstGroup.removeContact(contactToRemove);
- fireContactMoved(
- dstGroup,
- (ContactGroupMsnImpl)waitForMoveObj,
- contactToRemove);
+ logger.trace("Group not found " + g);
return;
}
dstGroup.removeContact(contactToRemove);
fireContactRemoved(dstGroup, contactToRemove);
}
+ }
- public void groupAdded(MsnGroup group)
+ /**
+ * Waits for removing a group
+ */
+ private class ModListenerRemoveGroup
+ extends EventAdapter
+ {
+ private int contactCount = 0;
+
+ public ModListenerRemoveGroup(int c)
{
- logger.trace("groupAdded " + group);
- ContactGroupMsnImpl newGroup =
- new ContactGroupMsnImpl(group,
- new MsnContact[]{},
- ServerStoredContactListMsnImpl.this,
- true);
+ this.contactCount = c;
+ }
- rootGroup.addSubGroup(newGroup);
- fireGroupEvent(newGroup, ServerStoredGroupEvent.GROUP_CREATED_EVENT);
+ public void contactRemoved(MsnContact contact)
+ {
+ synchronized(this)
+ {
+ contactCount--;
+
+ if(contactCount == 0)
+ notifyAll();
+ }
+ }
+
+ public void waitForLastEvent(long waitFor)
+ {
+ synchronized(this)
+ {
+ if(contactCount == 0)
+ return;
+
+ try{
+ wait(waitFor);
+ }
+ catch (InterruptedException ex)
+ {
+ logger.debug(
+ "Interrupted while waiting for a subscription evt", ex);
+ }
+ }
}
+ }
+ /**
+ * Emulates firing adding contact in group and moving contact to group.
+ * When moving contact it is first adding to the new group then
+ * it is removed from the old one.
+ */
+ private class ContactListModListenerImpl
+ extends EventAdapter
+ {
public void groupRenamed(MsnGroup group)
{
ContactGroupMsnImpl groupToRename =
@@ -1242,19 +1075,6 @@ public void groupRenamed(MsnGroup group)
ServerStoredGroupEvent.GROUP_RENAMED_EVENT);
}
- public void groupRemoved(String id)
- {
- ContactGroupMsnImpl group = findContactGroupByMsnId(id);
-
- if(group == null){
- logger.trace("Group not found!" + id);
- return;
- }
-
- rootGroup.removeSubGroup(group);
- fireGroupEvent(group, ServerStoredGroupEvent.GROUP_REMOVED_EVENT);
- }
-
public void loggingFromOtherLocation()
{
msnProvider.unregister(false);
diff --git a/src/net/java/sip/communicator/impl/protocol/msn/msn.provider.manifest.mf b/src/net/java/sip/communicator/impl/protocol/msn/msn.provider.manifest.mf
index 75d1cd69c..b95425c06 100755
--- a/src/net/java/sip/communicator/impl/protocol/msn/msn.provider.manifest.mf
+++ b/src/net/java/sip/communicator/impl/protocol/msn/msn.provider.manifest.mf
@@ -10,6 +10,9 @@ Import-Package: org.osgi.framework,
javax.naming,
javax.naming.directory,
org.xml.sax,
+ org.w3c.dom,
+ javax.crypto,
+ javax.crypto.spec,
sun.security.action,
net.java.sip.communicator.service.configuration,
net.java.sip.communicator.service.resources,
diff --git a/src/net/java/sip/communicator/service/resources/ResourceManagementService.java b/src/net/java/sip/communicator/service/resources/ResourceManagementService.java
index 52a4c3f15..9c50c1be2 100644
--- a/src/net/java/sip/communicator/service/resources/ResourceManagementService.java
+++ b/src/net/java/sip/communicator/service/resources/ResourceManagementService.java
@@ -12,7 +12,10 @@
import javax.swing.*;
/**
- *
+ * The Resource Management Service gives easy access to
+ * common resources for the application including texts, images, sounds and
+ * some configurations.
+ *
* @author Damian Minkov
*/
public interface ResourceManagementService
@@ -129,25 +132,98 @@ public interface ResourceManagementService
public char getI18nMnemonic(String key, Locale l);
// Settings pack methods
+ /**
+ * Returns an url for the setting corresponding to the given key.
+ * Used when the setting is an actual file.
+ *
+ * @param urlKey The key of the setting.
+ * @return Url to the corresponding resource.
+ */
public URL getSettingsURL(String urlKey);
+
+ /**
+ * Returns an InputStream for the setting corresponding to the given key.
+ * Used when the setting is an actual file.
+ *
+ * @param streamKey The key of the setting.
+ * @return InputStream to the corresponding resource.
+ */
public InputStream getSettingsInputStream(String streamKey);
+
+ /**
+ * Returns a String for the setting corresponding to the given key.
+ *
+ * @param key The key of the setting.
+ * @return String to the corresponding resource.
+ */
public String getSettingsString(String key);
+
+ /**
+ * Returns an int for the setting corresponding to the given key.
+ *
+ * @param key The key of the setting.
+ * @return int to the corresponding resource.
+ */
public int getSettingsInt(String key);
// Sound pack methods
+ /**
+ * Returns an url for the sound resource corresponding to the given key.
+ *
+ * @param urlKey The key of the setting.
+ * @return Url to the corresponding resource.
+ */
public URL getSoundURL(String urlKey);
+
+ /**
+ * Returns an url for the sound resource corresponding to the given path.
+ *
+ * @param path The path to the sound resource.
+ * @return Url to the corresponding resource.
+ */
public URL getSoundURLForPath(String path);
+ /**
+ * Returns all color keys that can be obtained from this service.
+ *
+ * @return Iterator to all color keys.
+ */
public Iterator getCurrentColors();
+ /**
+ * Returns all image keys that can be obtained from this service.
+ *
+ * @return Iterator to all image keys.
+ */
public Iterator getCurrentImages();
+ /**
+ * Returns all color settings that can be obtained from this service.
+ *
+ * @return Iterator to all settings keys.
+ */
public Iterator getCurrentSettings();
+ /**
+ * Returns all color sounds that can be obtained from this service.
+ *
+ * @return Iterator to all sounds keys.
+ */
public Iterator getCurrentSounds();
+ /**
+ * Returns all available locales for the translated texts.
+ *
+ * @return Iterator to all locales.
+ */
public Iterator getAvailableLocales();
+ /**
+ * Returns all string keys that can be obtained from
+ * this service for the given locale.
+ *
+ * @return Iterator to all string keys.
+ */
public Iterator getI18nStringsByLocale(Locale l);
/**
diff --git a/test/net/java/sip/communicator/slick/protocol/msn/TestOperationSetPersistentPresence.java b/test/net/java/sip/communicator/slick/protocol/msn/TestOperationSetPersistentPresence.java
index 4acadfd72..2e98202db 100644
--- a/test/net/java/sip/communicator/slick/protocol/msn/TestOperationSetPersistentPresence.java
+++ b/test/net/java/sip/communicator/slick/protocol/msn/TestOperationSetPersistentPresence.java
@@ -128,7 +128,10 @@ protected void tearDown() throws Exception
* phase by the testerAgent.
*/
public void testRetrievingServerStoredContactList()
+ throws Exception
{
+ waitFor(5000);
+
ContactGroup rootGroup
= opSetPersPresence1.getServerStoredContactListRoot();
@@ -146,7 +149,7 @@ public void testRetrievingServerStoredContactList()
//Go through the contact list retrieved by the persistence presence set
//and remove the name of every contact and group that we find there from
- //the expected contct list hashtable.
+ //the expected contact list hashtable.
Iterator groups = rootGroup.subgroups();
while (groups.hasNext() )
{
@@ -424,6 +427,8 @@ public void prepareContactList()
String groupName = (String) newGroupsEnum.nextElement();
logger.debug("Will add group " + groupName);
+ groupChangeCollector.collectedEvents.clear();
+
opSetPersPresence1.createServerStoredContactGroup(
opSetPersPresence1.getServerStoredContactListRoot(), groupName);
@@ -469,9 +474,9 @@ private class GroupChangeCollector implements ServerStoredGroupListener
/**
* Blocks until at least one event is received or until waitFor
- * miliseconds pass (whicever happens first).
+ * milliseconds pass (whichever happens first).
*
- * @param waitFor the number of miliseconds that we should be waiting
+ * @param waitFor the number of milliseconds that we should be waiting
* for an event before simply bailing out.
*/
public void waitForEvent(long waitFor)
@@ -493,7 +498,7 @@ public void waitForEvent(long waitFor)
}
/**
- * Called whnever an indication is received that a new server stored
+ * Called whenever an indication is received that a new server stored
* group is created.
* @param evt a ServerStoredGroupChangeEvent containing a reference to
* the newly created group.
@@ -525,7 +530,7 @@ public void groupNameChanged(ServerStoredGroupEvent evt)
}
/**
- * Called whnever an indication is received that an existing server stored
+ * Called whenever an indication is received that an existing server stored
* group has been removed.
* @param evt a ServerStoredGroupChangeEvent containing a reference to the
* newly created group.
@@ -541,7 +546,7 @@ public void groupRemoved(ServerStoredGroupEvent evt)
}
/**
- * Called whnever an indication is received that an existing server
+ * Called whenever an indication is received that an existing server
* stored group has been resolved.
* @param evt a ServerStoredGroupChangeEvent containing a reference to
* the resolved group.
@@ -567,9 +572,9 @@ private class SubscriptionEventCollector implements SubscriptionListener
/**
* Blocks until at least one event is received or until waitFor
- * miliseconds pass (whicever happens first).
+ * milliseconds pass (whichever happens first).
*
- * @param waitFor the number of miliseconds that we should be waiting
+ * @param waitFor the number of milliseconds that we should be waiting
* for an event before simply bailing out.
*/
public void waitForEvent(long waitFor)
@@ -600,7 +605,7 @@ public void waitForEvent(long waitFor)
}
/**
- * Stores the received subsctiption and notifies all waiting on this
+ * Stores the received subscription and notifies all waiting on this
* object
* @param evt the SubscriptionEvent containing the corresponding contact
*/
@@ -615,7 +620,7 @@ public void subscriptionCreated(SubscriptionEvent evt)
}
/**
- * Stores the received subsctiption and notifies all waiting on this
+ * Stores the received subscription and notifies all waiting on this
* object
* @param evt the SubscriptionEvent containing the corresponding contact
*/
@@ -630,7 +635,7 @@ public void subscriptionRemoved(SubscriptionEvent evt)
}
/**
- * Stores the received subsctiption and notifies all waiting on this
+ * Stores the received subscription and notifies all waiting on this
* object
* @param evt the SubscriptionEvent containing the corresponding contact
*/
@@ -645,7 +650,7 @@ public void subscriptionFailed(SubscriptionEvent evt)
}
/**
- * Stores the received subsctiption and notifies all waiting on this
+ * Stores the received subscription and notifies all waiting on this
* object
* @param evt the SubscriptionEvent containing the corresponding contact
*/
@@ -661,7 +666,7 @@ public void subscriptionResolved(SubscriptionEvent evt)
/**
- * Stores the received subsctiption and notifies all waiting on this
+ * Stores the received subscription and notifies all waiting on this
* object
* @param evt the SubscriptionEvent containing the corresponding contact
*/
@@ -676,7 +681,7 @@ public void subscriptionMoved(SubscriptionMovedEvent evt)
}
/**
- * Stores the received subsctiption and notifies all waiting on this
+ * Stores the received subscription and notifies all waiting on this
* object
* @param evt the SubscriptionEvent containing the corresponding contact
*/
diff --git a/test/net/java/sip/communicator/slick/protocol/msn/TestOperationSetPresence.java b/test/net/java/sip/communicator/slick/protocol/msn/TestOperationSetPresence.java
index 8c1ec4b53..9ce0c78e9 100644
--- a/test/net/java/sip/communicator/slick/protocol/msn/TestOperationSetPresence.java
+++ b/test/net/java/sip/communicator/slick/protocol/msn/TestOperationSetPresence.java
@@ -460,6 +460,18 @@ public void postTestSubscribe()
subEvtCollector.waitForEvent(10000);
operationSetPresence1.removeSubscriptionListener(subEvtCollector);
}
+
+ SubscriptionEventCollector subEvtCollector2
+ = new SubscriptionEventCollector();
+ operationSetPresence2.addSubsciptionListener(subEvtCollector2);
+
+
+ synchronized (subEvtCollector2){
+ operationSetPresence2.subscribe(fixture.userID1);
+ //we may already have the event, but it won't hurt to check.
+ subEvtCollector2.waitForEvent(10000);
+ operationSetPresence2.removeSubscriptionListener(subEvtCollector2);
+ }
assertEquals("Subscription event dispatching failed."
, 1, subEvtCollector.collectedEvents.size());