tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/EventEngine.java
author hgs
Mon, 23 Aug 2010 15:29:36 +0300
changeset 41 838cdffd57ce
permissions -rw-r--r--
201031
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
* Implements TraceCompilerEvents to forward events to the event router plug-in
hgs
parents:
diff changeset
    17
*
hgs
parents:
diff changeset
    18
*/
hgs
parents:
diff changeset
    19
package com.nokia.tracecompiler.engine.event;
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
import com.nokia.tracecompiler.TraceCompilerGlobals;
hgs
parents:
diff changeset
    22
import com.nokia.tracecompiler.TraceCompilerLogger;
hgs
parents:
diff changeset
    23
import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
hgs
parents:
diff changeset
    24
import com.nokia.tracecompiler.engine.TraceCompilerEngineEvents;
hgs
parents:
diff changeset
    25
import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
hgs
parents:
diff changeset
    26
import com.nokia.tracecompiler.model.TraceCompilerException;
hgs
parents:
diff changeset
    27
import com.nokia.tracecompiler.model.TraceModel;
hgs
parents:
diff changeset
    28
import com.nokia.tracecompiler.source.SourceConstants;
hgs
parents:
diff changeset
    29
import com.nokia.tracecompiler.source.SourceLocationBase;
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
/**
hgs
parents:
diff changeset
    32
 * Implements TraceCompilerEvents to forward events to the event router plug-in
hgs
parents:
diff changeset
    33
 * 
hgs
parents:
diff changeset
    34
 */
hgs
parents:
diff changeset
    35
public final class EventEngine implements TraceCompilerEngineEvents {
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
	/**
hgs
parents:
diff changeset
    38
	 * Info event type
hgs
parents:
diff changeset
    39
	 */
hgs
parents:
diff changeset
    40
	public final static int INFO = 1; // CodForChk_Dis_Magic
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
	/**
hgs
parents:
diff changeset
    43
	 * Warning event type
hgs
parents:
diff changeset
    44
	 */
hgs
parents:
diff changeset
    45
	public final static int WARNING = 2; // CodForChk_Dis_Magic
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
	/**
hgs
parents:
diff changeset
    48
	 * Error event type
hgs
parents:
diff changeset
    49
	 */
hgs
parents:
diff changeset
    50
	public final static int ERROR = 3; // CodForChk_Dis_Magic
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
	/**
hgs
parents:
diff changeset
    53
	 * Critical assertion failure event type
hgs
parents:
diff changeset
    54
	 */
hgs
parents:
diff changeset
    55
	public final static int ASSERT_CRITICAL = 4; // CodForChk_Dis_Magic
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
	/**
hgs
parents:
diff changeset
    58
	 * Non-critical assertion failure event type
hgs
parents:
diff changeset
    59
	 */
hgs
parents:
diff changeset
    60
	public final static int ASSERT_NORMAL = 5; // CodForChk_Dis_Magic
hgs
parents:
diff changeset
    61
	
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
	/**
hgs
parents:
diff changeset
    64
	 * indicates if an error happened for all files
hgs
parents:
diff changeset
    65
	 */
hgs
parents:
diff changeset
    66
	private boolean globalProcessingError = false;
hgs
parents:
diff changeset
    67
	
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
	/**
hgs
parents:
diff changeset
    71
	 * Constructor
hgs
parents:
diff changeset
    72
	 * 
hgs
parents:
diff changeset
    73
	 * @param model
hgs
parents:
diff changeset
    74
	 *            the trace model
hgs
parents:
diff changeset
    75
	 */
hgs
parents:
diff changeset
    76
	public EventEngine(TraceModel model) {
hgs
parents:
diff changeset
    77
	}
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
	/**
hgs
parents:
diff changeset
    80
	 * check if an error happened
hgs
parents:
diff changeset
    81
	 * 
hgs
parents:
diff changeset
    82
	 * @return the error
hgs
parents:
diff changeset
    83
	 */
hgs
parents:
diff changeset
    84
	public boolean hasErrorHappened() {
hgs
parents:
diff changeset
    85
		return globalProcessingError;
hgs
parents:
diff changeset
    86
	}
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
	/*
hgs
parents:
diff changeset
    89
	 * (non-Javadoc)
hgs
parents:
diff changeset
    90
	 * 
hgs
parents:
diff changeset
    91
	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
hgs
parents:
diff changeset
    92
	 *      postError(com.nokia.tracecompiler.engine.TraceCompilerException)
hgs
parents:
diff changeset
    93
	 */
hgs
parents:
diff changeset
    94
	public void postError(TraceCompilerException exception) {
hgs
parents:
diff changeset
    95
		String message = TraceCompilerEngineErrorMessages.getErrorMessage(exception);
hgs
parents:
diff changeset
    96
		if (message != null && message.length() > 0) {
hgs
parents:
diff changeset
    97
			postErrorMessage(message, exception.getErrorSource(), exception.isEventWantedToPost());
hgs
parents:
diff changeset
    98
		}
hgs
parents:
diff changeset
    99
	}
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
	/*
hgs
parents:
diff changeset
   102
	 * (non-Javadoc)
hgs
parents:
diff changeset
   103
	 * 
hgs
parents:
diff changeset
   104
	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#postErrorMessage(java.lang.String, java.lang.Object, boolean)
hgs
parents:
diff changeset
   105
	 */
hgs
parents:
diff changeset
   106
	public void postErrorMessage(String message, Object source, boolean postEvent) {
hgs
parents:
diff changeset
   107
		
hgs
parents:
diff changeset
   108
		if (postEvent) {
hgs
parents:
diff changeset
   109
			postEvent(ERROR, message, source);
hgs
parents:
diff changeset
   110
		}
hgs
parents:
diff changeset
   111
	}
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
	/*
hgs
parents:
diff changeset
   114
	 * (non-Javadoc)
hgs
parents:
diff changeset
   115
	 * 
hgs
parents:
diff changeset
   116
	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
hgs
parents:
diff changeset
   117
	 *      postWarningMessage(java.lang.String, java.lang.Object)
hgs
parents:
diff changeset
   118
	 */
hgs
parents:
diff changeset
   119
	public void postWarningMessage(String message, Object source) {
hgs
parents:
diff changeset
   120
		postEvent(WARNING, message, source);
hgs
parents:
diff changeset
   121
	}
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
	/*
hgs
parents:
diff changeset
   124
	 * (non-Javadoc)
hgs
parents:
diff changeset
   125
	 * 
hgs
parents:
diff changeset
   126
	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
hgs
parents:
diff changeset
   127
	 *      postInfoMessage(java.lang.String, java.lang.Object)
hgs
parents:
diff changeset
   128
	 */
hgs
parents:
diff changeset
   129
	public void postInfoMessage(String message, Object source) {
hgs
parents:
diff changeset
   130
		postEvent(INFO, message, source);
hgs
parents:
diff changeset
   131
	}
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
	/*
hgs
parents:
diff changeset
   134
	 * (non-Javadoc)
hgs
parents:
diff changeset
   135
	 * 
hgs
parents:
diff changeset
   136
	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
hgs
parents:
diff changeset
   137
	 *      postAssertionFailed(java.lang.String, java.lang.Object)
hgs
parents:
diff changeset
   138
	 */
hgs
parents:
diff changeset
   139
	public void postAssertionFailed(String message, Object source) {
hgs
parents:
diff changeset
   140
		message = "Assertion failed. Reason: " //$NON-NLS-1$
hgs
parents:
diff changeset
   141
				+ message;
hgs
parents:
diff changeset
   142
		postEvent(ASSERT_NORMAL, message, source);
hgs
parents:
diff changeset
   143
	}
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
	/*
hgs
parents:
diff changeset
   146
	 * (non-Javadoc)
hgs
parents:
diff changeset
   147
	 * 
hgs
parents:
diff changeset
   148
	 * @see com.nokia.tracecompiler.engine.TraceCompilerEvents#
hgs
parents:
diff changeset
   149
	 *      postCriticalAssertionFailed(java.lang.String, java.lang.Object)
hgs
parents:
diff changeset
   150
	 */
hgs
parents:
diff changeset
   151
	public void postCriticalAssertionFailed(String message, Object source) throws TraceCompilerException {
hgs
parents:
diff changeset
   152
		message = "Critical assertion failure, the project has been closed. Reason: " //$NON-NLS-1$
hgs
parents:
diff changeset
   153
				+ message;
hgs
parents:
diff changeset
   154
		// Closes the trace project and shows an error message
hgs
parents:
diff changeset
   155
		TraceCompilerEngineGlobals.getTraceCompiler().closeProject();
hgs
parents:
diff changeset
   156
		postEvent(ASSERT_CRITICAL, message, source);
hgs
parents:
diff changeset
   157
	}
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
	/**
hgs
parents:
diff changeset
   161
	 * Print an event to console
hgs
parents:
diff changeset
   162
	 * @param type
hgs
parents:
diff changeset
   163
	 *            event type
hgs
parents:
diff changeset
   164
	 * @param message
hgs
parents:
diff changeset
   165
	 *            event message
hgs
parents:
diff changeset
   166
	 * @param source
hgs
parents:
diff changeset
   167
	 *            event source
hgs
parents:
diff changeset
   168
	 */
hgs
parents:
diff changeset
   169
	private void postEvent(int type, String message, Object source) {
hgs
parents:
diff changeset
   170
		switch (type) {
hgs
parents:
diff changeset
   171
		case INFO:
hgs
parents:
diff changeset
   172
				if (TraceCompilerGlobals.isVebose()) {
hgs
parents:
diff changeset
   173
					printEvent(type, message, source);
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
					// This means that the component has been processed. Let's
hgs
parents:
diff changeset
   176
					// print one space to ensure that parse_mmp.pl will print
hgs
parents:
diff changeset
   177
					// out something.
hgs
parents:
diff changeset
   178
				} else if (message.contains(
hgs
parents:
diff changeset
   179
						"Dictionary File written")) { //$NON-NLS-1$
hgs
parents:
diff changeset
   180
					System.out.print(" "); //$NON-NLS-1$
hgs
parents:
diff changeset
   181
				} else if (!message
hgs
parents:
diff changeset
   182
						.contains("No files were written")) { //$NON-NLS-1$
hgs
parents:
diff changeset
   183
					// If we get "no files written" message, let's dismiss it ->
hgs
parents:
diff changeset
   184
					// parse_mmp.pl won't print out anything
hgs
parents:
diff changeset
   185
					printEvent(type, message, source);
hgs
parents:
diff changeset
   186
				}
hgs
parents:
diff changeset
   187
			break;
hgs
parents:
diff changeset
   188
		case WARNING:
hgs
parents:
diff changeset
   189
		case ERROR:
hgs
parents:
diff changeset
   190
		case ASSERT_NORMAL:
hgs
parents:
diff changeset
   191
		case ASSERT_CRITICAL:
hgs
parents:
diff changeset
   192
			printEvent(type, message, source);
hgs
parents:
diff changeset
   193
			break;
hgs
parents:
diff changeset
   194
		}		
hgs
parents:
diff changeset
   195
	}
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
	/**
hgs
parents:
diff changeset
   198
	 * Prints event
hgs
parents:
diff changeset
   199
	 * @param type error type
hgs
parents:
diff changeset
   200
	 * @param message
hgs
parents:
diff changeset
   201
	 *            event message
hgs
parents:
diff changeset
   202
	 * @param source
hgs
parents:
diff changeset
   203
	 *            event source
hgs
parents:
diff changeset
   204
	 */
hgs
parents:
diff changeset
   205
	private void printEvent(int type, String message, Object source) {
hgs
parents:
diff changeset
   206
		if (message == null) {
hgs
parents:
diff changeset
   207
			message = Messages.getString("EventEngine.unknowError"); //$NON-NLS-1$
hgs
parents:
diff changeset
   208
		}
hgs
parents:
diff changeset
   209
		String fullMessage = ""; //$NON-NLS-1$
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
		
hgs
parents:
diff changeset
   212
		if (source instanceof SourceLocationBase) {
hgs
parents:
diff changeset
   213
			SourceLocationBase location = (SourceLocationBase) source;
hgs
parents:
diff changeset
   214
			fullMessage = location.getFileName() + Messages.getString("EventEngine.lineNumberPrefix") + location.getLineNumber() + SourceConstants.COLON + SourceConstants.SPACE; //$NON-NLS-1$
hgs
parents:
diff changeset
   215
		} else if (source instanceof String) {
hgs
parents:
diff changeset
   216
			message = (String) source;
hgs
parents:
diff changeset
   217
		}
hgs
parents:
diff changeset
   218
		fullMessage = fullMessage + message;
hgs
parents:
diff changeset
   219
		
hgs
parents:
diff changeset
   220
		switch (type) {
hgs
parents:
diff changeset
   221
		case INFO:
hgs
parents:
diff changeset
   222
			TraceCompilerLogger.printInfo(fullMessage);
hgs
parents:
diff changeset
   223
			break;
hgs
parents:
diff changeset
   224
		case WARNING:
hgs
parents:
diff changeset
   225
		case ASSERT_NORMAL:
hgs
parents:
diff changeset
   226
			TraceCompilerLogger.printWarning(fullMessage);
hgs
parents:
diff changeset
   227
			break;
hgs
parents:
diff changeset
   228
		case ERROR:
hgs
parents:
diff changeset
   229
		case ASSERT_CRITICAL:
hgs
parents:
diff changeset
   230
			globalProcessingError = true;
hgs
parents:
diff changeset
   231
			TraceCompilerLogger.printError(fullMessage);
hgs
parents:
diff changeset
   232
			break;
hgs
parents:
diff changeset
   233
		default:
hgs
parents:
diff changeset
   234
			break;
hgs
parents:
diff changeset
   235
		}
hgs
parents:
diff changeset
   236
	}
hgs
parents:
diff changeset
   237
	
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
}