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

#ifndef CCALREMOTEATTACHMENTAPI_H
#define CCALREMOTEATTACHMENTAPI_H

#include <e32base.h>
#include <bamdesca.h>

class MCalRemoteAttachment;
class MCalRemoteAttachmentInfo;
class MCalRemoteAttachmentOperation;
class MCalRemoteAttachmentOperationObserver;

/**
 * CCalRemoteAttachmentApi defines calendar attachment download operations.
 */
class CCalRemoteAttachmentApi : public CBase
    {
public: // Construction and destruction

    /**
	 * Creates and initializes new CCalRemoteAttachmentApi object. Ownership 
	 * is transferred to caller. 
	 * @param aUri
	 */
	static CCalRemoteAttachmentApi* NewL( const TDesC8& aUri );
	
	/**
	 * Destructor
	 */
	virtual ~CCalRemoteAttachmentApi();
	
public: // Interface
	
	/**
	 * Fetches attachment information.
	 * @param aAttachmentInfo Reference to attachment info array
	 * @param aAttachmentUrlArray List of attachment URIs which information is wanted 
	 */
	virtual void AttachmentInfo(
	        MCalRemoteAttachmentInfo& aAttachmentInfo,
	        MDesCArray& aAttachmentUrlArray ) const = 0;
	
	/**
	 * Downloads attachment. Ownership of created operation is transferred
	 * to caller. Created operations are stored to <aOperations> array.
	 * 
	 * @param aAttachments Attachments to be downloaded index
	 * @param aOperations Operation array.
	 * @param aObserver Reference to attachment observer
	 */
	virtual void DownloadAttachmentsL(
	        const RPointerArray<MCalRemoteAttachment>& aAttachments,
	        RPointerArray<MCalRemoteAttachmentOperation>& aOperations,
	        MCalRemoteAttachmentOperationObserver& aObserver ) = 0;

private:
        /** iDtor_ID_Key Instance identifier key. When instance of an
         *               implementation is created by ECOM framework, the
         *               framework will assign UID for it. The UID is used in
         *               destructor to notify framework that this instance is
         *               being destroyed and resources can be released.
         */
        TUid iDtor_ID_Key;	
	};

#include "ccalremoteattachmentapi.inl"
	
#endif // CCALREMOTEATTACHMENTAPI_H

// EOF
