--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatemgr/cmd/inc/ssmcommandlistresourcereaderimpl.h Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,191 @@
+// Copyright (c) 2007-2009 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 __SSMCOMMANDLISTRESOURCEREADERIMPL_H__
+#define __SSMCOMMANDLISTRESOURCEREADERIMPL_H__
+
+#include <e32base.h>
+#include <f32file.h>
+
+#include <ssm/ssmstate.h>
+#include <ssm/ssmswp.h>
+#include <ssm/ssmcmd.hrh>
+#include <barsread2.h>
+
+class CResourceFile;
+class MSsmConditionalCallback;
+class MSsmCommandList;
+
+/** Private implementation of CSsmCommandListResourceReader.
+
+@internalComponent
+*/
+NONSHARABLE_CLASS(CSsmCommandListResourceReaderImpl) : public CBase
+ {
+public:
+ static CSsmCommandListResourceReaderImpl* NewL(RFs& aFs, const TDesC& aCommandListPath, MSsmConditionalCallback& aConditionalCallback);
+ ~CSsmCommandListResourceReaderImpl();
+
+ void Initialise(TRequestStatus& aStatus);
+ void InitialiseCancel();
+ void PrepareCommandList(MSsmCommandList& aCommandList, TInt aCommandListId, const TSsmState& aState, TRequestStatus& aStatus);
+ void PrepareCommandList(MSsmCommandList& aCommandList, TInt aCommandListId, const TSsmSwp& aSwp, TRequestStatus& aStatus);
+ void PrepareCommandListCancel();
+ TBool IsCommandListReady() const;
+ TBool Busy() const;
+ void GetCommandListIdsL(RArray<TInt>& aArray) const;
+
+private:
+ enum TInternalAction
+ {
+ EIdle,
+ EInitialiseFirstStep,
+ EInitialiseNextStep,
+ EInitialiseSysDriveStep,
+ EPrepareFirstStep,
+ EPrepareNextStep
+ };
+
+ NONSHARABLE_CLASS(TMapping)
+ {
+ public:
+ TMapping(TInt aCommandListId, TInt aResourceId, CResourceFile* aResourceFile) : iCommandListId(aCommandListId), iResourceId(aResourceId), iResourceFile(aResourceFile) {}
+ TInt iCommandListId; //this should always be the first member data
+ TInt iResourceId;
+ CResourceFile* iResourceFile; // CSsmCommandListResourceReaderImpl takes the ownership
+ };
+
+ NONSHARABLE_CLASS(CResourcePool) : public CBase
+ {
+ public:
+ CResourcePool();
+ ~CResourcePool();
+ TBool IsEmpty() const;
+ void Reset();
+ void AppendL(const CResourceFile* aResourceFile);
+ void AppendL(const TDesC& aFileName);
+ void AppendL(const TMapping& aMapping);
+#ifdef SYMBIAN_SSM_FLEXIBLE_MERGE
+ void UpdateMappingArrayL(TInt aCommandListId, RArray<TMapping>& aMappingArray) const;
+#else
+ TMapping MappingL(TInt aCommandListId) const;
+#endif //SYMBIAN_SSM_FLEXIBLE_MERGE
+ void GetCommandListIdsL(RArray<TInt>& aArray) const;
+ const TDesC& FileNameForResourceFileL(const CResourceFile* aResourceFile) const;
+
+ private:
+ RPointerArray<CResourceFile> iResourceFiles;
+ RArray<TMapping> iMappings;
+ RPointerArray<HBufC> iResourceFileNames;
+ };
+
+ NONSHARABLE_CLASS(CActiveBase) : public CActive
+ {
+ public:
+ ~CActiveBase();
+ protected:
+ CActiveBase(TInt aPriority);
+ void Start();
+ void CompleteClientRequest(TInt aReason);
+ protected:
+ TRequestStatus* iRequestStatus;
+ TInternalAction iAction;
+ };
+
+ NONSHARABLE_CLASS(CInitialiser) : public CActiveBase
+ {
+ public:
+ static CInitialiser* NewL(RFs& aFs, const TDesC& aCommandListPath, CResourcePool& aResourcePool);
+ void Start(TRequestStatus& aStatus);
+ ~CInitialiser();
+ private:
+ CInitialiser(RFs& aFs, CResourcePool& aResourcePool);
+ void ConstructL(const TDesC& aCommandListPath);
+ void ResetToUninitialisedState();
+ void DoInitialiseFirstStepL();
+ void DoInitialiseNextStepL();
+#ifdef SYMBIAN_SSM_FLEXIBLE_MERGE
+ void DoInitialiseSysDriveStepL();
+#endif
+ CResourceFile* OpenResourceFileL(const TDesC& aFileName);
+ void ParseFileL(CResourceFile* aResourceFile);
+ // from CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError(TInt aError);
+ private:
+ RFs& iFs;
+ RBuf iPath;
+ CResourcePool& iResourcePool;
+ CDir* iResourceFileEntries;
+ TInt iEntryIndex;
+#ifdef SYMBIAN_SSM_FLEXIBLE_MERGE
+ RBuf iSystemDrivePath;
+ CDir* iRssFileEntriesInSysDrive;
+ TInt iSysDriveEntryIndex;
+#endif //SYMBIAN_SSM_FLEXIBLE_MERGE
+ };
+
+ NONSHARABLE_CLASS(CPreparer) : public CActiveBase
+ {
+ public:
+ CPreparer(const CResourcePool& aResourcePool, MSsmConditionalCallback& aConditionalCallback);
+ ~CPreparer();
+ void Start(MSsmCommandList& aCommandList, TInt aCommandListId, const TSsmState& aState, TRequestStatus& aStatus);
+ void Start(MSsmCommandList& aCommandList, TInt aCommandListId, const TSsmSwp& aSwp, TRequestStatus& aStatus);
+ TBool IsCommandListReady();
+ private:
+ void ResetReadyForNextPrepare();
+ void DoPrepareFirstStepL();
+ void DoPrepareNextStepL();
+ void AddCommandToListL(TSsmCommandType aType, RResourceReader& aCommandReader, TInt aConditionalInfoResourceId);
+ // from CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError(TInt aError);
+ private:
+ const CResourcePool& iResourcePool;
+ MSsmConditionalCallback& iConditionalCallback;
+
+ // input parameters for current prepare operation
+ MSsmCommandList* iCommandList; // Not owning
+ TInt iCommandListId;
+ TSsmState iState;
+ TSsmSwp iSwpChange;
+
+ // working variables for current prepare operation
+ TMapping iMapping; // mapping used for current prepare
+ RResourceReader iListReader;
+ TInt iCommandIndex;
+ TInt iBatchIndex; // number of commands left to read in current RunL
+ TBool iCommandListReady;
+#ifdef SYMBIAN_SSM_FLEXIBLE_MERGE
+ RArray<TMapping> iMappingArray;
+ RArray<TInt> iCommandIndexInRssFile;
+ TInt iCurrentCommandListInMapping;
+#endif //SYMBIAN_SSM_FLEXIBLE_MERGE
+ };
+
+private:
+ CSsmCommandListResourceReaderImpl();
+ void ConstructL(RFs& aFs, const TDesC& aCommandListPath, MSsmConditionalCallback& aConditionalCallback);
+
+private:
+ CResourcePool* iResourcePool;
+ CInitialiser* iInitialiser;
+ CPreparer* iPreparer;
+ };
+
+#endif // __SSMCOMMANDLISTRESOURCEREADERIMPL_H__