diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/uripermissionservices/server/src/urilistinitializer.cpp --- /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 ( 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 + } + }