cmmanager/cmmgr/Framework/Src/cmdestinationext.cpp
branchRCL_3
changeset 58 83ca720e2b9a
parent 0 5a93021fdf25
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmmanager/cmmgr/Framework/Src/cmdestinationext.cpp	Wed Sep 01 12:23:51 2010 +0100
@@ -0,0 +1,665 @@
+/*
+* Copyright (c) 2006 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:  Implementation of RCmDestinationExt
+*
+*/
+
+#include <cmdestinationext.h>
+#include "cmdestinationimpl.h"
+#include <cmconnectionmethodext.h>
+#include <cmpluginbaseeng.h>
+#include <cmpluginbase.h>
+#include "cmmanagerimpl.h"
+
+using namespace CMManager;
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::Close()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RCmDestinationExt::Close()
+    {
+    if( !iDestinatonData )
+        {
+        return;
+        }
+
+    iDestinatonData->Cmmgr()->RemoveDestFromPool(iDestinatonData);     
+    iDestinatonData = NULL;
+    }
+    
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::~RCmDestinationExt()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RCmDestinationExt::~RCmDestinationExt()
+    {
+    Close();
+    }
+
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::RCmDestinationExt( RCmDestinationExt& )
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RCmDestinationExt::RCmDestinationExt(
+                                const RCmDestinationExt& aCmDestination)    
+    : iDestinatonData( aCmDestination.iDestinatonData )
+    {
+    iDestinatonData->IncrementRefCounter();
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::RCmDestinationExt::operator=()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RCmDestinationExt& RCmDestinationExt::operator=(
+                                const RCmDestinationExt& aCmDestination)
+    {
+    if (this != &aCmDestination) 
+        {
+        Close();
+        iDestinatonData = aCmDestination.iDestinatonData;        
+        iDestinatonData->IncrementRefCounter();
+        }
+    return *this;
+    }
+    
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::ConnectionMethodCount()
+// -----------------------------------------------------------------------------
+//        
+EXPORT_C TInt RCmDestinationExt::ConnectionMethodCount()    
+    {
+    __ASSERT_ALWAYS( iDestinatonData, User::Panic(_L( "CMManager" ), 
+                                                  KErrBadHandle ) );
+
+    return iDestinatonData->ConnectionMethodCount();
+    };
+    
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::ConnectionMethodL
+// -----------------------------------------------------------------------------
+//     
+EXPORT_C RCmConnectionMethodExt 
+                            RCmDestinationExt::ConnectionMethodL( TInt anIndex )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    RCmConnectionMethodExt cm;
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    cm.iImplementation = 
+        aImplementation->GetConnectionMethodL( anIndex )->Plugin();
+    //CCmDestinationImpl::GetConnectionMethodL doesn't give ownership
+    cm.iImplementation->IncrementRefCounter();
+    CleanupStack::PopAndDestroy(aImplementation);    
+    return cm;
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::ConnectionMethodByIDL
+// -----------------------------------------------------------------------------
+//     
+EXPORT_C RCmConnectionMethodExt 
+                        RCmDestinationExt::ConnectionMethodByIDL( TInt aIapId )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    RCmConnectionMethodExt cm;
+    
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    cm.iImplementation = 
+        aImplementation->ConnectionMethodByIDL( aIapId )->Plugin();
+    //CCmDestinationImpl::ConnectionMethodByIDL doesn't give ownership
+    cm.iImplementation->IncrementRefCounter();
+    CleanupStack::PopAndDestroy(aImplementation);
+    
+    return cm;
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::PriorityL()
+// -----------------------------------------------------------------------------
+//        
+EXPORT_C TUint RCmDestinationExt::PriorityL(const RCmConnectionMethodExt& aCCMItem )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    TUint retValue = aImplementation->PriorityL( *aCCMItem.iImplementation );
+    CleanupStack::PopAndDestroy(aImplementation);
+    return retValue;
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::NameLC()
+// -----------------------------------------------------------------------------
+//        
+EXPORT_C HBufC* RCmDestinationExt::NameLC ( )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    HBufC* retValue = aImplementation->NameLC();
+    CleanupStack::Pop(retValue);
+    CleanupStack::PopAndDestroy(aImplementation);
+    CleanupStack::PushL(retValue);
+    return retValue;
+    };
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::Id()
+// -----------------------------------------------------------------------------
+//        
+EXPORT_C TUint32 RCmDestinationExt::Id() 
+    {
+    __ASSERT_ALWAYS( iDestinatonData, User::Panic(_L( "CMManager" ), 
+                                                  KErrBadHandle ) );
+
+    return iDestinatonData->Id();
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::ElementId()
+// -----------------------------------------------------------------------------
+//        
+EXPORT_C TUint32 RCmDestinationExt::ElementId() 
+    {
+    __ASSERT_ALWAYS( iDestinatonData, User::Panic(_L( "CMManager" ), 
+                                                  KErrBadHandle ) );
+
+    return iDestinatonData->ElementId();
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::IconL()
+// -----------------------------------------------------------------------------
+//      
+EXPORT_C CGulIcon* RCmDestinationExt::IconL() 
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    CGulIcon* retValue = aImplementation->IconL();
+    CleanupStack::PopAndDestroy(aImplementation);
+    return retValue;
+    }
+
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::MetadataL()
+// -----------------------------------------------------------------------------
+//      
+EXPORT_C 
+    TUint32 RCmDestinationExt::MetadataL( TSnapMetadataField aMetaField ) const
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+    return iDestinatonData->MetadataL( aMetaField );
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::ProtectionLevel()
+// -----------------------------------------------------------------------------
+//  
+EXPORT_C TProtectionLevel RCmDestinationExt::ProtectionLevel()
+    {
+    __ASSERT_ALWAYS( iDestinatonData, User::Panic(_L( "CMManager" ), 
+                                                  KErrBadHandle ) );
+
+    return iDestinatonData->ProtectionLevel();
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::IsHidden()
+// -----------------------------------------------------------------------------
+//          
+EXPORT_C TBool RCmDestinationExt::IsHidden()
+    {
+    __ASSERT_ALWAYS( iDestinatonData, User::Panic(_L( "CMManager" ), 
+                                                  KErrBadHandle ) );
+
+    TBool hidden( EFalse );
+    TRAPD( err, hidden = iDestinatonData->IsHiddenL() );
+    __ASSERT_ALWAYS( err == KErrNone, User::Panic(_L( "CMManager" ), 
+                                                  KErrArgument ) );
+                                                  
+    return hidden;
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::CreateConnectionMethodL()
+// -----------------------------------------------------------------------------
+//  
+EXPORT_C RCmConnectionMethodExt 
+        RCmDestinationExt::CreateConnectionMethodL( TUint32 aImplementationUid )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    RCmConnectionMethodExt cm;
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    CCmPluginBase* imp = aImplementation->CreateConnectionMethodL( 
+                                        aImplementationUid );
+    imp->IncrementRefCounter();
+    CleanupStack::PushL(imp);                                    
+    cm.iImplementation = imp->Plugin();
+    CleanupStack::PopAndDestroy(imp);
+    
+    CleanupStack::PopAndDestroy(aImplementation);
+    return cm;
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::CreateConnectionMethodL()
+// -----------------------------------------------------------------------------
+//  
+EXPORT_C RCmConnectionMethodExt RCmDestinationExt::CreateConnectionMethodL( 
+    TUint32 aImplementationUid,
+    TUint32  aConnMethId )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    RCmConnectionMethodExt cm;
+    CCmDestinationImpl* implementation = 
+                                     CCmDestinationImpl::NewLC( iDestinatonData );
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    CCmPluginBase* imp = implementation->CreateConnectionMethodL( 
+                                                            aImplementationUid,
+                                                            aConnMethId );
+    imp->IncrementRefCounter();
+    CleanupStack::PushL(imp);                                    
+    cm.iImplementation = imp->Plugin();
+    CleanupStack::PopAndDestroy(imp);
+
+    CleanupStack::PopAndDestroy(implementation);
+    return cm;
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::AddConnectionMethodL()
+// -----------------------------------------------------------------------------
+// 
+EXPORT_C TInt RCmDestinationExt::AddConnectionMethodL( 
+                                      RCmConnectionMethodExt aConnectionMethod )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+        
+    CCmDestinationImpl* implementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+
+    CCmPluginBase* connMethod = new (ELeave) 
+                            CCmPluginBase(aConnectionMethod.iImplementation);
+    connMethod->IncrementRefCounter();    
+    CleanupStack::PushL( connMethod );        
+
+    // Check if the given connection method exists already in this destination
+    if ( aConnectionMethod.iImplementation->IdIsValid() &&
+         implementation->CheckIfCMExistsL( *connMethod ) )
+        {
+        CleanupStack::PopAndDestroy( connMethod );
+        CleanupStack::PopAndDestroy( implementation );
+        User::Leave( KErrAlreadyExists );
+        }
+
+    TInt retValue =  implementation->AddConnectionMethodL( *connMethod );
+    CleanupStack::PopAndDestroy( connMethod );
+    CleanupStack::PopAndDestroy( implementation );
+    return retValue;
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::AddEmbeddedDestinationL()
+// -----------------------------------------------------------------------------
+// 
+EXPORT_C TInt RCmDestinationExt::AddEmbeddedDestinationL( 
+                                           const RCmDestinationExt& aDestination )
+    {
+    if ( !iDestinatonData )
+        {
+        User::Leave(KErrBadHandle);
+        }
+    
+    if ( this == &aDestination )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting will decrement the ref counter
+    aImplementation->IncrementRefCounter();
+    CCmDestinationImpl* aDestToAdd = 
+            CCmDestinationImpl::NewLC(aDestination.iDestinatonData);
+    // Deleting will decrement the ref counter
+    aDestToAdd->IncrementRefCounter();
+        
+    TInt retValue =  aImplementation->AddEmbeddedDestinationL( 
+                                                *aDestToAdd );        
+    CleanupStack::PopAndDestroy(aDestToAdd);
+    CleanupStack::PopAndDestroy(aImplementation);
+    return retValue;
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::DeleteConnectionMethodL()
+// -----------------------------------------------------------------------------
+// 
+EXPORT_C void RCmDestinationExt::DeleteConnectionMethodL( 
+                                      RCmConnectionMethodExt& aConnectionMethod )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    CCmPluginBase* connMethod = new (ELeave) 
+                            CCmPluginBase(aConnectionMethod.iImplementation);
+    connMethod->IncrementRefCounter();    
+    CleanupStack::PushL( connMethod );        
+    aImplementation->DeleteConnectionMethodL( 
+                                           *connMethod );
+    CleanupStack::PopAndDestroy(connMethod);
+    CleanupStack::PopAndDestroy(aImplementation);
+    }
+    
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::RemoveConnectionMethodL()
+// -----------------------------------------------------------------------------
+// 
+EXPORT_C void RCmDestinationExt::RemoveConnectionMethodL( 
+                                      RCmConnectionMethodExt aConnectionMethod )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    aImplementation->RemoveConnectionMethodL( 
+                                           *aConnectionMethod.iImplementation );
+    CleanupStack::PopAndDestroy(aImplementation);
+    }
+    
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::ModifyPriorityL()
+// -----------------------------------------------------------------------------
+//      
+EXPORT_C void RCmDestinationExt::ModifyPriorityL( 
+                                                RCmConnectionMethodExt& aCCmItem, 
+                                                TUint aIndex )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    CCmPluginBase* connMethod = new (ELeave) 
+                            CCmPluginBase(aCCmItem.iImplementation);
+    connMethod->IncrementRefCounter();    
+    CleanupStack::PushL( connMethod );        
+    aImplementation->ModifyPriorityL( *connMethod, aIndex );
+    CleanupStack::PopAndDestroy(connMethod);
+    CleanupStack::PopAndDestroy(aImplementation);
+    }
+    
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::SetNameL()
+// -----------------------------------------------------------------------------
+//        
+EXPORT_C void RCmDestinationExt::SetNameL( const TDesC& aName )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    aImplementation->SetNameL( aName );
+    CleanupStack::PopAndDestroy(aImplementation);
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::SetIconL()
+// -----------------------------------------------------------------------------
+//      
+EXPORT_C void RCmDestinationExt::SetIconL( TUint32 anIndex )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+        
+    if ( anIndex > KNumOfIcons )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    aImplementation->SetIconL( anIndex );        
+    CleanupStack::PopAndDestroy(aImplementation);
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::SetMetadataL()
+// -----------------------------------------------------------------------------
+//      
+EXPORT_C void RCmDestinationExt::SetMetadataL( TSnapMetadataField aMetaField, 
+		                                       TUint32 aValue ) 
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    aImplementation->SetMetadataL( aMetaField, aValue );
+    CleanupStack::PopAndDestroy(aImplementation);
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::SetProtectionL()
+// -----------------------------------------------------------------------------
+//  
+EXPORT_C void RCmDestinationExt::SetProtectionL( TProtectionLevel aProtLevel )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    aImplementation->SetProtectionL( aProtLevel );
+    CleanupStack::PopAndDestroy(aImplementation);
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::SetHiddenL()
+// -----------------------------------------------------------------------------
+//          
+EXPORT_C void RCmDestinationExt::SetHiddenL( TBool aHidden )
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    aImplementation->SetHiddenL( aHidden );         
+    CleanupStack::PopAndDestroy(aImplementation);
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::UpdateL()
+// -----------------------------------------------------------------------------
+//          
+EXPORT_C void RCmDestinationExt::UpdateL()
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    aImplementation->UpdateL();
+    CleanupStack::PopAndDestroy(aImplementation);
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::DeleteLD()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RCmDestinationExt::DeleteLD()
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    iDestinatonData->IncrementRefCounter();
+    aImplementation->DeleteLD();  
+    CleanupStack::Pop(aImplementation);
+    iDestinatonData = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::IsConnectedL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool RCmDestinationExt::IsConnectedL() const 
+    {
+    if (!iDestinatonData)
+        {
+        User::Leave(KErrBadHandle);
+        }
+
+    CCmDestinationImpl* aImplementation = 
+            CCmDestinationImpl::NewLC(iDestinatonData);
+    // Deleting aImplementation will decrement the ref counter
+    iDestinatonData->IncrementRefCounter();
+    TBool retValue = aImplementation->IsConnectedL();    
+    CleanupStack::PopAndDestroy(aImplementation);
+    return retValue;
+    }
+    
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::RCmDestinationExt
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RCmDestinationExt::RCmDestinationExt()    
+    : iDestinatonData( NULL )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::operator==
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool RCmDestinationExt::operator==(const RCmDestinationExt& aDestination ) const
+    {
+    return ( iDestinatonData == aDestination.iDestinatonData );
+    };
+
+// -----------------------------------------------------------------------------
+// RCmDestinationExt::operator!=
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool RCmDestinationExt::operator!=(const RCmDestinationExt& aDestination ) const
+    {
+    return !( iDestinatonData == aDestination.iDestinatonData );
+    };
+    
+// End of file