tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceEngine.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/source/SourceEngine.java Fri Oct 08 14:56:39 2010 +0300
@@ -0,0 +1,220 @@
+/*
+* Copyright (c) 2008 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:
+*
+* Source engine manages source documents that are opened to Eclipse UI
+*
+*/
+package com.nokia.tracecompiler.engine.source;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.nokia.tracecompiler.model.TraceCompilerException;
+import com.nokia.tracecompiler.model.TraceModel;
+import com.nokia.tracecompiler.source.SourceDocumentInterface;
+import com.nokia.tracecompiler.source.SourceDocumentMonitor;
+import com.nokia.tracecompiler.source.SourceDocumentProcessor;
+import com.nokia.tracecompiler.utils.DocumentFactory;
+
+/**
+ * Source engine manages source documents that are opened to Eclipse UI.
+ *
+ */
+public class SourceEngine implements SourceDocumentProcessor,
+ Iterable<SourceProperties> {
+
+ /**
+ * Document monitor
+ */
+ private SourceDocumentMonitor documentMonitor;
+
+ /**
+ * Trace model listener implementation
+ */
+ private SourceEngineModelListener modelListener = new SourceEngineModelListener(
+ this);
+
+ /**
+ * Trace model extension listener
+ */
+ private SourceEngineModelExtensionListener extensionListener = new SourceEngineModelExtensionListener(
+ this);
+
+ /**
+ * The callback interfaces are notified about source file changes
+ */
+ private ArrayList<SourceListener> listeners = new ArrayList<SourceListener>();
+
+ /**
+ * Running flag
+ */
+ private boolean running;
+
+ /**
+ * Trace model
+ */
+ private TraceModel model;
+
+ /**
+ * Source list
+ */
+ private ArrayList<SourceProperties> tempList = new ArrayList<SourceProperties>();
+
+ /**
+ * Read-only files
+ */
+ private String[] READ_ONLY = { ".h" //$NON-NLS-1$
+ };
+
+ /**
+ * Non-source file list
+ */
+ private ArrayList<String> nonSourceFiles = new ArrayList<String>();
+
+ /**
+ * Constructor
+ *
+ * @param model
+ * the trace model
+ */
+ public SourceEngine(TraceModel model) {
+ this.model = model;
+ }
+
+ /**
+ * Starts this engine. Does nothing if already running
+ * @throws Exception
+ */
+ public void start() throws Exception {
+ if (!running) {
+ documentMonitor = DocumentFactory.getDocumentMonitor();
+ documentMonitor.startMonitor(this);
+ running = true;
+ model.addModelListener(modelListener);
+ model.addExtensionListener(extensionListener);
+ }
+ }
+
+ /**
+ * Shuts down the source engine. Does nothing if already stopped
+ */
+ public void shutdown() {
+ if (running) {
+ documentMonitor.stopMonitor();
+ documentMonitor = null;
+ running = false;
+ model.removeModelListener(modelListener);
+ model.removeExtensionListener(extensionListener);
+ }
+ }
+
+ /**
+ * Adds source listener callback interface
+ *
+ * @param listener
+ * the new listener
+ */
+ public void addSourceListener(SourceListener listener) {
+ listeners.add(listener);
+ }
+
+ /**
+ * Removes a source listener
+ *
+ * @param listener
+ * the listener to be removed
+ */
+ public void removeSourceListener(SourceListener listener) {
+ listeners.remove(listener);
+ }
+
+ /**
+ * Gets the sources
+ *
+ * @return the sources
+ */
+ public Iterator<SourceProperties> getSources() {
+ tempList.clear();
+ for (SourceDocumentInterface doc : documentMonitor) {
+ tempList.add((SourceProperties) doc.getOwner());
+ }
+ return tempList.iterator();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Iterable#iterator()
+ */
+ public Iterator<SourceProperties> iterator() {
+ return getSources();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.nokia.tracecompiler.source.SourceDocumentProcessor#
+ * sourceOpened(com.nokia.tracecompiler.source.SourceDocumentInterface)
+ */
+ public void sourceOpened(SourceDocumentInterface source) throws TraceCompilerException {
+ SourceProperties properties = new SourceProperties(model,
+ documentMonitor.getFactory(), source);
+ // Headers are marked read-only
+ for (String s : READ_ONLY) {
+ String fileName = properties.getFileName();
+ if (fileName != null && fileName.endsWith(s)) {
+ properties.setReadOnly(true);
+ break;
+ }
+ }
+ properties.sourceOpened();
+ source.setOwner(properties);
+ for (SourceListener l : listeners) {
+ l.sourceOpened(properties);
+ }
+ }
+
+ /**
+ * Adds a non-source file to this list.
+ *
+ * @param filePath
+ * the non-source file path to added
+ */
+ public void addNonSourceFile(String filePath) {
+ nonSourceFiles.add(filePath);
+ }
+
+ /**
+ * Removes a non-source file from this list
+ *
+ * @param filePath
+ * the non-source file path to be removed
+ * @return true if removed
+ */
+ public boolean removeNonSourceFile(String filePath) {
+ boolean retVal = nonSourceFiles.remove(filePath);
+ return retVal;
+ }
+
+ /**
+ * Gets list of non-source files
+ *
+ * @return the list of non-source file paths
+ */
+ public ArrayList<String> getNonSourceFiles() {
+ return nonSourceFiles;
+ }
+
+}