dependencies/uncategorized/cpluginvalidator.h
author MattD <mattd@symbian.org>
Thu, 01 Apr 2010 14:50:19 +0100
changeset 48 0d4ac38889fc
parent 25 1161e0025932
permissions -rw-r--r--
Merged in kashif's, fdim's and my removal of abld.bat and .cproject files onto the fixed up version of Christian's head.

/*
* 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