contextframework/cfw/inc/cfserver/CFEngine.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) 2002-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:  CCFEngine class declaration.
*
*/


#ifndef C_CFENGINE_H
#define C_CFENGINE_H


#include <e32base.h>
#include <f32file.h>

#include "cfcontextobject.h"
#include "CFServSession.h"
#include "cfextendedcontextinterface.h"
#include "CFActionInterface.h"
#include "CFScriptInterface.h"
#include "cfactionhandler.h"
#include "cfcommon.h"
#include "CFSecurityChecker.h"
#include "cfcontextsourcecommandinterface.h"

class CCFContextManager;
class CCFStarter;
class CCFEComObserver;
class CCFServSession;
class CCFContextSourceManager;
class CCFScriptHandler;
class CCFActivator;
class MCFActionSubscriptionListener;
class CCFAsyncCmdQueue;
class CCFScriptEvent;


/**
* Context Framework Engine class.
*/
NONSHARABLE_CLASS( CCFEngine ): public CBase,
    public MCFExtendedContextInterface,
    public MCFActionInterface,
    public MCFScriptInterface,
    public MCFActionHandler,
    public MCFContextSourceCommand
    {
    public: // New methods
    
        static CCFEngine* NewL( MCFSecurityChecker& aSecurityChecker );
        static CCFEngine* NewLC( MCFSecurityChecker& aSecurityChecker );

        ~CCFEngine();
        
    private: // From base classes
    
        // @see MCFContextInterface
        TInt DefineContext( const TDesC& aContextSource,
            const TDesC& aContextType,
            const TSecurityPolicy& aReadWritePolicy );
            
        // @see MCFContextInterface
        TInt DefineContext( const TDesC& aContextSource,
            const TDesC& aContextType,
            const TSecurityPolicy& aReadWritePolicy,
            MCFContextSource& aOwner );
            
        // @see MCFContextInterface
        TInt DefineContext( const TDesC& aContextSource,
            const TDesC& aContextType,
            const TSecurityPolicy& aReadPolicy,
            const TSecurityPolicy& aWritePolicy,
            MCFContextSource& aOwner );

        // @see MCFContextInterface
        TInt PublishContext( CCFContextObject& aContext,
            RThread& aClientThread );
        
        // @see MCFContextInterface
        TInt PublishContext( CCFContextObject& aContext,
            CCFContextDataObject& aData,
            RThread& aClientThread );
        
        // @see MCFContextInterface
        TInt SubscribeContext( CCFContextSubscription* aSubscription,
            MCFContextSubscriptionListener* aListener,
            RThread& aClientThread );
        
        // @see MCFContextInterface
        void UnsubscribeContext( CCFContextSubscription& aSubscription,
            MCFContextSubscriptionListener& aListener );
                
        // @see MCFContextInterface
        void UnsubscribeContexts(
            MCFContextSubscriptionListener& aObserver );
        
        // @see MCFContextInterface
        TInt RequestContext(
            RContextObjectArray& aResultBuffer,
            CCFContextQuery& aContextQuery,
            RThread& aClientThread );

		// @see MCFContextInterface            
        TInt GetSecurityPolicy( const TDesC& aContextSource,
            const TDesC& aContextType,
			TSecurityPolicy& aPolicy );

        // @see MCFExtendedContextInterface
		TInt GetReadSecurityPolicy( const TDesC& aContextSource,
				const TDesC& aContextType,
				TSecurityPolicy& aPolicy );

		// @see MCFExtendedContextInterface
		TInt GetWriteSecurityPolicy( const TDesC& aContextSource,
				const TDesC& aContextType,
				TSecurityPolicy& aPolicy );
		
		// @see MCFExtendedContextInterface
        TInt DefineContext( const TDesC& aContextSource,
                const TDesC& aContextType,
                const TSecurityPolicy& aReadPolicy,
                const TSecurityPolicy& aWritePolicy,
                MCFContextSource* aPublisher, const TUid& aPublisherUid );
            
        // @see MCFExtendedContextInterface
        void DeregisterPublisher( MCFContextSource& aPublisher );

        // @see MCFExtendedContextInterface
        TInt InstallContextSourceSetting( RFile& aSettingFile,
                const TUid& aContextSourceUid,
                RThread& aClientThread );
        
        // @see MCFExtendedContextInterface
        TInt UninstallContextSourceSetting( const TDesC& aSettingFilename,
                const TUid& aContextSourceUid,
                RThread& aClientThread );
        
        // @see MCFExtendedContextInterface
        TInt UninstallContextSourceSettings( const TUid& aContextSourceUid,
                RThread& aClientThread );
        
        // @see MCFExtendedContextInterface
        TInt PublishContextFromAction( CCFContextObject& aContext,
            TBool aAutoDefine );
        
        // @see MCFActionInterface
        TInt DefineAction( const TDesC& aActionIdentifier,
            const TSecurityPolicy& aSecurityPolicy,
            const TUid& aOwnerUid,
            MCFActionOwner* aOwner );
        
        // @see MCFActionInterface
        TInt SubscribeAction(
            CCFActionSubscription* aActionSubscription,
            MCFActionSubscriptionListener* aListener,
            RThread& aClientThread );            

        // @see MCFActionInterface
        void UnsubscribeAction( CCFActionSubscription& aActionSubscription,
            MCFActionSubscriptionListener& aListener );
            
        // @see MCFActionInterface
        void UnsubscribeActions( MCFActionSubscriptionListener& aListener );
        
        // @see MCFActionInterface
        void DeregisterActions( MCFActionOwner* aOwner );
        
        // @see MCFScriptInterface 
        TInt RegisterScript( const TDesC& aName,
            const TDesC8& aScript,
            TInt& aScriptId,
            const RThread& aClientThread,
            MCFScriptOwner& aOwner );
        
        // @see MCFScriptInterface 
        TInt DeregisterScript( TInt aScriptId,
            const RThread& aClientThread );

        // @see MCFScriptInterface 
        TInt DeregisterScript( const TDesC& aScriptName,
            const RThread& aClientThread );
        
        // @see MCFScriptInterface
        TInt DeregisterScripts( const RThread& aClientThread );

        // @see MCFScriptInterface
        void DeregisterScriptOwner( MCFScriptOwner& aOwner );

        // @see MCFScriptInterface 
        TInt SaveScript( const TDesC8& aScript,
            TInt aScriptId,
            const RThread& aClient );

        // @see MCFScriptInterface 
        TInt DeleteScript( const TDesC& aScriptName,
            RThread& aClientThread );
        
        // @see MCFScriptInterface 
        TInt DeleteScripts( RThread& aClientThread );
        
        // @see MCFScriptInterface 
        TBool AlreadyExists( const TDesC& aScriptName,
            const RThread& aClient,
            TInt& aScriptId ) const;
            
        // @see MCFScriptInterface 
        void CleanupPersistentDataByName( const TDesC& aScriptName,
            const RThread& aClientThread );
        
        // @see MCFScriptInterface 
        void CleanupPersistentDataByUid( const RThread& aClient );
        
        // @see MCFScriptInterface 
        TInt UpdateScript( TInt aScriptID,
            const RThread& aOwnerThread,
            const TDesC8& aUpdatedScript,
            MCFScriptOwner& aOwner );
        
        // @see MCFScriptInterface 
        TInt RestoreRomScript( TInt aScriptId, const RThread& aClient );

        // @see MCFScriptInterface 
        TInt IsUpgradeAllowed( const TDesC& aName,
            const TDesC8& aScript,
            const RThread& aOwnerThread );

        // @see MCFActionHandler 
        void FireActionL( CCFScriptEvent* aEvent );

        // From MCFActionHandler
        void FireActionL( const CCFContextSourceCommand& aCommand );

        // @see MCFActionHandler 
        TInt GetActionSecurityPolicy( const TDesC& aActionIdentifier,
            TSecurityPolicy& aPolicy );

        // @see MCFContextSourceCommand
        void HandleCommandL( const CCFContextSourceCommand& aCommand );

    private: // New functions

        /**
         * Appends publish context into asynchronous command queue if the
         * context publication is valid.
         * 
         * Leaves with:
         * - KErrNotFound, context not defined
         * - KErrAccessDenied, insufficient capabilities to write the context
         * - any other system-wide error code
         * 
         * @since S60 5.0
         * @param aContext Context object to be published.
         * @param aClientThread Handle to the current client.
         * @param aData Data object associated with the context.
         * @return None.
         */
        void EnqueuePublishContextL( CCFContextObject& aContext,
            RThread& aClientThread,
            CCFContextDataObject* aData = NULL );

        /**
         * Adds unsubscribe context cleanup into front of asynchronous command
         * queue.
         * 
         * Leaves with:
         * - KErrNoMemory, no memory to create the command
         * - any other system-wide error code
         * 
         * @since S60 5.0
         * @return None.
         */
        void EnqueueUnsubscribeContextCleanupL();

        /**
         * Appends fire action into asynchronous command queue.
         * 
         * Leaves with:
         * - KErrNoMemory, no memory to create the command
         * - any other system-wide error code
         * 
         * @since S60 5.0
         * @param aActionHandler Action handler for firing the action.
         * @param aEvent The action (script event). Ownership is transferred.
         * @return None.
         */
        void EnqueueFireActionL( MCFActionHandler& aActionHandler,
                CCFScriptEvent* aEvent );

        /**
         * Appends source command action into asynchronous command queue.
         * 
         * Leaves with:
         * - KErrNoMemory, no memory to create the command
         * - any other system-wide error code
         * 
         * @since S60 5.0
         * @param aSourceCommandHandler Source command handler.
         * @param aCommand The context source command action.
         * @return None.
         */
        void EnqueueSourceCommandActionL(
                MCFContextSourceCommand& aSourceCommandHandler,
                const CCFContextSourceCommand& aCommand );

    private:
    
        void ConstructL();
        CCFEngine( MCFSecurityChecker& aSecurityChecker );
        
    private: // Data
    
        // Own: CF starter
        CCFStarter* iStarter;
        
        // Own: ECom observer
        CCFEComObserver* iEComObserver;
    
        // Own: Data manager
        CCFContextManager* iContextManager;
        
        // Own: Context source manager
        CCFContextSourceManager* iContextSourceManager;
        
        // Own: Script Engine
        CCFScriptHandler* iScriptEngine;
        
        // Own: Activator engine
        CCFActivator* iActivatorEngine;
        
        // Own: File server session.
        // Keep this as the only session for whole CF!
        RFs iFs;
        
        // CFSecurityChecker
        MCFSecurityChecker* iSecurityChecker;
        
        // Maximum data object size
        TInt iMaxDataObjectSize;

        // Own: Queue for asynchronous commands.
        CCFAsyncCmdQueue* iAsyncCmdQueue;
    };

#endif  // C_CFENGINE_H