sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/builder/SMTProcess.java
changeset 0 522a326673b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/builder/SMTProcess.java	Thu Mar 11 19:08:43 2010 +0200
@@ -0,0 +1,120 @@
+// Copyright (c) 2008-2009 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:
+//
+
+package com.symbian.smt.gui.builder;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.util.List;
+
+import org.eclipse.swt.widgets.Display;
+
+import com.symbian.smt.gui.Logger;
+import com.symbian.smt.gui.views.ConsoleOutput;
+
+public class SMTProcess {
+
+	/**
+	 * Runs the command line base System Model Generator
+	 * 
+	 * @param List
+	 *            <String> Arguments for the CLI
+	 * @return int The exit code from the System Model Generator
+	 */
+	public int run(List<String> command) {
+		int result = 0;
+
+		// Reset the console
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				ConsoleOutput.reset();
+
+			}
+		});
+
+		// Print the command line string to the console output
+		StringBuilder commandLineString = new StringBuilder();
+
+		for (String item : command) {
+			commandLineString.append(item.concat(" "));
+		}
+
+		writeToConsoleOutput("Executing '" + commandLineString.toString() + "'");
+
+		// First we check that Perl is available
+		ProcessBuilder pbCheckPerl = new ProcessBuilder("perl", "-v");
+		pbCheckPerl.redirectErrorStream(true);
+
+		try {
+			pbCheckPerl.start();
+		} catch (IOException e) {
+			writeToConsoleOutput("Error: Perl is not installed");
+			return 9009; // Same exit code as Windows produces for a program not
+							// found
+		}
+
+		ProcessBuilder pb = new ProcessBuilder(command);
+
+		// Redirect STDERR to STDOUT
+		pb.redirectErrorStream(true);
+
+		try {
+			// Start the process
+			final Process p = pb.start();
+
+			// Get and close the process STDIN
+			OutputStream out = p.getOutputStream();
+			out.close();
+
+			// Create a reader to read from the process STDOUT
+			BufferedReader inReader = new BufferedReader(new InputStreamReader(
+					p.getInputStream()));
+
+			// Print STDOUT to the command output view
+			String line;
+			while ((line = inReader.readLine()) != null) {
+				writeToConsoleOutput(line);
+			}
+
+			// Close the process STDOUT pipe when finished
+			inReader.close();
+
+			try {
+				// Ensure the process has finished and get the exit code
+				result = p.waitFor();
+			} catch (InterruptedException e) {
+				Logger.log(e.getMessage(), e);
+			} finally {
+				// Destroy the process
+				p.destroy();
+			}
+		} catch (IOException e) {
+			Logger.log(e.getMessage(), e);
+		}
+
+		return result;
+
+	}
+
+	private void writeToConsoleOutput(final String string) {
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				ConsoleOutput.addText(string);
+			}
+		});
+	}
+}