tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModel.java
changeset 56 aa2539c91954
parent 54 a151135b0cf9
child 60 e54443a6878c
child 62 1c2bb2fc7c87
--- a/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/model/TraceModel.java	Wed Sep 29 17:45:35 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,997 +0,0 @@
-/*
-* Copyright (c) 2008 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:
-*
-* Trace model is a collection of trace groups
-*
-*/
-package com.nokia.tracecompiler.model;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.Properties;
-
-import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
-import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
-import com.nokia.tracecompiler.engine.project.SortedProperties;
-import com.nokia.tracecompiler.project.FormattingUtils;
-import com.nokia.tracecompiler.source.SourceConstants;
-
-/**
- * Trace model is a collection of trace groups. Listener interfaces can be
- * attached to a trace model to receive change notifications when traces are
- * added, removed or modified.
- * 
- */
-public class TraceModel extends TraceObject implements Iterable<TraceGroup> {
-
-	/**
-	 * Group property prefix
-	 */
-	public final String GROUP_PROPERTY_PREFIX = "[GROUP]"; //$NON-NLS-1$
-
-	/**
-	 * Trace property prefix
-	 */
-	public final String TRACE_PROPERTY_PREFIX = "[TRACE]"; //$NON-NLS-1$
-
-	/**
-	 * Obsolete property prefix
-	 */
-	public final String OBSOLETE_PROPERTY_PREFIX = "[[OBSOLETE]]"; //$NON-NLS-1$
-
-	/**
-	 * Group Id prefix
-	 */
-	public final String GROUP_ID_PREFIX = "["; //$NON-NLS-1$
-
-	/**
-	 * Group Id suffix
-	 */
-	public final String GROUP_ID_SUFFIX = "]"; //$NON-NLS-1$	
-
-	/**
-	 * Factory object for creating other trace objects
-	 */
-	private TraceObjectFactory factory;
-
-	/**
-	 * Property verifier interface
-	 */
-	private TraceObjectPropertyVerifier verifier;
-
-	/**
-	 * List of trace groups
-	 */
-	private ArrayList<TraceGroup> groups = new ArrayList<TraceGroup>();
-
-	/**
-	 * List of traces, sorted by name
-	 */
-	private ArrayList<Trace> tracesByName = new ArrayList<Trace>();
-
-	/**
-	 * List of model listeners
-	 */
-	private ArrayList<TraceModelListener> modelListeners = new ArrayList<TraceModelListener>();
-
-	/**
-	 * List of extension listeners
-	 */
-	private ArrayList<TraceModelExtensionListener> extensionListeners = new ArrayList<TraceModelExtensionListener>();
-
-	/**
-	 * List of reset listeners
-	 */
-	private ArrayList<TraceModelResetListener> resetListeners = new ArrayList<TraceModelResetListener>();
-
-	/**
-	 * Processing listeners
-	 */
-	private ArrayList<TraceProcessingListener> processingListeners = new ArrayList<TraceProcessingListener>();
-
-	/**
-	 * List of constant tables
-	 */
-	private ArrayList<TraceConstantTable> constantTables = new ArrayList<TraceConstantTable>();
-
-	/**
-	 * Validity flag
-	 */
-	private boolean valid;
-
-	/**
-	 * Number of nested calls to startProcessing
-	 */
-	private int isProcessing;
-
-	/**
-	 * Model was changed during processing
-	 */
-	private boolean modelChangedDuringProcessing;
-
-	/**
-	 * Fixed Ids from fixed Ids definition file
-	 */
-	private SortedProperties fixedIds;
-
-	/**
-	 * Hex radix
-	 */
-	public int HEX_RADIX = 16; // CodForChk_Dis_Magic
-
-	/**
-	 * Constructor
-	 * 
-	 * @param factory
-	 *            the rule factory
-	 * @param verifier
-	 *            the property verifier
-	 * @throws TraceCompilerException 
-	 */
-	public TraceModel(TraceObjectRuleFactory factory,
-			TraceObjectPropertyVerifier verifier) throws TraceCompilerException {
-		// Stored for callback purposes
-		setModel(this);
-		this.factory = new TraceObjectFactory(this, factory);
-		this.verifier = verifier;
-	}
-
-	/**
-	 * Adds a new trace model listener to this model
-	 * 
-	 * @param listener
-	 *            the new listener
-	 */
-	public void addModelListener(TraceModelListener listener) {
-		modelListeners.add(listener);
-	}
-
-	/**
-	 * Removes a trace model listener. Does nothing if the listener is not found
-	 * 
-	 * @param listener
-	 *            the listener to be removed
-	 */
-	public void removeModelListener(TraceModelListener listener) {
-		modelListeners.remove(listener);
-	}
-
-	/**
-	 * Adds a new trace model extension listener to this model
-	 * 
-	 * @param listener
-	 *            the new listener
-	 */
-	public void addExtensionListener(TraceModelExtensionListener listener) {
-		extensionListeners.add(listener);
-	}
-
-	/**
-	 * Removes a trace model extension listener. Does nothing if the listener is
-	 * not found
-	 * 
-	 * @param listener
-	 *            the listener to be removed
-	 */
-	public void removeExtensionListener(TraceModelExtensionListener listener) {
-		extensionListeners.remove(listener);
-	}
-
-	/**
-	 * Adds a new trace model reset listener to this model
-	 * 
-	 * @param listener
-	 *            the new listener
-	 */
-	public void addResetListener(TraceModelResetListener listener) {
-		resetListeners.add(listener);
-	}
-
-	/**
-	 * Removes a trace model reset listener. Does nothing if the listener is not
-	 * found
-	 * 
-	 * @param listener
-	 *            the listener to be removed
-	 */
-	public void removeResetListener(TraceModelResetListener listener) {
-		resetListeners.remove(listener);
-	}
-
-	/**
-	 * Adds a new trace model listener to this model
-	 * 
-	 * @param listener
-	 *            the new listener
-	 */
-	public void addProcessingListener(TraceProcessingListener listener) {
-		processingListeners.add(listener);
-	}
-
-	/**
-	 * Removes a processing listener. Does nothing if the listener is not found
-	 * 
-	 * @param listener
-	 *            the listener to be removed
-	 */
-	public void removeProcessingListener(TraceProcessingListener listener) {
-		processingListeners.remove(listener);
-	}
-
-	/**
-	 * Returns highest group ID + 1. Can be used to create an unique ID for a
-	 * new trace group.
-	 * 
-	 * @return the next trace group ID
-	 * @throws TraceCompilerException
-	 */
-	public int getNextGroupID() throws TraceCompilerException {
-		int currentMaxGroupId = 0;
-		int nextGroupId = 0;
-		// Check if there are some fixed Ids
-		if (fixedIds != null) {
-			Enumeration<Object> keys = this.fixedIds.keys();
-			// Go through fixed Ids and check if there are fixed group Ids
-			while (keys.hasMoreElements()) {
-				String key = (String) keys.nextElement();
-				if (key.startsWith(GROUP_PROPERTY_PREFIX)
-						|| key.startsWith(OBSOLETE_PROPERTY_PREFIX
-								+ GROUP_PROPERTY_PREFIX)) {
-					// Fixed group Id found. Try to covert it to int value.
-					String value = fixedIds.getProperty(key);
-					int fixedId = 0;
-					try {
-						fixedId = Integer.decode(value).intValue();
-					} catch (NumberFormatException e) {
-						// Corrupted. Get next group Id later on.
-						currentMaxGroupId = 0;
-						break;
-					}
-					// Check if found fixed Id is bigger than current max group
-					// Id
-					if (fixedId > currentMaxGroupId) {
-						currentMaxGroupId = fixedId;
-					}
-				}
-			}
-		}
-
-		// If there were fixed group Ids. Set next group Id to be current max
-		// group Id + 1
-		if (currentMaxGroupId != 0) {
-			nextGroupId = currentMaxGroupId + 1;
-		}
-
-		// Get current max group id in model
-		int maxGroupIdInModel = 0;
-		for (TraceGroup group : groups) {
-			int groupIdInModel = group.getID();
-			if (groupIdInModel > maxGroupIdInModel) {
-				maxGroupIdInModel = groupIdInModel;
-			}
-		}
-
-		// If next group Id is zero or smaller than current max group id in
-		// model + 1. Set it be same as current max group id in model + 1. This
-		// is done in case that we have added more than one new group after last
-		// fixed Id update
-		if (nextGroupId == 0 || nextGroupId < maxGroupIdInModel + 1) {
-			nextGroupId = maxGroupIdInModel + 1;
-		}
-
-		// Check that next group Id is not bigger than max group Id
-		if (nextGroupId > TraceCompilerEngineGlobals.MAX_GROUP_ID) {
-			throw new TraceCompilerException(
-					TraceCompilerErrorCode.RUN_OUT_OF_GROUP_IDS);
-		}
-
-		return nextGroupId;
-	}
-
-	/**
-	 * Returns highest constant table ID + 1. Can be used to create an unique ID
-	 * for a new constant table.
-	 * 
-	 * @return the next constant table ID
-	 */
-	public int getNextConstantTableID() {
-		int max = 0;
-		for (TraceConstantTable table : constantTables) {
-			int id = table.getID();
-			if (id > max) {
-				max = id;
-			}
-		}
-		return max + 1;
-	}
-
-	/**
-	 * Removes a trace group from this model. Create groupRemoved event to model
-	 * listeners
-	 * 
-	 * @param group
-	 *            the group to be removed
-	 * @throws TraceCompilerException 
-	 */
-	public void removeGroup(TraceGroup group) throws TraceCompilerException {
-		if (groups.remove(group)) {
-			notifyObjectRemoved(this, group);
-			group.reset();
-		}
-	}
-
-	/**
-	 * Determines if this model contains any trace groups
-	 * 
-	 * @return true if there are trace groups
-	 */
-	public boolean hasGroups() {
-		return !groups.isEmpty();
-	}
-
-	/**
-	 * Gets the number of trace groups
-	 * 
-	 * @return trace group count
-	 */
-	public int getGroupCount() {
-		return groups.size();
-	}
-
-	/**
-	 * Returns the trace groups of this model
-	 * 
-	 * @return the iterator over the groups
-	 */
-	public Iterator<TraceGroup> getGroups() {
-		return groups.iterator();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Iterable#iterator()
-	 */
-	public Iterator<TraceGroup> iterator() {
-		return groups.iterator();
-	}
-
-	/**
-	 * Removes all trace groups and parameters from this model. Extensions are
-	 * not removed. Notifies the reset listeners with modelResetting and
-	 * modelReset
-	 * 
-	 * @see TraceModelResetListener#modelResetting
-	 * @see TraceModelResetListener#modelReset
-	 */
-	@Override
-	public void reset() {
-		notifyModelResetting();
-		// Properties are removed, other extensions are left
-		removeExtensions(TraceObjectPropertyList.class);
-		groups.clear();
-		tracesByName.clear();
-		constantTables.clear();
-		fixedIds = null;
-		super.reset();
-		notifyModelReset();
-	}
-
-	/**
-	 * Gets the group which has given ID
-	 * 
-	 * @param id
-	 *            the id
-	 * @return group or null
-	 */
-	public TraceGroup findGroupByID(int id) {
-		TraceGroup retval = null;
-		for (TraceGroup group : groups) {
-			if (group.getID() == id) {
-				retval = group;
-				break;
-			}
-		}
-		return retval;
-	}
-
-	/**
-	 * Locates a trace group which has the given name.
-	 * 
-	 * @param name
-	 *            the name of the trace group
-	 * @return the group or null if not found
-	 * @see TraceObject#getName
-	 */
-	public TraceGroup findGroupByName(String name) {
-		TraceGroup retval = null;
-		for (TraceGroup group : groups) {
-			if (group.getName().equals(name)) {
-				retval = group;
-				break;
-			}
-		}
-		return retval;
-	}
-
-	/**
-	 * Locates a trace which has the given name.
-	 * 
-	 * @param name
-	 *            the name of the trace
-	 * @return the trace or null if not found
-	 * @see TraceObject#getName
-	 */
-	public Trace findTraceByName(String name) {
-		Trace retval;
-		int index = Collections.binarySearch(tracesByName, name,
-				TraceObjectUtils.traceToNameComparator);
-		if (index >= 0) {
-			retval = tracesByName.get(index);
-		} else {
-			retval = null;
-		}
-		return retval;
-	}
-
-	/**
-	 * Returns the group at given index
-	 * 
-	 * @param index
-	 *            the group index
-	 * @return the group
-	 */
-	public TraceGroup getGroupAt(int index) {
-		return groups.get(index);
-	}
-
-	/**
-	 * Removes a constant table from this model. Creates objectRemoved event to
-	 * model listeners
-	 * 
-	 * @see TraceModelListener#objectRemoved(TraceObject, TraceObject)
-	 * @param table
-	 *            the table to be removed
-	 * @throws TraceCompilerException 
-	 */
-	public void removeConstantTable(TraceConstantTable table) throws TraceCompilerException {
-		if (constantTables.remove(table)) {
-			notifyObjectRemoved(this, table);
-			table.reset();
-		}
-	}
-
-	/**
-	 * Gets the constant tables of this model
-	 * 
-	 * @return the tables iterator
-	 */
-	public Iterator<TraceConstantTable> getConstantTables() {
-		return constantTables.iterator();
-	}
-
-	/**
-	 * Gets a constant table by ID
-	 * 
-	 * @param id
-	 *            the ID
-	 * @return the table or null
-	 */
-	public TraceConstantTable findConstantTableByID(int id) {
-		TraceConstantTable retval = null;
-		for (TraceConstantTable table : constantTables) {
-			if (table.getID() == id) {
-				retval = table;
-				break;
-			}
-		}
-		return retval;
-	}
-
-	/**
-	 * Gets a constant table by name
-	 * 
-	 * @param tableName
-	 *            the name
-	 * @return the table or null
-	 */
-	public TraceConstantTable findConstantTableByName(String tableName) {
-		TraceConstantTable retval = null;
-		for (TraceConstantTable table : constantTables) {
-			if (table.getName().equals(tableName)) {
-				retval = table;
-				break;
-			}
-		}
-		return retval;
-	}
-
-	/**
-	 * Checks if this model contains constant tables
-	 * 
-	 * @return true if there are constant tables
-	 */
-	public boolean hasConstantTables() {
-		return !constantTables.isEmpty();
-	}
-
-	/**
-	 * Returns the constant table at given index
-	 * 
-	 * @param index
-	 *            the group index
-	 * @return the group
-	 */
-	public TraceConstantTable getConstantTableAt(int index) {
-		return constantTables.get(index);
-	}
-
-	/**
-	 * Adds a new trace group to this model. Creates objectAdded event to model
-	 * listeners. This is only intended to be called from TraceGroup
-	 * constructor, so this is not public.
-	 * 
-	 * @see TraceModelListener#objectAdded(TraceObject, TraceObject)
-	 * @param group
-	 *            the group to be added
-	 */
-	void addGroup(TraceGroup group) {
-		groups.add(group);
-		notifyObjectAdded(this, group);
-	}
-
-	/**
-	 * Adds a constant table to this model. Created objectAdded event to model
-	 * listeners. This is only intended to be called from constant table
-	 * constructor, so this is not public
-	 * 
-	 * @see TraceModelListener#objectAdded(TraceObject, TraceObject)
-	 * @param table
-	 *            the constant table
-	 */
-	void addConstantTable(TraceConstantTable table) {
-		constantTables.add(table);
-		notifyObjectAdded(this, table);
-	}
-
-	/**
-	 * Fires propertiesUpdated event. Called from trace objects when their
-	 * properties change.
-	 * 
-	 * @see TraceModelListener#propertyUpdated(TraceObject, int)
-	 * @param source
-	 *            the object that changed
-	 * @param property
-	 *            the property that changed
-	 * @throws TraceCompilerException 
-	 */
-	void notifyPropertyUpdated(TraceObject source, int property) throws TraceCompilerException {
-		if (source instanceof Trace) {
-			if (property == TraceModelListener.NAME) {
-				Collections.sort(tracesByName,
-						TraceObjectUtils.traceObjectNameComparator);
-			}
-			((Trace) source).getGroup().tracePropertyUpdated(source, property);
-		}
-		for (TraceModelListener l : modelListeners) {
-			l.propertyUpdated(source, property);
-		}
-		modelChangedDuringProcessing = true;
-	}
-
-	/**
-	 * Fires objectAdded event to listeners
-	 * 
-	 * @see TraceModelListener#objectAdded(TraceObject, TraceObject)
-	 * @param owner
-	 *            the owner object
-	 * @param object
-	 *            the object that was added
-	 */
-	void notifyObjectAdded(TraceObject owner, TraceObject object) {
-		// List is sorted when the name is set to the trace
-		if (object instanceof Trace) {
-			tracesByName.add((Trace) object);
-		}
-		for (TraceModelListener l : modelListeners) {
-			l.objectAdded(owner, object);
-		}
-		modelChangedDuringProcessing = true;
-	}
-
-	/**
-	 * Fires objectRemoved event to listeners
-	 * 
-	 * @see TraceModelListener#objectRemoved(TraceObject, TraceObject)
-	 * @param owner
-	 *            the owner object
-	 * @param object
-	 *            the object that was removed
-	 * @throws TraceCompilerException 
-	 */
-	void notifyObjectRemoved(TraceObject owner, TraceObject object) throws TraceCompilerException {
-		if (object instanceof Trace) {
-			int index = Collections.binarySearch(tracesByName, (Trace) object,
-					TraceObjectUtils.traceObjectNameComparator);
-			tracesByName.remove(index);
-		}
-		notifyOnDelete(object);
-		for (TraceModelListener l : modelListeners) {
-			l.objectRemoved(owner, object);
-		}
-		modelChangedDuringProcessing = true;
-	}
-
-	/**
-	 * Notifies that an object creation is complete
-	 * 
-	 * @see TraceModelListener#objectCreationComplete(TraceObject)
-	 * @param object
-	 *            the object
-	 * @throws TraceCompilerException 
-	 */
-	void notifyObjectCreationComplete(TraceObject object) throws TraceCompilerException {
-		for (TraceModelListener l : modelListeners) {
-			l.objectCreationComplete(object);
-		}
-	}
-
-	/**
-	 * Fires modelResetting event to all listeners
-	 * 
-	 * @see TraceModelResetListener#modelResetting()
-	 */
-	private void notifyModelResetting() {
-		for (TraceModelResetListener l : resetListeners) {
-			l.modelResetting();
-		}
-	}
-
-	/**
-	 * Fires modelReset event to all listeners
-	 * 
-	 * @see TraceModelResetListener#modelReset()
-	 */
-	private void notifyModelReset() {
-		for (TraceModelResetListener l : resetListeners) {
-			l.modelReset();
-		}
-	}
-
-	/**
-	 * Fires extensionAdded event. Called from TraceObject when extension is
-	 * added to it
-	 * 
-	 * @see TraceModelExtensionListener#extensionAdded(TraceObject,
-	 *      TraceModelExtension)
-	 * @param object
-	 *            the trace object
-	 * @param extension
-	 *            the new extension
-	 */
-	void notifyExtensionAdded(TraceObject object, TraceModelExtension extension) {
-		for (TraceModelExtensionListener l : extensionListeners) {
-			l.extensionAdded(object, extension);
-		}
-		modelChangedDuringProcessing = true;
-	}
-
-	/**
-	 * Fires extensionRemoved event. Called from TraceObject when extension is
-	 * removed from it
-	 * 
-	 * @see TraceModelExtensionListener#extensionRemoved(TraceObject,
-	 *      TraceModelExtension)
-	 * @param object
-	 *            the object
-	 * @param extension
-	 *            the removed extension
-	 */
-	void notifyExtensionRemoved(TraceObject object,
-			TraceModelExtension extension) {
-		for (TraceModelExtensionListener l : extensionListeners) {
-			l.extensionRemoved(object, extension);
-		}
-		modelChangedDuringProcessing = true;
-	}
-
-	/**
-	 * Gets the validity flag of this model
-	 * 
-	 * @return the validity flag
-	 */
-	public boolean isValid() {
-		return valid;
-	}
-
-	/**
-	 * Sets the validity flag
-	 * 
-	 * @param valid
-	 *            new flag value
-	 * @throws TraceCompilerException 
-	 */
-	public void setValid(boolean valid) throws TraceCompilerException {
-		if (valid != this.valid) {
-			this.valid = valid;
-			for (TraceModelResetListener l : resetListeners) {
-				l.modelValid(valid);
-			}
-		}
-	}
-
-	/**
-	 * Gets the trace object factory
-	 * 
-	 * @return the factory
-	 */
-	public TraceObjectFactory getFactory() {
-		return factory;
-	}
-
-	/**
-	 * Gets the object verifier interface. The verifier should be used before
-	 * updating object properties
-	 * 
-	 * @return the verifier
-	 */
-	public TraceObjectPropertyVerifier getVerifier() {
-		return verifier;
-	}
-
-	/**
-	 * Notifies the process listeners that a process the results in multiple
-	 * listener updates is about to start
-	 */
-	public void startProcessing() {
-		isProcessing++;
-		if (isProcessing == 1) {
-			modelChangedDuringProcessing = false;
-			for (TraceProcessingListener l : processingListeners) {
-				l.processingStarted();
-			}
-		}
-	}
-
-	/**
-	 * Notifies the process listeners that a process the results in multiple
-	 * listener updates has finished
-	 */
-	public void processingComplete() {
-		isProcessing--;
-		if (isProcessing == 0) {
-			for (TraceProcessingListener l : processingListeners) {
-				l.processingComplete(modelChangedDuringProcessing);
-			}
-			modelChangedDuringProcessing = false;
-		}
-	}
-
-	/**
-	 * Checks the state of the processing flag
-	 * 
-	 * @return the processing flag
-	 */
-	public boolean isProcessing() {
-		return isProcessing > 0;
-	}
-
-	/**
-	 * Checks if model has traces
-	 * 
-	 * @return true if there's traces, false if not
-	 */
-	public boolean hasTraces() {
-		boolean retval = false;
-		for (TraceGroup group : groups) {
-			if (group.hasTraces()) {
-				retval = true;
-				break;
-			}
-		}
-		return retval;
-	}
-
-	/**
-	 * Gets group ID from properties
-	 * 
-	 * @param properties
-	 *            the properties
-	 * @param group
-	 *            the group
-	 * @return the group ID
-	 * @throws TraceCompilerException
-	 */
-	public int getGroupID(Properties properties, TraceGroup group)
-			throws TraceCompilerException {
-		String value = properties.getProperty(GROUP_PROPERTY_PREFIX
-				+ group.getName());
-		int id;
-		if (value == null) {
-			// Not found, assign a proper ID
-			id = getNewIdForGroup(group);
-
-		} else {
-			try {
-				id = Integer.decode(value).intValue();
-				TraceGroup traceGroup = findGroupByID(id);
-				if (traceGroup != null && !traceGroup.equals(group)) {
-					// Id already in use, assign a proper ID
-					id = getNewIdForGroup(group);
-				}
-			} catch (NumberFormatException e) {
-				// Corrupted, assign a proper ID
-				id = getNewIdForGroup(group);
-			}
-		}
-		group.internalSetID(id);
-		return id;
-	}
-
-	/**
-	 * Gets a new ID for this group
-	 * 
-	 * @param group
-	 *            the group
-	 * @return a new ID for this group
-	 * @throws TraceCompilerException
-	 */
-	private int getNewIdForGroup(TraceGroup group) throws TraceCompilerException {
-		int id = FormattingUtils.getGroupID(group.getModel(), group.getName());
-		return id;
-	}
-
-	/**
-	 * Saves trace and group identifiers to given properties.
-	 * 
-	 * @param properties
-	 *            the properties to use
-	 */
-	public void saveIDs(Properties properties) {
-		properties.clear();
-		StringBuffer sb = new StringBuffer();
-		for (TraceGroup group : this) {
-			int groupId = group.getID();
-			properties.setProperty(GROUP_PROPERTY_PREFIX + group.getName(),
-					SourceConstants.HEX_PREFIX + Integer.toHexString(groupId));
-			for (Trace trace : group) {
-				int traceId = trace.getID();
-				properties.setProperty(TRACE_PROPERTY_PREFIX
-						+ createTraceName(sb, group, trace),
-						SourceConstants.HEX_PREFIX
-								+ Integer.toHexString(traceId));
-			}
-		}
-	}
-
-	/**
-	 * Merges the group and trace names together
-	 * 
-	 * @param sb
-	 *            the buffer where name is stored
-	 * @param group
-	 *            group
-	 * @param trace
-	 *            trace
-	 * @return the trace name
-	 */
-	public String createTraceName(StringBuffer sb, TraceGroup group, Trace trace) {
-		sb.setLength(0);
-		sb.append(group.getName());
-		sb.append(GROUP_ID_PREFIX);
-		int groupId = group.getID();
-		String groupIdString = SourceConstants.HEX_PREFIX
-				+ Integer.toString(groupId, HEX_RADIX).toUpperCase();
-		sb.append(groupIdString);
-		sb.append(GROUP_ID_SUFFIX);
-		sb.append(SourceConstants.UNDERSCORE);
-		sb.append(trace.getName());
-		return sb.toString();
-	}
-
-	/**
-	 * Gets fixed group and trace ids
-	 * 
-	 * @return fixed Ids
-	 */
-	public SortedProperties getFixedIds() {
-		return fixedIds;
-	}
-
-	/**
-	 * Set fixed group and trace ids
-	 * 
-	 * @param fixedIds
-	 *            fixed Ids
-	 */
-	public void setFixedIds(SortedProperties fixedIds) {
-		this.fixedIds = fixedIds;
-	}
-
-	/**
-	 * Gets next trace ID
-	 * 
-	 * @param group
-	 *            the group
-	 * @return the trace ID
-	 * @throws TraceCompilerException
-	 */
-	public int getNextTraceId(TraceGroup group) throws TraceCompilerException {
-		int currentMaxTraceID = 0;
-		int nextTraceId = 0;
-		// Check if there are some fixed Ids
-		if (fixedIds != null) {
-			Enumeration<Object> keys = this.fixedIds.keys();
-			String groupName = group.getName();
-			int groupId = group.getID();
-			String groupIdString = SourceConstants.HEX_PREFIX
-					+ Integer.toString(groupId, HEX_RADIX).toUpperCase();
-			// Go through fixed Ids and check if there are fixed trace Ids to
-			// this group
-			while (keys.hasMoreElements()) {
-				String key = (String) keys.nextElement();
-				if (key.startsWith(TRACE_PROPERTY_PREFIX + groupName
-						+ GROUP_ID_PREFIX + groupIdString + GROUP_ID_SUFFIX
-						+ SourceConstants.UNDERSCORE)
-						|| key.startsWith(OBSOLETE_PROPERTY_PREFIX
-								+ TRACE_PROPERTY_PREFIX + groupName
-								+ GROUP_ID_PREFIX + groupIdString
-								+ GROUP_ID_SUFFIX + SourceConstants.UNDERSCORE)) {
-					// Fixed trace Id to in this group found. Try to covert it
-					// to int value.
-					String value = fixedIds.getProperty(key);
-					int fixedId = 0;
-					try {
-						fixedId = Integer.decode(value).intValue();
-					} catch (NumberFormatException e) {
-						// Corrupted. Get next trace Id later on.
-						nextTraceId = 0;
-						break;
-					}
-					// Check if found fixed Id is bigger than current max trace
-					// Id in this group
-					if (fixedId > currentMaxTraceID) {
-						currentMaxTraceID = fixedId;
-					}
-				}
-			}
-			// If there were fixed trace Ids to this group. Set next trace Id to
-			// be current max trace Id + 1
-			if (currentMaxTraceID != 0) {
-				nextTraceId = currentMaxTraceID + 1;
-			}
-			// If next trace Id is zero or smaller than trace Id that group
-			// suggest. Set it be same as group suggest. This is done in case
-			// that we have added more than one new trace to same group after
-			// last fixed Id update
-			if (nextTraceId == 0 || nextTraceId < group.getNextTraceID()) {
-				nextTraceId = group.getNextTraceID();
-			}
-		} else {
-			// No fixed Ids. Get next trace Id from group
-			nextTraceId = group.getNextTraceID();
-		}
-		// Check that next trace Id is not bigger than max trace Id
-		if (nextTraceId > TraceCompilerEngineGlobals.MAX_TRACE_ID) {
-			throw new TraceCompilerException(
-					TraceCompilerErrorCode.RUN_OUT_OF_TRACE_IDS);
-		}
-
-		return nextTraceId;
-	}
-
-}