diff -r 000000000000 -r 72b543305e3a messagingappbase/smartmessaging/wmlbc/src/WmlFieldParser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/smartmessaging/wmlbc/src/WmlFieldParser.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,223 @@ +/* +* Copyright (c) 2002 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: +* This class is used to parse fields to wml control from array, +* which is created by Wap Parser (wapp.dll). +* +*/ + + + +// INCLUDE FILES + +#include "WmlFieldParser.h" // CWmlFieldParser +#include "WmlBMSubItem30.h" // for CWmlBMSubItem +#include "WmlBioControl.pan" + +#include // Labels for use in array of ParsedFields +#include // for CParsedField +#include +#include + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// Constructor +// --------------------------------------------------------- +// +CWmlFieldParser::CWmlFieldParser() : iCurrentCharacteristicType(ENotSpecifyed) + { + } + +// --------------------------------------------------------- +// Destructor +// --------------------------------------------------------- +// +CWmlFieldParser::~CWmlFieldParser() + { + delete iBm; + } + +// --------------------------------------------------------- +// CWmlFieldParser::ParseFieldsL() +// Function goes through parsedfieldarray and creates subitems, +// important thing is that field array has name value pairs and +// meaning of these depends on which is the current character tag. +// --------------------------------------------------------- +// +void CWmlFieldParser::ParseFieldsL( + const CArrayPtrSeg& aParsedFieldArray, + CArrayPtrSeg& aBMArray ) + { + iBMArray = &aBMArray; + + const TInt fieldCount = aParsedFieldArray.Count(); + + TPtrC fieldName; + TPtrC fieldValue; + TInt fieldEnum; + + for ( TInt i = 0; i < fieldCount; i++ ) + { + fieldName.Set( aParsedFieldArray.At(i)->FieldName() ); + fieldValue.Set( aParsedFieldArray.At(i)->FieldValue() ); + RDebug::Print(_L("FieldParser Name: %S Value: %S"), &fieldName, &fieldValue); + + // Checks if the field indicates a new characteristic type. + // Sets the iCurrentCharacteristicType attribute! + if( !IsCharacteristicTypeL( fieldName, fieldValue, fieldEnum ) ) + { + + // Have to check what is the current characteric type, + // because fields in same name need to be added + // differently in different types. + switch ( iCurrentCharacteristicType ) + { + case EWappCharacteristicBookmark: + { + // iBm is always created when arrived here + iBm->AddFieldL( fieldValue, fieldEnum); + break; + } + default: + { + break; + } + } + } + } + + AddCurrentBMToArrayL(); + + // If bookmarks are not supported clear the array + if ( !FeatureManager::FeatureSupported( KFeatureIdSmartmsgSMSBookmarkReceiving ) ) + { + iBMArray->ResetAndDestroy(); + } + } + +// --------------------------------------------------------- +// CWmlFieldParser :: CompareField +// This is used to map a fieldname to program enumerations. +// Done only because it is much faster to compare enums later +// --------------------------------------------------------- +// +TWappParserFields CWmlFieldParser::CompareField( TPtrC aFieldName ) + { + if ( !aFieldName.Compare( KWappCharAddress ) ) + return EWappCharacteristicAddress; + if ( !aFieldName.Compare( KWappCharBookmark ) ) + return EWappCharacteristicBookmark; + if ( !aFieldName.Compare( KWappCharName ) ) + return EWappCharacteristicName; + if ( !aFieldName.Compare( KWappCharURL ) ) + return EWappCharacteristicURL; + if ( !aFieldName.Compare( KWappCharMMSURL ) ) + return EWappCharacteristicMMSURL; + if ( !aFieldName.Compare( KWappCharID ) ) + return EWappCharacteristicID; + if ( !aFieldName.Compare( KWappISP ) ) + return EWappISP; + if ( !aFieldName.Compare( KWappName ) ) + return EWappName; + if ( !aFieldName.Compare( KWappBearer ) ) + return EWappBearer; + if ( !aFieldName.Compare( KWappSMSCAddress ) ) + return EWappSMSCAddress; + if ( !aFieldName.Compare( KWappProxy ) ) + return EWappProxy; + if ( !aFieldName.Compare( KWappPort ) ) + return EWappPort; + if ( !aFieldName.Compare( KWappProxyType ) ) + return EWappProxyType; + if ( !aFieldName.Compare( KWappURL ) ) + return EWappURL; + if ( !aFieldName.Compare( KWappProxyAuthName ) ) + return EWappProxyAuthName; + if ( !aFieldName.Compare( KWappProxyAuthSecret ) ) + return EWappProxyAuthSecret; + if ( !aFieldName.Compare( KWappProxyLoginType ) ) + return EWappProxyLoginType; + if ( !aFieldName.Compare( KWappUSSDCode ) ) + return EWappUSSDCode; + if ( !aFieldName.Compare( KWappAccessPointName ) ) + return EWappGPRSAccessPointName; + if ( !aFieldName.Compare( KWappCsdDial ) ) + return EWappCsdDial; + if ( !aFieldName.Compare( KWappCsdCallType ) ) + return EWappCsdCallType; + if ( !aFieldName.Compare( KWappCsdCallSpeed ) ) + return EWappCsdCallSpeed; + if ( !aFieldName.Compare( KWappPPPAuthType ) ) + return EWappPPPAuthType; + if ( !aFieldName.Compare( KWappPPPAuthName ) ) + return EWappPPPAuthName; + if ( !aFieldName.Compare( KWappPPPLoginType ) ) + return EWappPPPLoginType; + if ( !aFieldName.Compare( KWappPPPAuthSecret ) ) + return EWappPPPAuthSecret; + + return ENotSpecifyed; + } + +// --------------------------------------------------------- +// CWmlFieldParser :: IsCharacteristicTypeL +// --------------------------------------------------------- +// +TBool CWmlFieldParser::IsCharacteristicTypeL( + TPtrC aFieldName, + TPtrC /*aFieldValue*/, + TInt& aEnumField ) + { + aEnumField = CompareField( aFieldName ); + TBool retValue(EFalse); + + switch( aEnumField ) + { + case EWappCharacteristicBookmark: + { + AddCurrentBMToArrayL(); + iBm = CWmlBMSubItem::NewL(); + iCurrentCharacteristicType = EWappCharacteristicBookmark; + retValue = ETrue; + break; + } + default: + { + retValue = EFalse; + break; + } + } + return retValue; + } + +// --------------------------------------------------------- +// CWmlFieldParser :: AddCurrentBMToArrayL +// --------------------------------------------------------- +// +void CWmlFieldParser::AddCurrentBMToArrayL() + { + if( iBm && iBm->IsValidL() ) + { + iBMArray->AppendL( iBm ); + iBm = NULL; + } + else // item is not valid and it must be deleted. + { + delete iBm; + iBm = NULL; + } + } + +// End of File