diff -r 88ee4cf65e19 -r 1aa8c82cb4cb remotestoragefw/webdavaccessplugin/inc/rsfwpropfindparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remotestoragefw/webdavaccessplugin/inc/rsfwpropfindparser.h Wed Sep 01 12:15:08 2010 +0100 @@ -0,0 +1,151 @@ +/* +* Copyright (c) 2002-2004 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: WebDAV PropFind method response body parser + * +*/ + + +#ifndef CRSFWPROPFINDPARSER_H +#define CRSFWPROPFINDPARSER_H + +// INCLUDES +#include +#include // needed for RAttributeArray + +#include "rsfwdavfileinfo.h" +#include "rsfwdirent.h" + +// CONSTANTS +const TInt KMaxNameSpaces = 10; + +// FORWARD DECLARATIONS +class CRsfwDirEnt; + +// CLASS DECLARATION +/** + * WebDAV Lock operation response body parser. + * Parses directory listing from WebDAV-server, which we got + * as XML-body response to PROPFIND-query. + * + * FOR METADATA: + * This comes from upper lever and are used to store relevant metadata + * from directory listing. + * Currently we want to extract the following to the entry + * displayname + * 2002-12-19T13:51:16Z + * Thu, 19 Dec 2002 13:51:16 GMT + * 2324; + * + * FOR CACHE CONCISTENCY: + * We need to remember the ETag of searched directory + * + * @lib davaccess.lib + * @since Series 60 3.1 + */ + +class CRsfwPropFindParser : public CBase, public Xml::MContentHandler + { +// EName = parsing is inside etc., +// ELooking = parsing is outside all tags of interest + enum TState + { + EName, + EResponse, + ENameInDisplayName, + EDate, + EModified, + ELength, + EResourceType, + EContentType, + EETag, + ELooking + }; + +public: // Constructors and destructor + /** + * Two-phased constructor. + */ + static CRsfwPropFindParser* NewL(); + static CRsfwPropFindParser* NewLC(); + + /** + * Destructor. + */ + virtual ~CRsfwPropFindParser(); + +public: // Functions from base classes +// Symbian parser + // From XML::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); + +public: // New functions + // setters for the parser + /** + Set directory entry to be filled + @param aDirEntArray directory entry array + */ + void SetDirEntArray(RPointerArray* aDirEntArray); + + /** + Set target directory + @param aPropFindPath Propfind resource path + @param aDepth Propfind depth + */ + void SetTargetDirectory(const TDesC& aPropFindPath, TInt aDepth); + + /** + Returns the error code if there was an error during parsing of + the response. + */ + TInt GetLastError(); + + +private: + void ConstructL(); + void ClearDirEntryL(); + HBufC* DecodeL(const TDesC8& aData); + +private: // Data + // Internal variables + RPointerArray* iDirEntArray; // not owned by us + const TDesC* iPropFindPath; // path + HBufC8* iContentString; + TInt iDepth; + CRsfwDirEnt* iDirEntry; // metadata entry currently read + TState iParseState; // internal state + TBool iCurrentIsParent; + TInt iError; // indicates a processing error + }; + +#endif // CRSFWPROPFINDPARSER_H + +// End of File