PECengine/ListLibrary2/ContactListSrc/CPEngContactListTransBase.cpp
branchRCL_3
changeset 17 a941bc465d9f
parent 0 094583676ce7
equal deleted inserted replaced
16:6ca72c0fe49a 17:a941bc465d9f
       
     1 /*
       
     2 * Copyright (c) 2005 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:  Base class for contact list create and synchronize handlers
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include "CPEngContactListTransBase.h"
       
    21 #include "CPEngContactListSettings.h"
       
    22 #include "CPEngContactListModBase.h"
       
    23 
       
    24 #include "PEngListLibTools.h"
       
    25 #include "MPEngXMLSerializer.h"
       
    26 #include "MPEngXMLParser.h"
       
    27 
       
    28 #include "CPEngTransactionStatus.h"
       
    29 #include "PEngWVPresenceErrors2.h"
       
    30 #include "PresenceDebugPrint.h"
       
    31 
       
    32 
       
    33 // ============================ MEMBER FUNCTIONS ===============================
       
    34 
       
    35 // -----------------------------------------------------------------------------
       
    36 // CPEngContactListTransBase::CPEngContactListTransBase()
       
    37 // -----------------------------------------------------------------------------
       
    38 //
       
    39 CPEngContactListTransBase::CPEngContactListTransBase(
       
    40     CPEngContactListModBase& aContactList,
       
    41     CPEngSessionSlotId& aSessionSlotId,
       
    42     MPEngContactListTransactionManager& aManager,
       
    43     TPEngWVCspVersion& aCSPVersion,
       
    44     TInt aOperationId )
       
    45         : iContactList( aContactList ),
       
    46         iSessionSlotId( aSessionSlotId ),
       
    47         iManager( aManager ),
       
    48         iCSPVersion( aCSPVersion ),
       
    49         iOperationId( aOperationId )
       
    50     {
       
    51     iContactList.Open();                                // CSI: 65 #
       
    52     iContactList.Lock( EStorageLockLevelHigh );
       
    53     iContactList.BufferServerSideNotifications();
       
    54     }
       
    55 
       
    56 
       
    57 // -----------------------------------------------------------------------------
       
    58 // CPEngContactListTransBase::ConstructL()
       
    59 // -----------------------------------------------------------------------------
       
    60 //
       
    61 void CPEngContactListTransBase::ConstructL()
       
    62     {
       
    63     iTransactionStatus = CPEngTransactionStatus::NewL();
       
    64     }
       
    65 
       
    66 
       
    67 // Destructor
       
    68 CPEngContactListTransBase::~CPEngContactListTransBase()
       
    69     {
       
    70     delete iTransactionStatus;
       
    71 
       
    72     iContactList.ReleaseServerSideBuffering();
       
    73     iContactList.Unlock();
       
    74     iContactList.Close();
       
    75     }
       
    76 
       
    77 
       
    78 // -----------------------------------------------------------------------------
       
    79 // CPEngContactListTransBase::RequestL()
       
    80 // -----------------------------------------------------------------------------
       
    81 //
       
    82 void CPEngContactListTransBase::RequestL( TDes8& aSendBuffer )
       
    83     {
       
    84     aSendBuffer.Zero();
       
    85     MPEngXMLSerializer* xmlSerializer = CreateXmlSerializerL( aSendBuffer );
       
    86     CleanupClosePushL( *xmlSerializer );
       
    87 
       
    88     // <TransactionContent xmlns="http://www.wireless -village.org/TRC1.1">
       
    89     NListLibTools::AppendTransactionContentTagXmlL( *xmlSerializer, iCSPVersion );
       
    90 
       
    91     switch ( iContactListSyncState )
       
    92         {
       
    93         case EPEngCntListCreate:
       
    94             DoGetXMLCreateCntListL( *xmlSerializer );
       
    95             break;
       
    96 
       
    97         case EPEngCntListFetch:
       
    98             DoGetXMLFetchCntListL( *xmlSerializer );
       
    99             break;
       
   100 
       
   101         case EPEngSubscribeCntList:
       
   102             GetXMLSubscribeListL( *xmlSerializer );
       
   103             break;
       
   104 
       
   105         default:
       
   106             User::Leave( KErrNotSupported );
       
   107             break;
       
   108         }
       
   109 
       
   110 
       
   111     // end of transaction
       
   112     // </TransactionContent>
       
   113     xmlSerializer->EndTagL( KTransactionContent );
       
   114     CleanupStack::PopAndDestroy( ); // xmlSerializer
       
   115     }
       
   116 
       
   117 // -----------------------------------------------------------------------------
       
   118 // CPEngContactListTransBase::LastRunningTransactionHandler()
       
   119 // -----------------------------------------------------------------------------
       
   120 //
       
   121 void CPEngContactListTransBase::LastRunningTransactionHandler()
       
   122     {
       
   123     }
       
   124 
       
   125 
       
   126 // -----------------------------------------------------------------------------
       
   127 // CPEngContactListTransBase::OutgoingProcessResponseL()
       
   128 // -----------------------------------------------------------------------------
       
   129 //
       
   130 void CPEngContactListTransBase::ProcessResponseL( const TDesC8& aResponse,
       
   131                                                   TRequestStatus& /* aStatus */ )
       
   132     {
       
   133     MPEngXMLParser* XMLparser = CreateXMLParserLC();
       
   134 
       
   135     switch ( iContactListSyncState )
       
   136         {
       
   137         case EPEngCntListCreate:
       
   138             {
       
   139             DoParseCreateCntListResponseL( aResponse, *XMLparser );
       
   140             break;
       
   141             }
       
   142 
       
   143 
       
   144         case EPEngCntListFetch:
       
   145             {
       
   146             DoParseFetchCntListResponseL( aResponse, *XMLparser );
       
   147             break;
       
   148             }
       
   149 
       
   150 
       
   151         case EPEngSubscribeCntList:
       
   152             {
       
   153             ParseSubscribeListResponseL( aResponse, *XMLparser );
       
   154             break;
       
   155             }
       
   156 
       
   157 
       
   158         default:
       
   159             {
       
   160             User::Leave( KErrNotSupported );
       
   161             break;
       
   162             }
       
   163         }
       
   164     CleanupStack::PopAndDestroy(); // XMLparser
       
   165     }
       
   166 
       
   167 
       
   168 // -----------------------------------------------------------------------------
       
   169 // CPEngContactListTransBase::CancelProcessing()
       
   170 // -----------------------------------------------------------------------------
       
   171 //
       
   172 void CPEngContactListTransBase::CancelProcessing()
       
   173     {
       
   174     }
       
   175 
       
   176 
       
   177 // -----------------------------------------------------------------------------
       
   178 // CPEngContactListTransBase::NewTransactionHandlersL()
       
   179 // -----------------------------------------------------------------------------
       
   180 //
       
   181 void CPEngContactListTransBase::NewTransactionHandlersL(
       
   182     RPointerArray<MPEngOutgoingTransactionHandler>& /* aHandlers */ )
       
   183     {
       
   184     }
       
   185 
       
   186 // -----------------------------------------------------------------------------
       
   187 // CPEngContactListTransBase::TransactionCompleted()
       
   188 // -----------------------------------------------------------------------------
       
   189 //
       
   190 TBool CPEngContactListTransBase::TransactionCompleted()
       
   191     {
       
   192     return ( iContactListSyncState == EPEngTransactionCompleted );
       
   193     }
       
   194 
       
   195 
       
   196 // -----------------------------------------------------------------------------
       
   197 // CPEngContactListTransBase::TransactionResult()
       
   198 // -----------------------------------------------------------------------------
       
   199 //
       
   200 CPEngTransactionStatus* CPEngContactListTransBase::TransactionResult()
       
   201     {
       
   202     CPEngTransactionStatus* temp = iTransactionStatus;
       
   203     iTransactionStatus = NULL;
       
   204     return temp;
       
   205     }
       
   206 
       
   207 
       
   208 // -----------------------------------------------------------------------------
       
   209 // CPEngContactListTransBase::ReleaseHandler()
       
   210 // -----------------------------------------------------------------------------
       
   211 //
       
   212 void CPEngContactListTransBase::ReleaseHandler()
       
   213     {
       
   214     iContactListSyncState = EPEngTransactionCompleted;
       
   215     }
       
   216 
       
   217 
       
   218 // -----------------------------------------------------------------------------
       
   219 // CPEngContactListTransBase::CompleteCntListTransactionL()
       
   220 // -----------------------------------------------------------------------------
       
   221 //
       
   222 void CPEngContactListTransBase::CompleteCntListTransactionL()
       
   223     {
       
   224     iContactListSyncState = EPEngTransactionCompleted;
       
   225     iContactList.Settings().SetPropertyL( KPEngHasBeenSynchronized,
       
   226                                           KPEngCntLstPropertyNativeCached,
       
   227                                           ETrue );
       
   228     iContactList.Settings().SetPropertyL( KPEngListExistsOnServer,
       
   229                                           KPEngCntLstPropertyNativeCached,
       
   230                                           ETrue );
       
   231     }
       
   232 
       
   233 
       
   234 // -----------------------------------------------------------------------------
       
   235 // CPEngContactListTransBase::GetXMLSubscribeList()
       
   236 // -----------------------------------------------------------------------------
       
   237 //
       
   238 void CPEngContactListTransBase::GetXMLSubscribeListL(
       
   239     MPEngXMLSerializer& aXmlSerializer )
       
   240     {
       
   241     // <SubscribePresence-Request>
       
   242     aXmlSerializer.StartTagL( KSubscribePresence );
       
   243 
       
   244     NListLibTools::AppendContactListNameXmlL( aXmlSerializer,
       
   245                                               iContactList.Settings() );
       
   246 
       
   247 
       
   248     // append set of attributes which should be subscribed
       
   249     NListLibTools::AppendAttributesForSubscriptionXmlL(
       
   250         iContactList.Settings().SubscriptionAttributes(),
       
   251         aXmlSerializer,
       
   252         iSessionSlotId,
       
   253         iCSPVersion );
       
   254 
       
   255 
       
   256     // if server supports 1.2 CSP, use autosubscribe
       
   257     if ( iCSPVersion == EWVCspV12 )
       
   258         {
       
   259         // <AutoSubscribe>T</AutoSubscribe>
       
   260         aXmlSerializer.StartTagL( KAutoSubscribe ).
       
   261         NarrowTextL( KXMLValueTrue ).
       
   262         EndTagL( KAutoSubscribe );
       
   263         }
       
   264 
       
   265 
       
   266     // </SubscribePresence-Request>
       
   267     aXmlSerializer.EndTagL( KSubscribePresence );
       
   268 
       
   269 
       
   270     // register contacts to the Attribute library
       
   271     TPEngContactlistDesViewWraper contacts( iContactList );
       
   272     NListLibTools::ActivatePresenceAttributesL( contacts, iSessionSlotId );
       
   273     }
       
   274 
       
   275 
       
   276 // -----------------------------------------------------------------------------
       
   277 // CPEngContactListTransBase::ParseSubscribeListResponseL()
       
   278 // -----------------------------------------------------------------------------
       
   279 //
       
   280 void CPEngContactListTransBase::ParseSubscribeListResponseL(
       
   281     const TDesC8& aResponse,
       
   282     MPEngXMLParser& aXMLparser )
       
   283     {
       
   284     PENG_DP( D_PENG_LIT( "CPEngContactListTransBase::ParseSubscribeListResponseL() [%S]" ),
       
   285              &( iContactList.ListProperties().Name() ) );
       
   286 
       
   287     // try if there were some errors
       
   288     CPEngTransactionStatus* transactionStatus = CPEngTransactionStatus::NewL();
       
   289     CleanupClosePushL( *transactionStatus );
       
   290     TInt err ( aXMLparser.ParseContactListResultL( aResponse,
       
   291                                                    iOperationId,
       
   292                                                    iContactList.StorageId(),
       
   293                                                    *transactionStatus ) );
       
   294     switch ( err )
       
   295         {
       
   296         case KPEngNwErrPartiallySuccessful:
       
   297             {
       
   298             // mark for remove bad contacts,
       
   299             // transaction will also unregister their attribute models
       
   300             NListLibTools::MarkForRemoveBadContactsL( *transactionStatus, iContactList );
       
   301             }
       
   302 
       
   303         // fall through
       
   304         case KErrNone:
       
   305             {
       
   306             CompleteCntListTransactionL();
       
   307             transactionStatus->SetStatus( KErrNone );
       
   308             break;
       
   309             }
       
   310 
       
   311 
       
   312         case KPEngNwErrUnknownUser:
       
   313             {
       
   314             // unregister attribute models
       
   315             TPEngContactlistDesViewWraper contacts( iContactList );
       
   316             NListLibTools::DeactivatePresenceAttributesL( contacts, iSessionSlotId );
       
   317 
       
   318             // all contact Ids are wrong, remove them
       
   319             iContactList.ResetLocalView();
       
   320             CompleteCntListTransactionL();
       
   321             break;
       
   322             }
       
   323 
       
   324 
       
   325         default:
       
   326             {
       
   327             CompleteCntListTransactionL();
       
   328             }
       
   329         }
       
   330 
       
   331     iTransactionStatus->ImportStatusFrom( *transactionStatus );
       
   332     CleanupStack::Pop(); // transactionStatus
       
   333 
       
   334     PENG_DP( D_PENG_LIT( "CPEngContactListTransBase::ParseSubscribeListResponseL() done [%S]" ),
       
   335              &( iContactList.ListProperties().Name() ) );
       
   336     }
       
   337 
       
   338 //  End of File
       
   339