contactextensions/predefinedcontacts/inc/PdcXMLContentHandler.h
branchRCL_3
changeset 20 f4a778e096c2
parent 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contactextensions/predefinedcontacts/inc/PdcXMLContentHandler.h	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2007 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:    XML content handler, constructs contacts entrys based upon
+*                callbacks from the Xml parser. 
+*
+*/
+
+#ifndef C_PDCXMLCONTENTHANDLER_H
+#define C_PDCXMLCONTENTHANDLER_H
+
+// System includes
+#include <e32base.h>                // CBase
+#include <contenthandler.h>         // MContentHandler
+#include <MVPbkContactObserver.h>   // MVPbkContactObserver
+#include <CPbkContactItem.h> // CPbkContactItem
+
+// User includes
+#include "CVPbkContactManager.h"
+#include "pdcstringconstants.h"
+#include "pdclogger.h"
+
+// Forward declarations
+class MVPbkStoreContact;
+class MVPbkContactStore;
+class Xml::RTagInfo;
+class CVPbkContactLinkArray;
+class MVPbkContactFieldData;
+
+const TInt phoneNumberCount = 10;
+/**
+ *  This class is an implementation of the Xml:MContentHandler interface,
+ *  it is reponsible for creating contact items and and adding them to 
+ *  the contacts engine based upon the callbacks from the XML parser.
+ */
+NONSHARABLE_CLASS( CPdcXmlContentHandler ): public CBase,
+    public Xml::MContentHandler, public MVPbkContactObserver
+    {
+public:
+    /**
+    * Symbian 1st phase constructor
+    * @return Self pointer to CPdcXmlContentHandler
+    * @param    aContactStore      contacts store
+    * @param    aLinkArray         links to the contacts added.
+    * @return   a CPdcXmlContentHandler object.
+    */
+    static CPdcXmlContentHandler* NewL( MVPbkContactStore& aContactStore,
+                              CVPbkContactLinkArray& aLinkArray);
+    
+    /**
+    * Destructor.
+    */
+    virtual ~CPdcXmlContentHandler();
+    
+    /**
+     * Sets the string pool
+     * @param aStringPool   parser's string pool
+     */
+     void SetStringPoolL( RStringPool& aStringPool );
+     
+     /**
+     * Sets the contactmanager 
+     * @param aContactManager   engine's contactmanager
+     */
+     void SetContactManager(CVPbkContactManager* aContactManager);
+
+private: // C++ constructor and the Symbian second-phase constructor 
+    CPdcXmlContentHandler( MVPbkContactStore& aContactStore,
+                                           CVPbkContactLinkArray& aLinkArray);
+    void ConstructL();
+    
+private: // private member functions
+    TInt GetTagIndexL( const Xml::RTagInfo& aElement ) const;
+    
+    void AddFieldL( TInt aFieldResId, const TDesC8& aBuffer );
+    void SetTextFieldL( MVPbkContactFieldData& aFieldData, 
+                                                    const TDesC8& aBuffer );
+    void SetBinaryFieldL( MVPbkContactFieldData& aFieldData,
+                                                    const TDesC8& aBuffer ); 
+    void SetDateFieldL( MVPbkContactFieldData& aFieldData,
+                                                    const TDesC8& aBuffer );
+    void AddContactL();
+    TInt GetSpeeddialAssignedFieldIndexL(CPbkContactItem* aItem);
+    TInt ContactItemFieldIndexL( CPbkContactItem* aItem );
+    TInt GetDefaultSpeeddialAssignedFieldIndexL();
+    TBool CheckValidityOfSpeeddialAssignedFieldL( TInt aFieldIndex );
+    
+private: // from MContentHandler
+   	void OnStartDocumentL(const Xml::RDocumentParameters& aDocParam,
+   	                                             TInt aErrorCode);
+	void OnEndDocumentL(TInt aErrorCode); 
+	void OnStartElementL(const Xml::RTagInfo& aElement, 
+	                 const Xml::RAttributeArray& aAttributes, TInt aErrorCode);
+	void OnEndElementL(const Xml::RTagInfo& aElement, TInt aErrorCode); 
+	void OnContentL(const TDesC8& aBytes, TInt aErrorCode);
+    void OnStartPrefixMappingL( const RString& aPrefix,
+            const RString& aUri, TInt aErrorCode );
+	void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode);   
+	void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode);   
+	void OnSkippedEntityL(const RString& aName, TInt aErrorCode);	  
+    void OnProcessingInstructionL( const TDesC8& aTarget,
+            const TDesC8& aData, TInt aErrorCode );
+	void OnError(TInt aErrorCode);
+	TAny* GetExtendedInterface(const TInt32 aUid);
+	
+private: // from MVPbkContactObserver
+    void ContactOperationCompleted(TContactOpResult aResult);
+    void ContactOperationFailed
+            (TContactOp aOpCode, TInt aErrorCode, TBool aErrorNotified);
+	
+private: // data
+    /// Ref: Contact store
+    MVPbkContactStore& iContactStore;
+    /// Ref: Ids of the contacts that have been added
+    CVPbkContactLinkArray& iLinkArray;
+    /// Ref: String pool
+    RStringPool* iStringPool;
+    /// Own: Content buffer
+    RBuf8 iContentBuffer;
+    /// The current tag can be handled.
+    TBool iKnownTag;
+    /// Own: Contact item being created.
+    MVPbkStoreContact* iContactItem;
+    /// Own
+    CActiveSchedulerWait* iWait;
+    /// Error reported to contact observer
+    TInt iContactObserverError;
+    TInt iSpeeddialValue;
+    CVPbkContactManager* iContactManager;
+    /// The content of speeddial number
+    TInt iSpeeddialIndex;
+    /// Own: Speeddial assigned phone number field
+    TInt iSpeeddialAssignedFieldIndex;
+    RFs iFs;     
+    static const 
+        TInt iSpeeddailSupportedAssignedFieldsIndexSet[phoneNumberCount];
+
+    };
+
+#endif // C_PDCXMLCONTENTHANDLER_H