/*
* Copyright (c) 2010 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 __CREATORENGINE_H__
#define __CREATORENGINE_H__
// INCLUDES
#include <e32std.h>
#include <e32base.h>
#include <f32file.h>
#include <W32STD.H>
//#include <aknenv.h>
#include <coeutils.h>
#include <apparc.h>
#include <eikenv.h>
//#include <aknprogressdialog.h>
//#include <eikprogi.h>
#include <bautils.h>
#include <commdb.h>
#include <imageconversion.h> //TFrameInfo
#include "creator.hrh"
#include "creator_std.h"
#include "creator_scriptentry.h"
#include "creator_modulebase.h"
#include "creator_browser.h"
#include "creator_calendar.h"
#include "creator_phonebookbase.h"
#include "creator_note.h"
#include "creator_log.h"
#include "creator_connectionmethodbase.h"
#include "creator_mailbox.h"
//#include "creator_imps.h"
#include "creator_message.h"
#include "creator_landmark.h"
#include "creator_randomdataparser.h"
//class CCreatorAppUi;
class TCommand;
class CCreatorBrowser;
class CCreatorCalendarBase;
class CCreatorNotepad;
class CCreatorLogs;
class CCreatorAccessPoints;
class CCreatorMailboxes;
class CCreatorIMPS;
class CCreatorFiles;
class CCreatorMessages;
class CCreatorLandmarks;
class CDictionaryFileStore;
class CImageDecoder;
class CFbsBitmap;
class CBitmapScaler;
class EngineWrapper;
class CCreatorCmdScriptRun;
static const TUid KUidCreatorApp = {0x20011383};
enum TListQueryId
{
R_GROUP_CREATION_TYPE_QUERY,
R_CONTACT_CREATION_TYPE_QUERY,
R_MESSAGE_TYPE_QUERY,
R_FOLDER_TYPE_QUERY,
R_UNREAD_QUERY,
R_ATTACHMENT_MULTI_SELECTION_QUERY,
R_AMS_ATTACHMENT_SINGLE_SELECTION_QUERY,
R_ATTACHMENT_SINGLE_SELECTION_QUERY
};
/**
* Device memory information
*/
class TMemoryDetails
{
public:
TBuf<16> iCFree;
TBuf<16> iDFree;
TBuf<16> iEFree;
TBuf<16> iHFree;
TBuf<16> iCSize;
TBuf<16> iDSize;
TBool iENotAvailable;
TBuf<16> iESize;
TBuf<16> iHSize;
};
// Common constant for undefined integer value:
const TInt KUndef = KErrNotFound;
class CCreatorEngine : public CActive
{
public:
enum TRandomStringType
{
EFirstName = 0,
ESurname,
ECompany,
EAddress,
EJobTitle,
EPhoneNumber,
EGroupName,
EMeetingReason,
EMeetingPlace,
EMemoText,
EAnniversaryReason,
EToDoText,
EReminderText,
EMessageSubject,
EMessageText,
ECity,
ECountry,
EPostcode,
EState,
EPobox,
EPrefix,
ESuffix,
ELandmarkName,
ELandmarkDescription
};
// note! changing order will cause regression in other modules
enum TTestDataPath
{
EJPEG_25kB = 0,
EJPEG_200kB,
EJPEG_500kB,
EPNG_15kB,
EGIF_2kB,
ERNG_1kB,
EMIDI_10kB,
EWAVE_20kB,
EAMR_20kB,
EExcel_15kB,
EWord_20kB,
EPowerPoint_40kB,
EText_10kB,
EText_70kB,
E3GPP_70kB,
EMP3_250kB,
EAAC_100kB,
ERM_95kB,
EBMP_25kB,
EHTML_20kB,
EJAD_1kB,
EJAR_10kB,
EJP2_65kB,
EMP4_200kB,
EMXMF_40kB,
ERAM_1kB,
ESVG_15kB,
ESWF_15kB,
ETIF_25kB,
EVCF_1kB,
EVCS_1kB,
ESISX_10kB,
EWMA_50kB,
EWMV_200kB,
ESavedDeck_1kB,
LAST_FILE_ID//When you add new items to enum, add them before last item, so random number generations does not need to be updated also
};
enum TRandomDateType
{
EDatePast,
EDateFuture
};
public:
/**
* Constructor: NewL
*/
static CCreatorEngine* NewL(EngineWrapper *aEngineWrapper);
/**
* Constructor: NewLC
*/
static CCreatorEngine* NewLC(EngineWrapper *aEngineWrapper);
~CCreatorEngine();
inline TMemoryDetails GetMemoryDetails(){ return iMemoryDetails; };
inline EngineWrapper* GetEngineWrapper(){ return iEngineWrapper; };
private:
CCreatorEngine();
/**
* EPOC default constructor for performing 2nd stage construction
*/
void ConstructL(EngineWrapper *aEngineWrapper);
void RequestMemoryDetails();
TBool MMC_OK() const;
void Init();
void RunL();
TInt RunError(TInt aError);
void DoCancel();
void ExecuteFirstCommandL(const TDesC& aText);
void ExecuteCommand();
void StartEnginesL();
void ShutDownEnginesL();
void CheckForMoreCommandsL();
TBool IsDeleteCommand( TInt aCommand );
TInt ReadRandomDataL(const TRandomStringType aRandomStringType,
const TInt aResourceId,
const TDesC& aFilename,
const CCreatorRandomDataParser::TRandomDataType aRandomDataType);
void GenerateSourceImageFileL( const TTestDataPath aFileType, const TDesC& aFileName );
void GenereteSourceTextFileL( const TDesC& aFileName, TInt aSize );
public:
void ExecuteOptionsMenuCommandL(TInt aCommand);
void RunScriptL();
TInt RunScriptL(const TDesC& aScriptFile);
void AppendToCommandArrayL(TInt aCommand, CCreatorModuleBaseParameters* aParameters, TInt aNumberOfEntries = 1);
TInt CommandArrayCount();
TPtrC TestDataPathL(enum TTestDataPath aTestDataPath);
TPtrC RandomSoundFileL(); // Returns temporary path, which will be removed on shutdown
void RandomPictureFileL(TDes& aPath); // aPath temporary path, which will be removed on shutdown
TPtrC CreateRandomSoundFileL(); // Copies file to new location and returns the new path
TPtrC CreateSoundFileL(TTestDataPath aId); // Copies file to new location and returns the new path
void CopyFileL(const TFileName& aSourceFile, const TFileName& aTargetFile, TBool aOverwrite = EFalse );
/*
* Gets attacment file id based on the file id string
* @return Attachment file id
* @param aAttachmentIdStr Attachment file id string
*/
TInt GetAttachmentIdL( const TDesC& aAttachmentIdStr ) const;
TUint32 GetDefaultIAPL();
TUint32 AccessPointNameToIdL(const TDesC& aAPName, TBool aAnyIfNotFound = EFalse );
TPtrC RandomString(enum TRandomStringType aRandomStringType);
TInt RandomNumber(TInt aRange);
TInt RandomNumber(TInt aMin, TInt aMax);
TTime RandomDate(TRandomDateType type, TInt aMinDays = 0, TInt aMaxDays = 360 );
TTime RandomDate(TTime baseTime, TRandomDateType type, TInt aMinDays = 0, TInt aMaxDays = 360);
TTime RandomTime(TTime baseTime, TRandomDateType type, TInt aMinHours=0, TInt aMaxHours=24, TInt aMinMinutes=0, TInt aMaxMinutes=60 );
CDesCArrayFlat* SoundFilesL();
CDesCArrayFlat* PictureFilesL();
HBufC* CreateEmailAddressLC();
HBufC* CreateHTTPUrlLC();
HBufC* CreateRandomStringLC(TInt aStrLen);
HBufC* CreateEmailAddressLC(
const TDesC& firstname,
const TDesC& lastname,
const TDesC& domain,
const TDesC& country ) const;
HBufC* CreateUrlLC(
const TDesC& protocol,
const TDesC& prefix,
const TDesC& domain,
const TDesC& country) const;
void SetDefaultPathForFileCommandL(TInt aCommand, TFileName& aPath);
TBool GetRandomDataFilenameL(TDes& aFilename);
TBool GetRandomDataFromFileL(const TDesC& aFilename);
void CancelComplete();
CDictionaryFileStore* FileStoreLC();
void ReadEntryIdsFromStoreL( RArray<TInt>& aEntryIds, const TUid aModuleUid );
void WriteEntryIdsToStoreL( RArray<TInt>& aEntryIds, const TUid aModuleUid );
void ReadEntryIdsFromStoreL( RArray<TUint32>& aEntryIds, const TUid aModuleUid );
void WriteEntryIdsToStoreL( RArray<TUint32>& aEntryIds, const TUid aModuleUid );
void RemoveStoreL( const TUid aModuleUid );
void ProgressDialogCancelledL();
private:
// needed by the engine itself
RTimer iTimer;
CEikonEnv* iEnv;
//CCreatorAppUi* iAppUi;
TInt iCurrentEntry;
TInt iEntriesToBeCreated;
TInt iFailedCommands;
CDesCArrayFlat* iSoundFileArray;
CDesCArrayFlat* iPictureFileArray;
CCommandArray* iCommandArray;
RPointerArray<CCreatorModuleBaseParameters> iParameterArray;
// progress bar
//CAknProgressDialog* iProgressDialog;
//CEikProgressInfo* iProgressInfo;
// for the random data generator
TInt64 iSeed;
class TStringArrayPtr
{
public:
TStringArrayPtr(TRandomStringType aType, CDesCArray* aPtr)
{
iStringType = aType;
iArrayPtr = aPtr;
};
TRandomStringType iStringType;
CDesCArray* iArrayPtr;
};
RArray<TStringArrayPtr> iStringArrays;
// modules
CCreatorBrowser* iBrowser;
CCreatorCalendarBase* iCalendar;
CCreatorPhonebookBase* iPhonebook;
CCreatorNotepad* iNotepad;
CCreatorLogs* iLogs;
CCreatorConnectionSettingsBase* iAccessPoints;
CCreatorMailboxes* iMailboxes;
CCreatorIMPS* iIMPS;
CCreatorFiles* iFiles;
CCreatorMessages* iMessages;
CCreatorLandmarks* iLandmarks;
CCreatorCmdScriptRun* iCmdScriptRun;
// options menu command home module
MCreatorModuleBase* iUsedOptionsMenuModule;
HBufC* iTempPath;
RPointerArray<HBufC> iAllocatedFilePaths;
TBool iUserCancelled;
// For generating missing bitmaps
HBufC8* iBitmapData;
CFbsBitmap* iBitmap;
CFbsBitmap* iScaledBitmap;
CImageDecoder* iDecoder;
TFrameInfo iFrameinfo;
CImageEncoder* iEncoder;
CFrameImageData* iFrameImageData;
CBitmapScaler* iScaler;
EngineWrapper* iEngineWrapper; // Enginewrapper that is used for communicating between QT and Symbian
TMemoryDetails iMemoryDetails;
TInt iResourceFileId;
HBufC* iCommandLineScriptName;
HBufC* iCommandLineRandomDataFileName;
};
// this class contains a command which will be executed
class TCommand
{
public:
TInt iCommandId;
CCreatorModuleBaseParameters* iParameters;
public:
TCommand(TInt aCommandId, CCreatorModuleBaseParameters* aParameters);
~TCommand();
};
// utility class for waiting for asychronous requests
class CAsyncWaiter : public CActive
{
public:
static CAsyncWaiter* NewL( TInt aPriority = EPriorityStandard );
static CAsyncWaiter* NewLC( TInt aPriority = EPriorityStandard );
~CAsyncWaiter();
void StartAndWait();
TInt Result() const;
private:
CAsyncWaiter( TInt aPriority );
// from CActive
void RunL();
void DoCancel();
private:
CActiveSchedulerWait iWait;
TInt iError;
};
/*
* Maps file id string (file name) to TTestDataPath (file id) and TCreatorIds (command id)
*/
// File ids:
_LIT(K3GPP_70KB, "3GPP-70kB");
_LIT(KAAC_100KB, "AAC-100kB");
_LIT(KAMR_20KB, "AMR-20kB");
_LIT(KXLS_15KB, "XLS-15kB");
_LIT(KGIF_2KB, "GIF-2kB");
_LIT(KJPEG_200KB, "JPEG-200kB");
_LIT(KJPEG_25KB, "JPEG-25kB");
_LIT(KJPEG_500KB, "JPEG-500kB");
_LIT(KMIDI_10KB, "MIDI-10kB");
_LIT(KMP3_250KB, "MP3-250kB");
_LIT(KPNG_15KB, "PNG-15kB");
_LIT(KPPT_40KB, "PPT-40kB");
_LIT(KRM_95KB, "RM-95kB");
_LIT(KRNG_1KB, "RNG-1kB");
_LIT(KTXT_10KB, "TXT-10kB");
_LIT(KTXT_70KB, "TXT-70kB");
_LIT(KWAV_20KB, "WAV-20kB");
_LIT(KDOC_20KB, "DOC-20kB");
_LIT(KSWF_15KB, "SWF-15kB");
_LIT(KJAD_1KB, "JAD-1kB");
_LIT(KJAR_10KB, "JAR-10kB");
_LIT(KTIF_25KB, "TIF-25kB");
_LIT(KMXMF_40KB, "MXMF-40kB");
_LIT(KBMP_25KB, "BMP-25kB");
_LIT(KJP2_25KB, "JP2-25kB");
_LIT(KSVG_15KB, "SVG-15kB");
_LIT(KHTML_20KB, "HTML-20kB");
_LIT(KVCF_1KB, "VCF-1kB");
_LIT(KVCS_1KB, "VCS-1kB");
_LIT(KMP4_200KB, "MP4-200kB");
_LIT(KSISX_10KB, "SISX-10kB");
_LIT(KRAM_1KB, "RAM-1kB");
_LIT(KDECK_1KB, "DECK-1kB");
_LIT(KWMA_50KB, "WMA-50kB");
_LIT(KWMV_200KB, "WMV-200kB");
class FileMapping
{
public:
FileMapping(const TDesC& aFileName, TInt aFileId, TInt aCommandId );
const TDesC& FileName() const;
TInt FileId() const;
TInt CommandId() const;
private:
const TDesC& iFileName;
TInt iFileId;
TInt iCommandId;
};
/*
* This table contains the string <-> TTestDataPath mappings for the file types
*/
static FileMapping FileMap[] =
{
FileMapping(K3GPP_70KB, CCreatorEngine::E3GPP_70kB, ECmdCreateFileEntry3GPP_70kB),
FileMapping(KAAC_100KB, CCreatorEngine::EAAC_100kB, ECmdCreateFileEntryAAC_100kB),
FileMapping(KAMR_20KB, CCreatorEngine::EAMR_20kB, ECmdCreateFileEntryAMR_20kB),
FileMapping(KXLS_15KB, CCreatorEngine::EExcel_15kB, ECmdCreateFileEntryXLS_15kB),
FileMapping(KGIF_2KB, CCreatorEngine::EGIF_2kB, ECmdCreateFileEntryGIF_2kB),
FileMapping(KJPEG_200KB, CCreatorEngine::EJPEG_200kB, ECmdCreateFileEntryJPEG_200kB),
FileMapping(KJPEG_25KB, CCreatorEngine::EJPEG_25kB, ECmdCreateFileEntryJPEG_25kB),
FileMapping(KJPEG_500KB, CCreatorEngine::EJPEG_500kB, ECmdCreateFileEntryJPEG_500kB),
FileMapping(KMIDI_10KB, CCreatorEngine::EMIDI_10kB, ECmdCreateFileEntryMIDI_10kB),
FileMapping(KMP3_250KB, CCreatorEngine::EMP3_250kB, ECmdCreateFileEntryMP3_250kB),
FileMapping(KPNG_15KB, CCreatorEngine::EPNG_15kB, ECmdCreateFileEntryPNG_15kB),
FileMapping(KPPT_40KB, CCreatorEngine::EPowerPoint_40kB, ECmdCreateFileEntryPPT_40kB),
FileMapping(KRM_95KB, CCreatorEngine::ERM_95kB, ECmdCreateFileEntryRM_95kB),
FileMapping(KRNG_1KB, CCreatorEngine::ERNG_1kB, ECmdCreateFileEntryRNG_1kB),
FileMapping(KTXT_10KB, CCreatorEngine::EText_10kB, ECmdCreateFileEntryTXT_10kB),
FileMapping(KTXT_70KB, CCreatorEngine::EText_70kB, ECmdCreateFileEntryTXT_70kB),
FileMapping(KWAV_20KB, CCreatorEngine::EWAVE_20kB, ECmdCreateFileEntryWAV_20kB),
FileMapping(KDOC_20KB, CCreatorEngine::EWord_20kB, ECmdCreateFileEntryDOC_20kB),
FileMapping(KBMP_25KB, CCreatorEngine::EBMP_25kB, ECmdCreateFileEntryBMP_25kB),
FileMapping(KDECK_1KB, CCreatorEngine::ESavedDeck_1kB, ECmdCreateFileEntryDeck_1kB),
FileMapping(KHTML_20KB, CCreatorEngine::EHTML_20kB, ECmdCreateFileEntryHTML_20kB),
FileMapping(KJAD_1KB, CCreatorEngine::EJAD_1kB, ECmdCreateFileEntryJAD_1kB),
FileMapping(KJAR_10KB, CCreatorEngine::EJAR_10kB, ECmdCreateFileEntryJAR_10kB),
FileMapping(KJP2_25KB, CCreatorEngine::EJP2_65kB, ECmdCreateFileEntryJP2_65kB),
FileMapping(KMP4_200KB, CCreatorEngine::EMP4_200kB, ECmdCreateFileEntryMP4_200kB),
FileMapping(KMXMF_40KB, CCreatorEngine::EMXMF_40kB, ECmdCreateFileEntryMXMF_40kB),
FileMapping(KRAM_1KB, CCreatorEngine::ERAM_1kB, ECmdCreateFileEntryRAM_1kB),
FileMapping(KSVG_15KB, CCreatorEngine::ESVG_15kB, ECmdCreateFileEntrySVG_15kB),
FileMapping(KSWF_15KB, CCreatorEngine::ESWF_15kB, ECmdCreateFileEntrySWF_15kB),
FileMapping(KTIF_25KB, CCreatorEngine::ETIF_25kB, ECmdCreateFileEntryTIF_25kB),
FileMapping(KVCF_1KB, CCreatorEngine::EVCF_1kB, ECmdCreateFileEntryVCF_1kB),
FileMapping(KVCS_1KB, CCreatorEngine::EVCS_1kB, ECmdCreateFileEntryVCS_1kB),
FileMapping(KSISX_10KB, CCreatorEngine::ESISX_10kB, ECmdCreateFileEntrySISX_10kB),
FileMapping(KWMA_50KB, CCreatorEngine::EWMA_50kB, ECmdCreateFileEntryWMA_50kB),
FileMapping(KWMV_200KB, CCreatorEngine::EWMV_200kB, ECmdCreateFileEntryWMV_200kB)
};
#endif // __CREATORENGINE_H__