--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contactextensions/predefinedcontacts/inc/PdcXMLContentHandler.h Tue Feb 02 10:12:17 2010 +0200
@@ -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