diff -r f65f740e69f9 -r 8e12a575a9b5 sysperfana/memspyext/com.nokia.s60tools.memspy/src/com/nokia/s60tools/memspy/model/MemSpyFileBundle.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysperfana/memspyext/com.nokia.s60tools.memspy/src/com/nokia/s60tools/memspy/model/MemSpyFileBundle.java Wed Apr 21 20:01:08 2010 +0300 @@ -0,0 +1,414 @@ +/* +* 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.File; +import java.util.Date; + +import com.nokia.s60tools.memspy.files.HeapDumpFile; +import com.nokia.s60tools.memspy.files.SWMTFile; + +/** + * MemSpyBundle class bundles up one folder under MemSpy plugin's folder. I.e. one + * MemSpyFileBundle is one row in MainView. A Bundle can contain an Heap Dump file or + * + * SWMT-log file. All of the file listed above are found e.g. from + * c:\my_carbide_workspace\.metadata\.plugins\com.nokia.s60tools.memspy\ImportedFiles[bundle folder] + * + * Bundle can also be a waiting bundle, so that 'Loading files. Please wait' row can be shown in MainView. + * + */ +public class MemSpyFileBundle { + + public static final int INDEX_FILE_TYPE = 0; + public static final int INDEX_FILE_NAME = 1; + public static final int INDEX_TIME = 2; + + + /* + * Heap Dump file + */ + private HeapDumpFile heapDumpFile = null; + + /* + * SWMT-log file + */ + private SWMTFile swmtFile = null; + + /** + * Bundle name for an empty or waiting bundle + */ + private String bundleName = ""; + + /** + * Folder where all bundle's files can be found from + */ + private String bundleFolder = ""; + + /** + * If true, bundle is an empty or waiting bundle + */ + private boolean emptyFile = false; + + /** + * Used for creating an empty or waiting bundle + * @param empty If true, an empty bundle is created. If false, a waiting bundle is created. + */ + public MemSpyFileBundle(boolean empty) { + if (empty) + bundleName = "No Crash Files Found."; + else + bundleName = "Loading files. Please wait."; + emptyFile = true; + } + + /** + * Creates a bundle from folder + * @param folder Bundle folder. Bundle's file will be read from here. + */ + public MemSpyFileBundle( String folder ) { + bundleFolder = MemSpyFileOperations.addSlashToEnd(folder); + + heapDumpFile = HeapDumpFile.read( folder ); + swmtFile = SWMTFile.read( folder ); + + } + + /** + * Create dummy bundle. + * @param folder where files are searched. + * @return returns new bundle. + */ + public static MemSpyFileBundle createDummyBundle(String folder) { + return new MemSpyFileBundle(folder); + } + + /** + * MainView can use this to get description for each column in the grid + * @param index index of the column + * @return value for asked column + */ + public String getText(int index) { + String retval = ""; + switch (index) { + case INDEX_TIME: + retval = this.getTime(); + break; + + case INDEX_FILE_NAME: + retval = this.getFileName(); + break; + + case INDEX_FILE_TYPE: + retval = this.getFileType(); + break; + + default: + break; + } + + return retval; + } + + /** + * Get file type. + * @return type of file. + */ + public String getFileType() { + if (emptyFile) + return bundleName; + + String retval = ""; + + if ( this.heapDumpFile != null) { + retval = heapDumpFile.getFileType(); + } + + if( swmtFile != null ){ + retval = this.swmtFile.getFileType(); + } + + return retval; + } + + + /** + * Returns the file name for this bundle. File name depends on what types + * of files this bundle contains (or if this bundle is an empty or waiting bundle). + * + * @return the file name for this bundle. + */ + public String getFileName() { + if (emptyFile) + return bundleName; + + String retval = ""; + + if ( this.heapDumpFile != null) { + retval = heapDumpFile.getFileName(); + } + else if( swmtFile != null ){ + retval = this.swmtFile.getFileName(); + } + + return retval; + } + + /** + * Get the Cycle number from FileName. + * E.g. if file name is: "MemSpy SWMT-log 12.08.2009 08-40-22 Cycle 3" + * will return '3'. + * + * @return the cycle number from file name for this bundle, or -1 if can't found. + */ + public int getCycleNumberFromFileName() { + int retval = -1; + if (emptyFile){ + return retval; + } + + String fileName = ""; + + if ( this.heapDumpFile != null) { + fileName = heapDumpFile.getFileName(); + } + else if( swmtFile != null ){ + fileName = this.swmtFile.getFileName(); + } + + if(fileName != null && fileName.indexOf(MemSpyFileOperations.CYCLE) != -1){ + int index = fileName.indexOf(MemSpyFileOperations.CYCLE); + String cycle = fileName.substring((index + MemSpyFileOperations.CYCLE.length())).trim(); + cycle = cycle.substring(0, cycle.indexOf('.')); + try { + retval = Integer.parseInt(cycle); + } catch (NumberFormatException e) { + e.printStackTrace(); + retval = -1; + } + } + + return retval; + } + + /** + * Get Time + * @return time of file creation. + */ + public String getTime() { + if (emptyFile) + return ""; + String retval = ""; + + if( heapDumpFile != null ){ + retval = this.heapDumpFile.getTime(); + } + else if( swmtFile != null ){ + retval = this.swmtFile.getTime(); + } + + + return retval; + } + + /** + * Get time as long + * @return time of file creation as long. + */ + public long getTimeAsLong(){ + long time = -1; + Date date = null; + if( heapDumpFile != null ){ + date = this.heapDumpFile.getDateTime(); + } + else if( swmtFile != null ){ + date = this.swmtFile.getDateTime(); + } + + if(date != null){ + time = date.getTime(); + } + + return time; + } + + + /** + * Get XML file. + * @return XML-files path + */ + public String getXMLFilePath() { + if( heapDumpFile != null ){ + return this.heapDumpFile.getXmlPath(); + } + else{ + return null; + } + } + + /** + * Get file path. + * @return Files complete path. + */ + public String getFilePath(){ + if (emptyFile) + return ""; + String retval = ""; + + if( heapDumpFile != null ){ + retval = this.heapDumpFile.getFilePath(); + } + + if( swmtFile != null ){ + retval = this.swmtFile.getFilePath(); + } + + + return retval; + } + + + /** + * Returns whether this is an empty or waiting bundle. + * @return true if bundle is empty or waiting, false if not. + */ + public boolean isEmpty() { + return emptyFile; + } + + + + /** + * Returns whether this bundle contains any files. + * @return true if bundle contains files, false if not + */ + public boolean hasFiles() { + if ( heapDumpFile != null || swmtFile != null ) + return true; + + return false; + } + + + + /** + * Tests whether this bundle still exists in the drive. + * If bundle is empty or waiting, true is always returned. + * + * @return true if bundle exists, false if not. + */ + public boolean exists() { + if (isEmpty()) + return true; + + try { + File f = new File(bundleFolder); + if (f.isDirectory() && f.exists()) + return true; + } catch (Exception e) { + return false; + } + + return false; + } + + + + /** + * Returns this bundle's folder + * @return bundle's folder or empty + */ + protected String getBundleFolder() { + return bundleFolder; + } + + + /** + * Has this bundle a SWMT log file. + * @return true if this bundle has SWMT-log false otherwise. + */ + public boolean hasSWMTLogFile(){ + if( swmtFile != null ){ + return true; + } + return false; + } + + /** + * Has this bundle a heap dump file + * @return true if this bundle has Heap Dump false otherwise. + */ + public boolean hasHeapDumpFile(){ + + if( heapDumpFile != null ){ + return true; + + } + return false; + + } + + /** + * Deletes this bundle. I.e deletes all files under this + * bundle's folder and finally deletes the bundle folder. + */ + public boolean delete() { + if (!"".equals(bundleFolder)) { + return !MemSpyFileOperations.deleteDir( new File( bundleFolder ) ); + } + else{ + return false; + } + + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + public String toString(){ + if(swmtFile != null){ + return swmtFile.getFilePath(); + } + else{ + return null; + } + } + + /** + * Checks if bundles are equal. Two bundles are equal if + * their bundleFolder is the same. + */ + public boolean equals(Object other) { + if (this == other) + return true; + + if (!(other instanceof MemSpyFileBundle)) + return false; + + MemSpyFileBundle othr = (MemSpyFileBundle)other; + if (bundleFolder.compareToIgnoreCase(othr.getBundleFolder()) == 0) + return true; + return false; + } + + + +}