multimediacommsengine/tsrc/MCETestUI/MCETestUIEngine/src/CMCETestUIEngineOutRefer.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/tsrc/MCETestUI/MCETestUIEngine/src/CMCETestUIEngineOutRefer.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,423 @@
+/*
+* Copyright (c) 2005 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:    
+*
+*/
+
+
+
+
+// MCE API
+
+#include <MCEManager.h>
+#include <MCEOutRefer.h>
+#include <MCERefer.h>
+#include <Uri8.h>
+
+#include "MCETestUIEngineDefaultValues.h"
+#include "CMCETestUIQuestionDataQuery.h"
+#include "CMCETestUIEngine.h"
+#include "CMCETestUIEngineProfileContainer.h"
+#include "CMCETestUIEngineProfile.h"
+#include "CMCETestUIEngineOutRefer.h"
+#include "TMCETestUIEngineCmdSubscribeEvent.h"
+#include "TMCETestUIEngineCmdDeleteEvent.h"
+#include "cmcetestuienginesession.h"
+#include "cmcetestuiengineevent.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::NewL()
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineOutRefer* CMCETestUIEngineOutRefer::NewL(
+            CMCETestUIEngine& aEngine,
+            CMCETestUIEngineProfile& aProfile) 
+    {
+
+    CMCETestUIEngineOutRefer* self = 
+        new (ELeave) CMCETestUIEngineOutRefer( aEngine, 
+                                                 aProfile);
+    CleanupStack::PushL( self );
+    self->ConstructL(aProfile);
+    CleanupStack::Pop( self );
+    return self;  
+    }
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::NewL()
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineOutRefer* CMCETestUIEngineOutRefer::NewL(
+            CMCETestUIEngine& aEngine,
+            CMCETestUIEngineSession& aSession) 
+    {
+
+    CMCETestUIEngineOutRefer* self = 
+        new (ELeave) CMCETestUIEngineOutRefer( aEngine, 
+                                                 aSession);
+    CleanupStack::PushL( self );
+    self->ConstructL(aSession);
+    CleanupStack::Pop( self );
+    return self;  
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::NewL()
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineOutRefer* CMCETestUIEngineOutRefer::NewL(
+            CMCETestUIEngine& aEngine,
+            CMCETestUIEngineEvent& aEvent) 
+    {
+
+    CMCETestUIEngineOutRefer* self = 
+        new (ELeave) CMCETestUIEngineOutRefer( aEngine, 
+                                                 aEvent);
+    CleanupStack::PushL( self );
+    self->ConstructL(aEvent);
+    CleanupStack::Pop( self );
+    return self;  
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::CMCETestUIEngineOutRefer
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineOutRefer::CMCETestUIEngineOutRefer( 
+                CMCETestUIEngine& aEngine,
+                CMCETestUIEngineProfile& aProfile )
+    : CMCETestUIEngineRefer( aEngine ),
+      iProfile( &aProfile ),
+      iId( 0 )
+    {
+    }
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::CMCETestUIEngineOutRefer
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineOutRefer::CMCETestUIEngineOutRefer( 
+                CMCETestUIEngine& aEngine,
+                CMCETestUIEngineSession& aSession )
+    : CMCETestUIEngineRefer( aEngine ),
+      iSession( &aSession ),
+      iId( 0 )
+    {
+    }
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::CMCETestUIEngineOutRefer
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineOutRefer::CMCETestUIEngineOutRefer( 
+                CMCETestUIEngine& aEngine,
+                CMCETestUIEngineEvent& aEvent )
+    : CMCETestUIEngineRefer( aEngine ),
+      iEvent( &aEvent ),
+      iId( 0 )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineOutRefer::ConstructL(CMCETestUIEngineProfile& /*aProfile*/)
+    {
+ 
+     /////////////////////
+    //
+    // TODO: After implementing wrappers for streams, sinks and sources 
+    //       this function should be refactored to make use of them. That will 
+    //       also simplify the function to some extent.
+    //
+    //////////////////////
+    
+ 
+    BaseConstructL();
+    if(iProfile )
+    	{
+    	FillProfileRegistrar();
+    
+    if(ReferParamsL(iReferParams))
+    	{
+    	// Solve recipient
+	    CMCETestUIQuestionDataQuery* question = 
+		    CMCETestUIQuestionDataQuery::NewLC();
+		question->SetCaptionL( KUserQuestionInputRecipient );
+		question->SetDefaultValueL(iReferParams.iRecipentAddress  );
+		question->SetAnswerL( iReferParams.iRecipentAddress  );
+		TBufC8<100> recipient( question->Answer8() );
+		
+		CleanupStack::PopAndDestroy( question );
+		//solve referTo
+		
+		CMCETestUIQuestionDataQuery* questionreferto = 
+		    CMCETestUIQuestionDataQuery::NewLC();
+		questionreferto->SetCaptionL( KUserQuestionInputReferTo );
+		questionreferto->SetDefaultValueL(iReferParams.iReferTo  );
+		questionreferto->SetAnswerL( iReferParams.iReferTo  );
+		TBufC8<100> referTo( questionreferto->Answer8() );
+		
+		CleanupStack::PopAndDestroy( questionreferto );
+	   // solve originator
+	   
+	   if ( iReferParams.originator.Compare(KNone))
+	   	{
+		   	HBufC8* orig8 = HBufC8::NewL(iReferParams.originator.Length());
+		   	TPtr8 ptr = orig8->Des();
+		    ptr.Copy(iReferParams.originator);
+		    // Create OutRfer
+		    CMceOutRefer* outRefer = CMceOutRefer::NewL(
+		       	iEngine.MCEManager(), 
+			    iProfile->Profile(),
+			    recipient,referTo);
+			CleanupStack::PushL(outRefer);
+		    CleanupStack::Pop( outRefer );
+			iRefer = outRefer;
+			iOutRefer = outRefer;        
+	   	}
+	   else 
+	   	{
+		   	// Create OutEvent
+		    CMceOutRefer* outRefer = CMceOutRefer::NewL(
+		       iEngine.MCEManager(),
+		       iProfile->Profile(),
+			   recipient,referTo );
+			CleanupStack::PushL(outRefer);
+		    CleanupStack::Pop( outRefer );
+			iRefer = outRefer;
+			iOutRefer = outRefer;
+	   	}
+	    // Get identity
+	    iId = iEngine.NextOutReferId();
+    	}
+    	}
+    
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::ConstructL(CMCETestUIEngineSession& aSession)
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineOutRefer::ConstructL(CMCETestUIEngineSession& aSession)
+    {
+ 
+     /////////////////////
+    //
+    // TODO: After implementing wrappers for streams, sinks and sources 
+    //       this function should be refactored to make use of them. That will 
+    //       also simplify the function to some extent.
+    //
+    //////////////////////
+    
+ 
+    BaseConstructL();
+    if(iSession )
+    	{
+        
+    if(ReferToParamsL(iReferParams))
+    	{
+    
+		//solve referTo
+		
+		CMCETestUIQuestionDataQuery* questionreferto = 
+		    CMCETestUIQuestionDataQuery::NewLC();
+		questionreferto->SetCaptionL( KUserQuestionInputReferTo );
+		questionreferto->SetDefaultValueL(iReferParams.iReferTo  );
+		questionreferto->SetAnswerL( iReferParams.iReferTo  );
+		TBufC8<100> referTo( questionreferto->Answer8() );
+		
+		CleanupStack::PopAndDestroy( questionreferto );
+	   
+	   
+	    	// Create OutEvent
+		   CMceOutRefer* outRefer = CMceOutRefer::NewL(
+		       aSession.Session(),referTo );
+			iRefer = outRefer;
+			iOutRefer = outRefer;
+	       // Get identity
+	    iId = iEngine.NextOutReferId();
+    	}
+    	}
+    
+    
+    }
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineOutRefer::ConstructL(CMCETestUIEngineEvent& aEvent)
+    {
+ 
+     /////////////////////
+    //
+    // TODO: After implementing wrappers for streams, sinks and sources 
+    //       this function should be refactored to make use of them. That will 
+    //       also simplify the function to some extent.
+    //
+    //////////////////////
+    
+ 
+    BaseConstructL();
+    if(iEvent )
+    	{
+        
+    if(ReferParamsL(iReferParams))
+    	{
+    	//solve referTo
+		
+		CMCETestUIQuestionDataQuery* questionreferto = 
+		    CMCETestUIQuestionDataQuery::NewLC();
+		questionreferto->SetCaptionL( KUserQuestionInputReferTo );
+		questionreferto->SetDefaultValueL(iReferParams.iReferTo  );
+		questionreferto->SetAnswerL( iReferParams.iReferTo  );
+		TBufC8<100> referTo( questionreferto->Answer8() );
+		
+		CleanupStack::PopAndDestroy( questionreferto );
+	  // Create Outrefer
+		    CMceOutRefer* outRefer = CMceOutRefer::NewL(
+		       aEvent.Event(),referTo );
+			CleanupStack::PushL(outRefer);
+		    CleanupStack::Pop( outRefer );
+			iRefer = outRefer;
+			iOutRefer = outRefer;
+	    // Get identity
+	    iId = iEngine.NextOutReferId();
+    	}
+    	}
+    
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::~CMCETestUIEngineOutRefer
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMCETestUIEngineOutRefer::~CMCETestUIEngineOutRefer()
+    {
+    delete iOutRefer;
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::GetCommands
+// -----------------------------------------------------------------------------
+//
+const RPointerArray<TMCETestUIEngineCmdBase>& 
+            CMCETestUIEngineOutRefer::GetCommandsL()
+    {
+    iCommands.ResetAndDestroy();
+
+    // Get base class commands
+    CMCETestUIEngineRefer::GetCommandsL();
+        
+    // Get own commands       
+    TInt state = iOutRefer->State();
+
+	switch( state ) 
+		{
+		case CMceRefer::EIdle:
+			{
+			iCommands.Append( new (ELeave) 
+		        TMCETestUIEngineCmdRefer( iEngine, *this ) );	  
+		    break;
+			}
+            
+		case CMceRefer::EAccepted: 	 
+			{
+			break;
+			}	  
+		    
+		case CMceRefer::EPending:  
+			{
+			break;   
+			}
+		default: 
+		    break;
+		}  
+		  
+    return iCommands; 
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::Id
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMCETestUIEngineOutRefer::Id() const
+    {
+    return iId;
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::OutSession
+// -----------------------------------------------------------------------------
+//
+CMceOutRefer& CMCETestUIEngineOutRefer::OutRefer()
+    {
+    return *iOutRefer;
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::ReferParams
+// -----------------------------------------------------------------------------
+//
+
+TBool CMCETestUIEngineOutRefer::ReferParamsL(TReferParams &aReferParams)
+{
+  return iEngine.ReferParamsL( aReferParams);
+ 
+}
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::ReferToParams
+// -----------------------------------------------------------------------------
+//
+
+TBool CMCETestUIEngineOutRefer::ReferToParamsL(TReferParams &aReferParams)
+{
+  return iEngine.ReferToParamsL( aReferParams);
+ 
+}
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineOutRefer::FillProfileRegistrar
+// -----------------------------------------------------------------------------
+//
+
+void CMCETestUIEngineOutRefer::FillProfileRegistrar()
+	{
+	// trying to get profile registrar 
+          
+    TUriParser8 parser;
+    const TDesC8& aor = iProfile->Aor();
+    parser.Parse( aor ) ; 
+    CUri8* uri8 = CUri8::NewLC( parser );
+    const TDesC8& registrar =  uri8->Uri().Extract( EUriHost ) ;
+    
+    HBufC*registrar16 = HBufC16::NewLC( KRecipent().Length() + registrar.Length() );
+    TPtr registrarPtr = registrar16->Des();
+    registrarPtr.Copy( registrar );
+    
+    iReferParams.iRecipentAddress.Append(KRecipent) ;
+    iReferParams.iRecipentAddress.Append(*registrar16)  ;
+    
+    iReferParams.iReferTo.Append(KRecipent) ;
+    iReferParams.iReferTo.Append(*registrar16)  ;
+    
+    CleanupStack::PopAndDestroy( registrar16 );
+    registrar16 = NULL;
+    
+    CleanupStack::PopAndDestroy( uri8 );
+    uri8 = NULL; 
+    // profile registrar end .....
+	}
\ No newline at end of file