contextframework/cfw/src/cfcontextsourcesettingsmanager/cfcontextsourcesettingsmanagerimpl.cpp
changeset 0 2e3d3ce01487
--- /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 <gmxmldocument.h>
+#include <gmxmlelement.h>
+
+#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<CCFContextSourceSettingArrayImpl*>( &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<CCFContextSourceSettingArrayImpl*>( &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<CMDXMLElement*>( 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<CMDXMLElement*>( 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 );
+    }