trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/model/Trace.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/model/Trace.java Wed Jun 23 14:35:40 2010 +0300
@@ -0,0 +1,294 @@
+/*
+* 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.tracebuilder.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<TraceParameter> {
+
+ /**
+ * The trace string
+ */
+ private String trace = ""; //$NON-NLS-1$
+
+ /**
+ * List of TraceParameter objects.
+ */
+ private ArrayList<TraceParameter> parameters = new ArrayList<TraceParameter>();
+
+ /**
+ * 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.tracebuilder.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
+ */
+ public void setTrace(String trace) {
+ 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
+ */
+ public void removeParameter(TraceParameter parameter) {
+ if (parameters.remove(parameter)) {
+ getModel().notifyObjectRemoved(this, parameter);
+ parameter.reset();
+ }
+ }
+
+ /**
+ * Removes parameter at given index
+ *
+ * @param index
+ * the index of the parameter
+ */
+ public void removeParameterAt(int index) {
+ 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<TraceParameter> getParameters() {
+ return parameters.iterator();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Iterable#iterator()
+ */
+ public Iterator<TraceParameter> 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;
+ }
+
+ /**
+ * Gets a parameter that implements the given extension class. If there are
+ * multiple parameters with same extension class, the first one is returned
+ *
+ * @param <T>
+ * the type of the extension
+ * @param c
+ * the class
+ * @return the parameter
+ */
+ public <T extends TraceModelExtension> TraceParameter findParameterByExtension(
+ Class<T> c) {
+ TraceParameter retval = null;
+ for (TraceParameter parameter : parameters) {
+ T ext = parameter.getExtension(c);
+ if (ext != null) {
+ retval = parameter;
+ break;
+ }
+ }
+ return retval;
+ }
+
+}