dependencies/uncategorized/cpluginvalidator.h
author Christian Morlok <symbian.org@christianmorlok.de>
Wed, 07 Apr 2010 14:35:19 +0200
branchv5backport
changeset 54 666a2952b5b3
parent 25 1161e0025932
permissions -rw-r--r--
renamed dlls+exe to prevent conflicts with existing files in emulator; changelog attached. * renamed dlls/exe: - aifw.dll to aifw_hs.dll - cputils to cputils_hs - aiidleint.dll to aiidleint_hs.dll - aiutils.dll to aiutils_hs.dll - MenuInterface.dll to MenuInterface_hs.dll - XCFW.dll to XCFW_hs.dll - homescreen.exe to homescreen_hs.exe - ailaunch.exe to ailaunch_hs.exe * new UID for Active Idle (aifw_hs.dll, aiidleint_hs.dll and homescreen.exe): #define AI_UID3_AIFW_COMMON 0xEDFF45C4 (was 0x102750F0 = 271012080) * new UID for cputils_hs.dll: 0xE3E7134E (was 0x20016B7F = 536963967) * new UID for AI Utilities Factory (aiutils_hs.dll): 0xEC55106C (was 0x10281865 = 271063141) * new UID for MenuInterface_hs.dll: 0xEEE24485 (was 0x10210EAB = 270601899) * new UID for XCFW_hs.dll: 0xEB12332F (was 0x10210EA0 = 270601888) * new UID for ailaunch_hs.exe: 0xEF5A047A (was 0x200286E3 = 537036515)

/*
* Copyright (c) 2006-2006 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 CPLUGINVALIDATOR_H
#define CPLUGINVALIDATOR_H

// INCLUDES
#include <e32base.h>
#include <e32hashtab.h>
#include <ecom/implementationinformation.h>

// FORWARD DECLARATIONS
class REComSession;

/**
 *  Class containing information regarding a plugin
 *
 * 
 *  @lib cpclient.dll
 *  @since S60 v 5.0
 */
NONSHARABLE_CLASS( TPluginInfo )
	{
public:
	TAny* iPlugin; // not own
	TUid iImplementationUid;
	TInt iVersion;
	TUid iDtor_ID_Key;
	};

/**
 *  Class used to maintain required ECOM plugins implementations
 *
 * 
 *  @lib cpclient.dll
 *  @since S60 v 5.0
 */
NONSHARABLE_CLASS( CPluginValidator ): public CActive
    {
public:

    /**
     * Two-phased constructor.
     * 
     */     
    IMPORT_C static CPluginValidator* NewL( TUid aUid, 
                                            TAny *aParameter = NULL );

    /**
     * Two-phased constructor.
     * 
     */     
    IMPORT_C static CPluginValidator* NewLC( TUid aUid,
                                             TAny *aParameter = NULL );

    /**
     * Gets plugin with provided UID
     *
     * @param aUid required plugin
     * @return pointer to plugin implementation
     */   
    IMPORT_C TAny* GetImplementation( TUid aUid );

    /**
     * Gets plugin with provided index
     *
     * @param aIndex index of plugin
     * @return pointer to plugin implementation
     */   
    IMPORT_C TAny* GetImplementation( TInt aIndex );
    
    /**
     * Gets number of plugins
     *
     * @return number of plugins
     */    
    IMPORT_C TInt GetCount();
    
    /**
     * Desctructor.
     */     
    virtual ~CPluginValidator();

protected:

    /**
     * From CActive, RunL.
     * Handles the active object’s request completion event
     */
    void RunL();

    /**
     * From CActive, DoCancel.
     * Implements cancellation of an outstanding request.
     */
    void DoCancel();

    /**
     * From CActive, RunError.
     * Method called when leave occured in RunL
     */
    TInt RunError( TInt aError );

protected:

    /**
     * C++ default constructor.
     */    
    CPluginValidator( TUid aUid, TAny *aParameter );

    /**
     * Perform the second phase construction of a CPluginValidator object.
     */    
    void ConstructL();
    
    /*
     * Checks if plugin is present in an array
     */
    TBool PresentInArrayL( TPluginInfo aPluginInfo, 
    		const RImplInfoPtrArray& aInfoArray );

    /*
     * 
     */
    void DestroyPlugin( TInt aIndex );    
    
    /**
     * Cleans plugins table;
     */    
    void CleanPluginsTable();
    
    /**
     * Loads or destroys plugins
     */    
    virtual void ManagePluginsL();    

    /**
     * Loads ECOM plugins
     */    
    virtual void LoadPluginL( TPluginInfo& aPluginInfo );    
    
protected:
    
    /**
     * ECOM handler
     * Own.
     */
    REComSession* iSession;
    
    /**
     * Array containing plugins
     * Own.
     */
    RArray<TPluginInfo> iPluginArray;
    
    /**
     * UID of the interface
     */
    const TUid iUid;
        
    /**
     * Parameter to pass to the object creation method.
     */
    TAny* iParameter;
     };

// ==================== LOCAL FUNCTIONS ====================

/**
* Identity function to search in an array of TPluginInfo.
* @param aLeft Search term.
* @param aRight Array item.
* @return ETrue if ID-s match.
*/
LOCAL_C TBool UidMatch( const TPluginInfo& aLeft, const TPluginInfo& aRight )
    {
    return aLeft.iImplementationUid == aRight.iImplementationUid;
    }

#endif // CPLUGINVALIDATOR_H