tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/EventEngine.java
changeset 56 aa2539c91954
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/EventEngine.java	Fri Oct 08 14:56:39 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* 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:
+*
+* Implements TraceCompilerEvents to forward events to the event router plug-in
+*
+*/
+package com.nokia.tracecompiler.engine.event;
+
+import com.nokia.tracecompiler.TraceCompilerGlobals;
+import com.nokia.tracecompiler.TraceCompilerLogger;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineEvents;
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.source.SourceConstants;
+import com.nokia.tracecompiler.source.SourceLocationBase;
+
+/**
+ * Implements TraceCompilerEvents to forward events to the event router plug-in
+ * 
+ */
+public final class EventEngine implements TraceCompilerEngineEvents {
+
+	/**
+	 * Info event type
+	 */
+	public final static int INFO = 1; // CodForChk_Dis_Magic
+
+	/**
+	 * Warning event type
+	 */
+	public final static int WARNING = 2; // CodForChk_Dis_Magic
+
+	/**
+	 * Error event type
+	 */
+	public final static int ERROR = 3; // CodForChk_Dis_Magic
+
+	/**
+	 * Critical assertion failure event type
+	 */
+	public final static int ASSERT_CRITICAL = 4; // CodForChk_Dis_Magic
+
+	/**
+	 * Non-critical assertion failure event type
+	 */
+	public final static int ASSERT_NORMAL = 5; // CodForChk_Dis_Magic
+	
+
+	/**
+	 * indicates if an error happened for all files
+	 */
+	private boolean globalProcessingError = false;
+	
+
+
+	/**
+	 * Constructor
+	 * 
+	 * @param model
+	 *            the trace model
+	 */
+	public EventEngine(TraceModel model) {
+	}
+
+	/**
+	 * check if an error happened
+	 * 
+	 * @return the error
+	 */
+	public boolean hasErrorHappened() {
+		return globalProcessingError;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
+	 *      postError(com.nokia.tracecompiler.engine.TraceCompilerException)
+	 */
+	public void postError(TraceCompilerException exception) {
+		String message = TraceCompilerEngineErrorMessages.getErrorMessage(exception);
+		if (message != null && message.length() > 0) {
+			postErrorMessage(message, exception.getErrorSource(), exception.isEventWantedToPost());
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#postErrorMessage(java.lang.String, java.lang.Object, boolean)
+	 */
+	public void postErrorMessage(String message, Object source, boolean postEvent) {
+		
+		if (postEvent) {
+			postEvent(ERROR, message, source);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
+	 *      postWarningMessage(java.lang.String, java.lang.Object)
+	 */
+	public void postWarningMessage(String message, Object source) {
+		postEvent(WARNING, message, source);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
+	 *      postInfoMessage(java.lang.String, java.lang.Object)
+	 */
+	public void postInfoMessage(String message, Object source) {
+		postEvent(INFO, message, source);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
+	 *      postAssertionFailed(java.lang.String, java.lang.Object)
+	 */
+	public void postAssertionFailed(String message, Object source) {
+		message = "Assertion failed. Reason: " //$NON-NLS-1$
+				+ message;
+		postEvent(ASSERT_NORMAL, message, source);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
+	 *      postCriticalAssertionFailed(java.lang.String, java.lang.Object)
+	 */
+	public void postCriticalAssertionFailed(String message, Object source) throws TraceCompilerException {
+		message = "Critical assertion failure, the project has been closed. Reason: " //$NON-NLS-1$
+				+ message;
+		// Closes the trace project and shows an error message
+		TraceCompilerEngineGlobals.getTraceCompiler().closeProject();
+		postEvent(ASSERT_CRITICAL, message, source);
+	}
+
+
+	/**
+	 * Print an event to console
+	 * @param type
+	 *            event type
+	 * @param message
+	 *            event message
+	 * @param source
+	 *            event source
+	 */
+	private void postEvent(int type, String message, Object source) {
+		switch (type) {
+		case INFO:
+				if (TraceCompilerGlobals.isVebose()) {
+					printEvent(type, message, source);
+
+					// This means that the component has been processed. Let's
+					// print one space to ensure that parse_mmp.pl will print
+					// out something.
+				} else if (message.contains(
+						"Dictionary File written")) { //$NON-NLS-1$
+					System.out.print(" "); //$NON-NLS-1$
+				} else if (!message
+						.contains("No files were written")) { //$NON-NLS-1$
+					// If we get "no files written" message, let's dismiss it ->
+					// parse_mmp.pl won't print out anything
+					printEvent(type, message, source);
+				}
+			break;
+		case WARNING:
+		case ERROR:
+		case ASSERT_NORMAL:
+		case ASSERT_CRITICAL:
+			printEvent(type, message, source);
+			break;
+		}		
+	}
+
+	/**
+	 * Prints event
+	 * @param type error type
+	 * @param message
+	 *            event message
+	 * @param source
+	 *            event source
+	 */
+	private void printEvent(int type, String message, Object source) {
+		if (message == null) {
+			message = Messages.getString("EventEngine.unknowError"); //$NON-NLS-1$
+		}
+		String fullMessage = ""; //$NON-NLS-1$
+
+		
+		if (source instanceof SourceLocationBase) {
+			SourceLocationBase location = (SourceLocationBase) source;
+			fullMessage = location.getFileName() + Messages.getString("EventEngine.lineNumberPrefix") + location.getLineNumber() + SourceConstants.COLON + SourceConstants.SPACE; //$NON-NLS-1$
+		} else if (source instanceof String) {
+			message = (String) source;
+		}
+		fullMessage = fullMessage + message;
+		
+		switch (type) {
+		case INFO:
+			TraceCompilerLogger.printInfo(fullMessage);
+			break;
+		case WARNING:
+		case ASSERT_NORMAL:
+			TraceCompilerLogger.printWarning(fullMessage);
+			break;
+		case ERROR:
+		case ASSERT_CRITICAL:
+			globalProcessingError = true;
+			TraceCompilerLogger.printError(fullMessage);
+			break;
+		default:
+			break;
+		}
+	}
+	
+
+}