aboutsummaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
authorEmil Ivov <emcho@jitsi.org>2008-05-26 14:34:49 +0000
committerEmil Ivov <emcho@jitsi.org>2008-05-26 14:34:49 +0000
commita976ca60c1c638e85c2c8f3505f52019523ae506 (patch)
tree5c54c438073ab99c47ae09709ee77327eec97edb /src/net
parentffe057a99ede52375efef4ee3a31518a6372b292 (diff)
downloadjitsi-a976ca60c1c638e85c2c8f3505f52019523ae506.zip
jitsi-a976ca60c1c638e85c2c8f3505f52019523ae506.tar.gz
jitsi-a976ca60c1c638e85c2c8f3505f52019523ae506.tar.bz2
rolling back until fixed
Diffstat (limited to 'src/net')
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/ContactDictImpl.java322
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/ContactGroupDictImpl.java588
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/DictAccountID.java33
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/DictActivator.java108
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/DictAdapter.java605
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/DictException.java287
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/DictRegistry.java64
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/DictResult.java97
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/DictResultset.java107
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/DictStatusEnum.java104
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/MessageDictImpl.java138
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/OperationSetBasicInstantMessagingDictImpl.java421
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/OperationSetDirectoryDictImpl.java58
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/OperationSetPersistentPresenceDictImpl.java1298
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/ProtocolIconDictImpl.java98
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/ProtocolProviderFactoryDictImpl.java318
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/ProtocolProviderServiceDictImpl.java451
-rw-r--r--src/net/java/sip/communicator/impl/protocol/dict/dict.provider.manifest.mf13
18 files changed, 0 insertions, 5110 deletions
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/ContactDictImpl.java b/src/net/java/sip/communicator/impl/protocol/dict/ContactDictImpl.java
deleted file mode 100644
index 0d9cc2b..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/ContactDictImpl.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import net.java.sip.communicator.service.protocol.*;
-
-/**
- * An implementation of a Dict contact
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class ContactDictImpl
- implements Contact
-{
- /**
- * The id of the contact.
- */
- private String contactID = null;
-
- /**
- * The provider that created us.
- */
- private ProtocolProviderServiceDictImpl parentProvider = null;
-
- /**
- * The group that belong to.
- */
- private ContactGroupDictImpl parentGroup = null;
-
- /**
- * The presence status of the contact.
- */
- private PresenceStatus presenceStatus = DictStatusEnum.ONLINE;
-
- /**
- * Determines whether this contact is persistent, i.e. member of the contact
- * list or whether it is here only temporarily.
- */
- private boolean isPersistent = true;
-
- /**
- * Determines whether the contact has been resolved (i.e. we have a
- * confirmation that it is still on the server contact list).
- */
- private boolean isResolved = true;
-
- /**
- * Socket connection associated with the contact
- */
- private DictAdapter dictAdapter = null;
-
- /**
- * Creates an instance of a meta contact with the specified string used
- * as a name and identifier.
- *
- * @param id the identifier of this contact (also used as a name).
- * @param parentProvider the provider that created us.
- */
- public ContactDictImpl(
- String databaseCode,
- ProtocolProviderServiceDictImpl parentProvider)
- {
- this.contactID = databaseCode;
- this.parentProvider = parentProvider;
- }
-
- /**
- * This method is only called when the contact is added to a new
- * <tt>ContactGroupDictImpl</tt> by the
- * <tt>ContactGroupDictImpl</tt> itself.
- *
- * @param newParentGroup the <tt>ContactGroupDictImpl</tt> that is now
- * parent of this <tt>ContactDictImpl</tt>
- */
- void setParentGroup(ContactGroupDictImpl newParentGroup)
- {
- this.parentGroup = newParentGroup;
- }
-
- /**
- * Returns a String that can be used for identifying the contact.
- *
- * @return a String id representing and uniquely identifying the contact.
- */
- public String getContactID()
- {
- return contactID;
- }
-
- /**
- * Returns a String that can be used for identifying the contact.
- *
- * @return a String id representing and uniquely identifying the contact.
- */
- public String getAddress()
- {
- return contactID;
- }
-
- /**
- * Returns a String that could be used by any user interacting modules
- * for referring to this contact.
- *
- * @return a String that can be used for referring to this contact when
- * interacting with the user.
- */
- public String getDisplayName()
- {
- return contactID;
- }
-
- /**
- * Returns a byte array containing an image (most often a photo or an
- * avatar) that the contact uses as a representation.
- *
- * @return byte[] an image representing the contact.
- */
- public byte[] getImage()
- {
- return null;
- }
-
- /**
- * Returns the status of the contact.
- *
- * @return always DictStatusEnum.ONLINE.
- */
- public PresenceStatus getPresenceStatus()
- {
- return this.presenceStatus;
- }
-
- /**
- * Sets <tt>dictPresenceStatus</tt> as the PresenceStatus that this
- * contact is currently in.
- * @param dictPresenceStatus the <tt>DictPresenceStatus</tt>
- * currently valid for this contact.
- */
- public void setPresenceStatus(PresenceStatus dictPresenceStatus)
- {
- this.presenceStatus = dictPresenceStatus;
- }
-
- /**
- * Returns a reference to the protocol provider that created the contact.
- *
- * @return a refererence to an instance of the ProtocolProviderService
- */
- public ProtocolProviderService getProtocolProvider()
- {
- return parentProvider;
- }
-
- /**
- * Return a reference to the socket connexion linked with the Account
- * @return a reference to the socket connexion (DictAdapter)
- */
- public DictAdapter getDictAdapter()
- {
- return parentProvider.getDictAdapter();
- }
-
- /**
- * Determines whether or not this contact represents our own identity.
- *
- * @return true in case this is a contact that represents ourselves and
- * false otherwise.
- */
- public boolean isLocal()
- {
- return false;
- }
-
- /**
- * Returns the group that contains this contact.
- * @return a reference to the <tt>ContactGroupDictImpl</tt> that
- * contains this contact.
- */
- public ContactGroup getParentContactGroup()
- {
- return this.parentGroup;
- }
-
- /**
- * Returns a string representation of this contact, containing most of its
- * representative details.
- *
- * @return a string representation of this contact.
- */
- public String toString()
- {
- StringBuffer buff
- = new StringBuffer("ContactDictImpl[ DisplayName=")
- .append(getDisplayName()).append("]");
-
- return buff.toString();
- }
-
- /**
- * Determines whether or not this contact is being stored by the server.
- * Non persistent contacts are common in the case of simple, non-persistent
- * presence operation sets. They could however also be seen in persistent
- * presence operation sets when for example we have received an event
- * from someone not on our contact list. Non persistent contacts are
- * volatile even when coming from a persistent presence op. set. They would
- * only exist until the application is closed and will not be there next
- * time it is loaded.
- *
- * @return true if the contact is persistent and false otherwise.
- */
- public boolean isPersistent()
- {
- return isPersistent;
- }
-
- /**
- * Specifies whether or not this contact is being stored by the server.
- * Non persistent contacts are common in the case of simple, non-persistent
- * presence operation sets. They could however also be seen in persistent
- * presence operation sets when for example we have received an event
- * from someone not on our contact list. Non persistent contacts are
- * volatile even when coming from a persistent presence op. set. They would
- * only exist until the application is closed and will not be there next
- * time it is loaded.
- *
- * @param isPersistent true if the contact is persistent and false
- * otherwise.
- */
- public void setPersistent(boolean isPersistent)
- {
- this.isPersistent = isPersistent;
- }
-
-
- /**
- * Returns null as no persistent data is required and the contact address is
- * sufficient for restoring the contact.
- * <p>
- * @return null as no such data is needed.
- */
- public String getPersistentData()
- {
- return null;
- }
-
- /**
- * Determines whether or not this contact has been resolved against the
- * server. Unresolved contacts are used when initially loading a contact
- * list that has been stored in a local file until the presence operation
- * set has managed to retrieve all the contact list from the server and has
- * properly mapped contacts to their on-line buddies.
- *
- * @return true if the contact has been resolved (mapped against a buddy)
- * and false otherwise.
- */
- public boolean isResolved()
- {
- return isResolved;
- }
-
- /**
- * Return the current status message of this contact.
- *
- * @return null as the protocol has currently no support of status messages
- */
- public String getStatusMessage()
- {
- return null;
- }
-
- /**
- * Makes the contact resolved or unresolved.
- *
- * @param resolved true to make the contact resolved; false to
- * make it unresolved
- */
- public void setResolved(boolean resolved)
- {
- this.isResolved = resolved;
- }
-
- /**
- * Indicates whether some other object is "equal to" this one which in terms
- * of contacts translates to having equal ids. The resolved status of the
- * contacts deliberately ignored so that contacts would be declared equal
- * even if it differs.
- * <p>
- * @param obj the reference object with which to compare.
- * @return <code>true</code> if this contact has the same id as that of the
- * <code>obj</code> argument.
- */
- public boolean equals(Object obj)
- {
- if (obj == null || ! (obj instanceof ContactDictImpl)) {
- return false;
- }
-
- ContactDictImpl dictContact = (ContactDictImpl) obj;
-
- return this.getAddress().equals(dictContact.getAddress());
- }
-
-
- /**
- * Returns the persistent presence operation set that this contact belongs
- * to.
- *
- * @return the <tt>OperationSetPersistentPresenceGibberishImpl</tt> that
- * this contact belongs to.
- */
- public OperationSetPersistentPresenceDictImpl
- getParentPresenceOperationSet()
- {
- return (OperationSetPersistentPresenceDictImpl) parentProvider
- .getOperationSet(OperationSetPersistentPresence.class);
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/ContactGroupDictImpl.java b/src/net/java/sip/communicator/impl/protocol/dict/ContactGroupDictImpl.java
deleted file mode 100644
index 2c706f8..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/ContactGroupDictImpl.java
+++ /dev/null
@@ -1,588 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.util.*;
-
-import net.java.sip.communicator.service.protocol.*;
-
-/**
- * A simple, straightforward implementation of a dict ContactGroup. Since
- * the Dict protocol is not a real one, we simply store all group details
- * in class fields. You should know that when implementing a real protocol,
- * the contact group implementation would rather encapsulate group objects from
- * the protocol stack and group property values should be returned by consulting
- * the encapsulated object.
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class ContactGroupDictImpl
- implements ContactGroup
-{
-
- /**
- * The name of this Dict contact group.
- */
- private String groupName = null;
-
- /**
- * The list of this group's members.
- */
- private Vector contacts = new Vector();
-
- /**
- * The list of sub groups belonging to this group.
- */
- private Vector subGroups = new Vector();
-
- /**
- * The group that this group belongs to (or null if this is the root group).
- */
- private ContactGroupDictImpl parentGroup = null;
-
- /**
- * Determines whether this group is really in the contact list or whether
- * it is here only temporarily and will be gone next time we restart.
- */
- private boolean isPersistent = true;
-
- /**
- * The protocol provider that created us.
- */
- private ProtocolProviderServiceDictImpl parentProvider = null;
-
- /**
- * Determines whether this group has been resolved on the server.
- * Unresolved groups are groups that were available on previous runs and
- * that the meta contact list has stored. During all next runs, when
- * bootstrapping, the meta contact list would create these groups as
- * unresolved. Once a protocol provider implementation confirms that the
- * groups are still on the server, it would issue an event indicating that
- * the groups are now resolved.
- */
- private boolean isResolved = true;
-
- /**
- * An id uniquely identifying the group. For many protocols this could be
- * the group name itself.
- */
- private String uid = null;
- private static final String UID_SUFFIX = ".uid";
-
- /**
- * Creates a ContactGroupDictImpl with the specified name.
- *
- * @param groupName the name of the group.
- * @param parentProvider the protocol provider that created this group.
- */
- public ContactGroupDictImpl(
- String groupName,
- ProtocolProviderServiceDictImpl parentProvider)
- {
- this.groupName = groupName;
- this.uid = groupName + UID_SUFFIX;
- this.parentProvider = parentProvider;
- }
-
- /**
- * Determines whether the group may contain subgroups or not.
- *
- * @return always true in this implementation.
- */
- public boolean canContainSubgroups()
- {
- return true;
- }
-
- /**
- * Returns the protocol provider that this group belongs to.
- * @return a regerence to the ProtocolProviderService instance that this
- * ContactGroup belongs to.
- */
- public ProtocolProviderService getProtocolProvider()
- {
- return parentProvider;
- }
-
- /**
- * Returns an Iterator over all contacts, member of this
- * <tt>ContactGroup</tt>.
- *
- * @return a java.util.Iterator over all contacts inside this
- * <tt>ContactGroup</tt>
- */
- public Iterator contacts()
- {
- return contacts.iterator();
- }
-
- /**
- * Adds the specified contact to this group.
- * @param contactToAdd the ContactDictImpl to add to this group.
- */
- public void addContact(ContactDictImpl contactToAdd)
- {
- this.contacts.add(contactToAdd);
- contactToAdd.setParentGroup(this);
- }
-
- /**
- * Returns the number of <tt>Contact</tt> members of this
- * <tt>ContactGroup</tt>
- *
- * @return an int indicating the number of <tt>Contact</tt>s, members of
- * this <tt>ContactGroup</tt>.
- */
- public int countContacts()
- {
- return contacts.size();
- }
-
- /**
- * Returns the number of subgroups contained by this
- * <tt>ContactGroup</tt>.
- *
- * @return the number of subGroups currently added to this group.
- */
- public int countSubgroups()
- {
- return subGroups.size();
- }
-
- /**
- * Adds the specified contact group to the contained by this group.
- * @param subgroup the ContactGroupDictImpl to add as a subgroup to this group.
- */
- public void addSubgroup(ContactGroupDictImpl subgroup)
- {
- this.subGroups.add(subgroup);
- subgroup.setParentGroup(this);
- }
-
- /**
- * Sets the group that is the new parent of this group
- * @param parent ContactGroupDictImpl
- */
- void setParentGroup(ContactGroupDictImpl parent)
- {
- this.parentGroup = parent;
- }
-
- /**
- * Returns the contact group that currently contains this group or null if
- * this is the root contact group.
- * @return the contact group that currently contains this group or null if
- * this is the root contact group.
- */
- public ContactGroup getParentContactGroup()
- {
- return this.parentGroup;
- }
-
- /**
- * Removes the specified contact group from the this group's subgroups.
- * @param subgroup the ContactGroupDictImpl subgroup to remove.
- */
- public void removeSubGroup(ContactGroupDictImpl subgroup)
- {
- this.subGroups.remove(subgroup);
- subgroup.setParentGroup(null);
- }
-
-
- /**
- * Returns the <tt>Contact</tt> with the specified index.
- *
- * @param index the index of the <tt>Contact</tt> to return.
- * @return the <tt>Contact</tt> with the specified index.
- */
- public Contact getContact(int index)
- {
- return (ContactDictImpl)contacts.get(index);
- }
-
- /**
- * Returns the group that is parent of the specified dictGroup or null
- * if no parent was found.
- * @param dictGroup the group whose parent we're looking for.
- * @return the ContactGroupDictImpl instance that dictGroup
- * belongs to or null if no parent was found.
- */
- public ContactGroupDictImpl findGroupParent(
- ContactGroupDictImpl dictGroup)
- {
- if ( subGroups.contains(dictGroup) )
- return this;
-
- Iterator subGroupsIter = subgroups();
- while (subGroupsIter.hasNext())
- {
- ContactGroupDictImpl subgroup
- = (ContactGroupDictImpl) subGroupsIter.next();
-
- ContactGroupDictImpl parent
- = subgroup.findGroupParent(dictGroup);
-
- if(parent != null)
- return parent;
- }
- return null;
- }
-
- /**
- * Returns the group that is parent of the specified dictContact or
- * null if no parent was found.
- *
- * @param dictContact the contact whose parent we're looking for.
- * @return the ContactGroupDictImpl instance that dictContact
- * belongs to or <tt>null</tt> if no parent was found.
- */
- public ContactGroupDictImpl findContactParent(
- ContactDictImpl dictContact)
- {
- if ( contacts.contains(dictContact) )
- return this;
-
- Iterator subGroupsIter = subgroups();
- while (subGroupsIter.hasNext())
- {
- ContactGroupDictImpl subgroup
- = (ContactGroupDictImpl) subGroupsIter.next();
-
- ContactGroupDictImpl parent
- = subgroup.findContactParent(dictContact);
-
- if(parent != null)
- return parent;
- }
- return null;
- }
-
-
-
- /**
- * Returns the <tt>Contact</tt> with the specified address or identifier.
- *
- * @param id the addres or identifier of the <tt>Contact</tt> we are
- * looking for.
- * @return the <tt>Contact</tt> with the specified id or address.
- */
- public Contact getContact(String id)
- {
- Iterator contactsIter = contacts();
- while (contactsIter.hasNext())
- {
- ContactDictImpl contact = (ContactDictImpl) contactsIter.next();
- if (contact.getAddress().equals(id))
- return contact;
-
- }
- return null;
- }
-
- /**
- * Returns the subgroup with the specified index.
- *
- * @param index the index of the <tt>ContactGroup</tt> to retrieve.
- * @return the <tt>ContactGroup</tt> with the specified index.
- */
- public ContactGroup getGroup(int index)
- {
- return (ContactGroup)subGroups.get(index);
- }
-
- /**
- * Returns the subgroup with the specified name.
- *
- * @param groupName the name of the <tt>ContactGroup</tt> to retrieve.
- * @return the <tt>ContactGroup</tt> with the specified index.
- */
- public ContactGroup getGroup(String groupName)
- {
- Iterator groupsIter = subgroups();
- while (groupsIter.hasNext())
- {
- ContactGroupDictImpl contactGroup
- = (ContactGroupDictImpl) groupsIter.next();
- if (contactGroup.getGroupName().equals(groupName))
- return contactGroup;
-
- }
- return null;
-
- }
-
- /**
- * Returns the name of this group.
- *
- * @return a String containing the name of this group.
- */
- public String getGroupName()
- {
- return this.groupName;
- }
-
- /**
- * Sets this group a new name.
- * @param newGrpName a String containing the new name of this group.
- */
- public void setGroupName(String newGrpName)
- {
- this.groupName = newGrpName;
- }
-
- /**
- * Returns an iterator over the sub groups that this
- * <tt>ContactGroup</tt> contains.
- *
- * @return a java.util.Iterator over the <tt>ContactGroup</tt> children
- * of this group (i.e. subgroups).
- */
- public Iterator subgroups()
- {
- return subGroups.iterator();
- }
-
- /**
- * Removes the specified contact from this group.
- * @param contact the ContactDictImpl to remove from this group
- */
- public void removeContact(ContactDictImpl contact)
- {
- this.contacts.remove(contact);
- }
-
- /**
- * Returns the contact with the specified id or null if no such contact
- * exists.
- * @param id the id of the contact we're looking for.
- * @return ContactDictImpl
- */
- public ContactDictImpl findContactByID(String id)
- {
- //first go through the contacts that are direct children.
- Iterator contactsIter = contacts();
-
- while(contactsIter.hasNext())
- {
- ContactDictImpl mContact = (ContactDictImpl)contactsIter.next();
-
- if( mContact.getAddress().equals(id) )
- return mContact;
- }
-
- //if we didn't find it here, let's try in the subougroups
- Iterator groupsIter = subgroups();
-
- while( groupsIter.hasNext() )
- {
- ContactGroupDictImpl mGroup = (ContactGroupDictImpl)groupsIter.next();
-
- ContactDictImpl mContact = mGroup.findContactByID(id);
-
- if (mContact != null)
- return mContact;
- }
-
- return null;
- }
-
-
- /**
- * Returns a String representation of this group and the contacts it
- * contains (may turn out to be a relatively long string).
- * @return a String representing this group and its child contacts.
- */
- public String toString()
- {
-
- StringBuffer buff = new StringBuffer(getGroupName());
- buff.append(".subGroups=" + countSubgroups() + ":\n");
-
- Iterator subGroups = subgroups();
- while (subGroups.hasNext())
- {
- ContactGroupDictImpl group = (ContactGroupDictImpl)subGroups.next();
- buff.append(group.toString());
- if (subGroups.hasNext())
- buff.append("\n");
- }
-
- buff.append("\nChildContacts="+countContacts()+":[");
-
- Iterator contacts = contacts();
- while (contacts.hasNext())
- {
- ContactDictImpl contact = (ContactDictImpl) contacts.next();
- buff.append(contact.toString());
- if(contacts.hasNext())
- buff.append(", ");
- }
- return buff.append("]").toString();
- }
-
- /**
- * Specifies whether or not this contact group is being stored by the server.
- * Non persistent contact groups are common in the case of simple,
- * non-persistent presence operation sets. They could however also be seen
- * in persistent presence operation sets when for example we have received
- * an event from someone not on our contact list and the contact that we
- * associated with that user is placed in a non persistent group. Non
- * persistent contact groups are volatile even when coming from a persistent
- * presence op. set. They would only exist until the application is closed
- * and will not be there next time it is loaded.
- *
- * @param isPersistent true if the contact group is to be persistent and
- * false otherwise.
- */
- public void setPersistent(boolean isPersistent)
- {
- this.isPersistent = isPersistent;
- }
-
- /**
- * Determines whether or not this contact group is being stored by the
- * server. Non persistent contact groups exist for the sole purpose of
- * containing non persistent contacts.
- * @return true if the contact group is persistent and false otherwise.
- */
- public boolean isPersistent()
- {
- return isPersistent;
- }
-
- /**
- * Returns null as no persistent data is required and the contact address is
- * sufficient for restoring the contact.
- * <p>
- * @return null as no such data is needed.
- */
- public String getPersistentData()
- {
- return null;
- }
-
- /**
- * Determines whether or not this contact has been resolved against the
- * server. Unresolved contacts are used when initially loading a contact
- * list that has been stored in a local file until the presence operation
- * set has managed to retrieve all the contact list from the server and has
- * properly mapped contacts to their on-line buddies.
- * @return true if the contact has been resolved (mapped against a buddy)
- * and false otherwise.
- */
- public boolean isResolved()
- {
- return isResolved;
- }
-
- /**
- * Makes the group resolved or unresolved.
- *
- * @param resolved true to make the group resolved; false to
- * make it unresolved
- */
- public void setResolved(boolean resolved)
- {
- this.isResolved = resolved;
- }
-
- /**
- * Returns a <tt>String</tt> that uniquely represnets the group inside
- * the current protocol. The string MUST be persistent (it must not change
- * across connections or runs of the application). In many cases (Jabber,
- * ICQ) the string may match the name of the group as these protocols
- * only allow a single level of contact groups and there is no danger of
- * having the same name twice in the same contact list. Other protocols
- * (no examples come to mind but that doesn't bother me ;) ) may be
- * supporting mutilple levels of grooups so it might be possible for group
- * A and group B to both contain groups named C. In such cases the
- * implementation must find a way to return a unique identifier in this
- * method and this UID should never change for a given group.
- *
- * @return a String representing this group in a unique and persistent
- * way.
- */
- public String getUID()
- {
- return uid;
- }
-
- /**
- * Ugly but tricky conversion method.
- * @param uid the uid we'd like to get a name from
- * @return the name of the group with the specified <tt>uid</tt>.
- */
- static String createNameFromUID(String uid)
- {
- return uid.substring(0, uid.length() - (UID_SUFFIX.length()));
- }
-
- /**
- * Indicates whether some other object is "equal to" this one which in terms
- * of contact groups translates to having the equal names and matching
- * subgroups and child contacts. The resolved status of contactgroups and
- * contacts is deliberately ignored so that groups and/or contacts would
- * be assumed equal even if it differs.
- * <p>
- * @param obj the reference object with which to compare.
- * @return <code>true</code> if this contact group has the equal child
- * contacts and subgroups to those of the <code>obj</code> argument.
- */
- public boolean equals(Object obj)
- {
- if(obj == null
- || !(obj instanceof ContactGroupDictImpl))
- return false;
-
- ContactGroupDictImpl dictGroup
- = (ContactGroupDictImpl)obj;
-
- if( ! dictGroup.getGroupName().equals(getGroupName())
- || ! dictGroup.getUID().equals(getUID())
- || dictGroup.countContacts() != countContacts()
- || dictGroup.countSubgroups() != countSubgroups())
- return false;
-
- //traverse child contacts
- Iterator theirContacts = dictGroup.contacts();
-
- while(theirContacts.hasNext())
- {
- ContactDictImpl theirContact
- = (ContactDictImpl)theirContacts.next();
-
- ContactDictImpl ourContact
- = (ContactDictImpl)getContact(theirContact.getAddress());
-
- if(ourContact == null
- || !ourContact.equals(theirContact))
- return false;
- }
-
- //traverse subgroups
- Iterator theirSubgroups = dictGroup.subgroups();
-
- while(theirSubgroups.hasNext())
- {
- ContactGroupDictImpl theirSubgroup
- = (ContactGroupDictImpl)theirSubgroups.next();
-
- ContactGroupDictImpl ourSubgroup
- = (ContactGroupDictImpl)getGroup(
- theirSubgroup.getGroupName());
-
- if(ourSubgroup == null
- || !ourSubgroup.equals(theirSubgroup))
- return false;
- }
-
- return true;
- }
-}
-
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/DictAccountID.java b/src/net/java/sip/communicator/impl/protocol/dict/DictAccountID.java
deleted file mode 100644
index 6f823f5..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/DictAccountID.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import net.java.sip.communicator.service.protocol.*;
-import java.util.Map;
-
-/**
- * The Dict implementation of a sip-communicator account id.
- * @author LITZELMANN Cédric
- * @author ROTH Damien
- */
-public class DictAccountID
- extends AccountID
-{
- /**
- * Creates an account id from the specified id and account properties.
- *
- * @param userID the user identifier correspnding to the account
- * @param accountProperties any other properties necessary for the account.
- */
- DictAccountID(String userID, Map accountProperties)
- {
- super( userID,
- accountProperties,
- "Dict",
- "dict.org");
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/DictActivator.java b/src/net/java/sip/communicator/impl/protocol/dict/DictActivator.java
deleted file mode 100644
index 455fb63..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/DictActivator.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import org.osgi.framework.*;
-import net.java.sip.communicator.util.*;
-import java.util.*;
-import net.java.sip.communicator.service.protocol.*;
-
-/**
- * Loads the Dict provider factory and registers its services in the OSGI
- * bundle context.
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class DictActivator
- implements BundleActivator
-{
- private static final Logger logger = Logger.getLogger(DictActivator.class);
-
- /**
- * The currently valid bundle context.
- */
- private static BundleContext bundleContext = null;
-
- private ServiceRegistration dictPpFactoryServReg = null;
- private static ProtocolProviderFactoryDictImpl
- dictProviderFactory = null;
-
- /**
- * Called when this bundle is started. In here we'll export the
- * dict ProtocolProviderFactory implementation so that it could be
- * possible to register accounts with it in SIP Communicator.
- *
- * @param context The execution context of the bundle being started.
- * @throws Exception If this method throws an exception, this bundle is
- * marked as stopped and the Framework will remove this bundle's
- * listeners, unregister all services registered by this bundle, and
- * release all services used by this bundle.
- */
- public void start(BundleContext context)
- throws Exception
- {
- bundleContext = context;
-
- Hashtable hashtable = new Hashtable();
- hashtable.put(ProtocolProviderFactory.PROTOCOL, ProtocolNames.DICT);
-
- dictProviderFactory = new ProtocolProviderFactoryDictImpl();
-
- //load all stored Dict accounts.
- dictProviderFactory.loadStoredAccounts();
-
- //reg the dict provider factory.
- dictPpFactoryServReg = context.registerService(
- ProtocolProviderFactory.class.getName(),
- dictProviderFactory,
- hashtable);
-
- logger.info("DICT protocol implementation [STARTED].");
- }
-
- /**
- * Returns a reference to the bundle context that we were started with.
- * @return a reference to the BundleContext instance that we were started
- * witn.
- */
- public static BundleContext getBundleContext()
- {
- return bundleContext;
- }
-
- /**
- * Called when this bundle is stopped so the Framework can perform the
- * bundle-specific activities necessary to stop the bundle.
- *
- * @param context The execution context of the bundle being stopped.
- * @throws Exception If this method throws an exception, the bundle is
- * still marked as stopped, and the Framework will remove the bundle's
- * listeners, unregister all services registered by the bundle, and
- * release all services used by the bundle.
- */
- public void stop(BundleContext context)
- throws Exception
- {
-
- this.dictProviderFactory.stop();
- dictPpFactoryServReg.unregister();
-
- logger.info("DICT protocol implementation [STOPPED].");
- }
-
- /**
- * Retrurns a reference to the protocol provider factory that we have
- * registered.
- * @return a reference to the <tt>ProtocolProviderFactoryDictImpl</tt>
- * instance that we have registered from this package.
- */
- public static ProtocolProviderFactoryDictImpl getProtocolProviderFactory()
- {
- return dictProviderFactory;
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/DictAdapter.java b/src/net/java/sip/communicator/impl/protocol/dict/DictAdapter.java
deleted file mode 100644
index 433c423..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/DictAdapter.java
+++ /dev/null
@@ -1,605 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-/**
- * Layer abstraction of a dict server
- *
- * @author LITZELMANN Cédric
- * @author ROTH Damien
- */
-public class DictAdapter
-{
- /**
- * The host name of the server: i.e. "dict.org"
- */
- private String host;
-
- /**
- * The port used by the server. The default one for the DICT protocol is
- * 2628.
- */
- private int port;
-
- /**
- * The name of the strategy used for searching words with command MATCH:
- * i.e. the strategie can de "prefix", "suffix", "soundex", "levenshtein", etc.
- */
- private String strategy;
-
- /**
- * A string representation used to identify the client to the serveur. In
- * our case we will use the "SIP Communicator" string for the client name.
- */
- private String clientName = "";
-
- // Status
- /**
- * The socket used to connect to the DICT server.
- */
- private Socket socket;
-
- /**
- * A output stream piped to the socket in order to send command to the server.
- */
- private PrintWriter out;
-
- /**
- * A input stream piped to the socket in order to receive messages from the server.
- */
- private BufferedReader in;
-
- /**
- * A boolean telling if we are currently connected to the DICT server.
- */
- private boolean connected;
-
- /**
- * The list of all the databases hosted by the server. Each database
- * correspond to a dictionnary.
- */
- Vector<String> databasesList;
-
- /**
- * Initialize a basic instance with predefined settings
- */
- public DictAdapter()
- {
- this.host = "dict.org";
- this.port = 2628;
- this.strategy = "prefix";
- this.connected = false;
- this.socket = null;
- this.out = null;
- this.in = null;
- }
-
- /**
- * Initialize a basic instance and set th host
- * @param host Host
- */
- public DictAdapter(String host)
- {
- this.host = host;
- this.port = 2628;
- this.strategy = "prefix";
- this.connected = false;
- this.socket = null;
- this.out = null;
- this.in = null;
- }
-
- /**
- * Initialize an instance and set the host and the port
- * @param host Host
- * @param port Port
- */
- public DictAdapter(String host, int port)
- {
- this.host = host;
- this.port = port;
- this.strategy = "prefix";
- this.connected = false;
- this.socket = null;
- this.out = null;
- this.in = null;
- }
-
- /**
- * Initialize an instance and set the host, port and strategy
- * @param host Host
- * @param port Port
- * @param strategy Match strategy
- */
- public DictAdapter(String host, int port, String strategy)
- {
- this.host = host;
- this.port = port;
- this.strategy = strategy;
- this.connected = false;
- this.socket = null;
- this.out = null;
- this.in = null;
- }
-
-
- /**
- * Establish a connexion to the dict server
- * @throws Exception
- * @return DictResultset containing the error - null otherwise
- */
- private void connect() throws Exception
- {
- String fromServer;
-
- if (this.isConnected())
- {
- return;
- }
-
- try
- {
- this.socket = new Socket(this.host, this.port);
- this.out = new PrintWriter(new OutputStreamWriter(this.socket.getOutputStream(),
- "UTF-8"), true);
- this.in = new BufferedReader(new InputStreamReader(this.socket.getInputStream(),
- "UTF-8"));
-
- fromServer = this.in.readLine(); // Server banner
-
- if (fromServer.startsWith("220"))
- { // 220 = connect ok
- this.connected = true;
- this.client("SIP Communicator");
- return;
- }
- else
- {
- throw new DictException(fromServer.substring(0, 3));
- }
- }
- catch(UnknownHostException uhe)
- {
- throw new DictException(uhe);
- }
- catch(IOException ioe)
- {
- throw new DictException(ioe);
- }
- }
-
- /**
- * Close the actual connexion
- * @throws Exception
- */
- public void close() throws Exception
- {
- String fromServer;
- boolean quit = false;
-
- if (!this.isConnected())
- {
- return;
- }
-
- try
- {
- this.out.println("QUIT");
-
- // Clean the socket buffer
- while (quit == false && (fromServer = this.in.readLine()) != null)
- {
- if (fromServer.startsWith("221"))
- { // Quit response
- quit = true;
- }
- }
-
- this.out.close();
- this.in.close();
- this.socket.close();
-
- this.connected = false;
- }
- catch (IOException ioe)
- {
- throw new DictException(ioe);
- }
- }
-
- /**
- * Get the database list from the server
- * @throws Exception
- * @return a DictResultset containing the database list - otherwise the error code
- */
- public DictResultset showDB() throws Exception
- {
- String fromServer;
- boolean quit = false;
- DictResultset result = new DictResultset();
- this.connect();
-
- try
- {
- fromServer = this.query("SHOW DB");
-
- if (fromServer.startsWith("110"))
- { // OK - getting responses from the server
- result.newResultset();
- while (quit == false && (fromServer = this.in.readLine()) != null)
- {
- if (fromServer.startsWith("250"))
- {
- quit = true;
- }
- else if (!fromServer.equals("."))
- {
- result.addResult(fromServer);
- }
- }
- }
- else
- {
- throw new DictException(fromServer.substring(0,3));
- }
- }
- catch (IOException ioe)
- {
- throw new DictException(ioe);
- }
-
- return result;
- }
-
- /**
- * Get the strategies allowed by the server for the MATCH command
- * @throws Exception
- * @return a DictResultset containing the database list - otherwise the error code
- */
- public DictResultset showStrat() throws Exception
- {
- String fromServer;
- boolean quit = false;
- DictResultset result = new DictResultset();
- this.connect();
-
- try
- {
- fromServer = this.query("SHOW STRAT");
-
- if (fromServer.startsWith("111"))
- { // OK - getting responses from the server
- result.newResultset();
- while (quit == false && (fromServer = this.in.readLine()) != null)
- {
- if (fromServer.startsWith("250"))
- {
- quit = true;
- }
- else if (!fromServer.equals("."))
- {
- result.addResult(fromServer);
- }
- }
- }
- else
- {
- throw new DictException(fromServer.substring(0,3));
- }
- }
- catch (IOException ioe)
- {
- throw new DictException(ioe);
- }
-
- return result;
- }
-
-
- /**
- * Get the definition of a word
- * @param database the database in which the word will be searched
- * @param word the search word
- * @throws Exception
- * @return a DictResultset containing the database list - otherwise the error code
- */
- public DictResultset define(String database, String word) throws Exception
- {
- String fromServer;
- boolean quit = false;
- DictResultset result = new DictResultset();
- String[] test;
- this.connect();
-
- try
- {
- fromServer = this.query("DEFINE " + database + " " + word);
-
- if (fromServer.startsWith("150"))
- {
- while (quit == false && (fromServer = this.in.readLine()) != null)
- {
- if (fromServer.startsWith("151"))
- { // First line - Contains the DB Name
- test = fromServer.split(" ", 4);
- result.newResultset(test[3].substring(1, test[3].length() - 1));
- continue;
- }
- else if (fromServer.startsWith("250"))
- { // End of the request
- quit = true;
- }
- else if (!fromServer.equals("."))
- {
- result.addResult(fromServer);
- }
- }
- }
- else
- {
- throw new DictException(fromServer.substring(0,3));
- }
- }
- catch (IOException ioe)
- {
- throw new DictException(ioe);
- }
-
- return result;
- }
-
- /**
- * Get words that match with a strategie form a word with the stored strategy
- * @param database The database in which the words will be searched
- * @param word The base word
- * @return a DictResultset containing the words list - otherwise throw an exception
- * @throws Exception
- */
- public DictResultset match(String database, String word) throws Exception
- {
- return this.match(database, this.strategy, word);
- }
-
- /**
- * Get words that match with a strategie from a word
- * @param database the database in which the words will be searched
- * @param strat the strategies used
- * @param word the base word
- * @throws Exception
- * @return a DictResultset containing the words list - otherwise the error code
- */
- public DictResultset match(String database, String strat, String word) throws Exception
- {
- String fromServer;
- boolean quit = false;
- DictResultset result = new DictResultset();
- this.connect();
-
- try
- {
- fromServer = this.query("MATCH " + database + " " + strat + " " + word);
-
- if (fromServer.startsWith("152"))
- {
- result.newResultset();
- while (quit == false && (fromServer = this.in.readLine()) != null)
- {
- if (fromServer.startsWith("250"))
- {
- quit = true;
- }
- else if (!fromServer.equals("."))
- {
- result.addResult(fromServer);
- }
- }
- }
- else
- {
- throw new DictException(fromServer.substring(0,3));
- }
- }
- catch (IOException ioe)
- {
- throw new DictException(ioe);
- }
-
- return result;
- }
-
- /**
- * Provide information to the server about the clientname, for logging and statistical purposes
- * @param clientname Client name
- * @throws Exception
- */
- public void client(String clientname) throws Exception
- {
- String fromServer;
- this.connect();
-
- fromServer = this.query("CLIENT " + clientname);
-
- // 250 code is the only possible answer
- if (!fromServer.startsWith("250"))
- {
- throw new DictException(fromServer.substring(0, 3));
- }
- }
-
- /**
- * Set the host
- * @param newHost host address
- */
- public void setHost(String newHost) throws Exception
- {
- if (isUrl(newHost))
- {
- this.host = newHost;
- }
- else
- {
- throw new DictException(900, "Host URL is incorrect");
- }
- }
-
- /**
- * Set the host port
- * @param newPort Port
- */
- public void setPort(int newPort)
- {
- this.port = newPort;
- }
-
- /**
- * Set the strategy
- * @param newStrat Strategy
- */
- public void setStrategy(String newStrat)
- {
- this.strategy = newStrat;
- }
-
- /**
- * Set the client name which is communicated to the server
- * @param cn Client name
- */
- public void setClientName(String cn)
- {
- this.clientName = cn;
- }
-
- /**
- * Return the host
- * @return return the host
- */
- public String getHost()
- {
- return this.host;
- }
-
- /**
- * Return the port
- * @return return the port
- */
- public int getPort()
- {
- return this.port;
- }
-
- /**
- * Return the strategy
- * @return return the strategy
- */
- public String getStrategy()
- {
- return this.strategy;
- }
-
- /**
- * Return the client name
- * @return return the client name
- */
- public String getClientName()
- {
- return this.clientName;
- }
-
- /**
- * Gets the database's list from the server
- * @return List of the databases
- * @throws Exception
- */
- public Vector<String> getDatabases() throws Exception
- {
- if (this.databasesList == null)
- {
- DictResultset drs = this.showDB();
- DictResult list = drs.getResultset(0);
-
- this.databasesList = new Vector<String>();
-
- while(list.hasNext())
- {
- this.databasesList.add(list.next());
- }
- }
- return this.databasesList;
- }
-
- /**
- * Check if we are connected to the server
- * @return true if we are connected - false otherwise
- */
- public boolean isConnected()
- {
- return this.connected;
- }
-
- /**
- * Check if the URL is correct and a server exists
- * @param url an Url
- * @return true if everything is ok - false otherwise
- */
- public static boolean isUrl(String url)
- {
- boolean ok;
- if (url == null)
- {
- return false;
- }
-
- try
- {
- InetAddress.getByName(url);
- ok = true;
- }
- catch (UnknownHostException uhex)
- {
- ok = false;
- }
-
- return ok;
- }
-
- /**
- * Executes a query and deals with the automatic deconnexion
- * @param query A query to send to the server
- * @return The first ligne of the response from the server
- * @throws Exception IOException and DictException
- */
- private String query(String query) throws Exception
- {
- String result = null;
-
- this.out.println(query);
- result = in.readLine();
-
- if (result == null)
- {
- // The connexion may be close, reconnexion
- this.connected = false;
- this.connect();
-
- this.out.println(query);
- result = in.readLine();
-
- if (result == null)
- {
- // If result is still equal to null, the server is unavailable
- // We send the appropriate exception
- throw new DictException(420);
- }
- }
-
- return result;
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/DictException.java b/src/net/java/sip/communicator/impl/protocol/dict/DictException.java
deleted file mode 100644
index 7792365..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/DictException.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-/**
- * Exception class managing the basics dict server errors.
- *
- * @author LITZELMANN Cédric
- * @author ROTH Damien
- */
-public class DictException
- extends Exception
-{
- // Error number
- private int error;
-
- // Error message
- private String errorMessage;
-
- /**
- * Create an exception from the dict error code
- * @param error Error code returned by the server
- */
- public DictException(int error)
- {
- this.error = error;
- }
-
- /**
- * Create an exception with a custom message
- * @param error Error code returned by the server
- * @param message Custom message
- */
- public DictException(int error, String message)
- {
- this.error = error;
- this.errorMessage = message;
- }
-
- /**
- * Same as the first constructor but with a string (converted to an int)
- * @param error Error code returned by the server
- */
- public DictException(String error)
- {
- this.error = Integer.parseInt(error);
- }
-
- /**
- * Create an exception from a java exception
- * @param e Java Exception
- */
- public DictException(Exception e)
- {
- String className = e.getClass().toString();
-
- if (className.endsWith("IOException"))
- {
- this.error = 901;
- this.errorMessage = "IOException";
- }
- else if (className.endsWith("UnknownHostException"))
- {
- this.error = 902;
- this.errorMessage = "UnknownHostException";
- }
- else if (className.endsWith("SecurityException"))
- {
- this.error = 903;
- this.errorMessage = "SecurityException";
- }
- else if (className.endsWith("SocketTimeoutException"))
- {
- this.error = 904;
- this.errorMessage = "SocketTimeoutException";
- }
- else
- {
- this.error = 900;
- this.errorMessage = "Unknown error [" + className + "]";
- }
-
- this.errorMessage += ": " + e.getMessage();
- }
-
- /**
- * Return the error code
- * @return the error code
- */
- public int getErrorCode()
- {
- return this.error;
- }
-
- /**
- * Return the error message
- * @return the error message
- */
- public String getMessage()
- {
- return this.errorMessage;
- }
-
- /**
- * Get an explanation of the error
- * @return Returns an explanation corresponding to the current error
- * (this.error).
- */
- public String getErrorMessage()
- {
- String result;
- switch(this.error)
- {
- case 110 :
- result = "n databases present";
- break;
- case 111 :
- result = "n strategies available";
- break;
- case 112 :
- result = "database information follows";
- break;
- case 113 :
- result = "help text follows";
- break;
- case 114 :
- result = "server information follows";
- break;
- case 130 :
- result = "challenge follows";
- break;
- case 150 :
- result = "n definitions retrieved";
- break;
- case 151 :
- result = "word database name";
- break;
- case 152 :
- result = "n matches found";
- break;
- case 210 :
- result = "optional timing";
- break;
- case 220 :
- result = "Connexion OK";
- break;
- case 221 :
- result = "Closing Connection";
- break;
- case 230 :
- result = "Authentification successful";
- break;
- case 250 :
- result = "Ok";
- break;
- case 330 :
- result = "send response";
- break;
- case 420 :
- result = "Server temporarily unavailable";
- break;
- case 421 :
- result = "Server shutting down at operator request";
- break;
- case 500 :
- result = "Syntax error, command not recognized";
- break;
- case 501 :
- result = "Syntax error, illegal parameters";
- break;
- case 502 :
- result = "Command not implemented";
- break;
- case 503 :
- result = "Command parameter not implemented";
- break;
- case 530 :
- result = "Access denied";
- break;
- case 531 :
- result = "Access denied, use SHOW INFO for server information";
- break;
- case 532 :
- result = "Access denied, unknown mechanism";
- break;
- case 550 :
- result = "Invalid database, use SHOW DB for list of databases";
- break;
- case 551 :
- result = "Invalid strategy, use SHOW STRAT for a list of strategies";
- break;
- case 552 :
- result = "No match";
- break;
- case 554 :
- result = "No databases present";
- break;
- case 555 :
- result = "No strategies available";
- break;
- default :
- if (error >= 900)
- {
- result = this.errorMessage;
- }
- else
- {
- result = this.errorGen(error);
- }
- }
-
- return result;
- }
-
- /**
- * Get informations about unknowns errors
- * @param err Error number
- * @return Error definition
- */
- private String errorGen(int err)
- {
- String error_type = Integer.toString(err);
-
- String result = new String();
-
- if(error_type.startsWith("1"))
- {// test on digit one
- result = "Positive Preliminary reply : ";
- }
- else if(error_type.startsWith("2"))
- {
- result = "Positive Completion reply : " ;
- }
- else if(error_type.startsWith("3"))
- {
- result = "Positive Intermediate reply : ";
- }
- else if(error_type.startsWith("4"))
- {
- result = "Transient Negative Completion reply : ";
- }
- else if(error_type.startsWith("5"))
- {
- result = "Permanent Negative Completion reply : ";
- }
- else
- {
- return "Unknown error";
- }
-
- //test on digit two
- if(error_type.charAt(1) == '0')
- {
- result += "Syntax";
- }
- else if ( error_type.charAt(1) == '1')
- {
- result += "Information";
- }
- else if ( error_type.charAt(1) == '2')
- {
- result += "Connections";
- }
- else if ( error_type.charAt(1) == '3')
- {
- result += "Authentication";
- }
- else if ( error_type.charAt(1) == '4')
- {
- result += "Unspecified as yet";
- }
- else if ( error_type.charAt(1) == '5')
- {
- result += "DICT System";
- }
- else if ( error_type.charAt(1) == '8')
- {
- result += "Nonstandard (private implementation) extensions";
- }
-
- return result;
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/DictRegistry.java b/src/net/java/sip/communicator/impl/protocol/dict/DictRegistry.java
deleted file mode 100644
index eca70b7..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/DictRegistry.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.util.*;
-
-/**
- * Static registry storing the connexions to dict servers
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class DictRegistry
-{
- private static HashMap<String, DictAdapter> adapters = new HashMap<String,DictAdapter>();
-
- /**
- * Checks if an adapter associated with the given key is stored in the regitry
- * @param key Key to the adapter
- * @return true, if an adapter exists - false otherwise
- */
- public static boolean has(String key)
- {
- return adapters.containsKey(key);
- }
-
- /**
- * Stores a new adapter in the registry
- * @param key Key
- * @param value DictAdapter class
- */
- public static void put(String key, DictAdapter value)
- {
- adapters.put(key, value);
- }
-
- /**
- * Returns the adapter associated with the given key
- * @param key Key
- * @return the adapter associated with the given key - null otherwise
- */
- public static DictAdapter get(String key)
- {
- if (DictRegistry.has(key))
- {
- return adapters.get(key);
- }
- return null;
- }
-
- /**
- * Removes the adapter associated with the given key from the registry
- * @param key
- */
- public static void remove(String key)
- {
- if (DictRegistry.has(key)) {
- adapters.remove(key);
- }
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/DictResult.java b/src/net/java/sip/communicator/impl/protocol/dict/DictResult.java
deleted file mode 100644
index 464d915..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/DictResult.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.util.*;
-
-/**
- * Representation of the results of a response to a query
- *
- * @author ROTH Damien
- * @author LITZEMANN Cédric
- */
-public class DictResult
- implements Iterator<String>
-{
- private String databaseName;
- private int index;
- private ArrayList<String> data;
-
- /**
- * Basic construct initializing the result
- */
- public DictResult()
- {
- this.index = 0;
- this.data = new ArrayList<String>();
- this.databaseName = "";
- }
-
- /**
- * Initialize the result and save the database name
- * @param dbn Database name
- */
- public DictResult(String dbn)
- {
- this.index = 0;
- this.data = new ArrayList<String>();
- this.databaseName = dbn;
- }
-
- /**
- * Add a result
- * @param s result
- */
- public void add(String s)
- {
- this.data.add(s);
- }
-
- /**
- * From the Iterator implementation, return the next part of the result
- * @return the next part of the result
- */
- public String next()
- {
- return (String) this.data.get(this.index++);
- }
-
- /**
- * From the Iterator implementation, return true if the iteration has more elements
- * @return true if the iteration has more elements - false otherwise
- */
- public boolean hasNext()
- {
- return (this.index < this.data.size());
- }
-
- /**
- * From the Iterator implementation but unsupported
- */
- public void remove()
- {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Set the database name
- * @param dbn Database name
- */
- public void setDatabaseName(String dbn)
- {
- this.databaseName = dbn;
- }
-
- /**
- * Return the database name
- * @return the database name
- */
- public String getDatabaseName()
- {
- return this.databaseName;
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/DictResultset.java b/src/net/java/sip/communicator/impl/protocol/dict/DictResultset.java
deleted file mode 100644
index 3e4251c..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/DictResultset.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.util.*;
-
-/**
- * Class managing the results of a dict query
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class DictResultset
-{
- /**
- * The index number of the last resultset for this DictResultset. This
- * parametre is set to "-1" if there is no resultset.
- */
- private int cursor;
-
- /**
- * The list containing all the resultsets for this DictResultset.
- */
- private ArrayList<DictResult> data;
-
- /**
- * Initialize a resultset list
- */
- public DictResultset()
- {
- this.cursor = -1;
- this.data = new ArrayList<DictResult>();
- }
-
- /**
- * Create a new resultset
- */
- public void newResultset()
- {
- this.cursor++;
- this.data.add(new DictResult());
- }
-
- /**
- * Create a new resultset and save the database name
- * @param dbn Database name
- */
- public void newResultset(String dbn)
- {
- this.cursor++;
- this.data.add(new DictResult(dbn));
- }
-
- /**
- * Set the database name for the current resultset
- * @param dbn Database name
- */
- public void setDatabaseName(String dbn)
- {
- this.data.get(this.cursor).setDatabaseName(dbn);
- }
-
- /**
- * Add a result in the current resultset
- * @param res a result line from a dict query
- */
- public void addResult(String res)
- {
- this.data.get(this.cursor).add(res);
- }
-
- /**
- * Return true if there is a resultset
- * @return return true if there is a resultset - false otherwise
- */
- public boolean hasResult()
- {
- return this.data.size() > 0;
- }
-
- /**
- * Return the resultset at the given index
- * @param index Index of the wished resultset
- * @return a DictResult - null otherwise
- */
- public DictResult getResultset(int index)
- {
- if (index < this.data.size())
- {
- return (DictResult) this.data.get(index);
- }
- return null;
- }
-
- /**
- * Return the number of resultsets
- * @return the number of resultsets
- */
- public int getNbResults()
- {
- return this.data.size();
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/DictStatusEnum.java b/src/net/java/sip/communicator/impl/protocol/dict/DictStatusEnum.java
deleted file mode 100644
index 26d6ac6..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/DictStatusEnum.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.util.*;
-
-import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.util.*;
-import java.io.*;
-
-/**
- * An implementation of <tt>PresenceStatus</tt> that enumerates all states that
- * a Dict contact can fall into.
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class DictStatusEnum
- extends PresenceStatus
-{
- private static final Logger logger
- = Logger.getLogger(DictStatusEnum.class);
-
- /**
- * Indicates an Offline status or status with 0 connectivity.
- */
- public static final DictStatusEnum OFFLINE
- = new DictStatusEnum(
- 0
- , "Offline"
- , loadIcon("resources/images/protocol/dict/dict-16x16.png"));
-
- /**
- * The Online status. Indicate that the user is able and willing to
- * communicate.
- */
- public static final DictStatusEnum ONLINE
- = new DictStatusEnum(
- 65
- , "Online"
- , loadIcon("resources/images/protocol/dict/dict-16x16.png"));
-
- /**
- * Initialize the list of supported status states.
- */
- private static List supportedStatusSet = new LinkedList();
- static
- {
- supportedStatusSet.add(OFFLINE);
- supportedStatusSet.add(ONLINE);
- }
-
- /**
- * Creates an instance of <tt>RssPresneceStatus</tt> with the
- * specified parameters.
- * @param status the connectivity level of the new presence status instance
- * @param statusName the name of the presence status.
- * @param statusIcon the icon associated with this status
- */
- private DictStatusEnum(int status,
- String statusName,
- byte[] statusIcon)
- {
- super(status, statusName, statusIcon);
- }
-
- /**
- * Returns an iterator over all status instances supproted by the rss
- * provider.
- * @return an <tt>Iterator</tt> over all status instances supported by the
- * rss provider.
- */
- static Iterator supportedStatusSet()
- {
- return supportedStatusSet.iterator();
- }
-
- /**
- * Loads an image from a given image path.
- * @param imagePath The path to the image resource.
- * @return The image extracted from the resource at the specified path.
- */
- public static byte[] loadIcon(String imagePath)
- {
- InputStream is = DictStatusEnum.class.getClassLoader().getResourceAsStream(imagePath);
-
- byte[] icon = null;
- try
- {
- icon = new byte[is.available()];
- is.read(icon);
- }
- catch (IOException exc)
- {
- logger.error("Failed to load icon: " + imagePath, exc);
- }
- return icon;
- }
-
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/MessageDictImpl.java b/src/net/java/sip/communicator/impl/protocol/dict/MessageDictImpl.java
deleted file mode 100644
index 256e54d..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/MessageDictImpl.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import net.java.sip.communicator.service.protocol.*;
-
-/**
- * Very simple message implementation for the Dict protocol.
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class MessageDictImpl
- implements Message
-{
- /**
- * The actual message content.
- */
- private String textContent = null;
-
- /**
- * The content type of the message. (text/plain if null)
- */
- private String contentType = null;
-
- /**
- * The message encoding. (UTF8 if null).
- */
- private String contentEncoding = null;
-
- /**
- * A String uniquely identifying the message
- */
- private String messageUID = null;
-
- /**
- * The subject of the message. (most often is null)
- */
- private String subject = null;
-
- /**
- * Creates a message instance according to the specified parameters.
- *
- * @param content the message body
- * @param contentType message content type or null for text/plain
- * @param contentEncoding message encoding or null for UTF8
- * @param subject the subject of the message or null for no subject.
- */
- public MessageDictImpl(String content,
- String contentType,
- String contentEncoding,
- String subject)
- {
- this.textContent = content;
- this.contentType = contentType;
- this.contentEncoding = contentEncoding;
- this.subject = subject;
-
- //generate the uid
- this.messageUID = String.valueOf(System.currentTimeMillis())
- + String.valueOf(hashCode());
-
- }
-
- /**
- * Returns the message body.
- *
- * @return the message content.
- */
- public String getContent()
- {
- return textContent;
- }
-
- /**
- * Returns the type of the content of this message.
- *
- * @return the type of the content of this message.
- */
- public String getContentType()
- {
- return contentType;
- }
-
- /**
- * Returns the encoding used for the message content.
- *
- * @return the encoding of the message body.
- */
- public String getEncoding()
- {
- return contentEncoding;
- }
-
- /**
- * A string uniquely identifying the message.
- *
- * @return a <tt>String</tt> uniquely identifying the message.
- */
- public String getMessageUID()
- {
- return messageUID;
- }
-
- /**
- * Returns the message body in a binary form.
- *
- * @return a <tt>byte[]</tt> representation of the message body.
- */
- public byte[] getRawData()
- {
- return getContent().getBytes();
- }
-
- /**
- * Return the length of this message.
- *
- * @return the length of this message.
- */
- public int getSize()
- {
- return getContent().length();
- }
-
- /**
- * Returns the message subject.
- *
- * @return the message subject.
- */
- public String getSubject()
- {
- return subject;
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/OperationSetBasicInstantMessagingDictImpl.java b/src/net/java/sip/communicator/impl/protocol/dict/OperationSetBasicInstantMessagingDictImpl.java
deleted file mode 100644
index 4dc2848..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/OperationSetBasicInstantMessagingDictImpl.java
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.util.*;
-import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.service.protocol.event.*;
-
-import net.java.sip.communicator.util.*;
-
-/**
- * Instant messaging functionalities for the Dict protocol.
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class OperationSetBasicInstantMessagingDictImpl
- implements OperationSetBasicInstantMessaging,
- RegistrationStateChangeListener
-{
- private static final Logger logger
- = Logger.getLogger(OperationSetBasicInstantMessagingDictImpl.class);
-
- /**
- * Currently registered message listeners.
- */
- private Vector messageListeners = new Vector();
-
- /**
- * The currently valid persistent presence operation set.
- */
- private OperationSetPersistentPresenceDictImpl opSetPersPresence = null;
-
- /**
- * The protocol provider that created us.
- */
- private ProtocolProviderServiceDictImpl parentProvider = null;
-
- /**
- * Creates an instance of this operation set keeping a reference to the
- * parent protocol provider and presence operation set.
- *
- * @param provider The provider instance that creates us.
- * @param opSetPersPresence the currently valid
- * <tt>OperationSetPersistentPresenceDictImpl</tt> instance.
- */
- public OperationSetBasicInstantMessagingDictImpl(
- ProtocolProviderServiceDictImpl provider,
- OperationSetPersistentPresenceDictImpl opSetPersPresence)
- {
- this.opSetPersPresence = opSetPersPresence;
- this.parentProvider = provider;
-
- parentProvider.addRegistrationStateChangeListener(this);
- }
-
- /**
- * Registers a MessageListener with this operation set so that it gets
- * notifications of successful message delivery, failure or reception of
- * incoming messages.
- *
- * @param listener the <tt>MessageListener</tt> to register.
- */
- public void addMessageListener(MessageListener listener)
- {
- if(!messageListeners.contains(listener))
- {
- messageListeners.add(listener);
- }
- }
-
- /**
- * Create a Message instance for sending arbitrary MIME-encoding content.
- *
- * @param content content value
- * @param contentType the MIME-type for <tt>content</tt>
- * @param contentEncoding encoding used for <tt>content</tt>
- * @param subject a <tt>String</tt> subject or <tt>null</tt> for now
- * subject.
- * @return the newly created message.
- */
- public Message createMessage(byte[] content, String contentType,
- String contentEncoding, String subject)
- {
- return new MessageDictImpl(new String(content), contentType,
- contentEncoding, subject);
- }
-
- /**
- * Create a Message instance for sending a simple text messages with
- * default (text/plain) content type and encoding.
- *
- * @param messageText the string content of the message.
- * @return Message the newly created message
- */
- public Message createMessage(String messageText)
- {
- return new MessageDictImpl(messageText, DEFAULT_MIME_TYPE,
- DEFAULT_MIME_ENCODING, null);
- }
-
- /**
- * Unregisters <tt>listener</tt> so that it won't receive any further
- * notifications upon successful message delivery, failure or reception
- * of incoming messages..
- *
- * @param listener the <tt>MessageListener</tt> to unregister.
- */
- public void removeMessageListener(MessageListener listener)
- {
- messageListeners.remove(listener);
- }
-
- /**
- * Sends the <tt>message</tt> to the destination indicated by the
- * <tt>to</tt> contact.
- *
- * @param to the <tt>Contact</tt> to send <tt>message</tt> to
- * @param message the <tt>Message</tt> to send.
- * @throws IllegalStateException if the underlying ICQ stack is not
- * registered and initialized.
- * @throws IllegalArgumentException if <tt>to</tt> is not an instance
- * belonging to the underlying implementation.
- */
- public void sendInstantMessage(Contact to, Message message)
- throws IllegalStateException,
- IllegalArgumentException
- {
- if( !(to instanceof ContactDictImpl) )
- {
- throw new IllegalArgumentException(
- "The specified contact is not a Dict contact."
- + to);
- }
-
- // Display the queried word
- fireMessageDelivered(message, to);
-
- this.submitDictQuery((ContactDictImpl) to, message);
- }
-
- /**
- * Notifies all registered message listeners that a message has been
- * delivered successfully to its addressee..
- *
- * @param message the <tt>Message</tt> that has been delivered.
- * @param to the <tt>Contact</tt> that <tt>message</tt> was delivered to.
- */
- private void fireMessageDelivered(Message message, Contact to)
- {
- MessageDeliveredEvent evt
- = new MessageDeliveredEvent(message, to, new Date());
-
- Iterator listeners = null;
- synchronized (messageListeners)
- {
- listeners = new ArrayList(messageListeners).iterator();
- }
-
- while (listeners.hasNext())
- {
- MessageListener listener
- = (MessageListener) listeners.next();
-
- listener.messageDelivered(evt);
- }
- }
-
- /**
- * Notifies all registered message listeners that a message has been
- * received.
- *
- * @param message the <tt>Message</tt> that has been received.
- * @param from the <tt>Contact</tt> that <tt>message</tt> was received from.
- */
- private void fireMessageReceived(Message message, Contact from)
- {
- MessageReceivedEvent evt
- = new MessageReceivedEvent(message, from, new Date());
-
- Iterator listeners = null;
- synchronized (messageListeners)
- {
- listeners = new ArrayList(messageListeners).iterator();
- }
-
- while (listeners.hasNext())
- {
- MessageListener listener
- = (MessageListener) listeners.next();
-
- listener.messageReceived(evt);
- }
- }
-
- /**
- * Determines whether the protocol provider (or the protocol itself) supports
- * sending and receiving offline messages. Most often this method would
- * return true for protocols that support offline messages and false for
- * those that don't. It is however possible for a protocol to support these
- * messages and yet have a particular account that does not (i.e. feature
- * not enabled on the protocol server). In cases like this it is possible
- * for this method to return true even when offline messaging is not
- * supported, and then have the sendMessage method throw an
- * OperationFailedException with code - OFFLINE_MESSAGES_NOT_SUPPORTED.
- *
- * @return <tt>true</tt> if the protocol supports offline messages and
- * <tt>false</tt> otherwise.
- */
- public boolean isOfflineMessagingSupported()
- {
- return false;
- }
-
- /**
- * Determines whether the protocol supports the supplied content type.
- *
- * @param contentType the type we want to check
- * @return <tt>true</tt> if the protocol supports it and
- * <tt>false</tt> otherwise.
- */
- public boolean isContentTypeSupported(String contentType)
- {
- if(contentType.equals(DEFAULT_MIME_TYPE))
- return true;
- else if(contentType.equals("text/html"))
- return true;
- else
- return false;
- }
-
- /**
- * Returns the protocol provider that this operation set belongs to.
- *
- * @return a reference to the <tt>ProtocolProviderServiceDictImpl</tt>
- * instance that this operation set belongs to.
- */
- public ProtocolProviderServiceDictImpl getParentProvider()
- {
- return this.parentProvider;
- }
-
- /**
- * Returns a reference to the presence operation set instance used by our
- * source provider.
- *
- * @return a reference to the <tt>OperationSetPersistentPresenceDictImpl</tt>
- * instance used by this provider.
- */
- public OperationSetPersistentPresenceDictImpl getOpSetPersPresence()
- {
- return this.opSetPersPresence;
- }
-
- /**
- * The method is called by the ProtocolProvider whenever a change in the
- * registration state of the corresponding provider has occurred.
- *
- * @param evt ProviderStatusChangeEvent the event describing the status
- * change.
- */
- public void registrationStateChanged(RegistrationStateChangeEvent evt)
- {
-
- }
-
-
- /**
- * Create, execute and display a query to a dictionary (ContactDictImpl)
- *
- * @param dictContact the contact containing the database name
- * @param message the message containing the word
- */
- private void submitDictQuery(ContactDictImpl dictContact, Message message)
- {
- Message msg = this.createMessage("");
-
- String database = dictContact.getContactID();
- DictAdapter dictAdapter = dictContact.getDictAdapter();
- boolean doMatch = false;
- DictResultset fctResult;
-
- String word;
-
- // Formatting the query message, if the word as one or more spaces we
- // put it between quotes to prevent errors
- word = message.getContent().replace("\"", "").trim();
- if (word.indexOf(' ') > 0)
- {
- word = "\"" + word + "\"";
- }
-
- // Try to get the definition of the work
- try
- {
- fctResult = dictAdapter.define(database, word);
- msg = this.createMessage(this.retrieveDefine(fctResult, word));
- }
- catch(DictException dex)
- {
- if (dex.getErrorCode() == 552)
- { // No word found, we are going to try the match command
- doMatch = true;
- }
- else
- { // Otherwise we display the error returned by the server
- msg = this.createMessage(dex.getErrorMessage());
- }
- }
- catch(Exception ex)
- {
- logger.error("Failed to retrieve Definition. Error was: "
- + ex.getMessage()
- , ex);
- }
-
- if (doMatch)
- {
- // Trying the match command
- try
- {
- fctResult = dictAdapter.match(database, word);
- msg = this.createMessage(this.retrieveMatch(fctResult, word));
- }
- catch(DictException dex)
- {
- msg = this.createMessage(dex.getErrorMessage());
- }
- catch(Exception ex)
- {
- logger.error("Failed to retrieve Match. Error was: "
- + ex.getMessage()
- , ex);
- }
- }
-
- // Send message
- fireMessageReceived(msg, dictContact);
- }
-
- /**
- * Generate the display of the results of the Define command
- *
- * @param data the result of the Define command
- * @param word the queried word
- * @return the formatted result
- */
- private String retrieveDefine(DictResultset data, String word)
- {
- String result;
- DictResult resultData;
-
- result = data.getNbResults() + " definitions found for \"" + word + "\"";
-
- for (int i=0; i<data.getNbResults(); i++)
- {
- resultData = data.getResultset(i);
-
- result += "\n";
-
- while (resultData.hasNext())
- {
- result += "\n" + resultData.next();
- }
- }
-
- return result;
- }
-
- /**
- * Generate the display of the results of the Match command
- *
- * @param data the result of the Match command
- * @param word the queried word
- * @return the formatted result
- */
- private String retrieveMatch(DictResultset data, String word)
- {
- String result = "";
- String temp;
- DictResult resultData;
- boolean isStart = true;
-
- result = "No definitions found for \""+ word +"\", perhaps you mean:\n";
-
- for (int i=0; i<data.getNbResults(); i++)
- {
- resultData = data.getResultset(i);
-
- while(resultData.hasNext())
- {
- temp = resultData.next();
-
- if (isStart)
- {
- isStart = false;
- }
- else
- {
- result += ", ";
- }
-
- // Return format : dictCode "match word"
- temp = (temp.split(" ", 2))[1];
-
- if (temp.indexOf(" ") == -1)
- {
- temp = temp.substring(1, temp.length() -1);
- }
-
- result += temp;
- }
- }
-
- return result;
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/OperationSetDirectoryDictImpl.java b/src/net/java/sip/communicator/impl/protocol/dict/OperationSetDirectoryDictImpl.java
deleted file mode 100644
index 647ecc6..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/OperationSetDirectoryDictImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.util.*;
-
-import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.util.*;
-
-public class OperationSetDirectoryDictImpl
- implements OperationSetDirectory
-{
- private static final Logger logger
- = Logger.getLogger(OperationSetDirectoryDictImpl.class);
-
- /**
- * The protocol provider that created us.
- */
- private ProtocolProviderServiceDictImpl parentProvider = null;
-
- /**
- * Creates an instance of this operation set keeping a reference to the
- * parent protocol provider and presence operation set.
- *
- * @param provider The provider instance that creates us.
- */
- public OperationSetDirectoryDictImpl(ProtocolProviderServiceDictImpl provider)
- {
- this.parentProvider = provider;
- }
-
- /**
- * Returns directory entries according to a search and a return type
- *
- * @param search the search, may be an empty String
- * @param returnType entries type
- * @return an HashTable which links ids with visual infos - NULL otherwise
- * @throws Exception Sends a exception if the host isn't reachable or if there isn't any dictionary
- */
- public Hashtable<String,String> getEntries(String search, String returnType) throws Exception
- {
- DictAdapter adapter = this.parentProvider.getDictAdapter();
- Hashtable<String, String> result = null;
-
- String temp[];
-
- result = new Hashtable<String,String>();
- Vector<String> dlist = adapter.getDatabases();
- for (int i=0; i<dlist.size(); i++)
- {
- temp = dlist.get(i).split(" ", 2);
- temp[1] = temp[1].replace("\"", "");
-
- result.put(temp[0], temp[1]);
- }
-
- return result;
- }
-}
-
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/OperationSetPersistentPresenceDictImpl.java b/src/net/java/sip/communicator/impl/protocol/dict/OperationSetPersistentPresenceDictImpl.java
deleted file mode 100644
index 0bbdfba..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/OperationSetPersistentPresenceDictImpl.java
+++ /dev/null
@@ -1,1298 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.util.*;
-
-import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.service.protocol.event.*;
-import net.java.sip.communicator.util.*;
-
-import org.osgi.framework.*;
-
-/**
- * A Dict implementation of a persistent presence operation set. In order
- * to simulate server persistence, this operation set would simply accept all
- * unresolved contacts and resolve them immediately. A real world protocol
- * implementation would save it on a server using methods provided by the
- * protocol stack.
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class OperationSetPersistentPresenceDictImpl
- implements OperationSetPersistentPresence
-{
- private static final Logger logger =
- Logger.getLogger(OperationSetPersistentPresenceDictImpl.class);
- /**
- */
- private Vector subscriptionListeners = new Vector();
-
- /**
- * A list of listeners registered for <tt>ServerStoredGroupChangeEvent</tt>s.
- */
- private Vector serverStoredGroupListeners = new Vector();
-
- /**
- * A list of listeners registered for
- * <tt>ProviderPresenceStatusChangeEvent</tt>s.
- */
- private Vector providerPresenceStatusListeners = new Vector();
-
- /**
- * A list of listeneres registered for
- * <tt>ContactPresenceStatusChangeEvent</tt>s.
- */
- private Vector contactPresenceStatusListeners = new Vector();
-
- /**
- * The root of the dict contact list.
- */
- private ContactGroupDictImpl contactListRoot = null;
-
- /**
- * The provider that created us.
- */
- private ProtocolProviderServiceDictImpl parentProvider = null;
-
- /**
- * The currently active status message.
- */
- private String statusMessage = "Default Status Message";
-
- /**
- * Our presence status.
- */
- private PresenceStatus presenceStatus = DictStatusEnum.ONLINE;
-
- /**
- * The <tt>AuthorizationHandler</tt> instance that we'd have to transmit
- * authorization requests to for approval.
- */
- private AuthorizationHandler authorizationHandler = null;
-
- /**
- * Creates an instance of this operation set keeping a reference to the
- * specified parent <tt>provider</tt>.
- * @param provider the ProtocolProviderServiceDictImpl instance that
- * created us.
- */
- public OperationSetPersistentPresenceDictImpl(
- ProtocolProviderServiceDictImpl provider)
- {
- this.parentProvider = provider;
- contactListRoot = new ContactGroupDictImpl("RootGroup", provider);
-
- //add our unregistration listener
- parentProvider.addRegistrationStateChangeListener(
- new UnregistrationListener());
- }
-
- /**
- * Dict implementation of the corresponding ProtocolProviderService
- * method.
- *
- * @param listener a dummy param.
- */
- public void addContactPresenceStatusListener(
- ContactPresenceStatusListener listener)
- {
- synchronized(contactPresenceStatusListeners)
- {
- if (!contactPresenceStatusListeners.contains(listener))
- contactPresenceStatusListeners.add(listener);
- }
- }
-
- /**
- * Notifies all registered listeners of the new event.
- *
- * @param source the contact that has caused the event.
- * @param parentGroup the group that contains the source contact.
- * @param oldValue the status that the source contact detained before
- * changing it.
- */
- public void fireContactPresenceStatusChangeEvent(ContactDictImpl source,
- ContactGroup parentGroup,
- PresenceStatus oldValue)
- {
- ContactPresenceStatusChangeEvent evt
- = new ContactPresenceStatusChangeEvent(source, parentProvider
- , parentGroup, oldValue, source.getPresenceStatus());
-
- Iterator listeners = null;
- synchronized(contactPresenceStatusListeners)
- {
- listeners = new ArrayList(contactPresenceStatusListeners).iterator();
- }
-
-
- while(listeners.hasNext())
- {
- ContactPresenceStatusListener listener
- = (ContactPresenceStatusListener)listeners.next();
-
- listener.contactPresenceStatusChanged(evt);
- }
- }
-
-
- /**
- * Notifies all registered listeners of the new event.
- *
- * @param source the contact that has caused the event.
- * @param parentGroup the group that contains the source contact.
- * @param eventID an identifier of the event to dispatch.
- */
- public void fireSubscriptionEvent(ContactDictImpl source,
- ContactGroup parentGroup,
- int eventID)
- {
- SubscriptionEvent evt = new SubscriptionEvent(source
- , this.parentProvider
- , parentGroup
- , eventID);
-
- Iterator listeners = null;
- synchronized (subscriptionListeners)
- {
- listeners = new ArrayList(subscriptionListeners).iterator();
- }
-
- while (listeners.hasNext())
- {
- SubscriptionListener listener
- = (SubscriptionListener) listeners.next();
-
- if(eventID == SubscriptionEvent.SUBSCRIPTION_CREATED)
- {
- listener.subscriptionCreated(evt);
- }
- else if (eventID == SubscriptionEvent.SUBSCRIPTION_FAILED)
- {
- listener.subscriptionFailed(evt);
- }
- else if (eventID == SubscriptionEvent.SUBSCRIPTION_REMOVED)
- {
- listener.subscriptionRemoved(evt);
- }
- }
- }
-
- /**
- * Notifies all registered listeners of the new event.
- *
- * @param source the contact that has been moved..
- * @param oldParent the group where the contact was located before being
- * moved.
- * @param newParent the group where the contact has been moved.
- */
- public void fireSubscriptionMovedEvent(Contact source,
- ContactGroup oldParent,
- ContactGroup newParent)
- {
- SubscriptionMovedEvent evt = new SubscriptionMovedEvent(source
- , this.parentProvider
- , oldParent
- , newParent);
-
- Iterator listeners = null;
- synchronized (subscriptionListeners)
- {
- listeners = new ArrayList(subscriptionListeners).iterator();
- }
-
- while (listeners.hasNext())
- {
- SubscriptionListener listener
- = (SubscriptionListener) listeners.next();
-
- listener.subscriptionMoved(evt);
- }
- }
-
-
- /**
- * Notifies all registered listeners of the new event.
- *
- * @param source the contact that has caused the event.
- * @param eventID an identifier of the event to dispatch.
- */
- public void fireServerStoredGroupEvent(ContactGroupDictImpl source,
- int eventID)
- {
- ServerStoredGroupEvent evt = new ServerStoredGroupEvent(
- source, eventID, (ContactGroupDictImpl)source.getParentContactGroup()
- , this.parentProvider, this);
-
- Iterator listeners = null;
- synchronized (serverStoredGroupListeners)
- {
- listeners = new ArrayList(serverStoredGroupListeners).iterator();
- }
-
- while (listeners.hasNext())
- {
- ServerStoredGroupListener listener
- = (ServerStoredGroupListener) listeners.next();
-
- if(eventID == ServerStoredGroupEvent.GROUP_CREATED_EVENT)
- {
- listener.groupCreated(evt);
- }
- else if(eventID == ServerStoredGroupEvent.GROUP_RENAMED_EVENT)
- {
- listener.groupNameChanged(evt);
- }
- else if(eventID == ServerStoredGroupEvent.GROUP_REMOVED_EVENT)
- {
- listener.groupRemoved(evt);
- }
- }
- }
-
- /**
- * Notifies all registered listeners of the new event.
- *
- * @param oldValue the presence status we were in before the change.
- */
- public void fireProviderStatusChangeEvent(PresenceStatus oldValue)
- {
- ProviderPresenceStatusChangeEvent evt
- = new ProviderPresenceStatusChangeEvent(this.parentProvider,
- oldValue, this.getPresenceStatus());
-
- Iterator listeners = null;
- synchronized (providerPresenceStatusListeners)
- {
- listeners = new ArrayList(providerPresenceStatusListeners).iterator();
- }
-
- while (listeners.hasNext())
- {
- ProviderPresenceStatusListener listener
- = (ProviderPresenceStatusListener) listeners.next();
-
- listener.providerStatusChanged(evt);
- }
- }
-
- /**
- * Dict implementation of the corresponding ProtocolProviderService
- * method.
- *
- * @param listener a dummy param.
- */
- public void addProviderPresenceStatusListener(
- ProviderPresenceStatusListener listener)
- {
- synchronized(providerPresenceStatusListeners)
- {
- if (!providerPresenceStatusListeners.contains(listener))
- this.providerPresenceStatusListeners.add(listener);
- }
- }
-
- /**
- * Registers a listener that would receive events upon changes in server
- * stored groups.
- *
- * @param listener a ServerStoredGroupChangeListener impl that would
- * receive events upong group changes.
- */
- public void addServerStoredGroupChangeListener(ServerStoredGroupListener
- listener)
- {
- synchronized(serverStoredGroupListeners)
- {
- if (!serverStoredGroupListeners.contains(listener))
- serverStoredGroupListeners.add(listener);
- }
- }
-
- /**
- * Dict implementation of the corresponding ProtocolProviderService
- * method.
- *
- * @param listener the SubscriptionListener to register
- */
- public void addSubsciptionListener(SubscriptionListener listener)
- {
- synchronized(subscriptionListeners)
- {
- if (!subscriptionListeners.contains(listener))
- this.subscriptionListeners.add(listener);
- }
- }
-
- /**
- * Creates a group with the specified name and parent in the server
- * stored contact list.
- *
- * @param parent the group where the new group should be created
- * @param groupName the name of the new group to create.
- */
- public void createServerStoredContactGroup(ContactGroup parent,
- String groupName)
- {
- ContactGroupDictImpl newGroup
- = new ContactGroupDictImpl(groupName, parentProvider);
-
- ((ContactGroupDictImpl)parent).addSubgroup(newGroup);
-
- this.fireServerStoredGroupEvent(
- newGroup, ServerStoredGroupEvent.GROUP_CREATED_EVENT);
- }
-
- /**
- * A Dict Provider method to use for fast filling of a contact list.
- *
- * @param contactGroup the group to add
- */
- public void addDictGroup(ContactGroupDictImpl contactGroup)
- {
- contactListRoot.addSubgroup(contactGroup);
- }
-
- /**
- * A Dict Provider method to use for fast filling of a contact list.
- * This method would add both the group and fire an event.
- *
- * @param parent the group where <tt>contactGroup</tt> should be added.
- * @param contactGroup the group to add
- */
- public void addDictGroupAndFireEvent(
- ContactGroupDictImpl parent
- , ContactGroupDictImpl contactGroup)
- {
- parent.addSubgroup(contactGroup);
-
- this.fireServerStoredGroupEvent(
- contactGroup, ServerStoredGroupEvent.GROUP_CREATED_EVENT);
- }
-
-
- /**
- * Returns a reference to the contact with the specified ID in case we
- * have a subscription for it and null otherwise/
- *
- * @param contactID a String identifier of the contact which we're
- * seeking a reference of.
- * @return a reference to the Contact with the specified
- * <tt>contactID</tt> or null if we don't have a subscription for the
- * that identifier.
- */
- public Contact findContactByID(String contactID)
- {
- return contactListRoot.findContactByID(contactID);
- }
-
- /**
- * Sets the specified status message.
- * @param statusMessage a String containing the new status message.
- */
- public void setStatusMessage(String statusMessage)
- {
- this.statusMessage = statusMessage;
- }
-
- /**
- * Returns the status message that was last set through
- * setCurrentStatusMessage.
- *
- * @return the last status message that we have requested and the aim
- * server has confirmed.
- */
- public String getCurrentStatusMessage()
- {
- return statusMessage;
- }
-
- /**
- * Returns the protocol specific contact instance representing the local
- * user.
- *
- * @return the Contact (address, phone number, or uin) that the Provider
- * implementation is communicating on behalf of.
- */
- public Contact getLocalContact()
- {
- return null;
- }
-
- /**
- * Returns a PresenceStatus instance representing the state this provider
- * is currently in.
- *
- * @return the PresenceStatus last published by this provider.
- */
- public PresenceStatus getPresenceStatus()
- {
- return presenceStatus;
- }
-
- /**
- * Returns the root group of the server stored contact list.
- *
- * @return the root ContactGroup for the ContactList stored by this
- * service.
- */
- public ContactGroup getServerStoredContactListRoot()
- {
- return contactListRoot;
- }
-
- /**
- * Returns the set of PresenceStatus objects that a user of this service
- * may request the provider to enter.
- *
- * @return Iterator a PresenceStatus array containing "enterable" status
- * instances.
- */
- public Iterator getSupportedStatusSet()
- {
- return DictStatusEnum.supportedStatusSet();
- }
-
- /**
- * Removes the specified contact from its current parent and places it
- * under <tt>newParent</tt>.
- *
- * @param contactToMove the <tt>Contact</tt> to move
- * @param newParent the <tt>ContactGroup</tt> where <tt>Contact</tt>
- * would be placed.
- */
- public void moveContactToGroup(Contact contactToMove,
- ContactGroup newParent)
- {
- ContactDictImpl dictContact
- = (ContactDictImpl)contactToMove;
-
- ContactGroupDictImpl parentDictGroup
- = findContactParent(dictContact);
-
- parentDictGroup.removeContact(dictContact);
-
- //if this is a volatile contact then we haven't really subscribed to
- //them so we'd need to do so here
- if(!dictContact.isPersistent())
- {
- //first tell everyone that the volatile contact was removed
- fireSubscriptionEvent(dictContact
- , parentDictGroup
- , SubscriptionEvent.SUBSCRIPTION_REMOVED);
-
- try
- {
- //now subscribe
- this.subscribe(newParent, contactToMove.getAddress());
-
- //now tell everyone that we've added the contact
- fireSubscriptionEvent(dictContact
- , newParent
- , SubscriptionEvent.SUBSCRIPTION_CREATED);
- }
- catch (Exception ex)
- {
- logger.error("Failed to move contact "
- + dictContact.getAddress()
- , ex);
- }
- }
- else
- {
- ( (ContactGroupDictImpl) newParent)
- .addContact(dictContact);
-
- fireSubscriptionMovedEvent(contactToMove
- , parentDictGroup
- , newParent);
- }
- }
-
- /**
- * Requests the provider to enter into a status corresponding to the
- * specified paramters.
- *
- * @param status the PresenceStatus as returned by
- * getRequestableStatusSet
- * @param statusMessage the message that should be set as the reason to
- * enter that status
- * @throws IllegalArgumentException if the status requested is not a
- * valid PresenceStatus supported by this provider.
- * @throws IllegalStateException if the provider is not currently
- * registered.
- * @throws OperationFailedException with code NETWORK_FAILURE if
- * publishing the status fails due to a network error.
- */
- public void publishPresenceStatus(PresenceStatus status,
- String statusMessage) throws
- IllegalArgumentException, IllegalStateException,
- OperationFailedException
- {
- PresenceStatus oldPresenceStatus = this.presenceStatus;
- this.presenceStatus = status;
- this.statusMessage = statusMessage;
-
- this.fireProviderStatusChangeEvent(oldPresenceStatus);
-
- //since we are not a real protocol, we set the contact presence status
- //ourselves and make them have the same status as ours.
- changePresenceStatusForAllContacts( getServerStoredContactListRoot()
- , getPresenceStatus());
-
- //now check whether we are in someone else's contact list and modify
- //our status there
- List contacts = findContactsPointingToUs();
-
- Iterator contactsIter = contacts.iterator();
- while (contactsIter.hasNext())
- {
- ContactDictImpl contact
- = (ContactDictImpl) contactsIter.next();
-
- PresenceStatus oldStatus = contact.getPresenceStatus();
- contact.setPresenceStatus(status);
- contact.getParentPresenceOperationSet()
- .fireContactPresenceStatusChangeEvent(
- contact
- , contact.getParentContactGroup()
- , oldStatus);
-
- }
- }
-
-
-
- /**
- * Get the PresenceStatus for a particular contact.
- *
- * @param contactIdentifier the identifier of the contact whose status
- * we're interested in.
- * @return PresenceStatus the <tt>PresenceStatus</tt> of the specified
- * <tt>contact</tt>
- * @throws IllegalArgumentException if <tt>contact</tt> is not a contact
- * known to the underlying protocol provider
- * @throws IllegalStateException if the underlying protocol provider is
- * not registered/signed on a public service.
- * @throws OperationFailedException with code NETWORK_FAILURE if
- * retrieving the status fails due to errors experienced during
- * network communication
- */
- public PresenceStatus queryContactStatus(String contactIdentifier) throws
- IllegalArgumentException, IllegalStateException,
- OperationFailedException
- {
- return findContactByID(contactIdentifier).getPresenceStatus();
- }
-
- /**
- * Sets the presence status of <tt>contact</tt> to <tt>newStatus</tt>.
- *
- * @param contact the <tt>ContactDictImpl</tt> whose status we'd like
- * to set.
- * @param newStatus the new status we'd like to set to <tt>contact</tt>.
- */
- private void changePresenceStatusForContact(
- ContactDictImpl contact
- , PresenceStatus newStatus)
- {
- PresenceStatus oldStatus = contact.getPresenceStatus();
- contact.setPresenceStatus(newStatus);
-
- fireContactPresenceStatusChangeEvent(
- contact, findContactParent(contact), oldStatus);
- }
-
- /**
- * Sets the presence status of all <tt>contact</tt>s in our contact list
- * (except those that correspond to another provider registered with SC)
- * to <tt>newStatus</tt>.
- *
- * @param newStatus the new status we'd like to set to <tt>contact</tt>.
- * @param parent the group in which we'd have to update the status of all
- * direct and indirect child contacts.
- */
- private void changePresenceStatusForAllContacts(ContactGroup parent,
- PresenceStatus newStatus)
- {
- //first set the status for contacts in this group
- Iterator childContacts = parent.contacts();
-
- while(childContacts.hasNext())
- {
- ContactDictImpl contact
- = (ContactDictImpl)childContacts.next();
-
- if(findProviderForDictUserID(contact.getAddress()) != null)
- {
- //this is a contact corresponding to another SIP Communicator
- //provider so we won't change it's status here.
- continue;
- }
- PresenceStatus oldStatus = contact.getPresenceStatus();
- contact.setPresenceStatus(newStatus);
-
- fireContactPresenceStatusChangeEvent(
- contact, parent, oldStatus);
- }
-
- //now call this method recursively for all subgroups
- Iterator subgroups = parent.subgroups();
-
- while(subgroups.hasNext())
- {
- ContactGroup subgroup = (ContactGroup)subgroups.next();
- changePresenceStatusForAllContacts(subgroup, newStatus);
- }
- }
-
-
- /**
- * Removes the specified listener so that it won't receive any further
- * updates on contact presence status changes
- *
- * @param listener the listener to remove.
- */
- public void removeContactPresenceStatusListener(
- ContactPresenceStatusListener listener)
- {
- synchronized(contactPresenceStatusListeners)
- {
- contactPresenceStatusListeners.remove(listener);
- }
- }
-
- /**
- * Unregisters the specified listener so that it does not receive further
- * events upon changes in local presence status.
- *
- * @param listener ProviderPresenceStatusListener
- */
- public void removeProviderPresenceStatusListener(
- ProviderPresenceStatusListener listener)
- {
- synchronized(providerPresenceStatusListeners)
- {
- this.providerPresenceStatusListeners.remove(listener);
- }
- }
-
- /**
- * Returns the group that is parent of the specified dictGroup or null
- * if no parent was found.
- * @param dictGroup the group whose parent we're looking for.
- * @return the ContactGroupDictImpl instance that dictGroup
- * belongs to or null if no parent was found.
- */
- public ContactGroupDictImpl findGroupParent(
- ContactGroupDictImpl dictGroup)
- {
- return contactListRoot.findGroupParent(dictGroup);
- }
-
- /**
- * Returns the group that is parent of the specified dictContact or
- * null if no parent was found.
- * @param dictContact the contact whose parent we're looking for.
- * @return the ContactGroupDictImpl instance that dictContact
- * belongs to or null if no parent was found.
- */
- public ContactGroupDictImpl findContactParent(
- ContactDictImpl dictContact)
- {
- return (ContactGroupDictImpl)dictContact
- .getParentContactGroup();
- }
-
-
- /**
- * Removes the specified group from the server stored contact list.
- *
- * @param group the group to remove.
- *
- * @throws IllegalArgumentException if <tt>group</tt> was not found in this
- * protocol's contact list.
- */
- public void removeServerStoredContactGroup(ContactGroup group)
- throws IllegalArgumentException
- {
- ContactGroupDictImpl dictGroup
- = (ContactGroupDictImpl)group;
-
- ContactGroupDictImpl parent = findGroupParent(dictGroup);
-
- if(parent == null){
- throw new IllegalArgumentException(
- "group " + group
- + " does not seem to belong to this protocol's contact list.");
- }
-
- parent.removeSubGroup(dictGroup);
-
- this.fireServerStoredGroupEvent(
- dictGroup, ServerStoredGroupEvent.GROUP_REMOVED_EVENT);
- }
-
-
- /**
- * Removes the specified group change listener so that it won't receive
- * any further events.
- *
- * @param listener the ServerStoredGroupChangeListener to remove
- */
- public void removeServerStoredGroupChangeListener(ServerStoredGroupListener
- listener)
- {
- synchronized(serverStoredGroupListeners)
- {
- serverStoredGroupListeners.remove(listener);
- }
- }
-
- /**
- * Removes the specified subscription listener.
- *
- * @param listener the listener to remove.
- */
- public void removeSubscriptionListener(SubscriptionListener listener)
- {
- synchronized(subscriptionListeners)
- {
- this.subscriptionListeners.remove(listener);
- }
- }
-
- /**
- * Renames the specified group from the server stored contact list.
- *
- * @param group the group to rename.
- * @param newName the new name of the group.
- */
- public void renameServerStoredContactGroup(ContactGroup group,
- String newName)
- {
- ((ContactGroupDictImpl)group).setGroupName(newName);
-
- this.fireServerStoredGroupEvent(
- (ContactGroupDictImpl)group, ServerStoredGroupEvent.GROUP_RENAMED_EVENT);
- }
-
- /**
- * Handler for incoming authorization requests.
- *
- * @param handler an instance of an AuthorizationHandler for
- * authorization requests coming from other users requesting
- * permission add us to their contact list.
- */
- public void setAuthorizationHandler(AuthorizationHandler handler)
- {
- this.authorizationHandler = handler;
- }
-
- /**
- * Persistently adds a subscription for the presence status of the
- * contact corresponding to the specified contactIdentifier and indicates
- * that it should be added to the specified group of the server stored
- * contact list.
- *
- * @param parent the parent group of the server stored contact list
- * where the contact should be added. <p>
- * @param contactIdentifier the contact whose status updates we are
- * subscribing for.
- * @throws IllegalArgumentException if <tt>contact</tt> or
- * <tt>parent</tt> are not a contact known to the underlying protocol
- * provider.
- * @throws IllegalStateException if the underlying protocol provider is
- * not registered/signed on a public service.
- * @throws OperationFailedException with code NETWORK_FAILURE if
- * subscribing fails due to errors experienced during network
- * communication
- */
- public void subscribe(ContactGroup parent, String contactIdentifier) throws
- IllegalArgumentException, IllegalStateException,
- OperationFailedException
- {
- ContactDictImpl contact = new ContactDictImpl(
- contactIdentifier
- , parentProvider);
-
- ((ContactGroupDictImpl)parent).addContact(contact);
-
- fireSubscriptionEvent(contact,
- parent,
- SubscriptionEvent.SUBSCRIPTION_CREATED);
-
- //notify presence listeners for the status change.
- fireContactPresenceStatusChangeEvent(contact
- , parent
- , DictStatusEnum.ONLINE);
- }
-
-
- /**
- * Depending on whether <tt>contact</tt> corresponds to another protocol
- * provider installed in sip-communicator, this method would either deliver
- * it to that provider or simulate a corresponding request from the
- * destination contact and make return a response after it has received
- * one If the destination contact matches us, then we'll ask the user to
- * act upon the request, and return the response.
- *
- * @param request the authorization request that we'd like to deliver to the
- * desination <tt>contact</tt>.
- * @param contact the <tt>Contact</tt> to notify
- *
- * @return the <tt>AuthorizationResponse</tt> that has been given or
- * generated in response to <tt>request</tt>.
- */
- private AuthorizationResponse deliverAuthorizationRequest(
- AuthorizationRequest request,
- Contact contact)
- {
- String userID = contact.getAddress();
-
- //if the user id is our own id, then this request is being routed to us
- //from another instance of the dict provider.
- if (userID.equals(this.parentProvider.getAccountID().getUserID()))
- {
- //check who is the provider sending the message
- String sourceUserID = contact.getProtocolProvider()
- .getAccountID().getUserID();
-
- //check whether they are in our contact list
- Contact from = findContactByID(sourceUserID);
-
- //and if not - add them there as volatile.
- if (from == null)
- {
- from = createVolatileContact(sourceUserID);
- }
-
- //and now handle the request.
- return authorizationHandler.processAuthorisationRequest(
- request, from);
- }
- else
- {
- //if userID is not our own, try a check whether another provider
- //has that id and if yes - deliver the request to them.
- ProtocolProviderServiceDictImpl dictProvider
- = this.findProviderForDictUserID(userID);
- if (dictProvider != null)
- {
- OperationSetPersistentPresenceDictImpl opSetPersPresence
- = (OperationSetPersistentPresenceDictImpl)
- dictProvider.getOperationSet(
- OperationSetPersistentPresence.class);
- return opSetPersPresence
- .deliverAuthorizationRequest(request, contact);
- }
- else
- {
- //if we got here then "to" is simply someone in our contact
- //list so let's just simulate a reciproce request and generate
- //a response accordingly.
-
- //pretend that the remote contact is asking for authorization
- authorizationHandler.processAuthorisationRequest(
- request, contact);
-
- //and now pretend that the remote contact has granted us
- //authorization
- return new AuthorizationResponse(AuthorizationResponse.ACCEPT
- , "You are welcome!");
- }
- }
- }
-
- /**
- * Adds a subscription for the presence status of the contact
- * corresponding to the specified contactIdentifier.
- *
- * @param contactIdentifier the identifier of the contact whose status
- * updates we are subscribing for. <p>
- * @throws IllegalArgumentException if <tt>contact</tt> is not a contact
- * known to the underlying protocol provider
- * @throws IllegalStateException if the underlying protocol provider is
- * not registered/signed on a public service.
- * @throws OperationFailedException with code NETWORK_FAILURE if
- * subscribing fails due to errors experienced during network
- * communication
- */
- public void subscribe(String contactIdentifier) throws
- IllegalArgumentException, IllegalStateException,
- OperationFailedException
- {
- //subscribe(contactListRoot, contactIdentifier);
-
- }
-
- /**
- * Removes a subscription for the presence status of the specified
- * contact.
- *
- * @param contact the contact whose status updates we are unsubscribing
- * from.
- * @throws IllegalArgumentException if <tt>contact</tt> is not a contact
- * known to the underlying protocol provider
- * @throws IllegalStateException if the underlying protocol provider is
- * not registered/signed on a public service.
- * @throws OperationFailedException with code NETWORK_FAILURE if
- * unsubscribing fails due to errors experienced during network
- * communication
- */
- public void unsubscribe(Contact contact) throws IllegalArgumentException,
- IllegalStateException, OperationFailedException
- {
- ContactGroupDictImpl parentGroup
- = (ContactGroupDictImpl)((ContactDictImpl)contact)
- .getParentContactGroup();
-
- parentGroup.removeContact((ContactDictImpl)contact);
-
- fireSubscriptionEvent((ContactDictImpl)contact,
- ((ContactDictImpl)contact).getParentContactGroup()
- , SubscriptionEvent.SUBSCRIPTION_REMOVED);
- }
-
- /**
- * Creates and returns a unresolved contact from the specified
- * <tt>address</tt> and <tt>persistentData</tt>. The method will not try
- * to establish a network connection and resolve the newly created Contact
- * against the server. The protocol provider may will later try and resolve
- * the contact. When this happens the corresponding event would notify
- * interested subscription listeners.
- *
- * @param address an identifier of the contact that we'll be creating.
- * @param persistentData a String returned Contact's getPersistentData()
- * method during a previous run and that has been persistently stored
- * locally.
- * @return the unresolved <tt>Contact</tt> created from the specified
- * <tt>address</tt> and <tt>persistentData</tt>
- */
- public Contact createUnresolvedContact(String address,
- String persistentData)
- {
- return createUnresolvedContact(address
- , persistentData
- , getServerStoredContactListRoot());
- }
-
- /**
- * Creates and returns a unresolved contact from the specified
- * <tt>address</tt> and <tt>persistentData</tt>. The method will not try
- * to establish a network connection and resolve the newly created Contact
- * against the server. The protocol provider may will later try and resolve
- * the contact. When this happens the corresponding event would notify
- * interested subscription listeners.
- *
- * @param address an identifier of the contact that we'll be creating.
- * @param persistentData a String returned Contact's getPersistentData()
- * method during a previous run and that has been persistently stored
- * locally.
- * @param parent the group where the unresolved contact is
- * supposed to belong to.
- *
- * @return the unresolved <tt>Contact</tt> created from the specified
- * <tt>address</tt> and <tt>persistentData</tt>
- */
- public Contact createUnresolvedContact(String address,
- String persistentData,
- ContactGroup parent)
- {
-
- ContactDictImpl contact = new ContactDictImpl(
- address
- , parentProvider);
- contact.setResolved(false);
-
- ( (ContactGroupDictImpl) parent).addContact(contact);
-
- fireSubscriptionEvent(contact,
- parent,
- SubscriptionEvent.SUBSCRIPTION_CREATED);
-
- //since we don't have any server, we'll simply resolve the contact
- //ourselves as if we've just received an event from the server telling
- //us that it has been resolved.
- contact.setResolved(true);
- fireSubscriptionEvent(contact, parent, SubscriptionEvent.SUBSCRIPTION_RESOLVED);
-
- //since we are not a real protocol, we set the contact presence status
- //ourselves
- changePresenceStatusForContact( contact, getPresenceStatus());
-
- return contact;
- }
-
- /**
- * Looks for a dict protocol provider registered for a user id matching
- * <tt>dictUserID</tt>.
- *
- * @param dictUserID the ID of the Dict user whose corresponding
- * protocol provider we'd like to find.
- * @return ProtocolProviderServiceDictImpl a dict protocol
- * provider registered for a user with id <tt>dictUserID</tt> or null
- * if there is no such protocol provider.
- */
- public ProtocolProviderServiceDictImpl
- findProviderForDictUserID(String dictUserID)
- {
- BundleContext bc = DictActivator.getBundleContext();
-
- String osgiQuery = "(&"
- + "(" + ProtocolProviderFactory.PROTOCOL
- + "=Dict)"
- + "(" + ProtocolProviderFactory.USER_ID
- + "=" + dictUserID + ")"
- + ")";
-
- ServiceReference[] refs = null;
- try
- {
- refs = bc.getServiceReferences(
- ProtocolProviderService.class.getName()
- ,osgiQuery);
- }
- catch (InvalidSyntaxException ex)
- {
- logger.error("Failed to execute the following osgi query: "
- + osgiQuery
- , ex);
- }
-
- if(refs != null && refs.length > 0)
- {
- return (ProtocolProviderServiceDictImpl)bc.getService(refs[0]);
- }
-
- return null;
- }
-
- /**
- * Looks for dict protocol providers that have added us to their
- * contact list and returns list of all contacts representing us in these
- * providers.
- *
- * @return a list of all contacts in other providers' contact lists that
- * point to us.
- */
- public List findContactsPointingToUs()
- {
- List contacts = new LinkedList();
- BundleContext bc = DictActivator.getBundleContext();
-
- String osgiQuery =
- "(" + ProtocolProviderFactory.PROTOCOL
- + "=Dict)";
-
- ServiceReference[] refs = null;
- try
- {
- refs = bc.getServiceReferences(
- ProtocolProviderService.class.getName()
- ,osgiQuery);
- }
- catch (InvalidSyntaxException ex)
- {
- logger.error("Failed to execute the following osgi query: "
- + osgiQuery
- , ex);
- }
-
- for (int i =0; refs != null && i < refs.length; i++)
- {
- ProtocolProviderServiceDictImpl gibProvider
- = (ProtocolProviderServiceDictImpl)bc.getService(refs[i]);
-
- OperationSetPersistentPresenceDictImpl opSetPersPresence
- = (OperationSetPersistentPresenceDictImpl)gibProvider
- .getOperationSet(OperationSetPersistentPresence.class);
-
- Contact contact = opSetPersPresence.findContactByID(
- parentProvider.getAccountID().getUserID());
-
- if (contact != null)
- contacts.add(contact);
- }
-
- return contacts;
- }
-
-
- /**
- * Creates and returns a unresolved contact group from the specified
- * <tt>address</tt> and <tt>persistentData</tt>. The method will not try
- * to establish a network connection and resolve the newly created
- * <tt>ContactGroup</tt> against the server or the contact itself. The
- * protocol provider will later resolve the contact group. When this happens
- * the corresponding event would notify interested subscription listeners.
- *
- * @param groupUID an identifier, returned by ContactGroup's getGroupUID,
- * that the protocol provider may use in order to create the group.
- * @param persistentData a String returned ContactGroups's
- * getPersistentData() method during a previous run and that has been
- * persistently stored locally.
- * @param parentGroup the group under which the new group is to be created
- * or null if this is group directly underneath the root.
- * @return the unresolved <tt>ContactGroup</tt> created from the specified
- * <tt>uid</tt> and <tt>persistentData</tt>
- */
- public ContactGroup createUnresolvedContactGroup(String groupUID,
- String persistentData, ContactGroup parentGroup)
- {
- ContactGroupDictImpl newGroup
- = new ContactGroupDictImpl(
- ContactGroupDictImpl.createNameFromUID(groupUID)
- , parentProvider);
- newGroup.setResolved(false);
-
- //if parent is null then we're adding under root.
- if(parentGroup == null)
- parentGroup = getServerStoredContactListRoot();
-
- ((ContactGroupDictImpl)parentGroup).addSubgroup(newGroup);
-
- this.fireServerStoredGroupEvent(
- newGroup, ServerStoredGroupEvent.GROUP_CREATED_EVENT);
-
- return newGroup;
- }
-
- private class UnregistrationListener
- implements RegistrationStateChangeListener
- {
- /**
- * The method is called by a ProtocolProvider implementation whenver
- * a change in the registration state of the corresponding provider had
- * occurred. The method is particularly interested in events stating
- * that the dict provider has unregistered so that it would fire
- * status change events for all contacts in our buddy list.
- *
- * @param evt ProviderStatusChangeEvent the event describing the status
- * change.
- */
- public void registrationStateChanged(RegistrationStateChangeEvent evt)
- {
- if (! evt.getNewState().equals(RegistrationState.UNREGISTERED)
- && !evt.getNewState().equals(RegistrationState.AUTHENTICATION_FAILED)
- && !evt.getNewState().equals(RegistrationState.CONNECTION_FAILED))
- {
- return;
- }
-
- //send event notifications saying that all our buddies are
- //offline. The icq protocol does not implement top level buddies
- //nor subgroups for top level groups so a simple nested loop
- //would be enough.
- Iterator groupsIter = getServerStoredContactListRoot()
- .subgroups();
- while (groupsIter.hasNext())
- {
- ContactGroupDictImpl group
- = (ContactGroupDictImpl) groupsIter.next();
-
- Iterator contactsIter = group.contacts();
-
- while (contactsIter.hasNext())
- {
- ContactDictImpl contact
- = (ContactDictImpl) contactsIter.next();
-
- PresenceStatus oldContactStatus
- = contact.getPresenceStatus();
-
- if (!oldContactStatus.isOnline())
- continue;
-
- contact.setPresenceStatus(DictStatusEnum.OFFLINE);
-
- fireContactPresenceStatusChangeEvent(
- contact
- , contact.getParentContactGroup()
- , oldContactStatus);
- }
- }
- }
- }
-
- /**
- * Returns the volatile group or null if this group has not yet been
- * created.
- *
- * @return a volatile group existing in our contact list or <tt>null</tt>
- * if such a group has not yet been created.
- */
- private ContactGroupDictImpl getNonPersistentGroup()
- {
- for (int i = 0
- ; i < getServerStoredContactListRoot().countSubgroups()
- ; i++)
- {
- ContactGroupDictImpl gr =
- (ContactGroupDictImpl)getServerStoredContactListRoot()
- .getGroup(i);
-
- if(!gr.isPersistent())
- return gr;
- }
-
- return null;
- }
-
-
- /**
- * Creates a non persistent contact for the specified address. This would
- * also create (if necessary) a group for volatile contacts that would not
- * be added to the server stored contact list. This method would have no
- * effect on the server stored contact list.
- *
- * @param contactAddress the address of the volatile contact we'd like to
- * create.
- * @return the newly created volatile contact.
- */
- public ContactDictImpl createVolatileContact(String contactAddress)
- {
- //First create the new volatile contact;
- ContactDictImpl newVolatileContact
- = new ContactDictImpl(contactAddress
- , this.parentProvider);
- newVolatileContact.setPersistent(false);
-
-
- //Check whether a volatile group already exists and if not create
- //one
- ContactGroupDictImpl theVolatileGroup = getNonPersistentGroup();
-
-
- //if the parent volatile group is null then we create it
- if (theVolatileGroup == null)
- {
- List emptyBuddies = new LinkedList();
- theVolatileGroup = new ContactGroupDictImpl(
- "NotInContactList"
- , parentProvider);
- theVolatileGroup.setResolved(false);
- theVolatileGroup.setPersistent(false);
-
- this.contactListRoot.addSubgroup(theVolatileGroup);
-
- fireServerStoredGroupEvent(theVolatileGroup
- , ServerStoredGroupEvent.GROUP_CREATED_EVENT);
- }
-
- //now add the volatile contact instide it
- theVolatileGroup.addContact(newVolatileContact);
- fireSubscriptionEvent(newVolatileContact
- , theVolatileGroup
- , SubscriptionEvent.SUBSCRIPTION_CREATED);
-
- return newVolatileContact;
- }
-
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/ProtocolIconDictImpl.java b/src/net/java/sip/communicator/impl/protocol/dict/ProtocolIconDictImpl.java
deleted file mode 100644
index e906af1..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/ProtocolIconDictImpl.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.io.*;
-import java.util.*;
-
-import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.util.*;
-
-/**
- * Reperesents the Dict protocol icon. Implements the <tt>ProtocolIcon</tt>
- * interface in order to provide a dict logo image in two different sizes.
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class ProtocolIconDictImpl
- implements ProtocolIcon
-{
- private static Logger logger = Logger.getLogger(ProtocolIconDictImpl.class);
-
- /**
- * A hash table containing the protocol icon in different sizes.
- */
- private static Hashtable<String,byte[]> iconsTable = new Hashtable<String,byte[]>();
- static {
- iconsTable.put(ProtocolIcon.ICON_SIZE_16x16,
- loadIcon("resources/images/protocol/dict/dict-16x16.png"));
-
- iconsTable.put(ProtocolIcon.ICON_SIZE_64x64,
- loadIcon("resources/images/protocol/dict/dict-64x64.png"));
- }
-
- /**
- * Implements the <tt>ProtocolIcon.getSupportedSizes()</tt> method. Returns
- * an iterator to a set containing the supported icon sizes.
- * @return Returns an iterator to a set containing the supported icon sizes
- */
- public Iterator getSupportedSizes()
- {
- return iconsTable.keySet().iterator();
- }
-
- /**
- * Returns TRUE if an icon with the given size is supported, FALSE otherwise.
- * @param iconSize The size of the icon, that we want to know if it is
- * supported.
- * @return Returns true if the size is supported. False otherwise.
- */
- public boolean isSizeSupported(String iconSize)
- {
- return iconsTable.containsKey(iconSize);
- }
-
- /**
- * Returns the icon image in the given size.
- * @param iconSize The icon size one of ICON_SIZE_XXX constants
- * @return Returns a byte[] containing the pixels of the icon for the given
- * size.
- */
- public byte[] getIcon(String iconSize)
- {
- return iconsTable.get(iconSize);
- }
-
- /**
- * Returns the icon image used to represent the protocol connecting state.
- * @return Returns the icon image used to represent the protocol connecting state.
- */
- public byte[] getConnectingIcon()
- {
- return iconsTable.get(ProtocolIcon.ICON_SIZE_16x16);
- }
-
- /**
- * Loads an image from a given image path.
- * @param imagePath The identifier of the image.
- * @return The image for the given identifier.
- */
- public static byte[] loadIcon(String imagePath) {
- InputStream is = ProtocolIconDictImpl.class
- .getClassLoader().getResourceAsStream(imagePath);
-
- byte[] icon = null;
- try {
- icon = new byte[is.available()];
- is.read(icon);
- } catch (IOException e) {
- logger.error("Failed to load icon: " + imagePath, e);
- }
- return icon;
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/ProtocolProviderFactoryDictImpl.java b/src/net/java/sip/communicator/impl/protocol/dict/ProtocolProviderFactoryDictImpl.java
deleted file mode 100644
index 11fc521..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/ProtocolProviderFactoryDictImpl.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.util.*;
-
-import net.java.sip.communicator.impl.gui.i18n.*;
-import net.java.sip.communicator.service.contactlist.*;
-import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.util.*;
-
-import org.osgi.framework.*;
-
-/**
- * The Dict protocol provider factory creates instances of the Dict
- * protocol provider service. One Service instance corresponds to one account.
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class ProtocolProviderFactoryDictImpl
- extends ProtocolProviderFactory
-{
- private static final Logger logger
- = Logger.getLogger(ProtocolProviderFactoryDictImpl.class);
-
- /**
- * The table that we store our accounts in.
- */
- private Hashtable registeredAccounts = new Hashtable();
-
- /**
- * Name for the auto-create group
- */
- private String groupName = "Dictionaries";
-
- private BundleContext bundleContext;
-
- /**
- * Creates an instance of the ProtocolProviderFactoryDictImpl.
- */
- public ProtocolProviderFactoryDictImpl()
- {
- super();
- bundleContext = DictActivator.getBundleContext();
- }
-
- /**
- * Returns the ServiceReference for the protocol provider corresponding
- * to the specified accountID or null if the accountID is unknown.
- *
- * @param accountID the accountID of the protocol provider we'd like to
- * get
- * @return a ServiceReference object to the protocol provider with the
- * specified account id and null if the account id is unknwon to the
- * provider factory.
- */
- public ServiceReference getProviderForAccount(AccountID accountID)
- {
- ServiceRegistration registration
- = (ServiceRegistration)registeredAccounts.get(accountID);
-
- return (registration == null )
- ? null
- : registration.getReference();
- }
-
- /**
- * Returns a copy of the list containing the <tt>AccoudID</tt>s of all
- * accounts currently registered in this protocol provider.
- *
- * @return a copy of the list containing the <tt>AccoudID</tt>s of all
- * accounts currently registered in this protocol provider.
- */
- public ArrayList getRegisteredAccounts()
- {
- return new ArrayList(registeredAccounts.keySet());
- }
-
- /**
- * Loads (and hence installs) all accounts previously stored in the
- * configuration service.
- */
- public void loadStoredAccounts()
- {
- super.loadStoredAccounts(DictActivator.getBundleContext());
- }
-
-
- /**
- * Initializaed and creates an account corresponding to the specified
- * accountProperties and registers the resulting ProtocolProvider in the
- * <tt>context</tt> BundleContext parameter.
- *
- * @param userIDStr tha/a user identifier uniquely representing the newly
- * created account within the protocol namespace.
- * @param accountProperties a set of protocol (or implementation)
- * specific properties defining the new account.
- * @return the AccountID of the newly created account.
- */
- public AccountID installAccount( String userIDStr,
- Map accountProperties)
- {
- BundleContext context = DictActivator.getBundleContext();
- if (context == null)
- {
- throw new NullPointerException("The specified BundleContext was null");
- }
- if (userIDStr == null)
- {
- throw new NullPointerException("The specified AccountID was null");
- }
- if (accountProperties == null)
- {
- throw new NullPointerException("The specified property map was null");
- }
-
- accountProperties.put(USER_ID, userIDStr);
-
- AccountID accountID = new DictAccountID(userIDStr, accountProperties);
-
- //make sure we haven't seen this account id before.
- if (registeredAccounts.containsKey(accountID))
- {
- throw new IllegalStateException("An account for id " + userIDStr + " was already installed!");
- }
-
- //first store the account and only then load it as the load generates
- //an osgi event, the osgi event triggers (through the UI) a call to the
- //ProtocolProviderService.register() method and it needs to acces
- //the configuration service and check for a stored password.
- this.storeAccount(DictActivator.getBundleContext(), accountID);
-
- accountID = loadAccount(accountProperties);
-
- // Creates the dict contact group
- this.createGroup();
-
- return accountID;
- }
-
- /**
- * Initializes and creates an account corresponding to the specified
- * accountProperties and registers the resulting ProtocolProvider in the
- * <tt>context</tt> BundleContext parameter.
- *
- * @param accountProperties a set of protocol (or implementation)
- * specific properties defining the new account.
- * @return the AccountID of the newly loaded account
- */
- public AccountID loadAccount(Map accountProperties)
- {
- //BundleContext context = DictActivator.getBundleContext();
-
- if(bundleContext == null)
- {
- throw new NullPointerException("The specified BundleContext was null");
- }
-
- String userIDStr = (String) accountProperties.get(USER_ID);
-
- AccountID accountID = new DictAccountID(userIDStr, accountProperties);
-
- //get a reference to the configuration service and register whatever
- //properties we have in it.
-
- Hashtable properties = new Hashtable();
- properties.put(PROTOCOL, ProtocolNames.DICT);
- properties.put(USER_ID, userIDStr);
-
- ProtocolProviderServiceDictImpl dictProtocolProvider
- = new ProtocolProviderServiceDictImpl();
-
- dictProtocolProvider.initialize(userIDStr, accountID);
-
- ServiceRegistration registration
- = bundleContext.registerService( ProtocolProviderService.class.getName(),
- dictProtocolProvider,
- properties);
-
- registeredAccounts.put(accountID, registration);
- return accountID;
- }
-
-
- /**
- * Removes the specified account from the list of accounts that this
- * provider factory is handling.
- *
- * @param accountID the ID of the account to remove.
- * @return true if an account with the specified ID existed and was
- * removed and false otherwise.
- */
- public boolean uninstallAccount(AccountID accountID)
- {
- //unregister the protocol provider
- ServiceReference serRef = getProviderForAccount(accountID);
-
- ProtocolProviderService protocolProvider
- = (ProtocolProviderService) DictActivator.getBundleContext()
- .getService(serRef);
-
- try
- {
- protocolProvider.unregister();
- }
- catch (OperationFailedException exc)
- {
- logger.error("Failed to unregister protocol provider for account : "
- + accountID + " caused by : " + exc);
- }
-
- ServiceRegistration registration
- = (ServiceRegistration) registeredAccounts.remove(accountID);
-
- if(registration == null)
- {
- return false;
- }
-
- //kill the service
- registration.unregister();
-
- registeredAccounts.remove(accountID);
-
- return removeStoredAccount(DictActivator.getBundleContext(), accountID);
- }
-
- /**
- * Saves the password for the specified account after scrambling it a bit
- * so that it is not visible from first sight (Method remains highly
- * insecure).
- *
- * @param accountID the AccountID for the account whose password we're
- * storing.
- * @param passwd the password itself.
- *
- * @throws java.lang.IllegalArgumentException if no account corresponding
- * to <tt>accountID</tt> has been previously stored.
- */
- public void storePassword(AccountID accountID, String passwd)
- throws IllegalArgumentException
- {
- super.storePassword(DictActivator.getBundleContext(),
- accountID,
- passwd);
- }
-
- /**
- * Returns the password last saved for the specified account.
- *
- * @param accountID the AccountID for the account whose password we're
- * looking for..
- *
- * @return a String containing the password for the specified accountID.
- *
- * @throws java.lang.IllegalArgumentException if no account corresponding
- * to <tt>accountID</tt> has been previously stored.
- */
- public String loadPassword(AccountID accountID)
- throws IllegalArgumentException
- {
- return super.loadPassword(DictActivator.getBundleContext(), accountID );
- }
-
- /**
- * Prepares the factory for bundle shutdown.
- */
- public void stop()
- {
- Enumeration registrations = this.registeredAccounts.elements();
-
- while(registrations.hasMoreElements())
- {
- ServiceRegistration reg
- = ((ServiceRegistration)registrations.nextElement());
-
- reg.unregister();
- }
-
- Enumeration idEnum = registeredAccounts.keys();
-
- while(idEnum.hasMoreElements())
- {
- registeredAccounts.remove(idEnum.nextElement());
- }
- }
-
- /**
- * Creates a group for the dict contacts
- */
- private void createGroup()
- {
- // Get MetaContactListService
- ServiceReference mfcServiceRef = bundleContext
- .getServiceReference(MetaContactListService.class.getName());
-
- MetaContactListService mcl = (MetaContactListService)
- bundleContext.getService(mfcServiceRef);
-
- try
- {
- mcl.createMetaContactGroup(mcl.getRoot(), groupName);
- }
- catch (MetaContactListException ex)
- {
- int errorCode = ex.getErrorCode();
- if (errorCode != MetaContactListException.CODE_GROUP_ALREADY_EXISTS_ERROR)
- {
- logger.error(ex);
- }
- }
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/ProtocolProviderServiceDictImpl.java b/src/net/java/sip/communicator/impl/protocol/dict/ProtocolProviderServiceDictImpl.java
deleted file mode 100644
index c60e8e5..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/ProtocolProviderServiceDictImpl.java
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package net.java.sip.communicator.impl.protocol.dict;
-
-import java.util.*;
-
-import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.service.protocol.event.*;
-import net.java.sip.communicator.service.version.*;
-import net.java.sip.communicator.util.*;
-
-import org.osgi.framework.*;
-
-/**
- * A Dict implementation of the ProtocolProviderService.
- *
- * @author ROTH Damien
- * @author LITZELMANN Cédric
- */
-public class ProtocolProviderServiceDictImpl
- implements ProtocolProviderService
-{
- private static final Logger logger
- = Logger.getLogger(ProtocolProviderServiceDictImpl.class);
-
- /**
- * The name of this protocol.
- */
- public static final String DICT_PROTOCOL_NAME = "Dict";
-
- /**
- * The id of the account that this protocol provider represents.
- */
- private AccountID accountID = null;
-
- /**
- * We use this to lock access to initialization.
- */
- private Object initializationLock = new Object();
-
- /**
- * The hashtable with the operation sets that we support locally.
- */
- private Hashtable supportedOperationSets = new Hashtable();
-
- /**
- * A list of listeners interested in changes in our registration state.
- */
- private Vector registrationStateListeners = new Vector();
-
- /**
- * Indicates whether or not the provider is initialized and ready for use.
- */
- private boolean isInitialized = false;
-
- /**
- * The logo corresponding to the gibberish protocol.
- */
- private ProtocolIconDictImpl dictIcon = new ProtocolIconDictImpl();
-
- /**
- * The registration state that we are currently in. Note that in a real
- * world protocol implementation this field won't exist and the registration
- * state would be retrieved from the protocol stack.
- */
- private RegistrationState currentRegistrationState
- = RegistrationState.UNREGISTERED;
-
- /**
- * The default constructor for the Dict protocol provider.
- */
- public ProtocolProviderServiceDictImpl()
- {
- logger.trace("Creating a Dict provider.");
- }
-
- /**
- * Initializes the service implementation, and puts it in a sate where it
- * could interoperate with other services. It is strongly recomended that
- * properties in this Map be mapped to property names as specified by
- * <tt>AccountProperties</tt>.
- *
- * @param userID the user id of the gibberish account we're currently
- * initializing
- * @param accountID the identifier of the account that this protocol
- * provider represents.
- *
- * @see net.java.sip.communicator.service.protocol.AccountID
- */
- protected void initialize(String userID,
- AccountID accountID)
- {
- synchronized(initializationLock)
- {
- this.accountID = accountID;
-
- //initialize the presence operationset
- OperationSetPersistentPresenceDictImpl persistentPresence =
- new OperationSetPersistentPresenceDictImpl(this);
-
- supportedOperationSets.put(
- OperationSetPersistentPresence.class.getName(),
- persistentPresence);
-
-
- //register it once again for those that simply need presence and
- //won't be smart enough to check for a persistent presence
- //alternative
- supportedOperationSets.put( OperationSetPresence.class.getName(),
- persistentPresence);
-
- //initialize the IM operation set
- OperationSetBasicInstantMessagingDictImpl basicInstantMessaging
- = new OperationSetBasicInstantMessagingDictImpl(
- this
- , (OperationSetPersistentPresenceDictImpl)
- persistentPresence);
-
- supportedOperationSets.put(
- OperationSetBasicInstantMessaging.class.getName(),
- basicInstantMessaging);
-
- //initialize the typing notifications operation set
- /*OperationSetTypingNotifications typingNotifications =
- new OperationSetTypingNotificationsDictImpl(
- this, persistentPresence);
-
- supportedOperationSets.put(
- OperationSetTypingNotifications.class.getName(),
- typingNotifications);
- */
- isInitialized = true;
- }
- }
-
- /**
- * Registers the specified listener with this provider so that it would
- * receive notifications on changes of its state or other properties such
- * as its local address and display name.
- *
- * @param listener the listener to register.
- */
- public void addRegistrationStateChangeListener(
- RegistrationStateChangeListener listener)
- {
- synchronized(registrationStateListeners)
- {
- if (!registrationStateListeners.contains(listener))
- registrationStateListeners.add(listener);
- }
-
- }
-
- /**
- * Removes the specified registration listener so that it won't receive
- * further notifications when our registration state changes.
- *
- * @param listener the listener to remove.
- */
- public void removeRegistrationStateChangeListener(
- RegistrationStateChangeListener listener)
- {
- synchronized(registrationStateListeners)
- {
- registrationStateListeners.remove(listener);
- }
- }
-
- /**
- * Creates a <tt>RegistrationStateChangeEvent</tt> corresponding to the
- * specified old and new states and notifies all currently registered
- * listeners.
- *
- * @param oldState the state that the provider had before the change
- * occurred
- * @param newState the state that the provider is currently in.
- * @param reasonCode a value corresponding to one of the REASON_XXX fields
- * of the RegistrationStateChangeEvent class, indicating the reason for
- * this state transition.
- * @param reason a String further explaining the reason code or null if
- * no such explanation is necessary.
- */
- private void fireRegistrationStateChanged( RegistrationState oldState,
- RegistrationState newState,
- int reasonCode,
- String reason)
- {
- RegistrationStateChangeEvent event =
- new RegistrationStateChangeEvent(
- this, oldState, newState, reasonCode, reason);
-
- logger.debug("Dispatching " + event + " to "
- + registrationStateListeners.size()+ " listeners.");
-
- Iterator listeners = null;
- synchronized (registrationStateListeners)
- {
- listeners = new ArrayList(registrationStateListeners).iterator();
- }
-
- while (listeners.hasNext())
- {
- RegistrationStateChangeListener listener
- = (RegistrationStateChangeListener) listeners.next();
-
- listener.registrationStateChanged(event);
- }
-
- logger.trace("Done.");
- }
-
- /**
- * Retrieve the DictAdapter linked with the account. If there is no instance, one is created
- * @return a DictAdapter instance
- */
- public DictAdapter getDictAdapter()
- {
- String host = (String) this.accountID.getAccountProperties()
- .get(ProtocolProviderFactory.SERVER_ADDRESS);
- int port = Integer.parseInt((String) this.accountID.getAccountProperties()
- .get(ProtocolProviderFactory.SERVER_PORT));
- String strategy = (String) this.accountID.getAccountProperties()
- .get(ProtocolProviderFactory.STRATEGY);
-
- String key = this.accountID.getUserID();
- DictAdapter result = DictRegistry.get(key);
-
- if (!(result instanceof DictAdapter))
- {
- result = new DictAdapter(host, port, strategy);
-
-
- // Set the clientname from the current version
- BundleContext bundleContext = DictActivator.getBundleContext();
- ServiceReference versionServRef = bundleContext
- .getServiceReference(VersionService.class.getName());
-
- VersionService versionService = (VersionService) bundleContext
- .getService(versionServRef);
-
- result.setClientName(versionService.getCurrentVersion().toString());
-
- // Store the DictAdapter
- DictRegistry.put(key, result);
- }
-
- return result;
- }
-
- /**
- * Close the DictAdapter linked with the account ID
- */
- public void closeDictAdapter()
- {
- String key = this.accountID.getUserID();
- DictAdapter result = DictRegistry.get(key);
-
- if ((result instanceof DictAdapter))
- {
- try
- {
- result.close();
- DictRegistry.remove(key);
- }
- catch (Exception ex)
- {
- logger.error(ex);
- }
- }
- }
-
- /**
- * Returns the AccountID that uniquely identifies the account represented
- * by this instance of the ProtocolProviderService.
- *
- * @return the id of the account represented by this provider.
- */
- public AccountID getAccountID()
- {
- return accountID;
- }
-
- /**
- * Returns the operation set corresponding to the specified class or null
- * if this operation set is not supported by the provider implementation.
- *
- * @param opsetClass the <tt>Class</tt> of the operation set that we're
- * looking for.
- * @return returns an OperationSet of the specified <tt>Class</tt> if
- * the undelying implementation supports it or null otherwise.
- */
- public OperationSet getOperationSet(Class opsetClass)
- {
- return (OperationSet) getSupportedOperationSets()
- .get(opsetClass.getName());
- }
-
- /**
- * Returns the short name of the protocol that the implementation of this
- * provider is based upon (like SIP, Jabber, ICQ/AIM, or others for
- * example).
- *
- * @return a String containing the short name of the protocol this
- * service is implementing (most often that would be a name in
- * ProtocolNames).
- */
- public String getProtocolName()
- {
- return DICT_PROTOCOL_NAME;
- }
-
- /**
- * Returns the protocol display name. This is the name that would be used
- * by the GUI to display the protocol name.
- *
- * @return a String containing the display name of the protocol this service
- * is implementing
- */
- public String getProtocolDisplayName()
- {
- return DICT_PROTOCOL_NAME;
- }
-
- /**
- * Returns the dict protocol icon.
- * @return the dict protocol icon
- */
- public ProtocolIcon getProtocolIcon()
- {
- return this.dictIcon;
- }
-
- /**
- * Returns the state of the registration of this protocol provider with
- * the corresponding registration service.
- *
- * @return ProviderRegistrationState
- */
- public RegistrationState getRegistrationState()
- {
- return currentRegistrationState;
- }
-
- /**
- * Returns an array containing all operation sets supported by the
- * current implementation.
- *
- * @return a java.util.Map containing instance of all supported
- * operation sets mapped against their class names (e.g.
- * OperationSetPresence.class.getName()) .
- */
- public Map getSupportedOperationSets()
- {
- //Copy the map so that the caller is not able to modify it.
- return (Map)supportedOperationSets.clone();
- }
-
- /**
- * Indicates whether or not this provider is registered
- *
- * @return true if the provider is currently registered and false
- * otherwise.
- */
- public boolean isRegistered()
- {
- return currentRegistrationState.equals(RegistrationState.REGISTERED);
- }
-
- /**
- * Starts the registration process.
- *
- * @param authority the security authority that will be used for
- * resolving any security challenges that may be returned during the
- * registration or at any moment while wer're registered.
- * @throws OperationFailedException with the corresponding code it the
- * registration fails for some reason (e.g. a networking error or an
- * implementation problem).
- */
- public void register(SecurityAuthority authority)
- throws OperationFailedException
- {
- RegistrationState oldState = currentRegistrationState;
- currentRegistrationState = RegistrationState.REGISTERED;
-
- fireRegistrationStateChanged(
- oldState
- , currentRegistrationState
- , RegistrationStateChangeEvent.REASON_USER_REQUEST
- , null);
- }
-
- /**
- * Makes the service implementation close all open sockets and release
- * any resources that it might have taken and prepare for
- * shutdown/garbage collection.
- */
- public void shutdown()
- {
- if(!isInitialized)
- {
- return;
- }
- logger.trace("Killing the Dict Protocol Provider for account "
- + this.accountID.getUserID());
- this.closeDictAdapter();
-
- if(isRegistered())
- {
- try
- {
- //do the unregistration
- unregister();
- }
- catch (OperationFailedException ex)
- {
- //we're shutting down so we need to silence the exception here
- logger.error(
- "Failed to properly unregister before shutting down. "
- + getAccountID()
- , ex);
- }
- }
-
- isInitialized = false;
- }
-
- /**
- * Ends the registration of this protocol provider with the current
- * registration service.
- *
- * @throws OperationFailedException with the corresponding code it the
- * registration fails for some reason (e.g. a networking error or an
- * implementation problem).
- */
- public void unregister()
- throws OperationFailedException
- {
- RegistrationState oldState = currentRegistrationState;
- currentRegistrationState = RegistrationState.UNREGISTERED;
-
- fireRegistrationStateChanged(
- oldState
- , currentRegistrationState
- , RegistrationStateChangeEvent.REASON_USER_REQUEST
- , null);
- }
-}
diff --git a/src/net/java/sip/communicator/impl/protocol/dict/dict.provider.manifest.mf b/src/net/java/sip/communicator/impl/protocol/dict/dict.provider.manifest.mf
deleted file mode 100644
index ff0b0d2..0000000
--- a/src/net/java/sip/communicator/impl/protocol/dict/dict.provider.manifest.mf
+++ /dev/null
@@ -1,13 +0,0 @@
-Bundle-Activator: net.java.sip.communicator.impl.protocol.dict.DictActivator
-Bundle-Name: Dict Protocol Provider
-Bundle-Description: A bundle providing support for the Dict protocol.
-Bundle-Vendor: sip-communicator.org
-Bundle-Version: 0.0.1
-Import-Package: org.osgi.framework,
- net.java.sip.communicator.service.contactlist,
- net.java.sip.communicator.service.configuration,
- net.java.sip.communicator.service.configuration.event,
- net.java.sip.communicator.util,
- net.java.sip.communicator.service.protocol,
- net.java.sip.communicator.service.protocol.event,
- net.java.sip.communicator.service.version