contextframework/cfw/inc/cfoperationpluginservices/cfoperationpluginmanager.h
author William Roberts <williamr@symbian.org>
Fri, 23 Apr 2010 14:37:17 +0100
branchRCL_3
changeset 22 c82a39b81a38
parent 0 2e3d3ce01487
permissions -rw-r--r--
Rework addition of Symbian splash screen to reduce the source impact (uses SVG from Bug 2414) Notes: by using the OPTION SOURCEDIR parameter in the mifconv extension instructions, I can arrange to use the same source file name in sfimage, without having to export over the original Nokia file. This means that the name inside splashscreen.mbg is the same, which removes the need for the conditional compilation in SplashScreen.cpp, and gets rid of sf_splashscreen.mmp.

/*
* 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:  CFContextSourceManager class declaration.
*
*/



#ifndef C_CFOPERATIONPLUGINMANAGER_H
#define C_CFOPERATIONPLUGINMANAGER_H

#include "cfecompluginmanager.h"
#include "cfpluginoperation.h"
#include "cfstarterobserver.h"
#include "cfoperationplugin.h"
#include "cfstateobserver.h"

class CCFOperationPlugIn;
class MCFOperationServices;
class TCFOperationPluginInfo;
class CImplementationInformation;
class MCFScriptEngineInterface;

/**
 *  Operation plug-in manager.
 *
 *  Operation plug-in manager is responsible for loading all the
 *  operation plug-ins that are currently installed.
 *
 *  @lib cfscriptengine.lib
 *  @since S60 4.0
 */
NONSHARABLE_CLASS( CCFOperationPluginManager ) : public CCFEComPluginManager,
    public MCFPlugInOperation,
    public MCFStarterObserver,
    public MCFStateObserver
    {
    public:

        // Two phased constrcutors
        IMPORT_C static CCFOperationPluginManager* NewL(
            MCFScriptEngineInterface& aScriptEngine );
        IMPORT_C static CCFOperationPluginManager* NewLC(
            MCFScriptEngineInterface& aScriptEngine );

        // Destructor
        IMPORT_C virtual ~CCFOperationPluginManager();

    public: // From MCFPlugInOperation

        /**
        * Parses a xml node and returns a pointer to CCFScriptRoot instance.
        * @since S60 5.0
        * @param aParent is the parsed parent node for the aNode.
        * @param aNode is the node to be parsed.
        * @param aOperationServices is the operation services reference to be
        *   used by the new script root node.
        * @param aUid Implementation uid of the provider.
        * @return a ptr to CCFScriptRoot instance parsed from the given node,
        *   note that the ownership is transferred to the caller. Returns NULL
        *   if the node cannot be parsed.
        */
        CCFScriptRoot* ParseScriptRootL( CCFOperationNode* aParent,
                CMDXMLNode& aNode,
                MCFOperationServices& aOperationServices,
                TUid& aUid );

        /**
        * Parse DOM-node into an operation node.
        *
        * @since S60 5.0
        * @param aParent Parent node.
        * @param aDOMNode DOM-node to be parsed.
        * @param aOperationServices Operation services instance to be used
        *   by the new operation node.
        * @param aUid Implementation uid of the provider.
        * @return Pointer to Operation node. The ownership of the node is
        *   transferred to the caller. NULL must be returned, if the DOM-node
        *   cannot be parsed.
        */
        CCFOperationNode* ParseL( CCFOperationNode* aParent,
            CMDXMLNode& aDOMNode,
            MCFOperationServices& aOperationServices,
            TUid& aUid );

    public: // From base classes

        // from MCFStateObserver
        void UpdatePlugInsL();

    private: // From base classes

        // @see MCFInitialize
        void InitializePhaseL( CCFPhaseBase::TCFPhaseId aPhase );
        
        // @see MCFStarterObserver
        void SetEventHandler( MCFStarterEventHandler& /*aEventHandler*/ );

    private:

        CCFOperationPluginManager( MCFScriptEngineInterface& aScriptEngine );
        void ConstructL();

    private: // New methods

        // Loads and initialized plug-in
    	CCFOperationPlugIn* CreateAndInitializePlugInL(
            const TUid& aImplementationUid,
            TOperationPluginInitParams& aParams );

        // Init starting phase
        void InitDeviceStartingPhaseL();

        // Init loading plugins phase
        void InitLoadingPluginsPhaseL();

        // Loads plug-ins and appends it into array
        void LoadPluginL( CImplementationInformation& aImplInfo );

        // Releases operation plug-in
        void ReleasePlugIn( CCFOperationPlugIn*& aPlugIn );

        // Finalizes node parsing
        CCFOperationNode* DoParseL( CCFOperationNode* aParent,
            CMDXMLNode& aDOMNode,
            MCFOperationServices& aOperationServices,
            TUid& aUid );

        // Finalizes script root parsing
        CCFScriptRoot* DoParseScriptRootL( CCFOperationNode* aParent,
            CMDXMLNode& aDOMNode,
            MCFOperationServices& aOperationServices,
            TUid& aUid );

    private: // data

        // Own: Context source plugin info array
        RArray<TCFOperationPluginInfo> iPlugIns;

        // Ref: Reference to script engine
        MCFScriptEngineInterface& iScriptEngine;
    };

#endif