menufw/menufwui/mmextensions/mmfolderuiextension/inc/mmfoldercommand.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:49 +0200
changeset 0 f72a12da539e
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007-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:   Interface of the folder command
 *
*/



#ifndef MMFOLDERCOMMAND_H
#define MMFOLDERCOMMAND_H

#include <e32base.h>
#include <liwcommon.h>
#include "mmdialogmanager.h"
#include "mcsmenusapi.h"

class CMmPluginSharedResources;
class CHnMdBaseKey;
class CHnServiceHandler;
class CAknQueryDialog;
class MMmActionRequest;
class MMmDialogManager;

/**
 * Base class for folder operations
 * @since S60 v5.0
 */

/**
 * CMmFolderCommand is a class which all command classes derived from.
 * It has a several common functions responsible for creating appropriate
 * command instance, displaying dialogs, controlling command execution,
 * getting data from resources, displaying dialogs and executing MCS queries.
 * CMmFolderCommand is using only as a base class in inheritance.
 *
 * @lib mmfolderuiextensionplugin.lib
 * @since S60 5.0
 * @ingroup group_mmfolderuiextensionplugin
 */
NONSHARABLE_CLASS( CMmFolderCommand ) : public CBase, 
                                        public MMmDialogManager,
                                        public MLiwNotifyCallback
    {

protected:
    
    /**
     * Current state of folder name validation.
     */
    enum TValidation
        {
        EValidationOk = 0,
        EValidationInvalid = 1,
        EValidationNotAllowed = 2
        };

public:
   
    /**
     * Factory Method which returns concrete class
     * representing folder operation.
     * @param aCommand Descriptor contains required command.
     * @return If aCommand is supported, operations instance is returned.
     */
    static CMmFolderCommand* FactoryL( const TDesC& aCommand );
    
    /**
     * Returns TInt value using the given path.
     * 
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aPath URI Path.
     * @return TInt value or KErrNotFound.
     */
    TInt GetIntL( const CLiwGenericParamList& aParam, const TDesC8& aPath );
    
    /**
     * Returns string value using the given path.
     * 
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aPath URI Path.
     * @return String value or KNullDesC.
     */
    TPtrC GetStringL( const CLiwGenericParamList& aParam, const TDesC8& aPath );
    
    /**
     * Returns bool value using the given path.
     * 
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aPath URI Path.
     * @return TBool value.
     */
    TBool GetBoolL( const CLiwGenericParamList& aParam, const TDesC8& aPath );
    
    /**
     * Performs operation on folder.
     * @param aEventParamList List of parameters for operations.
     */
    virtual void ExecuteActionL( CLiwGenericParamList* aEventParamList ) = 0;
    
    /**
     * Setter for App UI.
     * @param aActionRequest Interface enabling to issues request to App UI.
     */ 	
 	void SetRequestInterface( MMmActionRequest* aActionRequest );
 	
    /**
     * Setter for shared resources.
     * @param aActionRequest Interface enabling to issues request to App UI.
     */ 	
 	void SetSharedResources( CMmPluginSharedResources* aResources ); 
 	
    /**
     * Setter for dialog.
     * @param aDialog Dialog instance.
     * @return Result of the dialog.
     */
    void SetDialogL( CAknQueryDialog* aDialog );
    
    /**
     * Removes active dialog.
     */
    void RemoveDialogL();
 	
 	/**
 	 * Virtual C++ Destructor.
 	 */
    virtual ~CMmFolderCommand();
    
protected:

	/**
	 * Base Plugin constructor
	 */ 
	void BaseConstructL();
	
    /**
    * Gets folder name.
    * @param aFolderName Name of the folder.
    * @return Modal dialog displaying result.
    */ 
    TBool DoChangeNameL( RBuf& aFolderName, TInt aDefaultNameLength,
        RBuf& aNumberInBracket, CLiwGenericParamList& aFoldersNames, 
        TLiwVariant& aVar, TInt aNumberToAppend = 0 );

    /**
     * Gets folder name.
     * @param aFolderName Name of the folder.
     * @return Modal dialog displaying result.
     */ 
    void ChangeNameIfAlreadyExistsL( RBuf& aFolderName,
        CLiwGenericParamList* aFoldersNames, TInt aNumberToAppend = 0 );
    
    /**
     * Gets list of the folders names.
     * @param aFolderName Name of the folder.
     */
    void GetFolderListL( TInt aItemId );
    
    /**
     * Gets list of the items names.
     * @param aFolderName Name of the folder.
     */
    void GetListL( TInt aItemId );
    
    /**
     * Gets folder name.
     * @param aFolderName Name of the folder.
     * @return Modal dialog displaying result.
     */ 
    TBool GetFolderNameL( RBuf& aFolderName, 
            CLiwGenericParamList* aFoldersNames = 0 );
    
    /**
     * Displays notification contains reason of the deletion cancel.
     * @param aFolderName Name of the folder.
     */
    void DisplayErrorInfoL( const TDesC& aFolderName );
    
    /**
     * Executes query on MCS service.
     * @param aQueryName Query name.
     * @param aInputData Input data.
     * @param aFilter Query filter.
     * @param aCallback Interface handling query execution.
     */ 
    void MCSQueryExecutionL( const TDesC8& aQueryName,
                             const CHnMdBaseKey* aInputData,
                             const CHnMdBaseKey* aFilter,
                             MLiwNotifyCallback* aCallback );
    
    /**
     * Add new key to existing key.
     * @param aInDataKey An existing key.
     * @param aKeyName Name of the new key.
     * @param aKeyType Type of the new key.
     * @param aKeyValue Value of the new key.
     */
    void AddSubKeyL( CHnMdBaseKey* aInDataKey, 
                     const TDesC8& aKeyName, 
                     const TDesC8& aKeyType, 
                     const TDesC8& aKeyValue );
    
    /**
     * Add new key to existing key.
     * @param aInDataKey An existing key.
     * @param aKeyName Name of the new key.
     * @param aKeyType Type of the new key.
     * @param aKeyValue Value of the new key.
     */
    void AddSubKeyL( CHnMdBaseKey* aInDataKey, 
                     const TDesC8& aKeyName, 
                     const TDesC8& aKeyType, 
                     const TDesC& aKeyValue );
    
    /**
     * Checks if folder name is valid and consists of allowed characters
     * @param aFolderName Folder name to check
     * @return Validation result.
     */
    TInt FolderNameValidationL(RBuf& aFolderName,
            CLiwGenericParamList* aFoldersNames = 0);
    
    /**
     * Removes illegal character
     * @param aFolderName Folder name to check
     * @return Validation result.
     */
    TInt IllegalCharacterRemoveL(RBuf& aFolderName,
            CLiwGenericParamList* aFoldersNames = 0);
    
    /**
     * Checks if folder name is valid
     * @param aFolderName Folder name to check
     * @return Validation result.
     */
    TInt CheckValidFileNameL( const TDes& aFolderName );
    
    /**
     * Checks if folder name consists of allowed characters
     * @param aFolderName Folder name to check
     * @return Validation result.
     */
    TInt CheckAllowedCharsL( const TDes& aFolderName );
    
    /**
     * Displays notification contains reason of the add folder/rename folder name  cancel.
     * @param aResourceId The numeric ID of the resource string to be read.
     */
    void DisplayNameErrorInfoL( const TDesC& aMsg );
    
private:
	
    /**
     * Prepare GetList input data for specified folder
     * @param aItemId id of folder.
     */
	void PrepareGetListInputL(TInt aItemId);
	
	/**
	 * Prepare GetList filter for folders
	 */
	void PrepareGetListFolderFilterL();
	
    /**
     * Prepare GetList filter for folders
     */
    void PrepareGetListFilterL();
	
	/**
	 * Insert Liw map to Liw list
     * @param aList
     * @param aKey
     * @param aMap
	 */
	void InsertToLiwListL(CLiwGenericParamList* aList, 
			const TDesC8& aKey, const CLiwDefaultMap* aMap); 
	
	/**
	 * Externalize GetList input list
	 */
    void ExternalizeInputListL();
    
    /**
     * Internalize GetList output list
     */
    void InternalizeOutputListL();
	
    
protected:
    
    /**
     * Own.
     * Intance of the service handler.
     */
    CHnServiceHandler* iServiceHandler;
    
    
    /**
	 * Not Own.
	 * Pointer to the App UI.
	 */
    MMmActionRequest* iActionRequest;
    
    /**
     * Own.
     * Pointer to active dialog.
     */
    CAknQueryDialog* iDialog;
    
    /**
     * Flag indicating wheather dialog can be displayed.
     */
    TBool iLockDialog;
    
    /*
     * MCS sesion.
     * Own.
     * */
    RMenuSapi iMcs;
    
    /**
     * GetList input and output parameter lists.
     * Own.
     */
    CLiwGenericParamList* iGetListInParam;
    CLiwGenericParamList* iGetListOutParam;
    
    /**
     * GetList serialized input and output parameter lists.
     * Own.
     */
    RBuf8 iSerializedInputList;
    RBuf8 iSerializedOutputList;
    
    /**
     * Pointer to shared resources class.
     * Not owned.
     */
    CMmPluginSharedResources* iSharedResources;
    
    };

#endif /*MMFOLDERCOMMAND_H*/

// End of file