sysperfana/memspyext/com.nokia.s60tools.memspy/src/com/nokia/s60tools/memspy/model/AnalyserXMLParser.java
changeset 7 8e12a575a9b5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/memspyext/com.nokia.s60tools.memspy/src/com/nokia/s60tools/memspy/model/AnalyserXMLParser.java	Wed Apr 21 20:01:08 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* 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: 
+*
+*/
+
+
+
+package com.nokia.s60tools.memspy.model;
+
+import java.io.BufferedReader;
+import java.util.ArrayList;
+
+
+/**
+ * class AnalyserXMLParser.
+ * class that parses symbol and thread name information from debug configuration file.
+ *
+ */
+
+public class AnalyserXMLParser {
+	
+	static final String DEBUG_META_DATA_START_TAG 	= "<category name=\"debug_meta_data\">";
+	static final String DEBUG_META_DATA_END_TAG 	= "</category>";
+	static final String THREAD_TAG 					= "<command name=\"thread\">";
+	static final String FILE_NAME 					= "file name";
+	static final String DIRECTORY_NAME				= "directory name";
+
+	
+	/**
+	 * Add wanted lines from given input to XML generator and returns the generator.
+	 * @param reader
+	 * @return XML generator
+	 */
+	public static AnalyserXMLGenerator parseXML( BufferedReader reader ){
+		AnalyserXMLGenerator retVal = new AnalyserXMLGenerator();
+		
+		boolean readingDebugMetaData = false;
+		ArrayList<String> debugMetaDataFiles = new ArrayList<String>();
+		String debugMetaDataDirectory = null;
+		String threadName = "";
+		
+		try{
+			String line = "";
+			
+			// Go thru file in loop and search for lines that contain debugMetaData -text. 
+			// If text is found, save meta data file information into AnalyserXMLGenerator-object.
+			
+			while( reader.ready() ){
+
+				line = reader.readLine();
+				
+				if( line == null){
+					break;
+				}
+				
+				// Search for debug meta data start and end tags.
+				if( line.contains(DEBUG_META_DATA_START_TAG) ){
+					readingDebugMetaData = true;
+				}
+				else if( line.contains(DEBUG_META_DATA_END_TAG) ){
+					readingDebugMetaData = false;
+				}
+				
+				// if between debug meta data start and end tags, search for debug meta data info.
+				if( readingDebugMetaData ){
+					if(line.contains(FILE_NAME)){
+						debugMetaDataFiles.add( getMetaDataInfo(line) );
+					}
+					if(line.contains(DIRECTORY_NAME)){
+						debugMetaDataDirectory = getMetaDataInfo(line);
+					}
+				}
+				
+				// search for thread name tag.
+				if( line.contains(THREAD_TAG) ){
+					threadName = getThreadName(line);
+				}
+			}
+			
+		}
+		catch (Exception e){
+			e.printStackTrace();
+			return null; 		
+		}
+		
+		if(threadName.equals("") ){
+			return null;
+		}
+		
+		// check that thread name and at least one symbol file was found.
+		if( debugMetaDataFiles.size() != 0 ){
+			// set found data into AnalyserXMLGenerator-object.
+			retVal.setXMLDebugMetaDataFile(debugMetaDataFiles.toArray(new String [debugMetaDataFiles.size()]));			
+		}
+		
+		if( !threadName.equals("")){
+			retVal.setXMLDebugMetaDataDirectory(debugMetaDataDirectory);
+		}
+		retVal.setXMLThreadName(threadName);
+		
+		return retVal;
+		
+	}
+	
+	/**
+	 * getMetaDataInfo.
+	 * @param line String that is parsed
+	 * @return string between quotation marks
+	 */
+	private static String getMetaDataInfo( String line ) {
+		int firstIndex = line.indexOf("\"") + 1 ;
+		int secondIndex = line.indexOf(("\""), firstIndex );
+		return line.substring(firstIndex, secondIndex);
+	}
+
+	
+	/**
+	 * getThreadName.
+	 * @param line String that is parsed
+	 * @return string between threas tags
+	 */
+	private static String getThreadName(String line){
+		int firstIndex = line.indexOf("=\"thread\">") + 10;
+		int secondIndex = line.indexOf("</command>"); 
+		return line.substring(firstIndex, secondIndex);
+	}
+	
+}