trace/traceanalyser/com.nokia.s60tools.traceanalyser/src/com/nokia/s60tools/traceanalyser/export/TraceInfo.java
author Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
Tue, 24 Aug 2010 14:01:48 +0300
changeset 16 72f198be1c1d
parent 9 14dc2103a631
permissions -rw-r--r--
Crash Analyser Carbide Extension 1.4.0

/*
* 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.traceanalyser.export;

import java.io.BufferedReader;
import java.io.IOException;

import com.nokia.traceviewer.engine.TraceInformation;

/**
 * class TraceInfo.
 * Class that contains name and id numbers of one trace. 
 *
 */
public class TraceInfo {
	
	public static final String XML_COMPONENT_ID = "ComponentID";
	public static final String XML_GROUP_ID = "GroupID";
	public static final String XML_TRACE_ID = "TraceID";
	public static final String XML_TRACE_NAME = "TraceName";
	
	/* TraceInformation object containing ComponentID, GroupID and TraceID */
	private TraceInformation idNumbers;
	
	/* Name of the Trace */
	private String traceName;

	/**
	 * TraceInfo.
	 * Constructor.
	 */
	public TraceInfo() {
		idNumbers = new TraceInformation();
		traceName = "";
	}

	/**
	 * getXMLString.
	 * Returns XML-string that is written to file when saving rule.
	 * @param itemName Name of the trace item.
	 * @param indent indent that is used.
	 * @return xml string.
	 */
	public String getXMLString(String itemName, int indent) {
		String xml = "";
		String indentString = getIndentString(indent);
		
		xml += indentString + "<" + itemName + ">\n";
		
		xml += indentString + "    " + "<" + XML_COMPONENT_ID + "=\"";
		xml += Integer.toHexString(idNumbers.getComponentId());
		xml += "\">\n";
		
		xml += indentString + "    " + "<" + XML_GROUP_ID + "=\"";
		xml += Integer.toHexString(idNumbers.getGroupId());
		xml += "\">\n";
		
		xml += indentString + "    " + "<" + XML_TRACE_ID + "=\"";
		xml += Integer.toHexString(idNumbers.getTraceId());
		xml += "\">\n";
		
		xml += indentString + "    " + "<" + XML_TRACE_NAME + "=\"";
		xml += traceName;
		xml += "\">\n";
	
		xml += indentString + "</" + itemName + ">\n";
		
		return xml;
	}
	
	/**
	 * readXMLBuffer.
	 * Reads xml trace information from bufferedReader and saves it into this object
	 * @param input bufferedReader
	 * @param searchTraceName name of the trace in buffer
	 * @throws IOException 
	 * @throws NumberFormatException 
	 */

	public boolean readXMLBuffer(BufferedReader input, String searchTraceName) throws NumberFormatException, IOException{

		String line = null;
		
		
		// This while loop searches xml tags from file. When tag is found information is saved and 
		// new searchPhrase is updated. Tags are searched in order where they should be.
		
		String searchPhrase = searchTraceName;
		while ((line = input.readLine()) != null) {
			if (line.contains(searchPhrase)) {
				if (searchPhrase.equals(searchTraceName)) {
					searchPhrase = XML_COMPONENT_ID;
				}

			
				else if (searchPhrase.equals(XML_COMPONENT_ID)) {
					Long id = Long.parseLong(GeneralMethods.getTextBetweenQuotes(line), 16);
					idNumbers.setComponentId(id.intValue());
					searchPhrase = XML_GROUP_ID;
				}
				else if (searchPhrase.equals(XML_GROUP_ID)) {
					idNumbers.setGroupId(Integer.parseInt(GeneralMethods.getTextBetweenQuotes(line), 16));
					searchPhrase = XML_TRACE_ID;
				}
				else if (searchPhrase.equals(XML_TRACE_ID)) {
					idNumbers.setTraceId(Integer.parseInt(GeneralMethods.getTextBetweenQuotes(line), 16));
					searchPhrase = XML_TRACE_NAME;
				}
				else if (searchPhrase.equals(XML_TRACE_NAME)) {
					String name = GeneralMethods.getTextBetweenQuotes(line);
					setTraceName(name);
					return true;
				}
			}
		}
		return false;

	}

    /**
     * getIndentString.
     * @param indent indent.
     * @return string containing as many spaces as parameter states.
     */
    protected String getIndentString(int indent){
    	String indentString = "";
    	while(indent > 0){
			indentString += " ";
			indent--;
		}
    	return indentString;
    }

    /**
     * getIdNumbers.
     * @return id numbers of the trace.
     */
	public TraceInformation getIdNumbers() {
		return idNumbers;
	}

	/**
	 * setIdNumbers.
	 * @param idNumbers
	 */
	public void setIdNumbers(TraceInformation idNumbers) {
		this.idNumbers = idNumbers;
	}

	/**
	 * getTraceName.
	 * @return name of the trace.
	 */
	public String getTraceName() {
		return traceName;
	}

	/**
	 * setTraceName.
	 * @param traceName
	 */
	public void setTraceName(String traceName) {
		this.traceName = traceName;
	}

	/**
	 * equals.
	 * compares two traceInfos
	 * @param traceB 
	 * @return true if traceinfo objects are equal.
	 */
	public boolean equals(TraceInfo traceB){
		if(compareTraces(this.getIdNumbers(), traceB.getIdNumbers()) && 
			this.traceName.equals(traceB.getTraceName())){
			return true;
		}
		else{
			return false;
		}
	}
	
	
	/**
	 * compareTraces.
	 * compares two traces.
	 * @param traceA Trace A
	 * @param traceB Trace B
	 * @return true if trace information was same.
	 */
	public static boolean compareTraces(TraceInformation traceA, TraceInformation traceB){
		if(traceA.getComponentId() == traceB.getComponentId() && 
		   traceA.getGroupId() == traceB.getGroupId()&&
		   traceA.getTraceId() == traceB.getTraceId()){
			return true;
		}
		else{
			return false;
		}
	}
	
}