crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianUtils/Utilities/TracePrefixAnalyser.cs
author Matti Laitinen <matti.t.laitinen@nokia.com>
Thu, 11 Feb 2010 15:50:58 +0200
changeset 0 818e61de6cd1
permissions -rw-r--r--
Add initial version of Crash Analyser cmdline under EPL

/*
* Copyright (c) 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:
*
*/
using System;
using System.IO;
using System.Text;

namespace SymbianUtils
{
	public class TracePrefixAnalyser
	{
		#region Constructors
		public TracePrefixAnalyser()
		{
		}
		#endregion

		#region API
		public bool CleanLine( ref string aLine )
		{
			bool matched = false;
			string prefix = IdentifyTracePrefixFromLine( aLine );
			//
			if	( prefix.Length > 0 )
			{
				int prefixPos = aLine.IndexOf( prefix );
				aLine = aLine.Substring( prefixPos + prefix.Length );
				matched = true;
			}
			//
			return matched;
		}

		public StringBuilder CleanFile( string aFileName )
		{
			StringBuilder lines = new StringBuilder();
			//
			using( StreamReader reader = new StreamReader( aFileName ) )
			{
				string line = reader.ReadLine();
				while( line != null )
				{
					CleanLine( ref line );
					lines.Append( line + System.Environment.NewLine );
					//
					line = reader.ReadLine();
				}
			}
			//
			return lines;
		}

		public string IdentifyTracePrefixFromLine( string aLine )
		{
			string prefix = string.Empty;
			//
            if ( aLine.IndexOf( KFinalPrefix ) >= 0 )
            {
                prefix = KFinalPrefix;
            }
			//
			return prefix;
		}

		public string IdentifyTracePrefix( string aFileName )
		{
			string prefix = string.Empty;
			//
			try
			{
				using( StreamReader reader = new StreamReader( aFileName ) )
				{
					int lineCounter = 0;
					string line = string.Empty;
					//
					while( lineCounter < KNumberOfLinesToCheck && line != null )
					{
						try
						{
							line = reader.ReadLine();
							//
                            if ( line != null )
                            {
                                string tmp = IdentifyTracePrefixFromLine( line );
                                if ( tmp.Length > 0 )
                                {
                                    prefix = tmp;
                                    break;
                                }
                            }
						}
						catch(Exception)
						{
							line = null;
						}
                        //
                        ++lineCounter;
					}
				}
			}
			catch( Exception )
			{
			}
			//
			return prefix;
		}
		#endregion

		#region Internal constants
		private const int KNumberOfLinesToCheck = 500;
		#endregion

		#region Data members
		private const int KLineLookAheadCount = 200;
		private const string KFinalPrefix = "msg:";
		#endregion
	}
}