applayerpluginsandutils/uripermissionservices/server/src/tldlistinitializer.cpp
changeset 0 b16258d2340f
child 49 b91bcc4b38e4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/uripermissionservices/server/src/tldlistinitializer.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,275 @@
+// Copyright (c) 2008-2009 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:
+
+#include "tldlistinitializer.h"
+#include "tldschema.h"
+#include "urilistinterface.h"
+#include "tldproperties.h"
+
+using namespace Xml;
+
+CTldListInitializer* CTldListInitializer::NewL ( CUriListInterface& aListInterface )
+	{
+	CTldListInitializer* self = new ( ELeave ) CTldListInitializer ( aListInterface );
+	CleanupStack::PushL ( self );
+	self->ConstructL ();
+	CleanupStack::Pop ();
+	return self;
+	}
+
+CTldListInitializer::~CTldListInitializer ()
+	{
+	iContent.Close ();
+	iTldName.Close ();
+	iStringPool.Close ();
+	delete iTldUriImpl;
+	}
+
+
+CTldListInitializer::CTldListInitializer ( CUriListInterface& aListInterface )
+: iListInterface ( aListInterface ),
+iParserState ( EInitial )
+	{
+		
+	}
+
+void CTldListInitializer::ConstructL ()
+	{
+	const TInt KMaxContentSize = 4 * 1024;
+	iContent.CreateL (KMaxContentSize);
+	iStringPool.OpenL ( TLDXMLTAGS::Table ); // Open the schema table
+	iTldUriImpl = CTldProperties::NewL (InetUriList::EBlackList); // Create an empty object
+	}
+
+void CTldListInitializer::ParseDocumentL ( const TDesC& aFile )
+	{
+	_LIT8( KXmlParserDataType, "text/xml" );
+	
+	RFs myFs;
+	CleanupClosePushL ( myFs );
+	User::LeaveIfError ( myFs.Connect () );
+	
+	CParser* myParser = CParser::NewLC ( KXmlParserDataType(), *this );
+	ParseL ( *myParser, myFs, aFile );
+	CleanupStack::PopAndDestroy ( 2 ); // myParser, myFs
+	}
+
+// Virtual functions from MContentHandler
+void CTldListInitializer::OnStartDocumentL ( const Xml::RDocumentParameters& /* aDocParam */, TInt aErrorCode )
+	{
+	User::LeaveIfError ( aErrorCode );
+	}
+	
+void CTldListInitializer::OnEndDocumentL ( TInt aErrorCode )
+	{
+	User::LeaveIfError ( aErrorCode );		
+	}
+
+void CTldListInitializer::OnStartElementL ( const Xml::RTagInfo& aElement, const Xml::RAttributeArray&  aAttributes, TInt aErrorCode )
+	{	
+	User::LeaveIfError ( aErrorCode );		
+	SetParserState ( ParserStateL( aElement.LocalName() ) );
+	SaveTldName(aAttributes); 
+	SetTldNameL ( );
+	}
+
+void CTldListInitializer::OnEndElementL ( const Xml::RTagInfo& aElement, TInt aErrorCode )
+	{
+	User::LeaveIfError ( aErrorCode );
+	SetParserState ( ParserStateL( aElement.LocalName(), ETrue ) );		
+	SetValueL ( KNullDesC8() );
+	if ( iParserState == EEndOfListtype )
+		{
+		// Insert the record and then clear
+		iListInterface.InsertTldPolicyDataL( *iTldUriImpl );
+		iTldUriImpl->Clear();
+		}
+	}
+
+void CTldListInitializer::OnContentL ( const TDesC8& aBytes, TInt aErrorCode )
+	{
+	User::LeaveIfError ( aErrorCode );	
+	SetValueL ( aBytes );
+	}
+
+void CTldListInitializer::SetParserState ( TParserState aNewState )
+	{
+	switch ( aNewState )
+		{
+		case EInitial:
+		iParserState = EInitial;
+		break;
+		
+		case EStartOfPolicyData:
+		__ASSERT_DEBUG ( iParserState == EInitial, User::Invariant() );
+		iParserState = aNewState;
+		break;
+
+		case EEndOfPolicyData:
+		__ASSERT_DEBUG ( iParserState == EEndOfTLD, User::Invariant() );
+		iParserState = aNewState;
+		break;
+		
+		case EStartOfTLD:
+		__ASSERT_DEBUG ( (iParserState == EStartOfPolicyData) || (iParserState == EEndOfTLD ), User::Invariant() );
+		iParserState = aNewState;				
+		break;
+		
+		case EEndOfTLD:
+		__ASSERT_DEBUG ( iParserState == EEndOfListtype, User::Invariant() );
+		iParserState = aNewState;				
+		break;
+		
+		case EStartOfListtype:
+		__ASSERT_DEBUG ( (iParserState ==  EStartOfTLD ) || (iParserState == EEndOfListtype), User::Invariant() );
+		iParserState = aNewState;
+		break;
+		
+		case EEndOfListtype:
+		__ASSERT_DEBUG ( iParserState == EStartOfListtype, User::Invariant() );
+		iParserState = aNewState;		
+		break;
+		
+		default:
+
+		// Do nothing
+		break;
+		}	
+	}
+
+CTldListInitializer::TParserState CTldListInitializer::ParserStateL ( const RString& aTag, TBool aEndElement /* =EFalse */ )
+	{	
+	// Open a RString from the string pool
+	RString myTagString = iStringPool.OpenStringL ( aTag.DesC() );
+	TInt tblIndex = myTagString.Index ( TLDXMLTAGS::Table );
+	TParserState parserState( EInitial );
+	switch ( tblIndex )
+		{
+		case TLDXMLTAGS::EPolicyData:
+			{
+			parserState = aEndElement ? EEndOfPolicyData : EStartOfPolicyData;
+			break;				
+			}
+
+		case TLDXMLTAGS::EWhitelist:
+		case TLDXMLTAGS::EBlacklist:
+			{
+			parserState = aEndElement ? EEndOfListtype : EStartOfListtype;
+			SetListType ( tblIndex );
+			break;				
+			}
+		
+		case TLDXMLTAGS::ETLD:
+			{
+			parserState = aEndElement ? EEndOfTLD : EStartOfTLD;
+			break;	
+			}
+
+		default:
+			{
+			// Do nothing
+			break;
+			}
+		}	
+	myTagString.Close ();
+	return parserState;	
+	}
+
+void CTldListInitializer::SetListType ( TInt aIndex )
+	{
+	switch ( aIndex )	
+		{
+		case TLDXMLTAGS::EWhitelist: 
+			{
+			iTldUriImpl->SetListType(InetUriList::EWhiteList);
+			break;		
+			}
+		case TLDXMLTAGS::EBlacklist:
+			{
+			iTldUriImpl->SetListType(InetUriList::EBlackList);
+			break;	
+			}
+		default:
+			{
+			User::Invariant ();	
+			}
+		}
+	}
+
+void CTldListInitializer::SetTldNameL ( )
+	{
+	switch ( iParserState )	
+		{
+		case EStartOfListtype:
+			{
+			iTldUriImpl->SetTldNameL(iTldName);
+			break;
+			}
+		default:
+			{
+			//Do Nothing
+			break;
+			}
+		}
+	}	
+
+void CTldListInitializer::SetValueL ( const TDesC8& aValue )
+	{	
+	switch ( iParserState )		
+		{
+		case EStartOfListtype:
+			{
+			iContent.Append ( aValue );
+			break;	
+			}
+		case EEndOfListtype:
+			{
+			if ( iContent.Length() > 0 )
+				{
+				//Set initialize database(Blobs)
+				iTldUriImpl->SetCharacterSetL(iContent);
+				iContent.Zero ();
+				}
+			break;
+			}
+		default: 
+			{
+			// do nothing
+			break;	
+			}
+		}
+	}
+
+//Store the Tld name for later use
+void CTldListInitializer::SaveTldName(const Xml::RAttributeArray&  aAttributes)
+	{
+	_LIT8( KName, "name" );
+	TInt nAttributes = aAttributes.Count();
+	for(TInt index(0); index < nAttributes; index++)
+		{
+		const RAttribute& KAttribute = aAttributes[index];
+		const RTagInfo& KNameInfo = KAttribute.Attribute();
+		const TDesC8& KLocalName8 = KNameInfo.LocalName().DesC();
+		if ( iParserState == EStartOfTLD )
+			{
+			// Store the TLD name for later use
+			__ASSERT_ALWAYS(KLocalName8.CompareF( KName ) == 0, User::Invariant() );
+			iTldName.Close();
+			iTldName.Create( KAttribute.Value().DesC() );
+			break;	
+			}
+		}
+	}
+	
+