--- /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
+ }
+ }