xdmprotocols/LocalProtocol/inc/LocalDocument.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:23:14 +0100
branchRCL_3
changeset 35 fbd2e7cec7ef
parent 0 c8caa15ef882
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201027 Kit: 201035

/*
* Copyright (c) 2005 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: CLocalDocument
*
*/




#ifndef __LOCALDOCUMENT__
#define __LOCALDOCUMENT__

#include <e32base.h>
#include "XdmDocument.h"

_LIT( KTimeStampFileExt,                           ".tmsp");
_LIT( KDateFormat,                                 "%1-%2-%3");
_LIT( KTimeFormat,                                 "%H:%T:%S");
const TInt KDateTimeMaxSize                        = 200;
const TInt KDateBufferMaxSize                      = 50;

//FORWARD DECLARATIONS
class CXdmNamespace;
class MXdmOperation;
class CLocalProtocol;
class CLocalDocumentNode;
class CXdmOperationFactory;

//CLASS DECLARATION
class CLocalDocument : public CXdmDocument
    {
    public:
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        static CLocalDocument* NewL( CXdmEngine& aXdmEngine,
                                     const TDesC& aDocumentName,
                                     CLocalProtocol& aLocalProtocol );
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        //static CLocalDocument* NewL( const TDesC8& aDocumentName );
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        void StartInternalL( TRequestStatus& aStatus );
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        void CancelUpdate(); 

        /**
        * Destructor.
        */      
        virtual ~CLocalDocument();
    
    public:  //Exported methods
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        IMPORT_C CLocalDocument* TempCopyL();
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        IMPORT_C TPtrC XmlFilePath() const;
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        IMPORT_C TBool IsSubset() const;
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        IMPORT_C virtual void ResetSubset();
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        IMPORT_C void RemoveData( CLocalDocumentNode* aDocumentNode );
    
    public:   //From CXdmDocument
    
        /**
        * Return the root element of this document
        *
        * @return CXdmDocumentNode The root element of the document
        *
        * NOTE: The returning node may or may not contain any data,
        *       since, in the case that this document model does not
        *       have content yet, the element is a simple "entry point"
        *       to the whole document. Thus, for instance, if the client
        *       application requests the Xdm Engine to fetch a particular
        *       document, the root element points to nothing until the 
        *       request has been completed.
        *         
        */
        CXdmDocumentNode* DocumentRoot() const;
        
    private:  //From CXdmDocument
        
        /**
        * Construct an "anonymous" entry point for this document.
        * This node effectively becomes the root of this document.
        * 
        */
        CXdmDocumentNode* CreateRootL();
        
        /*
        * Reset the contents of this document model.
        */
        void ResetContents();
        
        /**
        * Return the time stamp for this document
        *
		* @return TTime 
        */
        TTime TimeStamp() const;
        
        /**
        * Return an error document for a failed update
        * 
        * NOTE: Error document is not supported in this
        *       protocol. The returning pointer will be NULL.
        *
		* @return CXdmDocument* The error document
        */
        CXdmDocumentNode* ErrorRoot();
        
        /**
        * Append an element to the path identifying the 
        * the current document subset
        * @return void
        */
        void AppendPathPartL( const TDesC& aString );
        
        /**
        * Return the current document subset (including descendants)
        * @return void
        */
        CXdmDocumentNode* CurrentExtent() const;
        
        /**
        * Construct an "anonymous" entry point for this document.
        * This node effectively becomes the root of this document.
        */
        TXdmDocType DocumentType() const;
        
    private:  //From MXdmNamespaceContainer
    
        /**
        * Return the number of namespace declarations
        * @return TInt Namespace declaration count
        */
        TInt Count() const;
        
        /**
        * Copies the request data
        * @param aRequestData Data to be sent
        */
        void AppendNamespaceL( const TDesC8& aUri, const TDesC8& aPrefix );
        
        /**
        * Remove a namespace from the document
        * @param TDesC8& URI of the namespace
        * @param TDesC8& Prefix of the namespace
        */
        void RemoveNamespace( const TDesC8& aUri );
        
        /**
        * Copies the request data
        * @param aRequestData Data to be sent
        */
        TPtrC8 Uri( const TDesC8& aPrefix ) const;
        
        /**
        * Fetch the aIndex-th URI
        * @param TInt The index of the desired URI string
        * @return TPtrC URI string
        */
        TPtrC8 Uri( TInt aIndex ) const;
        
        /**
        * Fetch the aIndex-th prefix
        * @param TDesC8 The index of the desired prefix string
        * @return TPtrC Prefix string
        */
        TPtrC8 Prefix( TInt aIndex ) const;
    
        /**
        * Resets namespaces from the document
        */
        void ResetNamespaces( );
    
    private:
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        CLocalDocument( CXdmEngine& aXdmEngine,
                        CLocalProtocol& aLocalProtocol );
        
        /**
        * From CActive.
        * @return void
        */
		void RunL();

        /**
        * From CActive.
        * @return void
        */
		void DoCancel();
		
		/**
        * From CActive.
        * @return void
        */
		void FinaliseOperation( TInt aIndex );
		
		/**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        void StartUpdateL();
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        void SaveClientStatus( TRequestStatus& aStatus );           
        
        /**
        * _DEBUG
        */
        void DumpResponseBodyL( const TDesC8& aResponseBody ) const;
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        void ConstructL();
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        void ConstructL( const TDesC8& aDocumentName );
        
        /**
        * Symbian OS default constructor.
        * @param TInt Default Access Point ID
        * @return CXdmDocOperation*
        */     
        void FetchTimeStampL();
        
    private:  //Data
        
        enum TLocalOperation
            {
            EFetch = 0,
            EReplace,
            EInsert,
            EFetchPartial,
            EInsertPartial,
            EReplacePartial,
            };
            
        enum TLocalDocumentState
            {
            EXdmDocIdle = 0,
            EXdmDocUpdating,
            EResolvingAsyncConflict,
            };
        
        TInt                                    iDataLength;
        TInt                                    iUpdateIndex;
        TInt                                    iOperationCount;                                  
        TInt                                    iOperationError;
        TTime                                   iLastAccess;
        TTime                                   iLastModification;
        TBool                                   iWholeDoc;
        HBufC*                                  iFullPath;
        HBufC*                                  iDocSubsetPath;
        TLocalOperation                         iOperationType;
        CLocalProtocol&                         iLocalProtocol;
        CLocalDocumentNode*                     iDocumentRoot;
        TLocalDocumentState                     iDocumentState;
        RPointerArray<CXdmNamespace>            iNamespaces;
    };

#endif      //__XCAPDOCUMENT__
            
// End of File