diff -r 000000000000 -r b497e44ab2fc omaprovisioning/provisioning/ProvisioningEngine/Src/WPAdapterFactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omaprovisioning/provisioning/ProvisioningEngine/Src/WPAdapterFactory.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,130 @@ +/* +* Copyright (c) 2002 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: Factory for adapters. +* +*/ + + +// INCLUDE FILES +#include +#include +#include "WPAdapterFactory.h" +#include "ProvisioningDebug.h" +#include "CWPAdapter.h" + +// CONSTANTS +const TInt KDefaultPriority = 9999; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// WPAdapterFactory::CreateAdaptersL +// ----------------------------------------------------------------------------- +// +CArrayPtr* WPAdapterFactory::CreateAdaptersL() + { + // Create an array for adapter information + RImplInfoPtrArray implArray; + CleanupStack::PushL( TCleanupItem( CleanupImplArray, &implArray ) ); + + // Get the list of adapters + CWPAdapter::ListL( implArray ); + + // Sort them in priority order + implArray.Sort( + TLinearOrder( WPAdapterFactory::Compare ) ); + + // Create an array for adapters + CArrayPtr* adapters = + new(ELeave) CArrayPtrFlat( Max( 1, implArray.Count() ) ); + CleanupStack::PushL( TCleanupItem( CleanupAdapterArray, adapters ) ); + + // Create the adapters + for( TInt i( 0 ); i < implArray.Count(); i++ ) + { + CImplementationInformation& info = *implArray[i]; + TUid implementation( info.ImplementationUid() ); + FTRACE(RDebug::Print(_L("[Provisioning] WPAdapterFactory::CreateAdaptersL(): ROM: %d UID: %x"),info.RomBased(), info.ImplementationUid())); + CWPAdapter* adapter = NULL; + TRAPD( error, adapter = CWPAdapter::NewL( implementation ) ); + + if( adapter && ( error == KErrNone ) ) + { + CleanupStack::PushL( adapter ); + adapters->AppendL( adapter ); + CleanupStack::Pop( adapter ); + } + else + { + FTRACE(RDebug::Print(_L("[Provisioning] WPAdapterFactory::CreateAdaptersL(): failed UID: %x with error %d"), info.ImplementationUid(), error)); + } + } + + CleanupStack::Pop( adapters ); + CleanupStack::PopAndDestroy(); // implArray + + FLOG( _L( "[Provisioning] WPAdapterFactory::CreateAdaptersL(): End" ) ); + return adapters; + } + +// ----------------------------------------------------------------------------- +// WPAdapterFactory::CleanupImplArray +// ----------------------------------------------------------------------------- +// +void WPAdapterFactory::CleanupImplArray( TAny* aAny ) + { + RImplInfoPtrArray* implArray = + reinterpret_cast( aAny ); + implArray->ResetAndDestroy(); + implArray->Close(); + } + +// ----------------------------------------------------------------------------- +// WPAdapterFactory::CleanupAdapterArray +// ----------------------------------------------------------------------------- +// +void WPAdapterFactory::CleanupAdapterArray( TAny* aAny ) + { + CArrayPtr* adapters = + reinterpret_cast*>( aAny ); + adapters->ResetAndDestroy(); + delete adapters; + } + +// ----------------------------------------------------------------------------- +// WPAdapterFactory::Compare +// ----------------------------------------------------------------------------- +// +TInt WPAdapterFactory::Compare( const CImplementationInformation& aImpl1, + const CImplementationInformation& aImpl2 ) + { + // Compare the numerical values of opaque_data + TLex8 lex( aImpl1.OpaqueData() ); + TInt impl1( KDefaultPriority ); + if( lex.Val( impl1 ) != KErrNone ) + { + impl1 = KMaxTInt; + } + + lex.Assign( aImpl2.OpaqueData() ); + TInt impl2( KDefaultPriority ); + if( lex.Val( impl2 ) != KErrNone ) + { + impl2 = KMaxTInt; + } + + return impl1 - impl2; + } + +// End of File