PECengine/AttributeLibrary2/SrcTransactions/CPEngAttributePublishHandler.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/AttributeLibrary2/SrcTransactions/CPEngAttributePublishHandler.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,275 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Presence attribute publisher.
+*
+*/
+
+// INCLUDE FILES
+
+#include "CPEngAttributePublishHandler.h"
+#include "CPEngTransactionStatus.h"
+
+#include "MPEngXMLSerializer.h"
+#include "MPEngXMLParser.h"
+#include "PEngAttrLibFactory.h"
+#include "MPEngPresenceAttrManager.h"
+#include "MPEngPresenceAttrTransactionEnv.h"
+#include "MPEngPresenceAdvancedAttrModel2.h"
+#include "PEngWVPresenceAttributes2.h"
+
+#include "PresenceDebugPrint.h"
+
+#include <E32Std.h>
+
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPEngAttributePublishHandler* CPEngAttributePublishHandler::NewLC(
+    MPEngPresenceAttrManager& aAttrManager,
+    MPEngPresenceAttrTransactionEnv& aTransEnv,
+    const TDesC16& aData,
+    TInt aTransactionOperation,
+    TPEngWVCspVersion aCspVersion )
+    {
+    CPEngAttributePublishHandler* self = new ( ELeave ) CPEngAttributePublishHandler(
+        aAttrManager,
+        aTransEnv,
+        aTransactionOperation,
+        aCspVersion );
+
+    CleanupStack::PushL( self );
+    self->ConstructL( aData );
+
+    return self;
+    }
+
+
+// Destructor
+CPEngAttributePublishHandler::~CPEngAttributePublishHandler()
+    {
+    delete iTransactionStatus;
+    iAttributeModels.ResetAndDestroy(); //destroy all models
+    delete iXmlParser;
+    }
+
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::CPEngAttributePublishHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+// There is approximately 5 attribute models to publish at time
+// ==> granurality 5.
+// -----------------------------------------------------------------------------
+//
+CPEngAttributePublishHandler::CPEngAttributePublishHandler(
+    MPEngPresenceAttrManager& aAttrManager,
+    MPEngPresenceAttrTransactionEnv& aTransEnv,
+    TInt aTransactionOperation,
+    TPEngWVCspVersion aCspVersion )
+        : iAttributeManager( aAttrManager ),
+        iTransEnv( aTransEnv ),
+        iTransactionOperation( aTransactionOperation ),
+        iCspVersion( aCspVersion )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPEngAttributePublishHandler::ConstructL( const TDesC16& aData )
+    {
+    iTransactionStatus = CPEngTransactionStatus::NewL();
+    iAttributeManager.UnpackModelArrayL( aData,
+                                         EPEngUserAttribute | EPEngStorableModel,
+                                         iAttributeModels );
+
+    iXmlParser = CreateXMLParserL();
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::RequestL()
+// -----------------------------------------------------------------------------
+//
+void CPEngAttributePublishHandler::RequestL( TDes8& aSendBuffer )
+    {
+    PENG_DP_TXT( "CPEngAttributePublishHandler::RequestL()" );
+
+    __ASSERT_ALWAYS( iAttributeModels.Count() > 0, User::Leave( KErrArgument ) );
+
+    TPtrC8 transactionContentNS( KTransactionContentNS );
+    TPtrC8 presenceSubListNS( KPresenceSubListAttributesNS );
+    if ( iCspVersion == EWVCspV12 )
+        {
+        transactionContentNS.Set( KTransactionContentNS_CSP12 );
+        presenceSubListNS.Set( KPresenceSubListAttributesNS_CSP12 );
+        }
+
+
+    aSendBuffer.Zero();
+    MPEngXMLSerializer* serialize = CreateXmlSerializerL( aSendBuffer );
+    CleanupClosePushL( *serialize );
+
+    serialize->StartTagL( KTransactionContent ).AttributeL( KXmlXmlns,
+                                                            transactionContentNS );
+    serialize->StartTagL( KUpdatePresenceRequest );
+    serialize->StartTagL( KPresenceSubList ).AttributeL( KXmlXmlns,
+                                                         presenceSubListNS );
+
+    const TInt count = iAttributeModels.Count();
+    for ( TInt ii( 0 ); ii < count; ii++ )
+        {
+        MPEngPresenceAdvancedAttrModel2* model = iAttributeModels[ ii ]->Advanced();
+        model->EncodeToXmlL( *serialize );
+        model->HandleAttributeUpdatedToNetwork();
+        if ( model->Type() == KUidPrAttrOnlineStatus )
+            {
+            iOnlineStPublished = ETrue;
+            }
+        }
+
+    serialize->EndTagL( KPresenceSubList );
+    serialize->EndTagL( KUpdatePresenceRequest );
+    serialize->EndTagL( KTransactionContent );
+    CleanupStack::PopAndDestroy(); //release serialize
+
+
+    PENG_DP_TXT( "CPEngAttributePublishHandler::RequestL() - Done" );
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::LastRunningTransactionHandler()
+// -----------------------------------------------------------------------------
+//
+void CPEngAttributePublishHandler::LastRunningTransactionHandler()
+    {
+    PENG_DP_TXT( "CPEngAttributePublishHandler::LastRunningTransactionHandler()" );
+
+    //nothing to do
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::ProcessResponseL()
+// -----------------------------------------------------------------------------
+//
+void CPEngAttributePublishHandler::ProcessResponseL( const TDesC8& aResponse,
+                                                     TRequestStatus& /*aStatus*/ )
+
+    {
+    PENG_DP_TXT( "CPEngAttributePublishHandler::ProcessResponseL()" );
+
+
+    iXmlParser->ParseResultL( aResponse,
+                              iTransactionOperation,
+                              *iTransactionStatus );
+
+    if ( iTransactionStatus->Status() == KErrNone )
+        {
+        // if there was not online status published, load model for notification
+        if ( !iOnlineStPublished )
+            {
+            MPEngPresenceAttrModel2* model = NULL;
+            iAttributeManager.LoadAttributeLC( model,
+                                               KNullDesC,
+                                               KUidPrAttrOnlineStatus,
+                                               EPEngUserAttribute | EPEngStorableModel );
+
+            iAttributeModels.AppendL( model );
+            CleanupStack::Pop(); // model
+            }
+        iAttributeManager.ForceStoreBatchL( iAttributeModels );
+
+        //NOTE: UpdateSessionTracingAttributesL() removes some attributes from
+        //iAttributeModels array and takes their ownership
+        iTransEnv.UpdateSessionTracingAttributesL( iAttributeModels );
+
+        iAttributeModels.ResetAndDestroy();
+        }
+
+
+    PENG_DP_TXT( "CPEngAttributePublishHandler::ProcessResponseL() - Done" );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::CancelProcessing()
+// -----------------------------------------------------------------------------
+//
+void CPEngAttributePublishHandler::CancelProcessing()
+    {
+    //nothing to do
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::NewTransactionHandlersL()
+// -----------------------------------------------------------------------------
+//
+void CPEngAttributePublishHandler::NewTransactionHandlersL(
+    RPointerArray<MPEngOutgoingTransactionHandler>& /*aHandlers*/ )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::TransactionCompleted()
+// -----------------------------------------------------------------------------
+//
+TBool CPEngAttributePublishHandler::TransactionCompleted()
+    {
+    return ETrue;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::TransactionResult()
+// -----------------------------------------------------------------------------
+//
+CPEngTransactionStatus* CPEngAttributePublishHandler::TransactionResult()
+    {
+    CPEngTransactionStatus* tmp = iTransactionStatus;
+    iTransactionStatus = NULL;
+    return tmp;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributePublishHandler::ReleaseHandler()
+// -----------------------------------------------------------------------------
+//
+void CPEngAttributePublishHandler::ReleaseHandler()
+    {
+    //nothing to do
+    }
+
+
+//  End of File