diff -r f65f740e69f9 -r 8e12a575a9b5 sysperfana/memspyext/com.nokia.s60tools.memspy/src/com/nokia/s60tools/memspy/model/AnalyserXMLGenerator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysperfana/memspyext/com.nokia.s60tools.memspy/src/com/nokia/s60tools/memspy/model/AnalyserXMLGenerator.java Wed Apr 21 20:01:08 2010 +0300 @@ -0,0 +1,574 @@ +/* +* 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.BufferedWriter; +import java.io.IOException; + +/** + * AnalyserXMLGenerator. + * XML file generator that writes configuration XML-files for Heap Analyser and + * Crash Analyser based on parameters it has received. + * + * AnalyserXMLGenerator can be used for example like this: + *
+ * AnalyserXMLGenerator generator = new AnalyserXMLGenerator(XMLGeneratorAction.ANALYSE_HEAP, "c:\\temp\\source.txt", "c:\\directory\\", null, null, "thread", "c:\\temp\\output.xls", null, null);
+ * File filename = new File("c:\\temp\\testxml.xml");
+ * BufferedWriter writer = null;
+ * 	try {
+ * 		writer = new BufferedWriter(new FileWriter(filename)); 
+ * 		generator.GenerateXML(writer);
+ * 	} catch (IOException e) {
+ * 		e.printStackTrace();
+ * 	} 
+ * 	finally {
+ *  	try {
+ *   		if (writer != null) {
+ *   			writer.flush();
+ *   			writer.close();
+ *   		}
+ *  	} 
+ *  	catch (IOException ex) {
+ *  		ex.printStackTrace();
+ *  		return false;
+ *  	}
+ *  }
+ *  
+ */ + +public class AnalyserXMLGenerator { + + /** + * Enumeration for Heap Analyser actions + */ + public enum XMLGeneratorAction { + ANALYSE_HEAP, COMPARE_HEAPS, ANALYSE_CRASH_SUMMARY, ANALYSE_CRASH_FULL + } + + private XMLGeneratorAction XMLAction; + private String[] XMLSourceFile; + private String XMLSourceDirectory; + private String[] XMLDebugMetaDataFile = null; + private String XMLDebugMetaDataDirectory; + private String XMLThreadName; + private String XMLExtension; + private String XMLAnalyseFileOutput; + private String XMLAnalyseDirectoryOutput; + + + //Commands for XML + + private final static String COMMAND_VIEWER = "Viewer"; + private final static String COMMAND_COMPARE_HEAPS = "CompareTwoHeaps"; + private final static String COMMAND_SUMMARY = "Summary"; + private final static String COMMAND_FULL_ANALYSIS = "Full"; + + // XML-tags + + private final static String CRASH_ANALYSER_START = ""; + private final static String CRASH_ANALYSER_END = ""; + + private final static String HEAP_ANALYSER_START = ""; + private final static String HEAP_ANALYSER_END = ""; + + private final static String SOURCE_START = " "; + private final static String SOURCE_END = " "; + + private final static String DEBUG_META_DATA_START = " "; + private final static String DEBUG_META_DATA_END = " "; + + private final static String FILE_START = " "; + + private final static String DIRECTORY_START = " "; + + private final static String PARAMETERS_START = " "; + private final static String PARAMETERS_END = " "; + + private final static String THREAD_START = " "; + private final static String THREAD_END = ""; + + private final static String COMMAND_START = " "; + private final static String COMMAND_END = ""; + + private final static String OUTPUT_START = " "; + private final static String OUTPUT_END = " "; + + private final static String EXTENSION_START = " "; + + + + /** + * XMLGenerator() + * Constructor + */ + public AnalyserXMLGenerator() { + + XMLAction = null; + XMLSourceFile = null; + XMLSourceDirectory = null; + XMLDebugMetaDataFile = null; + XMLDebugMetaDataDirectory = null; + XMLThreadName = null; + XMLAnalyseFileOutput = null; + XMLExtension = null; + + } + + /** + * AnalyserXMLGenerator() + * Constructor for XMLGenerator + * + * @param action + * @param sourceFile file that is added into -section under -tag + * @param sourceDirectory directory that is added into -section under -tag + * @param debugMetaDataFile file that is added into -section under -tag + * @param debugMetaDataDirectory directory that is added into -section under -tag + * @param threadName thread name that is added into -section under -tag + * @param extension extension text that is is added into -section under -tag + * @param analyseFileOutput file name that is added into -section under -tag + * @param analyseDirectoryOutput file name that is added into -section under -tag + */ + + public AnalyserXMLGenerator( XMLGeneratorAction action, + String[] sourceFile, + String sourceDirectory, + String[] debugMetaDataFile, + String debugMetaDataDirectory, + String threadName, + String analyseFileOutput, + String analyseDirectoryOutput, + String extension ) { + + XMLAction = action; + XMLSourceFile = sourceFile; + XMLSourceDirectory = sourceDirectory; + XMLDebugMetaDataFile = debugMetaDataFile; + XMLDebugMetaDataDirectory = debugMetaDataDirectory; + XMLThreadName = threadName; + XMLAnalyseFileOutput = analyseFileOutput; + XMLAnalyseDirectoryOutput = analyseDirectoryOutput; + XMLExtension = extension; + } + + /** + * GenerateXML() + * Writes XML file. + * @param writer BufferedWriter stream where XML is written. + * @throws IOException if something goes when writing to stream + */ + + public void GenerateXML( BufferedWriter writer ) throws IOException{ + + + if( XMLAction != null ) { + // Begin XML + switch( XMLAction ){ + case ANALYSE_CRASH_FULL: + case ANALYSE_CRASH_SUMMARY: + writer.write(CRASH_ANALYSER_START); + break; + case ANALYSE_HEAP: + case COMPARE_HEAPS: + writer.write(HEAP_ANALYSER_START); + break; + default: + break; + } + + writer.newLine(); + writer.newLine(); + } + // Write Sources + this.writeSource(writer); + + + // Write debug meta data + this.writeDebugMetaData(writer); + + // Write parameters + this.writeParameters(writer); + + // Write output location + this.writeOutput(writer); + + // End XML + if( XMLAction != null ) { + switch(XMLAction){ + case ANALYSE_CRASH_SUMMARY: + case ANALYSE_CRASH_FULL: + writer.write(CRASH_ANALYSER_END); + break; + case ANALYSE_HEAP: + case COMPARE_HEAPS: + writer.write(HEAP_ANALYSER_END); + break; + default: + break; + } + writer.newLine(); + } + + + } + + /** + * writeSource() + * Writes source - parameters + * @param writer BufferedWriter stream where XML is written. + */ + private void writeSource( BufferedWriter writer ) throws IOException{ + + + // Start Source definition + writer.write(SOURCE_START); + writer.newLine(); + + if( XMLSourceFile != null ){ + // File Definition + for(int i = 0; i < XMLSourceFile.length; i++ ){ + writer.write( FILE_START ); + writer.write( XMLSourceFile[i] ); + writer.write( FILE_END ); + writer.newLine(); + } + } + if( XMLSourceDirectory != null ) { + writer.write( DIRECTORY_START ); + writer.write( XMLSourceDirectory ); + writer.write( DIRECTORY_END ); + writer.newLine(); + } + + // End Source definition + writer.write(SOURCE_END); + writer.newLine(); + writer.newLine(); + } + + /** + * writeDebugMetaData() + * Writes debug_meta_data - parameters + * @param writer BufferedWriter stream where XML is written. + * @throws IOException + */ + private void writeDebugMetaData( BufferedWriter writer ) throws IOException{ + // Start Debug meta data definition + + if( XMLDebugMetaDataFile != null || + XMLDebugMetaDataDirectory != null ){ + + writer.write(DEBUG_META_DATA_START); + writer.newLine(); + + // File Definition + if( XMLDebugMetaDataFile != null ){ + for(int i = 0; i < XMLDebugMetaDataFile.length; i++ ){ + writer.write( FILE_START ); + writer.write( XMLDebugMetaDataFile[i] ); + writer.write( FILE_END ); + writer.newLine(); + } + } + if( XMLDebugMetaDataDirectory != null ) { + writer.write( DIRECTORY_START ); + writer.write( XMLDebugMetaDataDirectory ); + writer.write( DIRECTORY_END ); + writer.newLine(); + } + + // End Debug meta data definition + writer.write(DEBUG_META_DATA_END); + writer.newLine(); + writer.newLine(); + } + } + + + + /** + * writeParameters( + * Writes parameters - parameters + * @param writer BufferedWriter stream where XML is written. + * @throws IOException + */ + + private void writeParameters( BufferedWriter writer ) throws IOException { + + if( XMLThreadName != null || XMLAction != null || XMLExtension != null){ + + + // Start parameter definition + writer.write(PARAMETERS_START); + writer.newLine(); + + + if( XMLThreadName != null ){ + // Add thread info + writer.write( THREAD_START ); + writer.write( XMLThreadName ); + writer.write( THREAD_END ); + writer.newLine(); + + } + + if( XMLAction != null ){ + // Command + + writer.write(COMMAND_START); + + // Begin XML + switch(XMLAction){ + case ANALYSE_CRASH_SUMMARY: + writer.write(COMMAND_SUMMARY); + break; + case ANALYSE_CRASH_FULL: + writer.write(COMMAND_FULL_ANALYSIS); + break; + case ANALYSE_HEAP: + writer.write(COMMAND_VIEWER); + break; + case COMPARE_HEAPS: + writer.write(COMMAND_COMPARE_HEAPS); + break; + default: + break; + } + writer.write(COMMAND_END); + writer.newLine(); + } + + if( XMLExtension != null ){ + // extension + writer.write( EXTENSION_START ); + writer.write( XMLExtension ); + writer.write( EXTENSION_END ); + writer.newLine(); + } + + + + // End parameter definition + writer.write(PARAMETERS_END); + writer.newLine(); + writer.newLine(); + } + + + } + + + /** + * Writes output - parameters + * @param writer BufferedWriter stream where XML is written. + * @throws IOException + */ + private void writeOutput( BufferedWriter writer ) throws IOException{ + + if( XMLAnalyseFileOutput != null || XMLAnalyseDirectoryOutput != null ){ + writer.write(OUTPUT_START); + writer.newLine(); + + // Output file + if( XMLAnalyseFileOutput != null ){ + writer.write(FILE_START); + writer.write(XMLAnalyseFileOutput); + writer.write(FILE_END); + writer.newLine(); + } + // Output directory + if( XMLAnalyseDirectoryOutput != null ) { + writer.write(DIRECTORY_START); + writer.write(XMLAnalyseDirectoryOutput); + writer.write(DIRECTORY_END); + writer.newLine(); + } + + writer.write(OUTPUT_END); + writer.newLine(); + writer.newLine(); + + + } + } + + + + + + /** + * Get file name parameters + * @return XMLSourceFile + */ + public String[] getXMLSourceFile() { + return XMLSourceFile; + } + + /** + * Set file name parameters + * @param sourceFile the XMLSourceFile to set + */ + public void setXMLSourceFile(String[] sourceFile) { + XMLSourceFile = sourceFile; + } + + /** + * Get symbol or map files + * @return XMLDebugMetaDataFile + */ + public String[] getXMLDebugMetaDataFile() { + return XMLDebugMetaDataFile; + } + + /** + * Set symbol or map files + * @param XMLDebugMetaDataFile to set + */ + public void setXMLDebugMetaDataFile(String[] debugMetaDataFile) { + XMLDebugMetaDataFile = debugMetaDataFile; + } + + /** + * Check if XMLDebugMetaDataFile has been set + * @return XMLDebugMetaDataFile + */ + public boolean hasXMLDebugMetaDataFile() { + boolean isXMLSet = XMLDebugMetaDataFile!=null; + if(isXMLSet){ + isXMLSet = XMLDebugMetaDataFile.length > 0; + } + return isXMLSet; + } + + /** + * Get thread parameter + * @return XMLThreadName + */ + public String getXMLThreadName() { + return XMLThreadName; + } + + /** + * Set thread parameter + * @param XMLThreadName to set + */ + public void setXMLThreadName(String threadName) { + XMLThreadName = threadName; + } + + /** + * Get analyse output file + * @return XMLAnalyseFileOutput + */ + public String getXMLAnalyseFileOutput() { + return XMLAnalyseFileOutput; + } + + /** + * Set analyse output file + * @param XMLAnalyseFileOutput to set + */ + public void setXMLAnalyseFileOutput(String analysefileOutput) { + XMLAnalyseFileOutput = analysefileOutput; + } + + /** + * Get current action + * @return XMLAction + */ + public XMLGeneratorAction getXMLAction() { + return XMLAction; + } + + /** + * Set action + * @param action the XMLGeneratorAction to set + */ + public void setXMLAction(XMLGeneratorAction action) { + XMLAction = action; + } + + /** + * Get directory parameter + * @return XMLSourceDirectory + */ + public String getXMLSourceDirectory() { + return XMLSourceDirectory; + } + + /** + * Set directory parameter + * @param XMLSourceDirectory to set + */ + public void setXMLSourceDirectory(String sourceDirectory) { + XMLSourceDirectory = sourceDirectory; + } + + /** + * Get debug metadata directory. In UI it's shown as Map file folder. + * @return XMLDebugMetaDataDirectory + */ + public String getXMLDebugMetaDataDirectory() { + return XMLDebugMetaDataDirectory; + } + + /** + * Set debug metadata directory. In UI it's shown as Map file folder. + * @param XMLDebugMetaDataDirectory to set + */ + public void setXMLDebugMetaDataDirectory(String debugMetaDataDirectory) { + XMLDebugMetaDataDirectory = debugMetaDataDirectory; + } + + /** + * Get extension parameter + * @return XMLExtension + */ + public String getXMLExtension() { + return XMLExtension; + } + + /** + * Set extension parameter + * @param extension the XMLExtension to set + */ + public void setXMLExtension(String extension) { + XMLExtension = extension; + } + + /** + * Get output directory + * @return XMLAnalyseDirectoryOutput + */ + public String getXMLAnalyseDirectoryOutput() { + return XMLAnalyseDirectoryOutput; + } + + /** + * Set output directory + * @param analyseDirectoryOutput the XMLAnalyseDirectoryOutput to set + */ + public void setXMLAnalyseDirectoryOutput(String analyseDirectoryOutput) { + XMLAnalyseDirectoryOutput = analyseDirectoryOutput; + } + +}