loggingservices/eventlogger/LogServ/src/LogServResourceInterpreter.cpp
author hgs
Mon, 27 Sep 2010 11:59:56 +0100
changeset 51 7d4490026038
parent 31 ba1c4f4a893f
permissions -rw-r--r--
201037_06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
     1
// Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
// All rights reserved.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
// This component and the accompanying materials are made available
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
// which accompanies this distribution, and is available
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
// Initial Contributors:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
// Contributors:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
// Description:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
#include <bautils.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
#include "logservpanic.h"
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
#include "LogServResourceInterpreter.h"
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    21
//LogWrap resoure file name
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    22
_LIT(KResourceFileWrapper, "\\resource\\logeng\\logwrap.rsc");
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    24
const TInt KStringsArrayGranularity = 20;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    26
/**
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    27
Creates a CLogServResourceInterpreter instance.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    28
The created CLogServResourceInterpreter instance will load into memory the content of the LogWrap
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    29
resource file.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    30
  
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    31
@param aFs Reference to a file session object, used later for reading the content of the resource file.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    33
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    34
                      Note that the function may leave with database specific errors and
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    35
                      other system-wide error codes.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    36
*/
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    37
CLogServResourceInterpreter* CLogServResourceInterpreter::NewL(RFs& aFs)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    38
	{
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    39
	CLogServResourceInterpreter* self = new (ELeave) CLogServResourceInterpreter(aFs);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
	CleanupStack::PushL(self);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
	self->ConstructL();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
	CleanupStack::Pop(self);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    43
	return self;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    44
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    46
/**
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    47
Destroys CLogServResourceInterpreter object deallocating all previously allocated resources
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    48
(the resource file, the memory for the loaded resource strings) 
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    49
*/
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    50
CLogServResourceInterpreter::~CLogServResourceInterpreter()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
	{
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    52
	iFile.Close();
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    53
	for(TInt i=iStrings.Count()-1;i>=0;--i)
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    54
		{
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    55
		delete iStrings[i].iString;
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    56
		}
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    57
	iStrings.Close();
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    58
    }
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    59
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    60
/**
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    61
Creates a resource reader object for the resource identified by the aId parameter.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    62
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    63
@param aReader Output parameter. The resource reader object, created by this call.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    64
@param aId Resource item identifier.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    65
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    66
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    67
                      Note that the function may leave with database specific errors and
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    68
                      other system-wide error codes. 
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    69
*/
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    70
void CLogServResourceInterpreter::CreateResourceReaderLC(TResourceReader& aReader, TInt aId)
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    71
	{
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    72
	HBufC8* string = GetStringL(aId);		
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    73
	//Resource reader needs to be created with a copy of the string resource as otherwise
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    74
	//our "HBufC8*" string will be deleted when the resource reader is deleted!
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    75
	aReader.SetBuffer(string->AllocLC());
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    76
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    77
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    78
/**
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    79
Initializes CLogServResourceInterpreter data members with their default values.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    80
@param aFs Reference to a file session object, used later for reading the content of the resource file.  
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    81
*/
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    82
CLogServResourceInterpreter::CLogServResourceInterpreter(RFs& aFs) :	
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    83
	iFs(aFs), 
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    84
	iStrings(KStringsArrayGranularity)
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    85
	{
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    86
	}
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    87
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    88
/**
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    89
Loads the content of the LogWrap resource file.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    90
*/
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    91
void CLogServResourceInterpreter::ConstructL()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    92
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
	// Find the resource file
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    94
  TFileName fileName;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    95
	fileName.Copy(RProcess().FileName());
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    96
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    97
  TParse parse;
7d4490026038 201037_06
hgs
parents: 31
diff changeset
    98
  parse.Set(KResourceFileWrapper, &fileName, NULL);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    99
	fileName = parse.FullName();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   100
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   101
	// Get language of resource file
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   102
	BaflUtils::NearestLanguageFile(iFs, fileName);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   103
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   104
	// Check the entry exists on this drive (e.g. if we are running the log server
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   105
	// from RAM, then default to the ROM if no RSC on the current drive exists).
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   106
	TEntry fsEntry;
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   107
	TInt err = iFs.Entry(fileName, fsEntry);
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   108
	if(err == KErrNotFound || err == KErrPathNotFound)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   109
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   110
		// Switch to ROM (we might already have been launching from the ROM,
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   111
		// in which case this will have no effect anyway).
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   112
		fileName[0] = 'Z';
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   113
		}
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   114
	iFile.OpenL(iFs, fileName);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   115
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   116
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   117
/**
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   118
Attempts to read the resource string, identified by the aId parameter, from 
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   119
the iStrings array. If the resource stringis not there, it will be loaded from the
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   120
resource file and put in iStrings array.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   121
@param aId Resource string identifier.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   122
@return HBufC8 object containing the requested string 
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   123
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   124
                      Note that the function may leave with database specific errors and
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   125
                      other system-wide error codes. 
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   126
*/
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   127
HBufC8* CLogServResourceInterpreter::GetStringL(TInt aId)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   128
	{
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   129
	TLinearOrder<TResourceString> order(&CLogServResourceInterpreter::Compare);
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   130
	//Try to find the requested resource in the cached strings
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   131
	TInt idx = iStrings.FindInOrder(TResourceString(aId, NULL), order);
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   132
	if(idx == KErrNotFound)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   133
		{
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   134
		//String not in the cache, load it from the resource file
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   135
		iStrings.ReserveL(iStrings.Count() + 1);
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   136
		HBufC8* buf = iFile.AllocReadL(aId);
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   137
		TResourceString entry(aId, buf);
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   138
		#ifdef _DEBUG
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   139
		TInt err = 
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   140
		#endif	
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   141
		iStrings.InsertInOrder(entry, order);
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   142
		__ASSERT_DEBUG(err == KErrNone, User::Invariant());
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   143
		return buf;
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   144
		}
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   145
	return iStrings[idx].iString;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   146
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   147
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   148
/**
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   149
Compares two iStrings entries.
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   150
Used for sorting/finding entries in iStrings sorted array.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   151
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   152
@param  aLeft  Left entry to be compared
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   153
@param  aRight Right entry to be compared
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   154
@return -1 aLeft is less than aRight, 0 entries are equal, 1 aLeft is bigger than aRight 
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   155
*/
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   156
TInt CLogServResourceInterpreter::Compare(const CLogServResourceInterpreter::TResourceString& aLeft, 
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   157
 										  const CLogServResourceInterpreter::TResourceString& aRight)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   158
	{
51
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   159
	TInt64 res = (TInt64)aLeft.iId - (TInt64)aRight.iId;
7d4490026038 201037_06
hgs
parents: 31
diff changeset
   160
	return res > 0LL ? 1 : (res < 0LL ? -1 : 0);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   161
	}