diff -r 07b41fa8d1dd -r ca8a1b6995f6 tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/TraceProjectFile.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/project/TraceProjectFile.java Tue Aug 31 16:45:49 2010 +0300 @@ -0,0 +1,291 @@ +/* +* Copyright (c) 2007 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: +* +* Generic trace project file properties +* +*/ +package com.nokia.tracecompiler.project; + +import java.io.File; + +import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals; +import com.nokia.tracecompiler.file.FileUtils; +import com.nokia.tracecompiler.model.TraceModel; +import com.nokia.tracecompiler.model.TraceModelExtension; +import com.nokia.tracecompiler.model.TraceModelListener; +import com.nokia.tracecompiler.model.TraceObject; +import com.nokia.tracecompiler.source.SourceConstants; + +/** + * Generic trace project file properties + * + */ +public abstract class TraceProjectFile implements TraceModelExtension, + TraceModelListener { + + /** + * The trace model + */ + private TraceModel owner; + + /** + * Name of the project file + */ + private String name; + + /** + * Project file path + */ + private String path; + + /** + * Project file name is based on model name and updated when model changes + */ + protected boolean hasModelName; + + /** + * Constructor + * + * @param path + * the path to the file + * @param name + * the name of the project or empty if this file does not use the + * project name + */ + protected TraceProjectFile(String path, String name) { + this.path = path; + this.name = name; + if (name == null || name.length() == 0) { + this.hasModelName = false; + } else { + this.hasModelName = true; + } + } + + /** + * Constructor + * + * @param absolutePath + * the absolute path to the file + * @param hasModelName + * flag, which tells to update the project file name if model + * name changes + */ + protected TraceProjectFile(String absolutePath, boolean hasModelName) { + this.hasModelName = hasModelName; + updatePath(absolutePath); + } + + /** + * Gets the file extension of this project file + * + * @return the extension + */ + protected abstract String getFileExtension(); + + /** + * Gets the title to be shown in UI + * + * @return the title + */ + public abstract String getTitle(); + + /** + * Gets the name of the project + * + * @return the project name + */ + public final String getProjectName() { + return name; + } + + /** + * Gets the path of this project file + * + * @return the project file path + */ + public final String getPath() { + return path; + } + + /** + * Gets the name of this project file + * + * @return the file name + */ + public final String getFileName() { + StringBuffer sb = new StringBuffer(); + addFileName(sb, false); + return sb.toString(); + } + + /** + * Checks if this file is valid + * + * @return true if valid, false if not + */ + public boolean isValid() { + return path != null && name != null; + } + + /** + * Posts a project file written event + * + * @param path + * the path where file was written + */ + public void postFileWrittenEvent(String path) { + String msg = Messages + .getString("TraceProjectFile.ProjectFileWrittenMiddle"); //$NON-NLS-1$ + TraceCompilerEngineGlobals.getEvents().postInfoMessage( + getTitle() + msg + path, null); + } + + /** + * Updates the project file name and path + * + * @param absolutePath + * the new path including the file name + */ + public void updatePath(String absolutePath) { + File file = new File(absolutePath); + path = file.getParent(); + name = file.getName(); + String ext = getFileExtension(); + if (name.endsWith(ext)) { + name = name.substring(0, name.length() - ext.length()); + } + } + + /** + * Gets the path including file name + * + * @return the path + */ + public final String getAbsolutePath() { + String retval; + if (isValid()) { + StringBuffer sb = new StringBuffer(); + sb.append(FileUtils.convertSeparators( + SourceConstants.FORWARD_SLASH_CHAR, path, true)); + addFileName(sb, false); + retval = sb.toString(); + } else { + retval = null; + } + return retval; + } + + /** + * Gets the absolute path to this file, including the model ID in file name + * + * @return the path + */ + public final String getAbsolutePathWithID() { + String retval; + if (isValid()) { + StringBuffer sb = new StringBuffer(); + sb.append(FileUtils.convertSeparators( + SourceConstants.FORWARD_SLASH_CHAR, path, true)); + addFileName(sb, true); + retval = sb.toString(); + } else { + retval = null; + } + return retval; + } + + /** + * Adds the file name to the given buffer + * + * @param sb + * the buffer + * @param addID + * true if ID needs to be added to name + */ + private void addFileName(StringBuffer sb, boolean addID) { + sb.append(name); + if (addID) { + sb.append("_0x"); //$NON-NLS-1$ + sb.append(Integer.toHexString(getOwner().getModel().getID())); + sb.append("_"); //$NON-NLS-1$ + } + sb.append(getFileExtension()); + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelExtension#getOwner() + */ + public TraceObject getOwner() { + return owner; + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelExtension# + * setOwner(com.nokia.tracecompiler.model.TraceObject) + */ + public void setOwner(TraceObject owner) { + if (this.owner != null) { + this.owner.removeModelListener(this); + } + if (owner instanceof TraceModel) { + this.owner = (TraceModel) owner; + this.owner.addModelListener(this); + } + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelListener# + * objectAdded(com.nokia.tracecompiler.model.TraceObject, + * com.nokia.tracecompiler.model.TraceObject) + */ + public void objectAdded(TraceObject owner, TraceObject object) { + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelListener# + * objectCreationComplete(com.nokia.tracecompiler.model.TraceObject) + */ + public void objectCreationComplete(TraceObject object) { + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelListener# + * objectRemoved(com.nokia.tracecompiler.model.TraceObject, + * com.nokia.tracecompiler.model.TraceObject) + */ + public void objectRemoved(TraceObject owner, TraceObject object) { + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelListener# + * propertyUpdated(com.nokia.tracecompiler.model.TraceObject, int) + */ + public void propertyUpdated(TraceObject object, int property) { + } + +}