pressrv_plat/xdm_protocol_plugin_api/inc/XdmOperationFactory.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:   XDM Protocol operation factory
*
*/




#ifndef __XDMOPERATIONFACTORY__
#define __XDMOPERATIONFACTORY__

#include <ecom.h>
#include <e32base.h>
#include "XdmProtocol.h"

//Operation factory UIDs
const TInt KXcapOperationFactory            = 0x10207426; 
const TInt KLocalOperationFactory           = 0x10275088;


//FORWARD DECLARATION
class CXdmDocument;
class MXdmOperation;
class CXdmDocumentNode;

//CLASS DECLARATION
class CXdmOperationFactory : public CBase
    {
    public:
        
        /**
        * Symbian OS constructor
        * @param TInt UID of the operation factory
        * @return CXdmOperationFactory*
        */
        static CXdmOperationFactory* NewL( TInt aOperationFactory );
        
        /**
        * C++ destructor.
        */
	    virtual ~CXdmOperationFactory();
	
	public:
        
        /**
        * Create a fetch operation
        *
        * @param CXdmDocument& Target document
        * @param CXdmDocumentNode& Target element
        * @return MXdmOperation* The new operation
        */
        virtual MXdmOperation* FetchL( CXdmDocument& aTargetDocument,
                                       CXdmDocumentNode* aTargetNode ) const = 0;

        /**
        * Create an insert operation
        *
        * @param CXdmDocument& Target document
        * @param CXdmDocumentNode& Target element
        * @return MXdmOperation* The new operation
        */
        virtual MXdmOperation* InsertL( CXdmDocument& aTargetDocument,
                                        CXdmDocumentNode* aTargetNode ) const = 0;
        
        /**
        * Create a replace operation
        *
        * @param CXdmDocument& Target document
        * @param CXdmDocumentNode& New element
        * @param CXdmDocumentNode& Old element
        * @return MXdmOperation* The new operation
        */
        virtual MXdmOperation* ReplaceL( CXdmDocument& aOldDocument, 
                                         CXdmDocumentNode* aNewNode,
                                         CXdmDocumentNode* aOldNode ) const = 0;

        /**
        * Create an append operation
        *
        * @param CXdmDocument& Target document
        * @param CXdmDocumentNode& Target element
        * @return MXdmOperation* The new operation
        */
        virtual MXdmOperation* AppendL( CXdmDocument& aTargetDocument,
                                        CXdmDocumentNode* aTargetNode ) const = 0;

        /**
        * Create a delete operation
        *
        * @param CXdmDocument& Target document
        * @param CXdmDocumentNode& Target element
        * @return MXdmOperation* The new operation
        */
        virtual MXdmOperation* DeletionL( CXdmDocument& aTargetDocument,
                                          CXdmDocumentNode* aTargetNode ) const = 0;
    
    protected:

        /**
        * Symbian OS constructor for derived classes.
        *
        * @return CXdmOperationFactory
        */      
        CXdmOperationFactory();

    private:  //Data

        TUid                        iDestructorKey;
    };

// ----------------------------------------------------
// MXcapOperationFactory::MXcapOperationFactory
// 
// ----------------------------------------------------
//
inline CXdmOperationFactory::CXdmOperationFactory()
	{
	}

// ----------------------------------------------------
// CXdmProtocol::~CXcapOperationFactory
// 
// ----------------------------------------------------
//
inline CXdmOperationFactory::~CXdmOperationFactory()
	{
	REComSession::DestroyedImplementation( iDestructorKey );
    }

// ----------------------------------------------------
// CXdmProtocol::NewL
// Create a new operation factory
// ----------------------------------------------------
//
inline CXdmOperationFactory* CXdmOperationFactory::NewL( TInt aOperationFactory )
    {
    TAny* ptr = NULL;
    TUid KImplemantationUid = { aOperationFactory };
    ptr = REComSession::CreateImplementationL( 
          KImplemantationUid, _FOFF( CXdmOperationFactory, iDestructorKey ) ); 
    return reinterpret_cast<CXdmOperationFactory*>( ptr );
    
    
    }
    
#endif      //__XCAPOPERATIONFACTORY__