messagingappbase/smartmessaging/wmlbc/src/WmlFieldParser.cpp
changeset 0 72b543305e3a
--- /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 <wappdef.h>                    // Labels for use in array of ParsedFields
+#include <bsp.h>                        // for CParsedField
+#include <featmgr.h>
+#include <bldvariant.hrh>
+
+// ================= 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<CParsedField>& aParsedFieldArray,   
+    CArrayPtrSeg<CWmlSubItemBase>& 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