tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerModelListener.java
branchRCL_3
changeset 20 ca8a1b6995f6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerModelListener.java	Tue Aug 31 16:45:49 2010 +0300
@@ -0,0 +1,246 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ * Model extension listener for console UI
+ *
+ */
+package com.nokia.tracecompiler;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.engine.TraceLocation;
+import com.nokia.tracecompiler.engine.TraceLocationList;
+import com.nokia.tracecompiler.engine.TraceLocationListListener;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
+import com.nokia.tracecompiler.model.TraceModelExtension;
+import com.nokia.tracecompiler.model.TraceModelExtensionListener;
+import com.nokia.tracecompiler.model.TraceModelListener;
+import com.nokia.tracecompiler.model.TraceObject;
+import com.nokia.tracecompiler.model.TraceProcessingListener;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceLocationListener;
+
+/**
+ * Model extension listener for TraceCompiler UI
+ * 
+ */
+final class TraceCompilerModelListener implements TraceModelListener,
+		TraceModelExtensionListener, TraceLocationListListener,
+		SourceLocationListener, TraceProcessingListener {
+
+	/**
+	 * List of errors for a source
+	 */
+	private ArrayList<TraceLocation> errorList = new ArrayList<TraceLocation>();
+
+	/**
+	 * Name of the file being processed
+	 */
+	private String currentFileName;
+
+	/*
+	 * (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) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtensionListener#
+	 * extensionAdded(com.nokia.tracecompiler.model.TraceObject,
+	 * com.nokia.tracecompiler.model.TraceModelExtension)
+	 */
+	public void extensionAdded(TraceObject object, TraceModelExtension extension) {
+		if (extension instanceof TraceLocationList) {
+			((TraceLocationList) extension).addLocationListListener(this);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.model.TraceModelExtensionListener#
+	 * extensionRemoved(com.nokia.tracecompiler.model.TraceObject,
+	 * com.nokia.tracecompiler.model.TraceModelExtension)
+	 */
+	public void extensionRemoved(TraceObject object,
+			TraceModelExtension extension) {
+		if (extension instanceof TraceLocationList) {
+			((TraceLocationList) extension).removeLocationListListener(this);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.TraceLocationListListener#
+	 * locationAdded(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	public void locationAdded(TraceLocation location) {
+		location.addLocationListener(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.TraceLocationListListener#
+	 * locationRemoved(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	public void locationRemoved(TraceLocation location) {
+		location.removeLocationListener(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.source.SourceLocationListener#
+	 * locationValidityChanged(com.nokia.tracecompiler.engine.TraceLocation)
+	 */
+	public void locationValidityChanged(TraceLocation location) {
+		String fileName = location.getFileName();
+		if (currentFileName != null) {
+			if (!fileName.equals(currentFileName)) {
+				currentFileName = fileName;
+				printLocationErrors();
+			}
+		} else {
+			currentFileName = fileName;
+		}
+		TraceCompilerErrorCode code = location.getValidityCode();
+		if (code != TraceCompilerErrorCode.OK
+				&& code != TraceCompilerErrorCode.TRACE_DOES_NOT_EXIST) {
+			if (!errorList.contains(location)) {
+				errorList.add(location);
+				location.reference();
+			}
+		} else {
+			if (errorList.remove(location)) {
+				location.dereference();
+			}
+		}
+	}
+
+	/**
+	 * Prints the errors from the error list
+	 */
+	void printLocationErrors() {
+		Collections.sort(errorList, new Comparator<TraceLocation>() {
+
+			/**
+			 * Sorts the array by line number
+			 * 
+			 * @param o1
+			 *            location 1
+			 * @param o2
+			 *            location 2
+			 * @return the result
+			 */
+			public int compare(TraceLocation o1, TraceLocation o2) {
+				int line1 = o1.getLineNumber();
+				int line2 = o2.getLineNumber();
+				return line1 > line2 ? 1 : line1 == line2 ? 0 : -1;
+			}
+
+		});
+		for (TraceLocation location : errorList) {
+			printLocationError(location);
+		}
+		errorList.clear();
+	}
+
+	/**
+	 * Prints a location error
+	 * 
+	 * @param location
+	 *            the location
+	 */
+	private void printLocationError(TraceLocation location) {
+		TraceCompilerEngineGlobals.getEvents().postErrorMessage(
+				location.getFileName()
+						+ Messages.getString("TraceCompilerModelListener.lineNumberPrefix") //$NON-NLS-1$
+						+ location.getLineNumber()
+						+ SourceConstants.COLON
+						+ SourceConstants.SPACE
+						+ TraceCompilerEngineErrorMessages.getErrorMessage(
+								location.getValidityCode(), location
+										.getValidityParameters()), null, true);
+	}
+
+	/**
+	 * get list of cumulated erros.
+	 * 
+	 * @return list of TaceLocaion
+	 */
+	public ArrayList<TraceLocation> getErrors() {
+		return errorList;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.tracecompiler.model.TraceProcessingListener#processingComplete
+	 * (boolean)
+	 */
+	public void processingComplete(boolean changed) {
+		printLocationErrors();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.tracecompiler.model.TraceProcessingListener#processingStarted()
+	 */
+	public void processingStarted() {
+	}
+}
\ No newline at end of file