ContactList.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:6k
源码类别:

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2007-2008 Esmertec AG.
  3.  * Copyright (C) 2007-2008 The Android Open Source Project
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package com.android.im.engine;
  18. import java.util.ArrayList;
  19. import java.util.Collection;
  20. import java.util.HashMap;
  21. public class ContactList extends ImEntity {
  22.     protected Address mAddress;
  23.     protected String mName;
  24.     protected boolean mDefault;
  25.     protected ContactListManager mManager;
  26.     private HashMap<String, Contact> mContactsCache;
  27.     public ContactList(Address address, String name, boolean isDefault,
  28.             Collection<Contact> contacts, ContactListManager manager) {
  29.         mAddress = address;
  30.         mDefault = isDefault;
  31.         mName = name;
  32.         mManager = manager;
  33.         mContactsCache = new HashMap<String, Contact>();
  34.         if (contacts != null) {
  35.             for (Contact c : contacts) {
  36.                 mContactsCache.put(manager.normalizeAddress(c.getAddress().getFullName()), c);
  37.             }
  38.         }
  39.     }
  40.     @Override
  41.     public Address getAddress() {
  42.         return mAddress;
  43.     }
  44.     public String getName() {
  45.         return mName;
  46.     }
  47.     public void setName(String name) {
  48.         if (null == name) {
  49.             throw new NullPointerException();
  50.         }
  51.         mManager.setListNameAsync(name, this);
  52.     }
  53.     public void setDefault(boolean isDefault) {
  54.         this.mDefault = isDefault;
  55.     }
  56.     public boolean isDefault() {
  57.         return mDefault;
  58.     }
  59.     /**
  60.      * Add a contact to the list. The contact is specified by its address
  61.      * string.
  62.      *
  63.      * @param address
  64.      *            the address string specifies the contact.
  65.      * @throws IllegalArgumentException
  66.      *             if the address is invalid.
  67.      * @throws NullPointerException
  68.      *             if the address string is null
  69.      * @throws ImException
  70.      *             if the contact is not allowed to be added
  71.      */
  72.     public void addContact(String address) throws ImException {
  73.         address = mManager.normalizeAddress(address);
  74.         if (null == address) {
  75.             throw new NullPointerException();
  76.         }
  77.         if (mManager.isBlocked(address)) {
  78.             throw new ImException(ImErrorInfo.CANT_ADD_BLOCKED_CONTACT,
  79.                     "Contact has been blocked");
  80.         }
  81.         if(containsContact(address)){
  82.             throw new ImException(ImErrorInfo.CONTACT_EXISTS_IN_LIST,
  83.                     "Contact already exists in the list");
  84.         }
  85.         mManager.addContactToListAsync(address, this);
  86.     }
  87.     /**
  88.      * Remove a contact from the list. If the contact is not in the list,
  89.      * nothing will happen. Otherwise, the contact will be removed from
  90.      * the list on the server asynchronously.
  91.      *
  92.      * @param address
  93.      *            the address of the contact to be removed from the list
  94.      * @throws NullPointerException
  95.      *             If the address is null
  96.      */
  97.     public void removeContact(Address address) throws ImException {
  98.         if(address == null) {
  99.             throw new NullPointerException();
  100.         }
  101.         Contact c = getContact(address);
  102.         if(c != null) {
  103.             removeContact(c);
  104.         }
  105.     }
  106.     /**
  107.      * Remove a contact from the list. If the contact is not in the list,
  108.      * nothing will happen. Otherwise, the contact will be removed from
  109.      * the list on the server asynchronously.
  110.      *
  111.      * @param contact
  112.      *            the contact to be removed from the list
  113.      * @throws NullPointerException
  114.      *             If the contact is null
  115.      */
  116.     public void removeContact(Contact contact) throws ImException {
  117.         if(contact == null) {
  118.             throw new NullPointerException();
  119.         }
  120.         if(containsContact(contact)) {
  121.             mManager.removeContactFromListAsync(contact, this);
  122.         }
  123.     }
  124.     public synchronized Contact getContact(Address address) {
  125.         return mContactsCache.get(mManager.normalizeAddress(address.getFullName()));
  126.     }
  127.     public synchronized Contact getContact(String address) {
  128.         return mContactsCache.get(mManager.normalizeAddress(address));
  129.     }
  130.     public synchronized int getContactsCount() {
  131.         return mContactsCache.size();
  132.     }
  133.     public synchronized Collection<Contact> getContacts() {
  134.         return new ArrayList<Contact>(mContactsCache.values());
  135.     }
  136.     public synchronized boolean containsContact(String address) {
  137.         return mContactsCache.containsKey(mManager.normalizeAddress(address));
  138.     }
  139.     public synchronized boolean containsContact(Address address) {
  140.         return address == null ? false
  141.                 : mContactsCache.containsKey(mManager.normalizeAddress(address.getFullName()));
  142.     }
  143.     public synchronized boolean containsContact(Contact c) {
  144.         return c == null ? false
  145.                 : mContactsCache.containsKey(mManager.normalizeAddress(c.getAddress().getFullName()));
  146.     }
  147.     protected void insertToCache(Contact contact) {
  148.         mContactsCache.put(mManager.normalizeAddress(contact.getAddress().getFullName()), contact);
  149.     }
  150.     protected void removeFromCache(Contact contact) {
  151.         mContactsCache.remove(mManager.normalizeAddress(contact.getAddress().getFullName()));
  152.     }
  153. }