PECengine/AttributeLibrary2/SrcTransactions/CPEngAttributeTransactionFactory.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/AttributeLibrary2/SrcTransactions/CPEngAttributeTransactionFactory.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,188 @@
+/*
+* 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 transaction factory.
+*
+*/
+
+// INCLUDE FILES
+#include "CPEngAttributeTransactionFactory.h"
+#include "CPEngAttributePublishHandler.h"
+#include "CPEngPresenceNotificationHandler.h"
+#include "CPEngAttributeFetchHandler.h"
+
+#include "MPEngPresenceAttrTransactionEnv.h"
+#include "MPEngPresenceAttrManager.h"
+#include "MPEngPresenceAdvancedAttrModel2.h"
+
+#include "PEngWVAttributeConstructorFactory.h"
+#include "RObjectArray.h"
+#include "CPEngSessionSlotId.h"
+#include "PEngAddressUtils.h"
+
+#include <E32Std.h>
+#include <PEngPresenceEngineConsts2.h>
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPEngAttributeTransactionFactory::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPEngAttributeTransactionFactory* CPEngAttributeTransactionFactory::NewL(
+    const CPEngSessionSlotId& aSlotId,
+    MPEngPresenceAttrTransactionEnv& aTransEnv,
+    MPEngPresenceAttrManager& aAttrManager )
+    {
+    CPEngAttributeTransactionFactory* self = new ( ELeave ) CPEngAttributeTransactionFactory(
+        aTransEnv,
+        aAttrManager );
+
+    CleanupClosePushL( *self ); //reference counted singleton
+    self->ConstructL( aSlotId );
+    CleanupStack::Pop(); //self
+
+    return self;
+    }
+
+
+// Destructor
+CPEngAttributeTransactionFactory::~CPEngAttributeTransactionFactory()
+    {
+    TRAP_IGNORE( iTransEnv.HandleNetworkSessionStateChangeL( EFalse ) );
+    delete iDomain;
+
+    if ( iRefsOwned )
+        {
+        iTransEnv.Close();
+        iAttributeManager.Close();
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributeTransactionFactory::CPEngAttributeTransactionFactory
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPEngAttributeTransactionFactory::CPEngAttributeTransactionFactory(
+    MPEngPresenceAttrTransactionEnv& aTransEnv,
+    MPEngPresenceAttrManager& aAttrManager )
+        : iTransEnv( aTransEnv ),
+        iAttributeManager( aAttrManager ),
+        iRefsOwned( EFalse )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributeTransactionFactory::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPEngAttributeTransactionFactory::ConstructL( const CPEngSessionSlotId& aSlotId )
+    {
+    CPEngSessionSlotObject::ConstructL( aSlotId );
+
+    //resolve transaction domain
+    iDomain = PEngAddressUtils::WVDomain( aSlotId.UserId() ).AllocL();
+    iCspVersion = PEngWVCspVersion::SelectVersionL();
+
+    RObjectArray< MPEngPresenceAttrModel2 > sessionAttributes;
+    CleanupClosePushL( sessionAttributes );
+
+    PEngWVAttributeConstructorFactory::LoadSessionTracingAttributesL( sessionAttributes,
+                                                                      iAttributeManager );
+    iTransEnv.SetSessionTracingAttributesL( sessionAttributes );
+    CleanupStack::PopAndDestroy(); //closes sessionAttributes
+
+
+    iTransEnv.HandleNetworkSessionStateChangeL( ETrue );
+
+    iRefsOwned = ETrue;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributeTransactionFactory::Close()
+// -----------------------------------------------------------------------------
+//
+void CPEngAttributeTransactionFactory::Close()
+    {
+    CPEngSessionSlotObject::Close();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributeTransactionFactory::IncomingTransactionHandlerL()
+// -----------------------------------------------------------------------------
+//
+MPEngIncomingTransactionHandler* CPEngAttributeTransactionFactory::
+IncomingTransactionHandlerL( const TDesC8& aIncomingRequest )
+    {
+    MPEngIncomingTransactionHandler* handler = NULL;
+
+    if ( CPEngPresenceNotificationHandler::CanHandleL( aIncomingRequest ) )
+        {
+        //This is a presence notification
+        handler = CPEngPresenceNotificationHandler::NewL( *iDomain,
+                                                          iCspVersion,
+                                                          iAttributeManager,
+                                                          iTransEnv );
+        }
+
+    return handler;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngAttributeTransactionFactory::OutgoingTransactionHandlerL()
+// -----------------------------------------------------------------------------
+//
+void CPEngAttributeTransactionFactory::OutgoingTransactionHandlerL(
+    TInt aOperation,
+    const TDesC16& aData,
+    RPointerArray<MPEngOutgoingTransactionHandler>& aHandlers )
+    {
+    if ( aOperation == EPEngTransOpOwnAttributePublish )
+        {
+        CPEngAttributePublishHandler* publisher = CPEngAttributePublishHandler::NewLC( iAttributeManager,
+                                                                                       iTransEnv,
+                                                                                       aData,
+                                                                                       aOperation,
+                                                                                       iCspVersion );
+        aHandlers.AppendL( publisher );
+        CleanupStack::Pop( publisher );
+        }
+
+
+    else if ( ( aOperation == EPEngTransOpAttributeFetchToCache ) ||
+              ( aOperation == EPEngTransOpAttributeFetchToObjects ) )
+        {
+        CPEngAttributeFetchHandler* fetcher = CPEngAttributeFetchHandler::NewLC( iAttributeManager,
+                                                                                 *iDomain,
+                                                                                 aData,
+                                                                                 aOperation,
+                                                                                 iCspVersion );
+        aHandlers.AppendL( fetcher );
+        CleanupStack::Pop( fetcher );
+        }
+    }
+
+
+//  End of File