applayerpluginsandutils/uripermissionservices/server/src/urilistinitializer.cpp
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/uripermissionservices/server/src/urilistinitializer.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,301 @@
+// 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 "urilistinitializer.h"
+#include "urischema.h"
+#include "urilistinterface.h"
+#include "ineturiimpl.h"
+
+using namespace Xml;
+
+
+CUriListInitializer* CUriListInitializer::NewL ( CUriListInterface& aListInterface )
+	{
+	CUriListInitializer* self = new ( ELeave ) CUriListInitializer ( aListInterface );
+	CleanupStack::PushL ( self );
+	self->ConstructL ();
+	CleanupStack::Pop ();
+	return self;
+	}
+
+CUriListInitializer::~CUriListInitializer ()
+	{
+	iContent.Close ();
+	iStringPool.Close ();
+	delete iInetUriImpl;
+	}
+
+
+CUriListInitializer::CUriListInitializer ( CUriListInterface& aListInterface )
+: iListInterface ( aListInterface ),
+iParserState ( EInitial )
+	{
+		
+	}
+
+void CUriListInitializer::ConstructL ()
+	{
+	const TInt KMaxContentSize = 4 * 1024;
+	iContent.CreateL (KMaxContentSize);
+	iStringPool.OpenL ( URIXMLTAGS::Table ); // Open the schema table
+	iInetUriImpl = CInetUriImpl::NewL (); // Create an empty object
+	}
+
+void CUriListInitializer::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 CUriListInitializer::OnStartDocumentL ( const Xml::RDocumentParameters& /* aDocParam */, TInt aErrorCode )
+	{
+	User::LeaveIfError ( aErrorCode );
+	}
+	
+void CUriListInitializer::OnEndDocumentL ( TInt aErrorCode )
+	{
+	User::LeaveIfError ( aErrorCode );		
+	}
+
+void CUriListInitializer::OnStartElementL ( const Xml::RTagInfo& aElement, const Xml::RAttributeArray& /* aAttributes */, TInt aErrorCode )
+	{	
+	User::LeaveIfError ( aErrorCode );		
+	SetParserState ( ParserStateL( aElement.LocalName() ) );
+	}
+
+void CUriListInitializer::OnEndElementL ( const Xml::RTagInfo& aElement, TInt aErrorCode )
+	{
+	User::LeaveIfError ( aErrorCode );
+	SetParserState ( ParserStateL( aElement.LocalName(), ETrue ) );		
+	SetValueL ( KNullDesC8() );
+	if (!iInetUriImpl->IsDirty()) 
+		{
+		if( iParserState == EEndOfRecord )
+		    {
+		    // Insert the record	
+		    iListInterface.InsertL ( *iInetUriImpl );
+		    iInetUriImpl->Clear ();
+		    }
+		}
+	}
+
+void CUriListInitializer::OnContentL ( const TDesC8& aBytes, TInt aErrorCode )
+	{
+	User::LeaveIfError ( aErrorCode );	
+	SetValueL ( aBytes );
+	}
+
+TInt CUriListInitializer::ConvertToInteger ( const TDesC8& aValue )
+	{
+	TInt num = -1;
+	TLex8 lexRead (aValue);
+	lexRead.Val ( num );
+	return num;
+	}
+
+void CUriListInitializer::SetParserState ( TParserState aNewState )
+	{
+	switch ( aNewState )
+		{
+		case EInitial:
+		iParserState = EInitial;
+		break;
+		
+		case EStartOfServicetype:
+		__ASSERT_DEBUG ( iParserState == EInitial, User::Invariant() );
+		iParserState = aNewState;
+		break;
+		
+		case EEndOfServicetype:
+		__ASSERT_DEBUG ( iParserState == EEndOfListtype, User::Invariant() );
+		iParserState = aNewState;
+		break;
+		
+		case EStartOfListtype:
+		__ASSERT_DEBUG ( (iParserState == EStartOfServicetype) || (iParserState == EEndOfListtype), User::Invariant() );
+		iParserState = aNewState;
+		break;
+		
+		case EEndOfListtype:
+		__ASSERT_DEBUG ( iParserState == EEndOfRecord, User::Invariant() );
+		iParserState = aNewState;		
+		break;
+		
+		case EStartOfRecord:
+		__ASSERT_DEBUG ( (iParserState == EStartOfListtype) || (iParserState == EEndOfRecord), User::Invariant() );
+		iParserState = aNewState;				
+		break;
+		
+		case EEndOfRecord:
+		__ASSERT_DEBUG ( (iParserState == EEndOfUri) || (iParserState == EEndOfPermission) || (iParserState == EEndOfFavouriteName), User::Invariant() );
+		iParserState = aNewState;				
+		break;
+		
+		case EStartOfUri:
+		case EStartOfPermission:
+		case EStartOfFavouriteName:		
+		iParserState = aNewState;				
+		break;
+		
+		case EEndOfUri:
+		__ASSERT_DEBUG ( (iParserState == EStartOfUri), User::Invariant() );
+		iParserState = aNewState;
+		break;
+		
+		case EEndOfPermission:
+		__ASSERT_DEBUG ( (iParserState == EStartOfPermission), User::Invariant() );			
+		iParserState = aNewState;		
+		break;
+		
+		case EEndOfFavouriteName:
+		__ASSERT_DEBUG ( (iParserState == EStartOfFavouriteName), User::Invariant() );
+		iParserState = aNewState;		
+		break;
+
+		default:
+
+		// Do nothing
+		break;
+		}	
+	}
+
+CUriListInitializer::TParserState CUriListInitializer::ParserStateL ( const RString& aTag, TBool aEndElement /* =EFalse */ )
+	{	
+	// Open a RString from the string pool
+	RString myTagString = iStringPool.OpenStringL ( aTag.DesC() );
+	TInt tblIndex = myTagString.Index ( URIXMLTAGS::Table );
+	TParserState parserState = EInitial;
+	switch ( tblIndex )
+		{
+		case URIXMLTAGS::EWapPush:
+		case URIXMLTAGS::EBrowser:
+		case URIXMLTAGS::EDevPro:
+		case URIXMLTAGS::EPushEMail:
+		case URIXMLTAGS::EVoip:
+		parserState = aEndElement ? EEndOfServicetype : EStartOfServicetype;
+		SetServiceType ( tblIndex );
+		break;
+		case URIXMLTAGS::EWhitelist:
+		case URIXMLTAGS::EBlacklist:
+		parserState = aEndElement ? EEndOfListtype : EStartOfListtype;
+		SetListType ( tblIndex );
+		break;
+		
+		case URIXMLTAGS::ERecord:
+		parserState = aEndElement ? EEndOfRecord : EStartOfRecord;
+		break;
+		
+		case URIXMLTAGS::EUri:
+		parserState = aEndElement ? EEndOfUri : EStartOfUri;
+		break;
+
+		case URIXMLTAGS::EPermission:
+		parserState = aEndElement ? EEndOfPermission : EStartOfPermission;		
+		break;
+
+		case URIXMLTAGS::EFavouriteName:
+		parserState = aEndElement ? EEndOfFavouriteName : EStartOfFavouriteName;
+		break;
+		
+		default:
+		// Do nothing
+		break;
+		}	
+	myTagString.Close ();
+	return parserState;	
+	}
+
+void CUriListInitializer::SetServiceType ( TInt aIndex )
+	{
+	switch ( aIndex )
+		{
+		case URIXMLTAGS::EWapPush:
+		iInetUriImpl->Properties().SetServiceType (InetUriList::EWapPush);
+		break;
+		case URIXMLTAGS::EBrowser:
+		iInetUriImpl->Properties().SetServiceType (InetUriList::EBrowser);		
+		break;
+		case URIXMLTAGS::EDevPro:
+		iInetUriImpl->Properties().SetServiceType (InetUriList::EDevProv);		
+		break;
+		case URIXMLTAGS::EPushEMail:
+		iInetUriImpl->Properties().SetServiceType (InetUriList::EPushEMail);
+		break;
+		case URIXMLTAGS::EVoip:
+		iInetUriImpl->Properties().SetServiceType (InetUriList::EVoip);
+		break;
+		default:
+		User::Invariant ();				
+		}
+	}
+
+void CUriListInitializer::SetListType ( TInt aIndex )
+	{
+	switch ( aIndex )	
+		{
+		case URIXMLTAGS::EWhitelist:
+		iInetUriImpl->Properties().SetListType (InetUriList::EWhiteList);
+		break;
+		
+		case URIXMLTAGS::EBlacklist:
+		iInetUriImpl->Properties().SetListType (InetUriList::EBlackList);
+		break;
+		
+		default:
+		User::Invariant ();
+		}
+	}
+
+void CUriListInitializer::SetValueL ( const TDesC8& aValue )
+	{	
+	switch ( iParserState )		
+		{
+		case EStartOfUri:
+		case EStartOfFavouriteName:
+		iContent.Append ( aValue );
+		break;
+		
+		case EStartOfPermission:
+		iInetUriImpl->Properties().SetPermission (static_cast <InetUriList::TPermission> ( ConvertToInteger ( aValue ) ) );
+		break;
+				
+		case EEndOfUri:
+		if ( iContent.Length() > 0 )
+			{
+			iInetUriImpl->SetUriL ( iContent );
+			iContent.Zero ();			
+			}
+		break;
+		
+		case EEndOfFavouriteName:
+		if ( iContent.Length() > 0 )
+			{
+			iInetUriImpl->Properties().SetFavouriteNameL ( iContent );		
+			iContent.Zero ();		
+			}
+			break;
+			
+		default:
+		break;	// do nothing
+		}
+	}