trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/engine/source/TraceLocationWriter.java
author Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
Tue, 24 Aug 2010 14:01:48 +0300
changeset 16 72f198be1c1d
parent 10 ed1c9f64298a
permissions -rw-r--r--
Crash Analyser Carbide Extension 1.4.0

/*
* 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:
*
* Updates a trace location into source code
*
*/
package com.nokia.tracebuilder.engine.source;

import java.util.Iterator;

import com.nokia.tracebuilder.engine.TraceLocation;
import com.nokia.tracebuilder.engine.TraceLocationProperties;
import com.nokia.tracebuilder.model.Trace;
import com.nokia.tracebuilder.source.SourceExcludedArea;
import com.nokia.tracebuilder.source.SourceParserException;

/**
 * Updates trace locations into source code
 * 
 */
class TraceLocationWriter {

	/**
	 * Prevents construction
	 */
	private TraceLocationWriter() {
	}

	/**
	 * Queues a location update operation
	 * 
	 * @param location
	 *            the location to be updated
	 */
	static void updateLocation(TraceLocation location) {
		TraceLocationUpdateWriter writer = new TraceLocationUpdateWriter(
				location);
		writer.update();
	}

	/**
	 * Queues a add location operation
	 * 
	 * @param properties
	 *            the source properties
	 * @param trace
	 *            the trace to be added to source
	 * @param offset
	 *            the offset where trace is added
	 * @throws SourceParserException
	 *             if source parser fails
	 */
	static void addLocation(SourceProperties properties, Trace trace, int offset)
			throws SourceParserException {
		TraceLocationCreator writer = new TraceLocationCreator(properties,
				trace, offset, null);
		writer.update();
	}

	/**
	 * Queues a replace location operation
	 * 
	 * @param properties
	 *            the source properties
	 * @param trace
	 *            the trace to be added to source
	 * @param replaced
	 *            the location which is replaced by the trace
	 * @throws SourceParserException
	 *             if source parser fails
	 */
	static void replaceLocation(SourceProperties properties, Trace trace,
			TraceLocation replaced) throws SourceParserException {
		TraceLocationProperties locprops = new TraceLocationProperties();
		Iterator<String> itr = replaced.getParameters();
		while (itr.hasNext()) {
			locprops.addParameterTag(itr.next());
		}
		TraceLocationCreator replacer = new TraceLocationCreator(properties,
				trace, TraceLocationRemover.findStartOffset(replaced), locprops);
		replacer.update();
	}

	/**
	 * Queues a remove location operation
	 * 
	 * @param location
	 *            the location to be removed
	 */
	static void removeLocation(TraceLocation location) {
		TraceLocationRemover remover = new TraceLocationRemover(location);
		remover.update();
	}

	/**
	 * Locates the comment related to given location
	 * 
	 * @param location
	 *            the location
	 * @return index to the start of comment
	 */
	static SourceExcludedArea findLocationComment(TraceLocation location) {
		SourceExcludedArea retval = null;
		if (location.getParserRule() != null) {
			retval = location.getParserRule().getLocationParser()
					.findLocationComment(location);
		}
		return retval;
	}

}