diff -r 5b6f26637ad3 -r f4a778e096c2 contactextensions/predefinedcontacts/inc/PdcXMLContentHandler.h --- /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 // CBase +#include // MContentHandler +#include // MVPbkContactObserver +#include // 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