diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfw/src/cfcontextsourcesettingsmanager/cfcontextsourcesettingsmanagerimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfw/src/cfcontextsourcesettingsmanager/cfcontextsourcesettingsmanagerimpl.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,303 @@ +/* +* Copyright (c) 2002-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: CFContextSourceSettingsManagerImpl class implementation. +* +*/ + + +// INCLUDE FILES + +#include "cfcontextsourcesettingsmanagerimpl.h" + +#include +#include + +#include "cfcontextsourcesettingimpl.h" +#include "cfcontextsourcesettingparameterimpl.h" +#include "cfcontextsourcesettingarrayimpl.h" +#include "cftrace.h" + +// CONSTANTS + +// Root node name +_LIT( KRootNode, "ContextSourceSettings" ); + +// MEMBER FUNCTIONS + +EXPORT_C CCFContextSourceSettingsManagerImpl* CCFContextSourceSettingsManagerImpl::NewL( + RFs& aFs ) + { + FUNC_LOG; + + CCFContextSourceSettingsManagerImpl* self = + CCFContextSourceSettingsManagerImpl::NewLC( aFs ); + CleanupStack::Pop( self ); + + return self; + } + +EXPORT_C CCFContextSourceSettingsManagerImpl* CCFContextSourceSettingsManagerImpl::NewLC( + RFs& aFs ) + { + FUNC_LOG; + + CCFContextSourceSettingsManagerImpl* self = + new( ELeave ) CCFContextSourceSettingsManagerImpl( aFs ); + + CleanupStack::PushL( self ); + self->ConstructL(); + + return self; + } + +EXPORT_C CCFContextSourceSettingsManagerImpl::~CCFContextSourceSettingsManagerImpl() + { + FUNC_LOG; + + if( iWait ) + { + if( iWait->IsStarted() ) + { + iWait->AsyncStop(); + } + delete iWait; + } + delete iParser; + } + +CCFContextSourceSettingsManagerImpl::CCFContextSourceSettingsManagerImpl( + RFs& aFs ): + iFs( aFs ) + { + FUNC_LOG; + } + +void CCFContextSourceSettingsManagerImpl::ConstructL() + { + FUNC_LOG; + + iParser = CMDXMLParser::NewL( this ); + iWait = new( ELeave ) CActiveSchedulerWait; + } + +// METHODS + +//---------------------------------------------------------------------------- +// CCFContextSourceSettingsManagerImpl::ParseSettingsL +//---------------------------------------------------------------------------- +// +void CCFContextSourceSettingsManagerImpl::ParseSettingsL( + const TDesC& aSettingsFile, + CCFContextSourceSettingArray& aSettings ) + { + FUNC_LOG; + + INFO_1( "Started parsing context source setting file: %S", + &aSettingsFile ); + TIMESTAMP( "Context source setting file parse start" ); + + TInt err = iParser->ParseFile( iFs, aSettingsFile ); + if( err == KErrNone ) + { + iSettings = + static_cast( &aSettings ); + iWait->Start(); + } + } + +//---------------------------------------------------------------------------- +// CCFContextSourceSettingsManagerImpl::ParseSettingsL +//---------------------------------------------------------------------------- +// +void CCFContextSourceSettingsManagerImpl::ParseSettingsL( RFile& aSettingsFile, + CCFContextSourceSettingArray& aSettings ) + { + FUNC_LOG; + + INFO( "Started parsing context source setting file from open file handle" ); + TIMESTAMP( "Context source setting file parse start" ); + + TInt err = iParser->ParseFile( aSettingsFile ); + if( err == KErrNone ) + { + iSettings = + static_cast( &aSettings ); + iWait->Start(); + } + } + +//---------------------------------------------------------------------------- +// CCFContextSourceSettingsManagerImpl::ParseFileCompleteL +//---------------------------------------------------------------------------- +// +void CCFContextSourceSettingsManagerImpl::ParseFileCompleteL() + { + FUNC_LOG; + + TIMESTAMP( "Context source setting file parse stop" ); + + CMDXMLDocument* document = iParser->DetachXMLDoc(); + if( document ) + { + CMDXMLElement* documentElement = document->DocumentElement(); + if( documentElement ) + { + // Get first node + CMDXMLNode* root = documentElement->FirstChild(); + if( root ) + { + // Check that we have a correct root + if( root->NodeName().CompareF( KRootNode ) == KErrNone ) + { + // Start parsing setting blocks + CMDXMLNode* child = root->FirstChild(); + while( child ) + { + // Parse current child and check if we have more + // settings defined + if( child->NodeType() == CMDXMLNode::EElementNode ) + { + CMDXMLElement* element = + static_cast( child ); + // Trap possible leaves so that we can still + // stop wait + TRAP_IGNORE( ParseSettingBlockL( *element ) ); + } + child = child->NextSibling(); + } + } + } + } + } + delete document; + + // We have completed, stop wait and continue + iWait->AsyncStop(); + } + +//---------------------------------------------------------------------------- +// CCFContextSourceSettingsManagerImpl::ParseSettingBlockL +//---------------------------------------------------------------------------- +// +void CCFContextSourceSettingsManagerImpl::ParseSettingBlockL( + CMDXMLElement& aElement ) + { + FUNC_LOG; + + TPtrC nodeName( aElement.NodeName() ); + INFO_1( "Found setting item: [%S]", &nodeName ); + + // Check that we really have an element + CCFContextSourceSettingImpl* setting = + CCFContextSourceSettingImpl::NewLC(); + + // Set plug-in name + setting->SetNameL( nodeName ); + + // Set attributes + ParseAttributesL( aElement, *setting ); + + // Set parameters + CMDXMLNode* child = aElement.FirstChild(); + while( child ) + { + // Parse current child and check if we have more + // settings defined + if( child->NodeType() == CMDXMLNode::EElementNode ) + { + CMDXMLElement* element = + static_cast( child ); + ParseParametersL( *element, *setting ); + } + child = child->NextSibling(); + } + + // Save setting + iSettings->AppendItemL( setting ); + CleanupStack::Pop( setting ); + } + +//---------------------------------------------------------------------------- +// CCFContextSourceSettingsManagerImpl::ParseAttributesL +//---------------------------------------------------------------------------- +// +void CCFContextSourceSettingsManagerImpl::ParseAttributesL( + CMDXMLElement& aElement, + CCFContextSourceSettingImpl& aSetting ) + { + FUNC_LOG; + + TInt numOfAttributes = aElement.NumAttributes(); + TPtrC attributeName( KNullDesC ); + TPtrC attributeValue( KNullDesC ); + for( TInt i = 0; i < numOfAttributes; i++ ) + { + if( aElement.AttributeDetails( + i, attributeName, attributeValue ) == KErrNone ) + { + INFO_2( "Found attribute: '%S'='%S'", + &attributeName, + &attributeValue ); + + CCFKeyValuePair* keyValue = CCFKeyValuePair::NewLC( + attributeName, + attributeValue ); + aSetting.AddAttributeL( keyValue ); + CleanupStack::Pop( keyValue ); + } + } + } + +//---------------------------------------------------------------------------- +// CCFContextSourceSettingsManagerImpl::ParseParametersL +//---------------------------------------------------------------------------- +// +void CCFContextSourceSettingsManagerImpl::ParseParametersL( + CMDXMLElement& aElement, + CCFContextSourceSettingImpl& aSetting ) + { + FUNC_LOG; + + TPtrC nodeName( aElement.NodeName() ); + INFO_1( "Found parameter item: [%S]", &nodeName ); + + CCFContextSourceSettingParameterImpl* param = + CCFContextSourceSettingParameterImpl::NewLC(); + + // Set parameter block name + param->SetNameL( nodeName ); + + // Set attributes for the parameter block + TInt numOfAttributes = aElement.NumAttributes(); + TPtrC attributeName( KNullDesC ); + TPtrC attributeValue( KNullDesC ); + for( TInt i = 0; i < numOfAttributes; i++ ) + { + if( aElement.AttributeDetails( + i, attributeName, attributeValue ) == KErrNone ) + { + INFO_2( "Found parameter attribute: '%S'='%S'", + &attributeName, + &attributeValue ); + + CCFKeyValuePair* keyValue = CCFKeyValuePair::NewLC( + attributeName, + attributeValue ); + param->AddAttributeL( keyValue ); + CleanupStack::Pop( keyValue ); + } + } + aSetting.AddParameterL( param ); + CleanupStack::Pop( param ); + }