/*
* Copyright (c) 2008 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: MBUtils ECOM definition
*
*/
#ifndef M_MRENTRYPROCESSOR_H
#define M_MRENTRYPROCESSOR_H

#include <e32base.h>
#include <MAgnEntryUi.h>
#include "esmrdef.h"
#include "tesmrscenariodata.h"

class MESMRCalEntry;
class CCalEntry;
class CCalInstance;

/**
 * MESMREntryProcessor defines interface for entry processing
 */
class MESMREntryProcessor
    {
public:
    virtual ~MESMREntryProcessor() {}
        
public: // Interface
    /**
     * Fetches scenario data.
     *
     * @return scenario data.
     */
    virtual const TESMRScenarioData& ScenarioData() const = 0;

    /**
     * Tests, whether processor contains entry, which it has processed
     * or not.
     *
     * @return ETrue, if contains processed entry.
     */
    virtual TBool ContainsProcessedEntry() const = 0;

    /**
     * Process entries and constructs scenario data.
     *
     * @param aParam AGN Entry UI input parameters.
     * @param aEntries Calendar entries to be processed.
     *        Ownership is not transferred.
     */
    virtual void ProcessL(
            const MAgnEntryUi::TAgnEntryUiInParams* aParams,
            RPointerArray<CCalEntry>* aEntries ) = 0;

    /**
     * Process entry and constructs scenario data.
     *
     * @param aParam AGN Entry UI input parameters.
     * @param aEntry Calendar entry to be processed.
     * @param aSetDefaultValuesToEntry, ETrue is default values
     * should be set to entry, EFalse otherwise
     * @param aTypeChanging entry type is changing
     */
    virtual void ProcessL(
            const MAgnEntryUi::TAgnEntryUiInParams* aParams,
            CCalEntry& aEntry,
            TBool aSetDefaultValuesToEntry,
            const TBool aTypeChanging = EFalse ) = 0;
    
    /**
     * Process entries. Scenario data is not constructed.
     *
     * @param aEntries Calendar entries to be processed.
     *        Ownership is not transferred.
     */
    virtual void ProcessL(
            RPointerArray<CCalEntry>* aEntries ) = 0;

    /**
     * Processes calendar instance. All operations affects only the
     * processed instance.
     *
     * @param aInstance Reference to calendar instance.
     */
    virtual void ProcessL(
            CCalInstance& aInstance ) = 0;

    /**
     * Switches processor for specified mode mode.
     * @error KErrNotReady no entries has been processed yet.
     * @error KErrArgument Unknown mode
     */
    virtual void SwitchProcessorToModeL(
            TMRProcessorMode aMode ) = 0;

    /**
     * Fetches ES MR Entry. Methods panics, if entries has not
     * been processed before calling this method.
     *
     * @return Reference to CESMRMeetingRequestEntry object.
     */
    virtual MESMRCalEntry& ESMREntryL() = 0;

    /**
     * Resets the entry processor. After calling this method the
     * processor is in the same state than after creation.
     */
    virtual void ResetL() = 0;

    /**
     * Process output parameters. Processing is done according to command
     * passed as parameter.
     *
     * @param aOutputParams Reference to output parameters.
     * @param aCommand Command for which output parameters are processed.
     */
    virtual void ProcessOutputParametersL(
            MAgnEntryUi::TAgnEntryUiOutParams& aOutParams,
            TESMRCommand aCommand ) = 0;
    
    /**
     * Returns extension interface.
     * @param aExtensionUid Extension identifier 
     */
    virtual TAny* Extension( TUid /* aExtensionUid */ ) { return NULL; }
    };

#endif // M_MRENTRYPROCESSOR_H

// EOF
