tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/plugin/PluginEngine.java
author hgs
Fri, 08 Oct 2010 14:56:39 +0300
changeset 56 aa2539c91954
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2007 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
* Export plugin manager, which delegates calls to plug-ins
hgs
parents:
diff changeset
    17
*
hgs
parents:
diff changeset
    18
*/
hgs
parents:
diff changeset
    19
package com.nokia.tracecompiler.engine.plugin;
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
import java.util.ArrayList;
hgs
parents:
diff changeset
    22
import java.util.Iterator;
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
import com.nokia.tracecompiler.engine.TraceCompilerEngineBase;
hgs
parents:
diff changeset
    25
import com.nokia.tracecompiler.engine.TraceCompilerEngineConfiguration;
hgs
parents:
diff changeset
    26
import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorMessages;
hgs
parents:
diff changeset
    27
import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
hgs
parents:
diff changeset
    28
import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
hgs
parents:
diff changeset
    29
import com.nokia.tracecompiler.model.TraceCompilerException;
hgs
parents:
diff changeset
    30
import com.nokia.tracecompiler.model.TraceModel;
hgs
parents:
diff changeset
    31
import com.nokia.tracecompiler.model.TraceObjectPropertyVerifier;
hgs
parents:
diff changeset
    32
import com.nokia.tracecompiler.plugin.TraceAPIPlugin;
hgs
parents:
diff changeset
    33
import com.nokia.tracecompiler.plugin.TraceCompilerExport;
hgs
parents:
diff changeset
    34
import com.nokia.tracecompiler.plugin.TraceCompilerPlugin;
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
/**
hgs
parents:
diff changeset
    37
 * Plugin engine, which delegates calls to plug-ins
hgs
parents:
diff changeset
    38
 * 
hgs
parents:
diff changeset
    39
 */
hgs
parents:
diff changeset
    40
public final class PluginEngine extends TraceCompilerEngineBase {
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
	/**
hgs
parents:
diff changeset
    43
	 * List of plug-ins
hgs
parents:
diff changeset
    44
	 */
hgs
parents:
diff changeset
    45
	private ArrayList<TraceCompilerPlugin> plugins = new ArrayList<TraceCompilerPlugin>();
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
	/**
hgs
parents:
diff changeset
    48
	 * Property verifier
hgs
parents:
diff changeset
    49
	 */
hgs
parents:
diff changeset
    50
	private PluginTracePropertyVerifier verifier = new PluginTracePropertyVerifier(
hgs
parents:
diff changeset
    51
			this);
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
	/**
hgs
parents:
diff changeset
    54
	 * Trace model
hgs
parents:
diff changeset
    55
	 */
hgs
parents:
diff changeset
    56
	private TraceModel model;
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
	/**
hgs
parents:
diff changeset
    59
	 * Project open flag
hgs
parents:
diff changeset
    60
	 */
hgs
parents:
diff changeset
    61
	private boolean projectOpen;
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
	/**
hgs
parents:
diff changeset
    64
	 * Sets the trace model. This is not set in constructor, since plug-in
hgs
parents:
diff changeset
    65
	 * engine is created before the model
hgs
parents:
diff changeset
    66
	 * 
hgs
parents:
diff changeset
    67
	 * @param model
hgs
parents:
diff changeset
    68
	 *            the trace model
hgs
parents:
diff changeset
    69
	 */
hgs
parents:
diff changeset
    70
	public void setModel(TraceModel model) {
hgs
parents:
diff changeset
    71
		this.model = model;
hgs
parents:
diff changeset
    72
	}
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
	/**
hgs
parents:
diff changeset
    75
	 * Gets the started flag
hgs
parents:
diff changeset
    76
	 * 
hgs
parents:
diff changeset
    77
	 * @return true if started, false if not
hgs
parents:
diff changeset
    78
	 */
hgs
parents:
diff changeset
    79
	public boolean isProjectOpen() {
hgs
parents:
diff changeset
    80
		return projectOpen;
hgs
parents:
diff changeset
    81
	}
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
	/**
hgs
parents:
diff changeset
    84
	 * Adds a plugin
hgs
parents:
diff changeset
    85
	 * 
hgs
parents:
diff changeset
    86
	 * @param plugin
hgs
parents:
diff changeset
    87
	 *            the plugin to be added
hgs
parents:
diff changeset
    88
	 */
hgs
parents:
diff changeset
    89
	public void add(TraceCompilerPlugin plugin) {
hgs
parents:
diff changeset
    90
		plugins.add(plugin);
hgs
parents:
diff changeset
    91
		if (plugin instanceof TraceAPIPlugin) {
hgs
parents:
diff changeset
    92
			TraceAPIPlugin api = (TraceAPIPlugin) plugin;
hgs
parents:
diff changeset
    93
			TraceAPIPluginManager manager = model
hgs
parents:
diff changeset
    94
					.getExtension(TraceAPIPluginManager.class);
hgs
parents:
diff changeset
    95
			manager.addFormatters(api.getFormatters());
hgs
parents:
diff changeset
    96
			manager.addParsers(api.getParsers());
hgs
parents:
diff changeset
    97
		}
hgs
parents:
diff changeset
    98
	}
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
	/**
hgs
parents:
diff changeset
   101
	 * Removes a plugin
hgs
parents:
diff changeset
   102
	 * 
hgs
parents:
diff changeset
   103
	 * @param plugin
hgs
parents:
diff changeset
   104
	 *            the plugin to be removed
hgs
parents:
diff changeset
   105
	 */
hgs
parents:
diff changeset
   106
	public void remove(TraceCompilerPlugin plugin) {
hgs
parents:
diff changeset
   107
		// Formatters / parsers are not removed. Currently this is not a
hgs
parents:
diff changeset
   108
		// problem since plug-in's are removed only on shutdown
hgs
parents:
diff changeset
   109
		plugins.remove(plugin);
hgs
parents:
diff changeset
   110
	}
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
	/**
hgs
parents:
diff changeset
   113
	 * Gets the property verifier interface
hgs
parents:
diff changeset
   114
	 * 
hgs
parents:
diff changeset
   115
	 * @return the verifier
hgs
parents:
diff changeset
   116
	 */
hgs
parents:
diff changeset
   117
	public TraceObjectPropertyVerifier getVerifier() {
hgs
parents:
diff changeset
   118
		return verifier;
hgs
parents:
diff changeset
   119
	}
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
	/**
hgs
parents:
diff changeset
   122
	 * Checks if there are plug-ins
hgs
parents:
diff changeset
   123
	 * 
hgs
parents:
diff changeset
   124
	 * @return true if plug-ins exist
hgs
parents:
diff changeset
   125
	 */
hgs
parents:
diff changeset
   126
	public boolean hasPlugins() {
hgs
parents:
diff changeset
   127
		return !plugins.isEmpty();
hgs
parents:
diff changeset
   128
	}
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
	/**
hgs
parents:
diff changeset
   131
	 * Gets the plug-ins
hgs
parents:
diff changeset
   132
	 * 
hgs
parents:
diff changeset
   133
	 * @return the plug-ins
hgs
parents:
diff changeset
   134
	 */
hgs
parents:
diff changeset
   135
	Iterator<TraceCompilerPlugin> getPlugins() {
hgs
parents:
diff changeset
   136
		return plugins.iterator();
hgs
parents:
diff changeset
   137
	}
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
	/* (non-Javadoc)
hgs
parents:
diff changeset
   140
	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngineBase#exportProject()
hgs
parents:
diff changeset
   141
	 */
hgs
parents:
diff changeset
   142
	@Override
hgs
parents:
diff changeset
   143
	public void exportProject() throws TraceCompilerException {
hgs
parents:
diff changeset
   144
		if (model.hasTraces()) {
hgs
parents:
diff changeset
   145
			for (TraceCompilerPlugin plugin : plugins) {
hgs
parents:
diff changeset
   146
				if (plugin instanceof TraceCompilerExport) {
hgs
parents:
diff changeset
   147
					try {
hgs
parents:
diff changeset
   148
						((TraceCompilerExport) plugin).exportTraceProject();
hgs
parents:
diff changeset
   149
					} catch (TraceCompilerException e) {
hgs
parents:
diff changeset
   150
						TraceCompilerEngineGlobals.getEvents().postError(e);
hgs
parents:
diff changeset
   151
							throw e;
hgs
parents:
diff changeset
   152
					}
hgs
parents:
diff changeset
   153
				}
hgs
parents:
diff changeset
   154
			}
hgs
parents:
diff changeset
   155
		} else {
hgs
parents:
diff changeset
   156
			TraceCompilerEngineGlobals.getEvents().postInfoMessage(
hgs
parents:
diff changeset
   157
					TraceCompilerEngineErrorMessages.getErrorMessage(
hgs
parents:
diff changeset
   158
							TraceCompilerErrorCode.NO_TRACES_TO_EXPORT, null),
hgs
parents:
diff changeset
   159
					null);
hgs
parents:
diff changeset
   160
		}
hgs
parents:
diff changeset
   161
	}
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
	/*
hgs
parents:
diff changeset
   164
	 * (non-Javadoc)
hgs
parents:
diff changeset
   165
	 * 
hgs
parents:
diff changeset
   166
	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#projectOpened()
hgs
parents:
diff changeset
   167
	 */
hgs
parents:
diff changeset
   168
	@Override
hgs
parents:
diff changeset
   169
	public void projectOpened() {
hgs
parents:
diff changeset
   170
		if (!projectOpen) {
hgs
parents:
diff changeset
   171
			for (TraceCompilerPlugin plugin : plugins) {
hgs
parents:
diff changeset
   172
				plugin.traceProjectOpened(model);
hgs
parents:
diff changeset
   173
			}
hgs
parents:
diff changeset
   174
			projectOpen = true;
hgs
parents:
diff changeset
   175
		} else {
hgs
parents:
diff changeset
   176
			if (TraceCompilerEngineConfiguration.ASSERTIONS_ENABLED) {
hgs
parents:
diff changeset
   177
				TraceCompilerEngineGlobals.getEvents().postAssertionFailed(
hgs
parents:
diff changeset
   178
						"PluginEngine.traceProjectOpened", null); //$NON-NLS-1$
hgs
parents:
diff changeset
   179
			}
hgs
parents:
diff changeset
   180
		}
hgs
parents:
diff changeset
   181
	}
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
	/*
hgs
parents:
diff changeset
   184
	 * (non-Javadoc)
hgs
parents:
diff changeset
   185
	 * 
hgs
parents:
diff changeset
   186
	 * @see com.nokia.tracecompiler.engine.TraceCompilerEngine#projectClosing()
hgs
parents:
diff changeset
   187
	 */
hgs
parents:
diff changeset
   188
	@Override
hgs
parents:
diff changeset
   189
	public void projectClosed() {
hgs
parents:
diff changeset
   190
		if (projectOpen) {
hgs
parents:
diff changeset
   191
			for (TraceCompilerPlugin plugin : plugins) {
hgs
parents:
diff changeset
   192
				plugin.traceProjectClosed();
hgs
parents:
diff changeset
   193
			}
hgs
parents:
diff changeset
   194
			projectOpen = false;
hgs
parents:
diff changeset
   195
		}
hgs
parents:
diff changeset
   196
	}
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
}