sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/builder/SMTProcess.java
author terytkon
Thu, 11 Mar 2010 19:08:43 +0200
changeset 0 522a326673b6
permissions -rw-r--r--
Moved swconfigapps content under oss repository.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
     2
// All rights reserved.
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
     3
// This component and the accompanying materials are made available
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
     5
// which accompanies this distribution, and is available
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
     7
//
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
     8
// Initial Contributors:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    10
//
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    11
// Contributors:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    12
//
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    13
// Description:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    14
//
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    15
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    16
package com.symbian.smt.gui.builder;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    17
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    18
import java.io.BufferedReader;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    19
import java.io.IOException;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    20
import java.io.InputStreamReader;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    21
import java.io.OutputStream;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    22
import java.util.List;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    23
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    24
import org.eclipse.swt.widgets.Display;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    25
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    26
import com.symbian.smt.gui.Logger;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    27
import com.symbian.smt.gui.views.ConsoleOutput;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    28
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    29
public class SMTProcess {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    30
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    31
	/**
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    32
	 * Runs the command line base System Model Generator
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    33
	 * 
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    34
	 * @param List
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    35
	 *            <String> Arguments for the CLI
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    36
	 * @return int The exit code from the System Model Generator
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    37
	 */
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    38
	public int run(List<String> command) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    39
		int result = 0;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    40
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    41
		// Reset the console
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    42
		Display.getDefault().asyncExec(new Runnable() {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    43
			public void run() {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    44
				ConsoleOutput.reset();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    45
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    46
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    47
		});
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    48
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    49
		// Print the command line string to the console output
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    50
		StringBuilder commandLineString = new StringBuilder();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    51
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    52
		for (String item : command) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    53
			commandLineString.append(item.concat(" "));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    54
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    55
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    56
		writeToConsoleOutput("Executing '" + commandLineString.toString() + "'");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    57
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    58
		// First we check that Perl is available
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    59
		ProcessBuilder pbCheckPerl = new ProcessBuilder("perl", "-v");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    60
		pbCheckPerl.redirectErrorStream(true);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    61
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    62
		try {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    63
			pbCheckPerl.start();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    64
		} catch (IOException e) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    65
			writeToConsoleOutput("Error: Perl is not installed");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    66
			return 9009; // Same exit code as Windows produces for a program not
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    67
							// found
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    68
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    69
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    70
		ProcessBuilder pb = new ProcessBuilder(command);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    71
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    72
		// Redirect STDERR to STDOUT
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    73
		pb.redirectErrorStream(true);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    74
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    75
		try {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    76
			// Start the process
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    77
			final Process p = pb.start();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    78
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    79
			// Get and close the process STDIN
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    80
			OutputStream out = p.getOutputStream();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    81
			out.close();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    82
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    83
			// Create a reader to read from the process STDOUT
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    84
			BufferedReader inReader = new BufferedReader(new InputStreamReader(
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    85
					p.getInputStream()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    86
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    87
			// Print STDOUT to the command output view
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    88
			String line;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    89
			while ((line = inReader.readLine()) != null) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    90
				writeToConsoleOutput(line);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    91
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    92
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    93
			// Close the process STDOUT pipe when finished
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    94
			inReader.close();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    95
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    96
			try {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    97
				// Ensure the process has finished and get the exit code
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    98
				result = p.waitFor();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    99
			} catch (InterruptedException e) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   100
				Logger.log(e.getMessage(), e);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   101
			} finally {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   102
				// Destroy the process
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   103
				p.destroy();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   104
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   105
		} catch (IOException e) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   106
			Logger.log(e.getMessage(), e);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   107
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   108
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   109
		return result;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   110
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   111
	}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   112
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   113
	private void writeToConsoleOutput(final String string) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   114
		Display.getDefault().asyncExec(new Runnable() {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   115
			public void run() {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   116
				ConsoleOutput.addText(string);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   117
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   118
		});
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   119
	}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   120
}