Home | History | Annotate | Download | only in contacts
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_CHROMEOS_CONTACTS_CONTACT_STORE_H_
      6 #define CHROME_BROWSER_CHROMEOS_CONTACTS_CONTACT_STORE_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 
     13 class Profile;
     14 
     15 namespace contacts {
     16 
     17 class Contact;
     18 typedef std::vector<const Contact*> ContactPointers;
     19 class ContactStoreObserver;
     20 
     21 // Interface for classes that store contacts from a particular source.
     22 class ContactStore {
     23  public:
     24   ContactStore() {}
     25   virtual ~ContactStore() {}
     26 
     27   // Initializes the object.
     28   virtual void Init() = 0;
     29 
     30   // Appends all (non-deleted) contacts to |contacts_out|.
     31   virtual void AppendContacts(ContactPointers* contacts_out) = 0;
     32 
     33   // Returns the contact identified by |contact_id|.
     34   // NULL is returned if the contact doesn't exist.
     35   virtual const Contact* GetContactById(const std::string& contact_id) = 0;
     36 
     37   // Adds or removes an observer.
     38   virtual void AddObserver(ContactStoreObserver* observer) = 0;
     39   virtual void RemoveObserver(ContactStoreObserver* observer) = 0;
     40 
     41  private:
     42   DISALLOW_COPY_AND_ASSIGN(ContactStore);
     43 };
     44 
     45 // Interface for factories that return ContactStore objects of a given type.
     46 class ContactStoreFactory {
     47  public:
     48   ContactStoreFactory() {}
     49   virtual ~ContactStoreFactory() {}
     50 
     51   // Does |profile| support this type of ContactStore?
     52   virtual bool CanCreateContactStoreForProfile(Profile* profile) = 0;
     53 
     54   // Creates and returns a new, uninitialized ContactStore for |profile|.
     55   // CanCreateContactStoreForProfile() should be called first.
     56   // TODO(derat): Figure out how this should work if/when there are other
     57   // ContactStore implementations that need additional information beyond the
     58   // stuff contained in a Profile.
     59   virtual ContactStore* CreateContactStore(Profile* profile) = 0;
     60 
     61  private:
     62   DISALLOW_COPY_AND_ASSIGN(ContactStoreFactory);
     63 };
     64 
     65 }  // namespace contacts
     66 
     67 #endif  // CHROME_BROWSER_CHROMEOS_CONTACTS_CONTACT_STORE_H_
     68