diff -r a151135b0cf9 -r aa2539c91954 tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/event/EventEngine.java --- /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; + } + } + + +}