contextframework/cfw/inc/cfscriptengine/CFScriptHandler.h
changeset 0 2e3d3ce01487
child 1 0fdb7f6b0309
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/inc/cfscriptengine/CFScriptHandler.h	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,328 @@
+/*
+* 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:  CCFScriptHandler class declaration.
+*
+*/
+
+
+#ifndef C_CFSCRIPTHANDLER_H
+#define C_CFSCRIPTHANDLER_H
+
+#include <f32file.h>
+#include <badesca.h>
+#include <GMXMLParser.h>
+
+#include "CFScriptEngineInterface.h"
+#include "cfstarterobserver.h"
+#include "CFSecurityChecker.h"
+#include "cfstateobserver.h"
+#include "cfscriptinfo.h"
+#include "cfstartereventhandler.h"
+
+class MCFActionHandler;
+class MCFExtendedContextInterface;
+class CCFScript;
+class CCFOperationPluginManager;
+
+/**
+ * ScriptHandler implementing the main public interface for ScriptEngine
+ * functionality.
+ *
+ * @lib CFScriptEngine
+ * @since Series 60 2.6
+ */
+NONSHARABLE_CLASS( CCFScriptHandler ):
+public CBase,
+public MCFScriptEngineInterface,
+public MCFStarterObserver,
+public MMDXMLParserObserver,
+public MMDXMLParserDataProvider,
+public MCFStateObserver
+    {
+public: // Constructors and destructor
+
+    IMPORT_C static CCFScriptHandler* NewL(
+        MCFExtendedContextInterface& aCF,
+        RFs& aFs,
+        MCFActionHandler& aScriptEventListener,
+        MCFSecurityChecker& aSecurityChecker );
+    IMPORT_C static CCFScriptHandler* NewLC(
+        MCFExtendedContextInterface& aCF,
+        RFs& aFs,
+        MCFActionHandler& aScriptEventListener,
+        MCFSecurityChecker& aSecurityChecker );
+
+    IMPORT_C ~CCFScriptHandler();
+
+public: // From base classes
+
+    // @see MCFScriptEngineInterface
+    TInt RemoveScriptById( TInt aScriptId, const RThread& aOwner );
+
+    // @see MCFScriptEngineInterface
+    TInt RemoveScriptsBySession( const MCFActionHandler& aSession );
+
+    // @see MCFScriptEngineInterface
+    TInt RemoveScriptByName( const TDesC& aScriptName,
+        const TUid& aOwnerUid );
+
+    // @see MCFScriptEngineInterface
+    TInt RemoveScriptByUid( const TUid& aUid );
+
+    // @see MCFScriptEngineInterface
+    TInt AddScript( const TDesC& aName,
+        const TDesC8& aScript,
+        const TUid& aOwner,
+        const RThread& aOwnerThread,
+        MCFActionHandler& aActionHandler,
+        MCFScriptOwner* aScriptOwner );
+
+    // @see MCFScriptEngineInterface
+    TInt NumberOfScriptsByOwner( const TUid& aOwner );
+
+    // @see MCFScriptEngineInterface
+    TInt NumberOfScripts();
+
+    // @see MCFScriptEngineInterface
+    TInt ScriptLength( TInt aScriptId );
+
+    // @see MCFScriptEngineInterface
+    const RArray<TInt>& GetEveryScriptId();
+
+    // @see MCFScriptEngineInterface
+    const RArray<TInt>& GetEveryScriptIdByOwner(
+        const TUid& aScriptOwner );
+
+    // @see MCFScriptEngineInterface
+    TInt UpdateScript( TInt aScriptID,
+        const RThread& aOwnerThread,
+        const TDesC8& aUpdatedScript,
+        MCFScriptOwner* aScriptOwner );
+
+    // @see MCFScriptEngineInterface
+    TInt SaveScript( const TDesC8& aScript, TInt aScriptId,
+        const TUid& aOwnerUid );
+
+    // @see MCFScriptEngineInterface
+    TInt DeleteScriptByName( const TDesC& aScriptName,
+        const TUid& aOwnerUid );
+
+    // @see MCFScriptEngineInterface
+    TInt DeleteScriptByUid( const TUid& aUid );
+
+    // @see MCFScriptEngineInterface
+    TBool AlreadyExists( const TDesC& aScriptName,
+        const TUid& aOwnerUid,
+        TInt& aScriptId ) const;
+
+    // @see MCFScriptEngineInterface
+    void CleanupPersistentDataByName( const TDesC& aScriptName,
+        const TUid& aOwnerUid );
+
+    // @see MCFScriptEngineInterface
+    void CleanupPersistentDataByUid( const TUid& aOwnerUid );
+
+    // @see MCFScriptEngineInterface
+    TInt RestoreRomScript( TInt aScriptId, const TUid& aOwnerUid,
+        const RThread& aClient );
+
+    // @see MCFScriptEngineInterface
+    TInt IsUpgradeAllowed( const TDesC& aName,
+        const TDesC8& aScript,
+        const TUid& aOwner,
+        const RThread& aOwnerThread,
+        MCFActionHandler& aActionHandler );
+        
+    // @see MCFScriptEngineInterface
+    TInt RemoveScriptByProviderUid( const TUid& aProviderUid, TBool aRollback );
+    
+    // @see MCFScriptEngineInterface
+    void RollbackScripts();
+    
+    // @see MCFScriptEngineInterface
+    void DeregisterScriptOwner( MCFScriptOwner* aScriptOwner );
+
+    // @see MCFStarterObserver
+    void InitializePhaseL( CCFPhaseBase::TCFPhaseId aPhaseId );
+
+    // @see MMDXMLParserObserver
+    void ParseFileCompleteL();
+
+    // @see MMDXMLParserDataProvider
+    void GetData( TPtrC8& aPtr, TRequestStatus& aStatus );
+
+    // @see MMDXMLParserDataProvider
+    void Disconnect();
+
+    // from MCFStateObserver
+    void UpdatePlugInsL();
+
+        // @see MCFStarterObserver
+        void SetEventHandler( MCFStarterEventHandler& /*aEventHandler*/ );
+
+private:
+
+    CCFScriptHandler( MCFExtendedContextInterface& aCF,
+        RFs& aFs,
+        MCFActionHandler& aScriptEventListener,
+        MCFSecurityChecker& aSecurityChecker );
+    void ConstructL();
+
+private: // New functions
+
+    /**
+     * This method does actual adding to file store and calls
+     * AddScriptToArrayL
+     * to add script to internal array. It may leave.
+     * @since Series 60 2.6
+     * @param aName is script's name, filename or client thread's secure id.
+     * @param aScript is a new script to be added.
+     * @param aOwner is the owner's unique Uid.
+     * @param aOwnerThread Thread of the owner process.
+     * @param aActionHandler Action handler.
+     * @param aDoSecurityCheck Defines if a security check is needed.
+     * @param aScriptId If set then this same script id is given to the script.
+     * @return script Id given to the script by the handler.
+     * 	Returned value is > 0, otherwise error occurred.
+     */
+    TInt AddScriptL( const TDesC& aName,
+        const TDesC8& aScript,
+        const TUid& aOwner,
+        const RThread& aOwnerThread,
+        MCFActionHandler& aActionHandler,
+        TBool aDoSecurityCheck,
+        MCFScriptOwner* aScriptOwner,
+        TInt aScriptId = KErrNotFound );
+
+    // Initilizes device starting phase
+    void InitDeviceStartingPhaseL();
+
+    // Initializes device started phase
+    void InitDeviceStartedPhaseL();
+
+    // Complete file path
+    void CompleteFilePath( TDes& aFileName );
+
+    // Loads script from file
+    HBufC8* LoadScriptFromFile( const TDesC& aFilePath );
+
+    // Get scripts by Uid
+    void GetScriptsByUid( const TUid& aUid,
+        RPointerArray<CCFScript>& aArray ) const;
+
+    // Create a ram file path for a script
+    HBufC* ScriptFilePath( CCFScriptInfo& aInfo ) const;
+
+    // Create a ram file path for a script
+    HBufC* ScriptFilePath( const TDesC& aName, const TUid& aOwnerUid ) const;
+
+    // Create a ram file path for a script
+    void ScriptFilePath( CCFScriptInfo& aInfo, TDes& aFile ) const;
+
+    // Saves a script
+    TInt DoSave( const TDesC& aFileName, const TDesC8& aScript );
+    
+    // Loads a script
+    TInt DoLoad( const TDesC& aFilePath );
+    
+    // Get script uid and name from file path
+    void ParseUidAndName( const TDesC& aFilePath,
+        TUid& aUid, TPtrC& aName ) const;
+    
+    // Create a new script object
+    CCFScript* CreateScriptL( const TDesC& aName,
+        const TDesC8& aScript,
+        const TUid& aOwner,
+        const RThread& aOwnerThread,
+        MCFActionHandler& aActionHandler,
+        TBool aDoSecurityCheck,
+        MCFScriptOwner* aScriptOwner,
+        TInt aScriptId );
+        
+    // Rollback a script based on existing script info
+    void RollbackScriptL( const CCFScriptInfo& aInfo, const TDesC& aFilePath );
+    
+    // Resolves script ids by owner session
+    void NotifyScriptIds( MCFScriptOwner* aScriptOwner );
+    
+    // Adds a script information in rollback array
+    void AddRollbackInfoL( CCFScript& aScript );
+    
+    // Deletes a script file from system drive
+    TInt DeleteScriptFile( const TDesC& aFilePath, const TUid& aOwnerUid );
+
+private: // Data
+
+    enum EInternalParserDataProvidingState
+        {
+        KInit = 0,
+        KDataSent,
+        KDone,
+        KError
+        };
+
+    // Internal state of the parser data providing.
+    EInternalParserDataProvidingState iParserDataProvidingState;
+
+    // unique Id assigned to new script
+    TInt iNextId;
+
+    // Own: Scripts
+    RPointerArray<CCFScript> iScripts;
+
+    // Own: Script ids
+    RArray<TInt> iScriptIds;
+
+    // Loaded scripts in starting phase
+    RPointerArray<CCFScript> iLoadedScripts;
+
+    // XML DOM parser.
+    CMDXMLParser* iParser;
+
+    // Data provider's data for the parser that is valid during AddScriptL.
+    TPtrC8 iParserData;
+
+    // Wait for DOM parser to complete.
+    CActiveSchedulerWait* iWaitParsing;
+
+    // Ref: Context manager
+    MCFExtendedContextInterface& iCF;
+
+    // Ref: File server session
+    RFs& iFs;
+
+    // Ref: Script event listener
+    MCFActionHandler& iScriptEventListener;
+
+    // Ref: Security checker
+    MCFSecurityChecker& iSecurityChecker;
+
+    // Own: Operation plugin manager
+    CCFOperationPluginManager* iOperationPluginManager;
+
+    // Default Rom drive letter
+    TChar iDefaultRomDrive;
+
+    // Default system drive
+    TChar iDefaultSystemDrive;
+    
+    // Script which is being updated
+    CCFScript* iUpdatedScript;
+    
+    // Script info array for rollback
+    RScriptInfoArray iRollbackList;
+    };
+
+#endif // C_CFSCRIPTHANDLER_H
+