tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerModelListener.java
author hgs
Fri, 08 Oct 2010 14:56:39 +0300
changeset 56 aa2539c91954
parent 41 tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompilerModelListener.java@838cdffd57ce
permissions -rw-r--r--
201041
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
 * Model extension listener for console UI
hgs
parents:
diff changeset
    17
 *
hgs
parents:
diff changeset
    18
 */
hgs
parents:
diff changeset
    19
package com.nokia.tracecompiler;
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
import java.util.ArrayList;
hgs
parents:
diff changeset
    22
import java.util.Collections;
hgs
parents:
diff changeset
    23
import java.util.Comparator;
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
hgs
parents:
diff changeset
    26
import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
hgs
parents:
diff changeset
    27
import com.nokia.tracecompiler.engine.TraceLocation;
hgs
parents:
diff changeset
    28
import com.nokia.tracecompiler.engine.TraceLocationList;
hgs
parents:
diff changeset
    29
import com.nokia.tracecompiler.engine.TraceLocationListListener;
hgs
parents:
diff changeset
    30
import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
hgs
parents:
diff changeset
    31
import com.nokia.tracecompiler.model.TraceModelExtension;
hgs
parents:
diff changeset
    32
import com.nokia.tracecompiler.model.TraceModelExtensionListener;
hgs
parents:
diff changeset
    33
import com.nokia.tracecompiler.model.TraceModelListener;
hgs
parents:
diff changeset
    34
import com.nokia.tracecompiler.model.TraceObject;
hgs
parents:
diff changeset
    35
import com.nokia.tracecompiler.model.TraceProcessingListener;
hgs
parents:
diff changeset
    36
import com.nokia.tracecompiler.source.SourceConstants;
hgs
parents:
diff changeset
    37
import com.nokia.tracecompiler.source.SourceLocationListener;
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
/**
hgs
parents:
diff changeset
    40
 * Model extension listener for TraceCompiler UI
hgs
parents:
diff changeset
    41
 * 
hgs
parents:
diff changeset
    42
 */
hgs
parents:
diff changeset
    43
final class TraceCompilerModelListener implements TraceModelListener,
hgs
parents:
diff changeset
    44
		TraceModelExtensionListener, TraceLocationListListener,
hgs
parents:
diff changeset
    45
		SourceLocationListener, TraceProcessingListener {
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
	/**
hgs
parents:
diff changeset
    48
	 * List of errors for a source
hgs
parents:
diff changeset
    49
	 */
hgs
parents:
diff changeset
    50
	private ArrayList<TraceLocation> errorList = new ArrayList<TraceLocation>();
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
	/**
hgs
parents:
diff changeset
    53
	 * Name of the file being processed
hgs
parents:
diff changeset
    54
	 */
hgs
parents:
diff changeset
    55
	private String currentFileName;
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
	/*
hgs
parents:
diff changeset
    58
	 * (non-Javadoc)
hgs
parents:
diff changeset
    59
	 * 
hgs
parents:
diff changeset
    60
	 * @see com.nokia.tracecompiler.model.TraceModelListener#
hgs
parents:
diff changeset
    61
	 * objectAdded(com.nokia.tracecompiler.model.TraceObject,
hgs
parents:
diff changeset
    62
	 * com.nokia.tracecompiler.model.TraceObject)
hgs
parents:
diff changeset
    63
	 */
hgs
parents:
diff changeset
    64
	public void objectAdded(TraceObject owner, TraceObject object) {
hgs
parents:
diff changeset
    65
	}
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
	/*
hgs
parents:
diff changeset
    68
	 * (non-Javadoc)
hgs
parents:
diff changeset
    69
	 * 
hgs
parents:
diff changeset
    70
	 * @see com.nokia.tracecompiler.model.TraceModelListener#
hgs
parents:
diff changeset
    71
	 * objectCreationComplete(com.nokia.tracecompiler.model.TraceObject)
hgs
parents:
diff changeset
    72
	 */
hgs
parents:
diff changeset
    73
	public void objectCreationComplete(TraceObject object) {
hgs
parents:
diff changeset
    74
	}
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
	/*
hgs
parents:
diff changeset
    77
	 * (non-Javadoc)
hgs
parents:
diff changeset
    78
	 * 
hgs
parents:
diff changeset
    79
	 * @see com.nokia.tracecompiler.model.TraceModelListener#
hgs
parents:
diff changeset
    80
	 * objectRemoved(com.nokia.tracecompiler.model.TraceObject,
hgs
parents:
diff changeset
    81
	 * com.nokia.tracecompiler.model.TraceObject)
hgs
parents:
diff changeset
    82
	 */
hgs
parents:
diff changeset
    83
	public void objectRemoved(TraceObject owner, TraceObject object) {
hgs
parents:
diff changeset
    84
	}
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
	/*
hgs
parents:
diff changeset
    87
	 * (non-Javadoc)
hgs
parents:
diff changeset
    88
	 * 
hgs
parents:
diff changeset
    89
	 * @see com.nokia.tracecompiler.model.TraceModelListener#
hgs
parents:
diff changeset
    90
	 * propertyUpdated(com.nokia.tracecompiler.model.TraceObject, int)
hgs
parents:
diff changeset
    91
	 */
hgs
parents:
diff changeset
    92
	public void propertyUpdated(TraceObject object, int property) {
hgs
parents:
diff changeset
    93
	}
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
	/*
hgs
parents:
diff changeset
    96
	 * (non-Javadoc)
hgs
parents:
diff changeset
    97
	 * 
hgs
parents:
diff changeset
    98
	 * @see com.nokia.tracecompiler.model.TraceModelExtensionListener#
hgs
parents:
diff changeset
    99
	 * extensionAdded(com.nokia.tracecompiler.model.TraceObject,
hgs
parents:
diff changeset
   100
	 * com.nokia.tracecompiler.model.TraceModelExtension)
hgs
parents:
diff changeset
   101
	 */
hgs
parents:
diff changeset
   102
	public void extensionAdded(TraceObject object, TraceModelExtension extension) {
hgs
parents:
diff changeset
   103
		if (extension instanceof TraceLocationList) {
hgs
parents:
diff changeset
   104
			((TraceLocationList) extension).addLocationListListener(this);
hgs
parents:
diff changeset
   105
		}
hgs
parents:
diff changeset
   106
	}
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
	/*
hgs
parents:
diff changeset
   109
	 * (non-Javadoc)
hgs
parents:
diff changeset
   110
	 * 
hgs
parents:
diff changeset
   111
	 * @see com.nokia.tracecompiler.model.TraceModelExtensionListener#
hgs
parents:
diff changeset
   112
	 * extensionRemoved(com.nokia.tracecompiler.model.TraceObject,
hgs
parents:
diff changeset
   113
	 * com.nokia.tracecompiler.model.TraceModelExtension)
hgs
parents:
diff changeset
   114
	 */
hgs
parents:
diff changeset
   115
	public void extensionRemoved(TraceObject object,
hgs
parents:
diff changeset
   116
			TraceModelExtension extension) {
hgs
parents:
diff changeset
   117
		if (extension instanceof TraceLocationList) {
hgs
parents:
diff changeset
   118
			((TraceLocationList) extension).removeLocationListListener(this);
hgs
parents:
diff changeset
   119
		}
hgs
parents:
diff changeset
   120
	}
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
	/*
hgs
parents:
diff changeset
   123
	 * (non-Javadoc)
hgs
parents:
diff changeset
   124
	 * 
hgs
parents:
diff changeset
   125
	 * @see com.nokia.tracecompiler.source.TraceLocationListListener#
hgs
parents:
diff changeset
   126
	 * locationAdded(com.nokia.tracecompiler.engine.TraceLocation)
hgs
parents:
diff changeset
   127
	 */
hgs
parents:
diff changeset
   128
	public void locationAdded(TraceLocation location) {
hgs
parents:
diff changeset
   129
		location.addLocationListener(this);
hgs
parents:
diff changeset
   130
	}
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
	/*
hgs
parents:
diff changeset
   133
	 * (non-Javadoc)
hgs
parents:
diff changeset
   134
	 * 
hgs
parents:
diff changeset
   135
	 * @see com.nokia.tracecompiler.source.TraceLocationListListener#
hgs
parents:
diff changeset
   136
	 * locationRemoved(com.nokia.tracecompiler.engine.TraceLocation)
hgs
parents:
diff changeset
   137
	 */
hgs
parents:
diff changeset
   138
	public void locationRemoved(TraceLocation location) {
hgs
parents:
diff changeset
   139
		location.removeLocationListener(this);
hgs
parents:
diff changeset
   140
	}
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
	/*
hgs
parents:
diff changeset
   143
	 * (non-Javadoc)
hgs
parents:
diff changeset
   144
	 * 
hgs
parents:
diff changeset
   145
	 * @see com.nokia.tracecompiler.source.SourceLocationListener#
hgs
parents:
diff changeset
   146
	 * locationValidityChanged(com.nokia.tracecompiler.engine.TraceLocation)
hgs
parents:
diff changeset
   147
	 */
hgs
parents:
diff changeset
   148
	public void locationValidityChanged(TraceLocation location) {
hgs
parents:
diff changeset
   149
		String fileName = location.getFileName();
hgs
parents:
diff changeset
   150
		if (currentFileName != null) {
hgs
parents:
diff changeset
   151
			if (!fileName.equals(currentFileName)) {
hgs
parents:
diff changeset
   152
				currentFileName = fileName;
hgs
parents:
diff changeset
   153
				printLocationErrors();
hgs
parents:
diff changeset
   154
			}
hgs
parents:
diff changeset
   155
		} else {
hgs
parents:
diff changeset
   156
			currentFileName = fileName;
hgs
parents:
diff changeset
   157
		}
hgs
parents:
diff changeset
   158
		TraceCompilerErrorCode code = location.getValidityCode();
hgs
parents:
diff changeset
   159
		if (code != TraceCompilerErrorCode.OK
hgs
parents:
diff changeset
   160
				&& code != TraceCompilerErrorCode.TRACE_DOES_NOT_EXIST) {
hgs
parents:
diff changeset
   161
			if (!errorList.contains(location)) {
hgs
parents:
diff changeset
   162
				errorList.add(location);
hgs
parents:
diff changeset
   163
				location.reference();
hgs
parents:
diff changeset
   164
			}
hgs
parents:
diff changeset
   165
		} else {
hgs
parents:
diff changeset
   166
			if (errorList.remove(location)) {
hgs
parents:
diff changeset
   167
				location.dereference();
hgs
parents:
diff changeset
   168
			}
hgs
parents:
diff changeset
   169
		}
hgs
parents:
diff changeset
   170
	}
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
	/**
hgs
parents:
diff changeset
   173
	 * Prints the errors from the error list
hgs
parents:
diff changeset
   174
	 */
hgs
parents:
diff changeset
   175
	void printLocationErrors() {
hgs
parents:
diff changeset
   176
		Collections.sort(errorList, new Comparator<TraceLocation>() {
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
			/**
hgs
parents:
diff changeset
   179
			 * Sorts the array by line number
hgs
parents:
diff changeset
   180
			 * 
hgs
parents:
diff changeset
   181
			 * @param o1
hgs
parents:
diff changeset
   182
			 *            location 1
hgs
parents:
diff changeset
   183
			 * @param o2
hgs
parents:
diff changeset
   184
			 *            location 2
hgs
parents:
diff changeset
   185
			 * @return the result
hgs
parents:
diff changeset
   186
			 */
hgs
parents:
diff changeset
   187
			public int compare(TraceLocation o1, TraceLocation o2) {
hgs
parents:
diff changeset
   188
				int line1 = o1.getLineNumber();
hgs
parents:
diff changeset
   189
				int line2 = o2.getLineNumber();
hgs
parents:
diff changeset
   190
				return line1 > line2 ? 1 : line1 == line2 ? 0 : -1;
hgs
parents:
diff changeset
   191
			}
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
		});
hgs
parents:
diff changeset
   194
		for (TraceLocation location : errorList) {
hgs
parents:
diff changeset
   195
			printLocationError(location);
hgs
parents:
diff changeset
   196
		}
hgs
parents:
diff changeset
   197
		errorList.clear();
hgs
parents:
diff changeset
   198
	}
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
	/**
hgs
parents:
diff changeset
   201
	 * Prints a location error
hgs
parents:
diff changeset
   202
	 * 
hgs
parents:
diff changeset
   203
	 * @param location
hgs
parents:
diff changeset
   204
	 *            the location
hgs
parents:
diff changeset
   205
	 */
hgs
parents:
diff changeset
   206
	private void printLocationError(TraceLocation location) {
hgs
parents:
diff changeset
   207
		TraceCompilerEngineGlobals.getEvents().postErrorMessage(
hgs
parents:
diff changeset
   208
				location.getFileName()
hgs
parents:
diff changeset
   209
						+ Messages.getString("TraceCompilerModelListener.lineNumberPrefix") //$NON-NLS-1$
hgs
parents:
diff changeset
   210
						+ location.getLineNumber()
hgs
parents:
diff changeset
   211
						+ SourceConstants.COLON
hgs
parents:
diff changeset
   212
						+ SourceConstants.SPACE
hgs
parents:
diff changeset
   213
						+ TraceCompilerEngineErrorMessages.getErrorMessage(
hgs
parents:
diff changeset
   214
								location.getValidityCode(), location
hgs
parents:
diff changeset
   215
										.getValidityParameters()), null, true);
hgs
parents:
diff changeset
   216
	}
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
	/**
hgs
parents:
diff changeset
   219
	 * get list of cumulated erros.
hgs
parents:
diff changeset
   220
	 * 
hgs
parents:
diff changeset
   221
	 * @return list of TaceLocaion
hgs
parents:
diff changeset
   222
	 */
hgs
parents:
diff changeset
   223
	public ArrayList<TraceLocation> getErrors() {
hgs
parents:
diff changeset
   224
		return errorList;
hgs
parents:
diff changeset
   225
	}
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
	/*
hgs
parents:
diff changeset
   228
	 * (non-Javadoc)
hgs
parents:
diff changeset
   229
	 * 
hgs
parents:
diff changeset
   230
	 * @see
hgs
parents:
diff changeset
   231
	 * com.nokia.tracecompiler.model.TraceProcessingListener#processingComplete
hgs
parents:
diff changeset
   232
	 * (boolean)
hgs
parents:
diff changeset
   233
	 */
hgs
parents:
diff changeset
   234
	public void processingComplete(boolean changed) {
hgs
parents:
diff changeset
   235
		printLocationErrors();
hgs
parents:
diff changeset
   236
	}
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
	/*
hgs
parents:
diff changeset
   239
	 * (non-Javadoc)
hgs
parents:
diff changeset
   240
	 * 
hgs
parents:
diff changeset
   241
	 * @see
hgs
parents:
diff changeset
   242
	 * com.nokia.tracecompiler.model.TraceProcessingListener#processingStarted()
hgs
parents:
diff changeset
   243
	 */
hgs
parents:
diff changeset
   244
	public void processingStarted() {
hgs
parents:
diff changeset
   245
	}
hgs
parents:
diff changeset
   246
}