PECengine/AttributeLibrary2/SrcTransactions/CPEngAttributePublishHandler.cpp
changeset 0 094583676ce7
equal deleted inserted replaced
-1:000000000000 0:094583676ce7
       
     1 /*
       
     2 * Copyright (c) 2004 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:  Presence attribute publisher.
       
    15 *
       
    16 */
       
    17 
       
    18 // INCLUDE FILES
       
    19 
       
    20 #include "CPEngAttributePublishHandler.h"
       
    21 #include "CPEngTransactionStatus.h"
       
    22 
       
    23 #include "MPEngXMLSerializer.h"
       
    24 #include "MPEngXMLParser.h"
       
    25 #include "PEngAttrLibFactory.h"
       
    26 #include "MPEngPresenceAttrManager.h"
       
    27 #include "MPEngPresenceAttrTransactionEnv.h"
       
    28 #include "MPEngPresenceAdvancedAttrModel2.h"
       
    29 #include "PEngWVPresenceAttributes2.h"
       
    30 
       
    31 #include "PresenceDebugPrint.h"
       
    32 
       
    33 #include <E32Std.h>
       
    34 
       
    35 
       
    36 
       
    37 
       
    38 // ============================ MEMBER FUNCTIONS ===============================
       
    39 
       
    40 // -----------------------------------------------------------------------------
       
    41 // CPEngAttributePublishHandler::NewL()
       
    42 // Two-phased constructor.
       
    43 // -----------------------------------------------------------------------------
       
    44 //
       
    45 CPEngAttributePublishHandler* CPEngAttributePublishHandler::NewLC(
       
    46     MPEngPresenceAttrManager& aAttrManager,
       
    47     MPEngPresenceAttrTransactionEnv& aTransEnv,
       
    48     const TDesC16& aData,
       
    49     TInt aTransactionOperation,
       
    50     TPEngWVCspVersion aCspVersion )
       
    51     {
       
    52     CPEngAttributePublishHandler* self = new ( ELeave ) CPEngAttributePublishHandler(
       
    53         aAttrManager,
       
    54         aTransEnv,
       
    55         aTransactionOperation,
       
    56         aCspVersion );
       
    57 
       
    58     CleanupStack::PushL( self );
       
    59     self->ConstructL( aData );
       
    60 
       
    61     return self;
       
    62     }
       
    63 
       
    64 
       
    65 // Destructor
       
    66 CPEngAttributePublishHandler::~CPEngAttributePublishHandler()
       
    67     {
       
    68     delete iTransactionStatus;
       
    69     iAttributeModels.ResetAndDestroy(); //destroy all models
       
    70     delete iXmlParser;
       
    71     }
       
    72 
       
    73 
       
    74 
       
    75 
       
    76 // -----------------------------------------------------------------------------
       
    77 // CPEngAttributePublishHandler::CPEngAttributePublishHandler
       
    78 // C++ default constructor can NOT contain any code, that
       
    79 // might leave.
       
    80 //
       
    81 // There is approximately 5 attribute models to publish at time
       
    82 // ==> granurality 5.
       
    83 // -----------------------------------------------------------------------------
       
    84 //
       
    85 CPEngAttributePublishHandler::CPEngAttributePublishHandler(
       
    86     MPEngPresenceAttrManager& aAttrManager,
       
    87     MPEngPresenceAttrTransactionEnv& aTransEnv,
       
    88     TInt aTransactionOperation,
       
    89     TPEngWVCspVersion aCspVersion )
       
    90         : iAttributeManager( aAttrManager ),
       
    91         iTransEnv( aTransEnv ),
       
    92         iTransactionOperation( aTransactionOperation ),
       
    93         iCspVersion( aCspVersion )
       
    94     {
       
    95     }
       
    96 
       
    97 
       
    98 // -----------------------------------------------------------------------------
       
    99 // CPEngAttributePublishHandler::ConstructL()
       
   100 // Symbian 2nd phase constructor can leave.
       
   101 // -----------------------------------------------------------------------------
       
   102 //
       
   103 void CPEngAttributePublishHandler::ConstructL( const TDesC16& aData )
       
   104     {
       
   105     iTransactionStatus = CPEngTransactionStatus::NewL();
       
   106     iAttributeManager.UnpackModelArrayL( aData,
       
   107                                          EPEngUserAttribute | EPEngStorableModel,
       
   108                                          iAttributeModels );
       
   109 
       
   110     iXmlParser = CreateXMLParserL();
       
   111     }
       
   112 
       
   113 
       
   114 
       
   115 // -----------------------------------------------------------------------------
       
   116 // CPEngAttributePublishHandler::RequestL()
       
   117 // -----------------------------------------------------------------------------
       
   118 //
       
   119 void CPEngAttributePublishHandler::RequestL( TDes8& aSendBuffer )
       
   120     {
       
   121     PENG_DP_TXT( "CPEngAttributePublishHandler::RequestL()" );
       
   122 
       
   123     __ASSERT_ALWAYS( iAttributeModels.Count() > 0, User::Leave( KErrArgument ) );
       
   124 
       
   125     TPtrC8 transactionContentNS( KTransactionContentNS );
       
   126     TPtrC8 presenceSubListNS( KPresenceSubListAttributesNS );
       
   127     if ( iCspVersion == EWVCspV12 )
       
   128         {
       
   129         transactionContentNS.Set( KTransactionContentNS_CSP12 );
       
   130         presenceSubListNS.Set( KPresenceSubListAttributesNS_CSP12 );
       
   131         }
       
   132 
       
   133 
       
   134     aSendBuffer.Zero();
       
   135     MPEngXMLSerializer* serialize = CreateXmlSerializerL( aSendBuffer );
       
   136     CleanupClosePushL( *serialize );
       
   137 
       
   138     serialize->StartTagL( KTransactionContent ).AttributeL( KXmlXmlns,
       
   139                                                             transactionContentNS );
       
   140     serialize->StartTagL( KUpdatePresenceRequest );
       
   141     serialize->StartTagL( KPresenceSubList ).AttributeL( KXmlXmlns,
       
   142                                                          presenceSubListNS );
       
   143 
       
   144     const TInt count = iAttributeModels.Count();
       
   145     for ( TInt ii( 0 ); ii < count; ii++ )
       
   146         {
       
   147         MPEngPresenceAdvancedAttrModel2* model = iAttributeModels[ ii ]->Advanced();
       
   148         model->EncodeToXmlL( *serialize );
       
   149         model->HandleAttributeUpdatedToNetwork();
       
   150         if ( model->Type() == KUidPrAttrOnlineStatus )
       
   151             {
       
   152             iOnlineStPublished = ETrue;
       
   153             }
       
   154         }
       
   155 
       
   156     serialize->EndTagL( KPresenceSubList );
       
   157     serialize->EndTagL( KUpdatePresenceRequest );
       
   158     serialize->EndTagL( KTransactionContent );
       
   159     CleanupStack::PopAndDestroy(); //release serialize
       
   160 
       
   161 
       
   162     PENG_DP_TXT( "CPEngAttributePublishHandler::RequestL() - Done" );
       
   163     }
       
   164 
       
   165 
       
   166 
       
   167 // -----------------------------------------------------------------------------
       
   168 // CPEngAttributePublishHandler::LastRunningTransactionHandler()
       
   169 // -----------------------------------------------------------------------------
       
   170 //
       
   171 void CPEngAttributePublishHandler::LastRunningTransactionHandler()
       
   172     {
       
   173     PENG_DP_TXT( "CPEngAttributePublishHandler::LastRunningTransactionHandler()" );
       
   174 
       
   175     //nothing to do
       
   176     }
       
   177 
       
   178 
       
   179 
       
   180 // -----------------------------------------------------------------------------
       
   181 // CPEngAttributePublishHandler::ProcessResponseL()
       
   182 // -----------------------------------------------------------------------------
       
   183 //
       
   184 void CPEngAttributePublishHandler::ProcessResponseL( const TDesC8& aResponse,
       
   185                                                      TRequestStatus& /*aStatus*/ )
       
   186 
       
   187     {
       
   188     PENG_DP_TXT( "CPEngAttributePublishHandler::ProcessResponseL()" );
       
   189 
       
   190 
       
   191     iXmlParser->ParseResultL( aResponse,
       
   192                               iTransactionOperation,
       
   193                               *iTransactionStatus );
       
   194 
       
   195     if ( iTransactionStatus->Status() == KErrNone )
       
   196         {
       
   197         // if there was not online status published, load model for notification
       
   198         if ( !iOnlineStPublished )
       
   199             {
       
   200             MPEngPresenceAttrModel2* model = NULL;
       
   201             iAttributeManager.LoadAttributeLC( model,
       
   202                                                KNullDesC,
       
   203                                                KUidPrAttrOnlineStatus,
       
   204                                                EPEngUserAttribute | EPEngStorableModel );
       
   205 
       
   206             iAttributeModels.AppendL( model );
       
   207             CleanupStack::Pop(); // model
       
   208             }
       
   209         iAttributeManager.ForceStoreBatchL( iAttributeModels );
       
   210 
       
   211         //NOTE: UpdateSessionTracingAttributesL() removes some attributes from
       
   212         //iAttributeModels array and takes their ownership
       
   213         iTransEnv.UpdateSessionTracingAttributesL( iAttributeModels );
       
   214 
       
   215         iAttributeModels.ResetAndDestroy();
       
   216         }
       
   217 
       
   218 
       
   219     PENG_DP_TXT( "CPEngAttributePublishHandler::ProcessResponseL() - Done" );
       
   220     }
       
   221 
       
   222 
       
   223 // -----------------------------------------------------------------------------
       
   224 // CPEngAttributePublishHandler::CancelProcessing()
       
   225 // -----------------------------------------------------------------------------
       
   226 //
       
   227 void CPEngAttributePublishHandler::CancelProcessing()
       
   228     {
       
   229     //nothing to do
       
   230     }
       
   231 
       
   232 
       
   233 // -----------------------------------------------------------------------------
       
   234 // CPEngAttributePublishHandler::NewTransactionHandlersL()
       
   235 // -----------------------------------------------------------------------------
       
   236 //
       
   237 void CPEngAttributePublishHandler::NewTransactionHandlersL(
       
   238     RPointerArray<MPEngOutgoingTransactionHandler>& /*aHandlers*/ )
       
   239     {
       
   240     }
       
   241 
       
   242 
       
   243 // -----------------------------------------------------------------------------
       
   244 // CPEngAttributePublishHandler::TransactionCompleted()
       
   245 // -----------------------------------------------------------------------------
       
   246 //
       
   247 TBool CPEngAttributePublishHandler::TransactionCompleted()
       
   248     {
       
   249     return ETrue;
       
   250     }
       
   251 
       
   252 
       
   253 // -----------------------------------------------------------------------------
       
   254 // CPEngAttributePublishHandler::TransactionResult()
       
   255 // -----------------------------------------------------------------------------
       
   256 //
       
   257 CPEngTransactionStatus* CPEngAttributePublishHandler::TransactionResult()
       
   258     {
       
   259     CPEngTransactionStatus* tmp = iTransactionStatus;
       
   260     iTransactionStatus = NULL;
       
   261     return tmp;
       
   262     }
       
   263 
       
   264 
       
   265 // -----------------------------------------------------------------------------
       
   266 // CPEngAttributePublishHandler::ReleaseHandler()
       
   267 // -----------------------------------------------------------------------------
       
   268 //
       
   269 void CPEngAttributePublishHandler::ReleaseHandler()
       
   270     {
       
   271     //nothing to do
       
   272     }
       
   273 
       
   274 
       
   275 //  End of File