serviceproviders/sapi_mediamanagement/src/mgserviceobserver.cpp
changeset 19 989d2f495d90
child 22 fc9cf246af83
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_mediamanagement/src/mgserviceobserver.cpp	Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  This Class is observer for the mgservice class (core class)
+*
+*/
+
+#include <liwcommon.h>
+#include <mclfitemlistmodel.h>
+
+#include "mgserviceobserver.h"
+#include "mgitemslist.h"
+#include "mginterface.h"
+#include "serviceerrno.h"
+//using namespace LIW;
+//Output Keys/arguments
+_LIT8(KResponse,"ReturnValue");
+_LIT8(KErrorCode,"ErrorCode");
+
+// -----------------------------------------------------------------------------
+// CMgServiceObserver::NewL
+// Returns the instance of CMgServiceObserver.
+// -----------------------------------------------------------------------------
+CMgServiceObserver* CMgServiceObserver::NewL()
+	{
+
+	CMgServiceObserver* self = new ( ELeave )CMgServiceObserver();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+
+	}
+
+
+
+
+
+// -----------------------------------------------------------------------------
+// CMgServiceObserver::MgNotify
+// Called by CMgService class when asynch operation complete
+// -----------------------------------------------------------------------------
+void CMgServiceObserver :: MgNotifyL( TUint  aTransactionID,
+                                      MCLFItemListModel* aListModel,
+                                      TMgOperationEvent& aOperationEvent,
+                                      const TInt& aError  )
+
+
+	{
+	iOutput->Reset();
+    //const CLiwGenericParamList& temp1 = *iOutput;
+    //const CLiwGenericParamList* temp2 = &temp1;
+    //delete temp2;
+    
+    if ( EMgModelCancel == aOperationEvent )
+        {
+            if( iCallBack )
+
+            {
+             iOutput->AppendL( TLiwGenericParam ( KErrorCode,TLiwVariant( (TInt32)SErrNone ) ) );
+             TRAP_IGNORE(iCallBack->HandleNotifyL ( aTransactionID, KLiwEventCanceled, *iOutput,*iInput ));
+             //self destruction should be done here in future
+             // instead of below four lines
+             iCallBack = NULL ;
+             //iOutput= NULL;
+	         iInput = NULL;
+	         iCmdId= EMgBlankCmdId;
+
+            }
+
+        }
+
+	// Fill the Error code inside Generic Param List
+	TInt sapiErr = SErrNone;
+    if (aError)
+    	{
+    	sapiErr = CMgInterface::SapiError( aError );
+    	}
+    
+    iOutput->AppendL(TLiwGenericParam(KErrorCode,TLiwVariant((TInt32)sapiErr)));
+	// if not error create the iterator class and put it into output list
+	if( ( EMgRefreshComplete == aOperationEvent   )&& ( KErrNone == aError   ) )
+     	{
+        // Fill the Iterator in Generic Paaram List
+        TLiwVariant response;
+
+	 	// Iterator will accept the cmd Id and iListmodel and
+	 	// it will become the owner of iListModel,Ownership of
+	 	// Iterator is transfered to consumer
+
+	 	CMgItemsList *iterator = CMgItemsList::NewL( aListModel, iCmdId );
+ 	    CleanupStack::PushL( iterator );
+	 	response.Set( iterator );
+		iOutput->AppendL( TLiwGenericParam ( KResponse, response ) );
+ 		CleanupStack::Pop( iterator );
+        iterator->DecRef();
+        }
+   	else
+   	    {
+		delete aListModel;
+		aListModel = NULL;
+	 	}
+
+    if( NULL != iCallBack )
+     	{
+    	// call callback of consumer
+    	if( KErrNone ==  aError   )
+    	    {
+    		TRAP_IGNORE(  
+    		iCallBack->HandleNotifyL 
+    		( aTransactionID, KLiwEventCompleted, *iOutput,*iInput ));
+
+    	    }
+        else
+            {
+            iCallBack->HandleNotifyL ( aTransactionID, KLiwEventError, *iOutput,*iInput );
+            }
+
+         }
+
+    iCmdId = EMgBlankCmdId;
+    iCallBack = NULL;
+    iInput=NULL;
+
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMgServiceObserver::SetMemberVar
+// set the member varibale for the current request.
+// -----------------------------------------------------------------------------
+void CMgServiceObserver::SetMemberVar(const TMgCmdId& aCmdId,
+        				 			  const CLiwGenericParamList* aInput,
+        				 			  MLiwNotifyCallback* aCallBack)
+	{
+
+	iCmdId= EMgBlankCmdId;
+
+	iCallBack = aCallBack;
+    iInput    = aInput;
+    iCmdId    = aCmdId;
+
+	}
+
+// -----------------------------------------------------------------------------
+// CMgServiceObserver::Cancel
+// Cancel the pending asynchronous request
+// -----------------------------------------------------------------------------
+void CMgServiceObserver::CancelL()
+	{
+	if( iCallBack )
+	    {
+	     iCallBack->HandleNotifyL ( 0,
+					KLiwEventCanceled,
+					*iOutput,
+					*iInput );
+
+	    iCallBack = NULL ;
+        iOutput->Reset();
+	    iInput = NULL;
+	    iCmdId= EMgBlankCmdId;
+	    }
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMgServiceObserver::CMgServiceObserver
+// constructor of class
+// -----------------------------------------------------------------------------
+
+CMgServiceObserver::CMgServiceObserver()
+                   :iCallBack(NULL),
+                    iOutput(NULL),
+					iInput(NULL),
+					iCmdId(EMgBlankCmdId)
+	{
+
+	}
+
+// -----------------------------------------------------------------------------
+// CMgServiceObserver::~CMgServiceObserver
+// Destructor
+// -----------------------------------------------------------------------------
+
+CMgServiceObserver::~CMgServiceObserver()
+	{
+    //release output Parameter List
+    if ( iOutput )
+	    {
+	    iOutput->Reset();
+	    delete iOutput;
+	  	}
+	}
+
+// -----------------------------------------------------------------------------
+// CMgServiceObserver::ConstructL
+// Destructor
+// -----------------------------------------------------------------------------
+
+void CMgServiceObserver::ConstructL()
+	{
+    iOutput = CLiwGenericParamList::NewL();
+	}