diff -r a151135b0cf9 -r aa2539c91954 tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/Trace.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/Trace.java Fri Oct 08 14:56:39 2010 +0300 @@ -0,0 +1,273 @@ +/* +* 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: +* +* Represents the mapping of a trace ID into actual trace string +* +*/ +package com.nokia.tracecompiler.model; + +import java.util.ArrayList; +import java.util.Iterator; + +/** + * Represents the mapping of a trace ID into actual trace string. When a trace + * is decoded, the trace ID found from the binary trace file is converted to the + * text stored in this trace. + * + */ +public class Trace extends TraceObject implements Iterable { + + /** + * The trace string + */ + private String trace = ""; //$NON-NLS-1$ + + /** + * List of TraceParameter objects. + */ + private ArrayList parameters = new ArrayList(); + + /** + * The trace group this trace belongs to + */ + private TraceGroup group; + + /** + * Creates a new trace and associates it with given TraceGroup + * + * @param group + * the trace group + */ + Trace(TraceGroup group) { + setModel(group.getModel()); + this.group = group; + group.addTrace(this); + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceObject#reset() + */ + @Override + void reset() { + super.reset(); + for (TraceParameter parameter : parameters) { + // Model listeners are not notified on reset, but if the + // parameter itself implements a delete notification interface, + // it must be called to do appropriate cleanup + notifyOnDelete(parameter); + parameter.reset(); + } + parameters.clear(); + } + + /** + * Sets the trace string. Generates propertyUpdated event to model listeners + * if the string changes + * + * @see TraceModelListener#propertyUpdated(TraceObject, int) + * @param trace + * the trace string + * @throws TraceCompilerException + */ + public void setTrace(String trace) throws TraceCompilerException { + if (trace == null) { + trace = ""; //$NON-NLS-1$ + } + if (!trace.equals(this.trace)) { + this.trace = trace; + getModel().notifyPropertyUpdated(this, TraceModelListener.TRACE); + } + } + + /** + * Returns the trace string. This never returns null + * + * @return the trace string + */ + public String getTrace() { + return trace; + } + + /** + * Returns the group to which this trace belongs + * + * @return trace group + */ + public TraceGroup getGroup() { + return group; + } + + /** + * Adds a new parameter to the end of parameter list. Generates objectAdded + * event to model listeners + * + * @see TraceModelListener#objectAdded(TraceObject, TraceObject) + * @param parameter + * the new parameter + */ + public void addParameter(TraceParameter parameter) { + parameters.add(parameter); + getModel().notifyObjectAdded(this, parameter); + } + + /** + * Inserts a new parameter to the given location. Generates objectAdded + * event to model listeners + * + * @see TraceModelListener#objectAdded(TraceObject, TraceObject) + * @param index + * the index for new parameter + * @param parameter + * the new parameter + */ + void insertParameter(int index, TraceParameter parameter) { + parameters.add(index, parameter); + getModel().notifyObjectAdded(this, parameter); + } + + /** + * Removes a parameter from this trace object. Generates a objectRemoved + * event to model listeners if the parameter is actually removed + * + * @see TraceModelListener#objectRemoved(TraceObject, TraceObject) + * @param parameter + * the parameter to be removed + * @throws TraceCompilerException + */ + public void removeParameter(TraceParameter parameter) throws TraceCompilerException { + if (parameters.remove(parameter)) { + getModel().notifyObjectRemoved(this, parameter); + parameter.reset(); + } + } + + /** + * Removes parameter at given index + * + * @param index + * the index of the parameter + * @throws TraceCompilerException + */ + public void removeParameterAt(int index) throws TraceCompilerException { + if (index >= 0 && index < parameters.size()) { + TraceParameter parameter = parameters.get(index); + parameters.remove(index); + getModel().notifyObjectRemoved(this, parameter); + parameter.reset(); + } + } + + /** + * Determines if this object has parameters. + * + * @return true if this object has parameters + */ + public boolean hasParameters() { + return !parameters.isEmpty(); + } + + /** + * Gets the number of parameters + * + * @return the number of parameters + */ + public int getParameterCount() { + return parameters.size(); + } + + /** + * Returns highest parameter ID + 1. Can be used to create an unique ID for + * a new parameter. + * + * @return the next parameter ID + */ + public int getNextParameterID() { + int max = 0; + for (TraceParameter parameter : parameters) { + int id = parameter.getID(); + if (id > max) { + max = id; + } + } + return max + 1; + } + + /** + * Gets the parameter at given index + * + * @param index + * the parameter index + * @return the parameter at the index + */ + public TraceParameter getParameter(int index) { + return parameters.get(index); + } + + /** + * Returns the parameters of this object + * + * @return iterator over the parameters + */ + public Iterator getParameters() { + return parameters.iterator(); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Iterable#iterator() + */ + public Iterator iterator() { + return parameters.iterator(); + } + + /** + * Gets a parameter by ID + * + * @param id + * the parameter ID + * @return the parameter or null + */ + public TraceParameter findParameterByID(int id) { + TraceParameter retval = null; + for (TraceParameter parameter : parameters) { + if (parameter.getID() == id) { + retval = parameter; + break; + } + } + return retval; + } + + /** + * Gets a parameter by name + * + * @param name + * the name of a parameter + * @return the parameter or null + */ + public TraceParameter findParameterByName(String name) { + TraceParameter retval = null; + for (TraceParameter parameter : parameters) { + if (parameter.getName().equals(name)) { + retval = parameter; + break; + } + } + return retval; + } +}