commsfwtools/preparedefaultcommsdatabase/Tools/ceddump/src/ceddumper.cpp
branchRCL_3
changeset 26 b564fb5fd78b
parent 25 9d7ce34704c8
equal deleted inserted replaced
25:9d7ce34704c8 26:b564fb5fd78b
    53 
    53 
    54 #define KLinkPrefix		_L("Link.")
    54 #define KLinkPrefix		_L("Link.")
    55 #define KLinkSeparator     _L(".")
    55 #define KLinkSeparator     _L(".")
    56 #define TableNameTag     _L("Table")
    56 #define TableNameTag     _L("Table")
    57 
    57 
    58 const TUid KCommsDatUid = {0xcccccc00};
       
    59 
       
    60 const TText* const gAtttibutesArray[]=
    58 const TText* const gAtttibutesArray[]=
    61 	{
    59 	{
    62 	Hidden,
    60 	Hidden,
    63 	Private,
    61 	Private,
    64 	ProtectedWrite,
    62 	ProtectedWrite,
    66 	NO_MORE_RECORDS
    64 	NO_MORE_RECORDS
    67 	};
    65 	};
    68 
    66 
    69 CCedDumper::~CCedDumper()
    67 CCedDumper::~CCedDumper()
    70 	{
    68 	{
    71 	iGenericTableIds.Close();
    69 	delete iFileDumper;
    72 	iGenericTableNames.Close();
       
    73 	for(TInt i=0; i<iGenericTableFields.Count();i++)
       
    74 		{
       
    75 		iGenericTableFields[i].Close();
       
    76 		}
       
    77 	iGenericTableFields.Close();
       
    78 	delete iRepository;
       
    79 
       
    80     delete iFileDumper;
       
    81 	delete iDbSession;
    70 	delete iDbSession;
    82 	delete iConsole;
    71 	delete iConsole;
    83 	delete iTable;
    72 	delete iTable;
    84 
    73 
    85 #ifdef SYMBIAN_NETWORKING_3GPPDEFAULTQOS
    74 #ifdef SYMBIAN_NETWORKING_3GPPDEFAULTQOS
    99 	}
    88 	}
   100 
    89 
   101 void CCedDumper::ConstructL()
    90 void CCedDumper::ConstructL()
   102 	{
    91 	{
   103 	iConsole = Console::NewL(_L("Ceddump Tool"),TSize(KConsFullScreen,KConsFullScreen));
    92 	iConsole = Console::NewL(_L("Ceddump Tool"),TSize(KConsFullScreen,KConsFullScreen));
   104 	iRepository = CRepository::NewL(KCommsDatUid);
       
   105 
    93 
   106 #ifdef SYMBIAN_NETWORKING_3GPPDEFAULTQOS
    94 #ifdef SYMBIAN_NETWORKING_3GPPDEFAULTQOS
   107 	iR99Conversion = EFalse;
    95 	iR99Conversion = EFalse;
   108 #endif
    96 #endif
   109 // SYMBIAN_NETWORKING_3GPPDEFAULTQOS
    97 // SYMBIAN_NETWORKING_3GPPDEFAULTQOS
   314 	iConsole->Getch();
   302 	iConsole->Getch();
   315 	}
   303 	}
   316 
   304 
   317 void CCedDumper::DumpContents()
   305 void CCedDumper::DumpContents()
   318 	{
   306 	{
   319 	ListGenericTablesL();
       
   320 	DumpGenericTablesL();
       
   321 
   307 
   322 	TInt loop = 0;
   308 	TInt loop = 0;
   323 	TBuf<MAX_COL_NAME_LEN> tempTable;
   309 	TBuf<MAX_COL_NAME_LEN> tempTable;
   324 
   310 
   325 	/* tableArray holds all the table names */
   311 	/* tableArray holds all the table names */
  2193 		}
  2179 		}
  2194 
  2180 
  2195 	}
  2181 	}
  2196 #endif
  2182 #endif
  2197 //SYMBIAN_NETWORKING_3GPPDEFAULTQOS
  2183 //SYMBIAN_NETWORKING_3GPPDEFAULTQOS
  2198 
       
  2199 void CCedDumper::ListGenericTablesL()
       
  2200 	{
       
  2201 	TUint32 KMaskForNames = 0x007FFFFF;
       
  2202 	TUint32 KKeyForNames = KCDMaskShowFieldType | KCDMaskShowRecordId; 
       
  2203 	
       
  2204 	
       
  2205 	RArray<TUint32> tableIds;
       
  2206 	iRepository->FindL(KKeyForNames, KMaskForNames, tableIds);
       
  2207 	for(TInt i=0; i<tableIds.Count();i++)
       
  2208 		{
       
  2209 		if(tableIds[i] >= KCDInitialUDefRecordType &&
       
  2210 		   tableIds[i] <= KCDLastUDefRecordType)
       
  2211 			{
       
  2212 			TBuf<KCDMaxFieldNameLength> name;
       
  2213 			iRepository->Get(tableIds[i], name);
       
  2214 			iGenericTableIds.Append(tableIds[i]);
       
  2215 			iGenericTableNames.Append(name);
       
  2216 			
       
  2217 			RRecordInfoArray recordInfoArray;
       
  2218 			
       
  2219 			RArray<TUint32> fields;
       
  2220 			TUint32 KMaskForFields = 0xFF80FFFF;
       
  2221 			TUint32 tableId = tableIds[i];
       
  2222 			iRepository->FindL(tableIds[i], KMaskForFields, fields);
       
  2223 			for(TInt j=0; j<fields.Count() - 1;j++)
       
  2224 			//Do not care about the last one as it is a delimiter.
       
  2225 				{
       
  2226 				SGenericRecordTypeInfo ptr;
       
  2227 				TPckg<SGenericRecordTypeInfo> package(ptr);
       
  2228 			
       
  2229 				iRepository->Get(fields[j], package);
       
  2230 				
       
  2231 				recordInfoArray.Append(ptr);
       
  2232 				}
       
  2233 			iGenericTableFields.Append(recordInfoArray);
       
  2234 			fields.Close();
       
  2235 			}
       
  2236 		
       
  2237 		}
       
  2238 	
       
  2239 	tableIds.Close();
       
  2240 	}
       
  2241 	
       
  2242 void CCedDumper::ConvertFieldTypeL(TInt aFieldType, TDes &aConvertedFieldType)
       
  2243 	{
       
  2244 	switch(aFieldType)
       
  2245 		{
       
  2246 		case EText:
       
  2247 			aConvertedFieldType.Copy(_L("EText"));
       
  2248 			break;
       
  2249 		case EDesC8:
       
  2250 			aConvertedFieldType.Copy(_L("EDesC8"));
       
  2251 			break;
       
  2252 		case EUint32:
       
  2253 			aConvertedFieldType.Copy(_L("EUint32"));
       
  2254 			break;
       
  2255 		case EInt:
       
  2256 			aConvertedFieldType.Copy(_L("EInt"));
       
  2257 			break;
       
  2258 		case EBool:
       
  2259 			aConvertedFieldType.Copy(_L("EBool"));
       
  2260 			break;
       
  2261 		case EMedText:
       
  2262 			aConvertedFieldType.Copy(_L("EMedText"));
       
  2263 			break;
       
  2264 		case ELongText:
       
  2265 			aConvertedFieldType.Copy(_L("ELongText"));
       
  2266 			break;	
       
  2267 		case ELink:
       
  2268 			aConvertedFieldType.Copy(_L("ELink"));
       
  2269 			break;
       
  2270 		default:
       
  2271 			User::Leave(KErrArgument);
       
  2272 		}
       
  2273 	
       
  2274 	}
       
  2275 
       
  2276 void CCedDumper::ConvertFieldAttributeL(TInt aFieldAttribute, TDes &aConvertedFieldAttribute)
       
  2277 	{
       
  2278 	switch(aFieldAttribute)
       
  2279 		{
       
  2280 		case ENoAttrs:
       
  2281 			aConvertedFieldAttribute.Copy(_L("ENoAttrs"));
       
  2282 			break;
       
  2283 		case ENotNull:
       
  2284 			aConvertedFieldAttribute.Copy(_L("ENotNull"));
       
  2285 			break;
       
  2286 		default:
       
  2287 			User::Leave(KErrArgument);
       
  2288 		}
       
  2289 	}
       
  2290 	
       
  2291 void CCedDumper::DumpGenericTablesL()
       
  2292 	{
       
  2293 
       
  2294 	for(TInt i = 0; i< 	iGenericTableIds.Count(); i++)
       
  2295 		{
       
  2296 		TUint32 tableId = iGenericTableIds[i] & KCDMaskShowRecordType;
       
  2297 		
       
  2298 		CMDBRecordSet<CMDBGenericRecord>* recordSet = new (ELeave) CMDBRecordSet<CMDBGenericRecord>(tableId);
       
  2299 		CleanupStack::PushL(recordSet);
       
  2300 		
       
  2301 		
       
  2302 		iFileDumper->WriteTableHeader(iGenericTableNames[i]);
       
  2303 		
       
  2304 		//First print out table declaration
       
  2305 		if(iGenericTableFields[i].Count()>0)
       
  2306 			{
       
  2307 			iFileDumper->WriteSectionHeader(-2);
       
  2308 			_LIT(KFieldStructure, "FIELDSTRUCTURE");
       
  2309 			_LIT(KFormat, "%08x,%S,%S,%S");
       
  2310 			TPtrC ptrFieldStructure(KFieldStructure);
       
  2311 			for(TInt f = 0; f< iGenericTableFields[i].Count(); f++)
       
  2312 				{
       
  2313 				// line will hold sth like 00120000,EText,ENotNull,SomeName
       
  2314 				// its total length is:
       
  2315 				// hex id : 8 chars
       
  2316 				// type : max 9 chars
       
  2317 				// attribute: max 8 chars
       
  2318 				// 
       
  2319 				TBuf<KCDMaxFieldNameLength + 30> line;				
       
  2320 				// type: max 9 chars
       
  2321 				TBuf<9> fieldType, fieldAttribute;
       
  2322 				ConvertFieldTypeL(iGenericTableFields[i][f].iValType, fieldType);
       
  2323 				ConvertFieldAttributeL(iGenericTableFields[i][f].iTypeAttr, fieldAttribute);
       
  2324 				line.Format(KFormat, iGenericTableFields[i][f].iTypeId, &fieldType, &fieldAttribute ,&(iGenericTableFields[i][f].iTypeName));
       
  2325 				TPtrC ptrFieldLine(line);
       
  2326 				iFileDumper->WriteColumnValue(ptrFieldStructure, ptrFieldLine);
       
  2327 				}
       
  2328 			iFileDumper->WriteSectionFooter(-2);
       
  2329 			}
       
  2330 
       
  2331 		TRAPD(err, recordSet->LoadL(*iDbSession));
       
  2332 		if(err!= KErrNotFound)
       
  2333 			{
       
  2334 			User::LeaveIfError(err);
       
  2335 			}
       
  2336 			
       
  2337 		for(TInt j = 0; j<recordSet->iRecords.Count();j++)
       
  2338 			{
       
  2339 			iFileDumper->WriteSectionHeader(recordSet->iRecords[j]->RecordId());
       
  2340 			TInt noOfFields(0);
       
  2341 			for(TInt k = 0; k < iGenericTableFields[i].Count(); k++)
       
  2342 				{
       
  2343 				SGenericRecordTypeInfo recordTypeInfo = iGenericTableFields[i][k];
       
  2344 				if(WriteFieldValueL(reinterpret_cast<CMDBGenericRecord*>(recordSet->iRecords[j]), iGenericTableFields[i][k].iTypeName))
       
  2345 					{
       
  2346 					noOfFields++;
       
  2347 					}
       
  2348 				}
       
  2349 			iFileDumper->WriteFieldCount(noOfFields);
       
  2350 			iFileDumper->WriteSectionFooter(recordSet->iRecords[j]->RecordId());
       
  2351 			}
       
  2352 		CleanupStack::PopAndDestroy(recordSet);
       
  2353 		}
       
  2354 	}
       
  2355 	
       
  2356 TBool CCedDumper::WriteFieldValueL(CMDBGenericRecord* aRecord, const TDesC& aFieldName)
       
  2357 	{
       
  2358 	TInt valType;
       
  2359 	TPtrC ptrFieldName(aFieldName);
       
  2360 	TBuf<20> bufVal;
       
  2361 	CMDBElement* element = aRecord->GetFieldByNameL(aFieldName, valType); 
       
  2362 	if(element->IsNull())
       
  2363 		{
       
  2364 		return EFalse;
       
  2365 		}
       
  2366 	switch(valType)
       
  2367 		{
       
  2368 		case EText:
       
  2369 		case EMedText:
       
  2370 		case ELongText:
       
  2371 			{
       
  2372 			CMDBField<TDesC>* textField = static_cast<CMDBField<TDesC> *>(element);
       
  2373 			TPtrC ptrTextField(*textField);
       
  2374 			iFileDumper->WriteColumnValue(ptrFieldName, ptrTextField);
       
  2375 			break;
       
  2376 			}
       
  2377 		case EDesC8:
       
  2378 			{
       
  2379 			CMDBField<TDesC8>* text8Field = static_cast<CMDBField<TDesC8> *>(element);
       
  2380 			TPtrC8 ptrText8Field(*text8Field);
       
  2381 			iFileDumper->WriteColumnValue(ptrFieldName, reinterpret_cast<TPtrC&>(ptrText8Field));
       
  2382 			break;
       
  2383 			}
       
  2384 		case EInt:
       
  2385 			{
       
  2386 			TInt intVal;
       
  2387 			CMDBField<TInt>* intField = static_cast<CMDBField<TInt> *>(element);		
       
  2388 			intVal = *intField;
       
  2389 			bufVal.Num(intVal);
       
  2390 			TPtrC ptrIntField(bufVal.MidTPtr(0));
       
  2391 			iFileDumper->WriteColumnValue(ptrFieldName, ptrIntField);
       
  2392 			break; 
       
  2393 			}
       
  2394 		case EBool:
       
  2395 			{
       
  2396 			TBool boolVal;
       
  2397 			CMDBField<TInt>* boolField = static_cast<CMDBField<TInt> *>(element);
       
  2398 			boolVal = *boolField;
       
  2399 			TPtrC ptrBoolField(boolVal?TRUE_VAL:FALSE_VAL);
       
  2400 			iFileDumper->WriteColumnValue(ptrFieldName, ptrBoolField);
       
  2401 			break; 
       
  2402 			}
       
  2403 		case EUint32:
       
  2404 		case ELink:
       
  2405 			{
       
  2406 			TInt int32Val;
       
  2407 			CMDBField<TInt>* int32Field = static_cast<CMDBField<TInt> *>(element);
       
  2408 			int32Val = *int32Field;
       
  2409 			bufVal.Num(int32Val);
       
  2410 			TPtrC ptrInt32Field(bufVal.MidTPtr(0));
       
  2411 			iFileDumper->WriteColumnValue(ptrFieldName, ptrInt32Field);
       
  2412 			break;		
       
  2413 			}
       
  2414 		default:
       
  2415 			User::Leave(KErrArgument);
       
  2416 		}
       
  2417 		return ETrue;
       
  2418 	}