epoc32/include/app/MVPbkContactStore.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     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