epoc32/include/app/MVPbkContactStore.h
branchSymbian3
changeset 4 837f303aceeb
equal deleted inserted replaced
3:e1b950c65cb4 4:837f303aceeb
       
     1 /*
       
     2 * Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Virtual Phonebook contact store interface.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #ifndef MVPBKCONTACTSTORE_H
       
    20 #define MVPBKCONTACTSTORE_H
       
    21 
       
    22 // INCLUDES
       
    23 #include <e32def.h>
       
    24 #include <mvpbkobjecthierarchy.h>
       
    25 #include <mvpbkcontactoperationfactory.h>
       
    26 
       
    27 // FORWARD DECLARATIONS
       
    28 class CVPbkContactViewDefinition;
       
    29 class MVPbkContactStoreObserver;
       
    30 class MVPbkContactStoreProperties;
       
    31 class MVPbkStoreContact;
       
    32 class MVPbkContactGroup;
       
    33 class MVPbkContactView;
       
    34 class MVPbkContactLink;
       
    35 class MVPbkFieldTypeList;
       
    36 class MVPbkContactViewObserver;
       
    37 class MVPbkContactStoreInfo;
       
    38 class MVPbkSingleContactLinkOperationObserver;
       
    39 class MVPbkContactOperationBase;
       
    40 
       
    41 //Use this UID to access contact store extension 2. Used as a parameter to ContactStoreExtension() method.
       
    42 const TUid KMVPbkContactStoreExtension2Uid = { 2 };
       
    43 
       
    44 // CLASS DECLARATIONS
       
    45 
       
    46 /**
       
    47  * A contact store interface that is implemented by all contact stores.
       
    48  *
       
    49  * Using this interface clients can access a single contact store. Usually
       
    50  * it's more suitable to use CVPbkContactManager and MVPbkContactStoreList
       
    51  * for accessing stores because multiple stores can be handled at a same
       
    52  * time.
       
    53  *
       
    54  * The store is opened asynchronously and it must not be used before
       
    55  * notification has arrived. If client opens the store it must also
       
    56  * close the store after usage.
       
    57  *
       
    58  * The interface can be used for retriveing properties and information
       
    59  * of the store and also for creating a view, a new contact or a
       
    60  * new group (if supported).
       
    61  *
       
    62  */
       
    63 class MVPbkContactStore :
       
    64         public MVPbkObjectHierarchy,
       
    65         public MVPbkContactOperationFactory
       
    66     {
       
    67     public:  // Destructor
       
    68 
       
    69         /**
       
    70          * Clients don't destroy the stores directly because they don't
       
    71          * own them. The ownerships are managed by CVPbkContactManager.
       
    72          */
       
    73         virtual ~MVPbkContactStore() { }
       
    74 
       
    75     public:  // New functions
       
    76         /**
       
    77          * Returns fixed properties of this contact store.
       
    78          *
       
    79          * Fixed properties do not change when the store is open.
       
    80          * The store must be opened before retrieving the properties.
       
    81          *
       
    82          * @return Store properties.
       
    83          */
       
    84         virtual const MVPbkContactStoreProperties& StoreProperties() const = 0;
       
    85 
       
    86         /**
       
    87          * Opens this contact store asynchronously.
       
    88          *
       
    89          * Calls back the observer when the opening completes. Notice
       
    90          * that the same store instance can be opened by several observers.
       
    91          *
       
    92          * @param aObserver An observer for the store.
       
    93          * @exception KErrInUse If another asynchronous operation
       
    94          *            is already in progress.
       
    95          */
       
    96         virtual void OpenL(
       
    97                 MVPbkContactStoreObserver& aObserver ) = 0;
       
    98 
       
    99         /**
       
   100          * Replaces an existing store and opens it asynchronously.
       
   101          *
       
   102          * E.g. If the database is a file then this replaces the database if
       
   103          * it's not locked by other clients. If the store
       
   104          * implementation can not implment replacing then this behaves
       
   105          * like OpenL.
       
   106          *
       
   107          * If the store does not exist, it is created if possible.
       
   108          * Calls back the observer when the opening completes.
       
   109          *
       
   110          * @param aObserver An observer for the store.
       
   111          */
       
   112         virtual void ReplaceL(
       
   113                 MVPbkContactStoreObserver& aObserver ) = 0;
       
   114 
       
   115         /**
       
   116          * Closes this contact store from a single observer.
       
   117          *
       
   118          * This can be always called safely even if OpenL or ReplaceL
       
   119          * hasn't been called.
       
   120          * If the client calls OpenL it must also call this after usage,
       
   121          * The observer will no longer receive events from this store.
       
   122          * If there are other observers for the store then the store
       
   123          * will remain open for them.
       
   124          *
       
   125          * @param aObserver An observer that was given in OpenL or ReplaceL.
       
   126          */
       
   127         virtual void Close(
       
   128                 MVPbkContactStoreObserver& aObserver ) = 0;
       
   129 
       
   130         /**
       
   131          * Creates a new contact associated to this store.
       
   132          *
       
   133          * The contact can be edited and then it must be committed by
       
   134          * calling MVPbkStoreContact::CommitL for actually saving
       
   135          * it to the store.
       
   136          *
       
   137          * @return A new contact associated to this store. Caller takes
       
   138          *         ownership of the returned contact.
       
   139          * @see MVPbkStoreContact
       
   140          * @see MVPbkStoreContact::CommitL
       
   141          */
       
   142         virtual MVPbkStoreContact* CreateNewContactLC() = 0;
       
   143 
       
   144         /**
       
   145          * Creates a new contact group associated to this store.
       
   146          *
       
   147          * MVPbkContactStoreProperties::SupportsContactGroups must be
       
   148          * true if this is used.
       
   149          * The contact group might be saved to the store immeadiately
       
   150          * depending on the store implementation.
       
   151          * It is left open for editing. Use CommitL to commit
       
   152          * the creation of the group and its content.
       
   153          *
       
   154          * @return A new contact group associated to this store. Caller takes
       
   155          *         the ownership of the returned contact group.
       
   156          * @exception KErrNotSupported if the store doesn't support groups.
       
   157          *              Client should check store properties before
       
   158          *              calling this.
       
   159          * @see MVPbkContactStoreProperties
       
   160          * @see MVPbkContactGroup
       
   161          * @see MVPbkStoreContact
       
   162          * @see MVPbkStoreContact::CommitL
       
   163          */
       
   164         virtual MVPbkContactGroup* CreateNewContactGroupLC() = 0;
       
   165 
       
   166         /**
       
   167          * Creates a new contact view from the store asynchronously.
       
   168          *
       
   169          * Client gets the ownership of the view. The content of
       
   170          * the view depends on the CVPbkContactViewDefinition. The
       
   171          * client must wait the observer event before using the view.
       
   172          *
       
   173          * @param aViewDefinition Defines the properties of the new view.
       
   174          * @param aObserver An observer for the view events.
       
   175          * @param aSortOrder Field types that are used in the view contact
       
   176          *                   in the same order as in this list. Notice that
       
   177          *                   stores may not support all possible field types
       
   178          *                   in a view contact. The implementation
       
   179          *                   of the view contact must have as many fields as
       
   180          *                   the sort order. If the store doesn't support the
       
   181          *                   field type in a view contact then it sets empty
       
   182          *                   data to the field.
       
   183          * @return  A new contact view object. Caller takes ownership of the
       
   184          *          returned contact.
       
   185          * @see MVPbkContactView
       
   186          * @see CVPbkContactViewDefinition
       
   187          */
       
   188         virtual MVPbkContactView* CreateViewLC(
       
   189                 const CVPbkContactViewDefinition& aViewDefinition,
       
   190                 MVPbkContactViewObserver& aObserver,
       
   191                 const MVPbkFieldTypeList& aSortOrder ) = 0;
       
   192 
       
   193         /**
       
   194          * Returns contact groups contained in this store.
       
   195          *
       
   196          * MVPbkContactStoreProperties::SupportsContactGroups must be
       
   197          * true if this is used. Implementation should return an empty
       
   198          * link array and not NULL.
       
   199          *
       
   200          * @return Contact group identifiers contained in this store.
       
   201          */
       
   202         virtual MVPbkContactLinkArray* ContactGroupsLC() const = 0;
       
   203 
       
   204         /**
       
   205          * Returns a contact store information. Information can vary
       
   206          * runtime.
       
   207          *
       
   208          * @return Contact store information.
       
   209          */
       
   210         virtual const MVPbkContactStoreInfo& StoreInfo() const = 0;
       
   211 
       
   212         /**
       
   213          * This is part of Virtual Phonebook internal framefork and not
       
   214          * usable for clients. Clients use CVPbkContactManager
       
   215          * for creating links from a stream.
       
   216          *
       
   217          * Creates a link array from a stream. Stream contains the internals
       
   218          * of the contact link. Internals are the contact store implementation
       
   219          * specific part of the package format.
       
   220          *
       
   221          * NOTE: this must work wheter the OpenL has been called or not. This
       
   222          *       means that a link can not contain any data that would need
       
   223          *       an open store before internalizing.
       
   224          *
       
   225          * @param aStream A stream containing the link internals.
       
   226          * @return A new contact link.
       
   227          * @internal
       
   228          */
       
   229         virtual MVPbkContactLink* CreateLinkFromInternalsLC(
       
   230                 RReadStream& aStream ) const = 0;
       
   231 
       
   232         /**
       
   233          * Returns an extension point for this interface or NULL.
       
   234          *
       
   235          * @param aExtensionUid no extensions defined currently.
       
   236          * @return an extension point for this interface or NULL.
       
   237          */
       
   238         virtual TAny* ContactStoreExtension(TUid /*aExtensionUid*/)
       
   239                 { return NULL; }
       
   240 
       
   241     public: // From MVPbkObjectHierarchy
       
   242 
       
   243         MVPbkObjectHierarchy& ParentObject() const
       
   244             {
       
   245             return const_cast<MVPbkObjectHierarchy&>
       
   246                 ( static_cast<const MVPbkObjectHierarchy&>( *this ) );
       
   247             }
       
   248         MVPbkContactStore& ContactStore() const
       
   249             {
       
   250             return const_cast<MVPbkContactStore&>( *this );
       
   251             }
       
   252 
       
   253     };
       
   254 
       
   255 #endif // MVPBKCONTACTSTORE_H
       
   256 
       
   257 // End of File