/*
* 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:  mcommandmapper.h
 *
*/

#ifndef __MCOMMANDMAPPER_H__
#define __MCOMMANDMAPPER_H__


// INCLUDES
#include <e32base.h>

// CLASS DECLARATION


/**
 *  Abstract interface for getting mapped command IDs. Command ID mapping
 *  means that xSP's own "Names List" command IDs ( constants that are usually 
 *  defined in a *.hrh file ) are substituted with IDs provided by Extension
 *  Manager. This is needed because there may be extensions using same 
 *  "Names List" command IDs. After the substitution, the original IDs are 
 *  not valid anymore. Still, in order to allow original "Names List"
 *  command IDs usage inside the xSP's own code, MxSPCommandMapper provides the
 *  mechanism for retrieving new IDs which correspond to the old original
 *  ones and vice versa.
 */
class MCommandMapper
    {
    public:
        /**
         *  Gets old original "Service Tab" command ID which corresponds
         *  to the given new one
         *
         *  @param aPluginId  implementation ID for identification
         *  @param aNewCommand  New mapped command ID
         *  @param aOldCommand  On return old/original command ID
         *  @return KErrNone if mapping exist, otherwise KErrNotFound
         */
        virtual TInt GetOldCommand( TInt32 aPluginId, 
                                   TInt aNewCommand,
                                   TInt& aOldCommand ) const = 0;
                            
        /**
         *  Gets new mapped "ServiceTab" command ID which corresponds
         *  to the given old one
         *
         *  @param aPluginId  implementation ID for identification
         *  @param aOldCommand Old/original command ID
         *  @param aNewCommand On return new mapped command ID
         *  @return KErrNone if mapping exist, otherwise KErrNotFound
         */
        virtual TInt GetNewCommand( TInt32 aPluginId, 
                                    TInt aOldCommand,
                                    TInt& aNewCommand ) const = 0;
                                    
    protected: // Protected interface

        /**
         * Destructor.
         */
        virtual ~MCommandMapper()
                {};
                                    
    };


#endif // __MCOMMANDMAPPER_H__
