sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/builder/SMTCommand.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 static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.BORDER_SHAPES_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    19
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.BORDER_STYLES_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    20
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.COLOURS_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    21
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.COPYRIGHT_TEXT;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    22
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.DEPENDENCIES_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    23
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.DISTRIBUTION_TEXT;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    24
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.FILTER_HAS_ITEMS;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    25
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.FIX_ITEM_SIZE;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    26
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.HIGHTLIGHT_CORE_OS;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    27
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.IGNORE_ITEMS;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    28
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.LEVELS_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    29
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.LEVEL_OF_DETAIL;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    30
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.LOCALISATION_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    31
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.MODEL_NAME;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    32
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.MODEL_VERSION;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    33
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.MODEL_VERSION_TEXT;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    34
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.OUTPUT_FILE;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    35
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.PATTERNS_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    36
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.PRINTED_DPI;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    37
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.S12_XML_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    38
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.SHAPES_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    39
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.SUPPRESS_MOUSE_OVER_EFFECT;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    40
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.SYSTEM_DEFINITION_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    41
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.SYSTEM_INFO_FILES;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    42
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.SYSTEM_NAME;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    43
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.SYSTEM_VERSION;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    44
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.TEMPDIR;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    45
import static com.symbian.smt.gui.builder.SystemModelGeneratorEnumsForCLI.WARNING_LEVEL;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    46
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    47
import java.io.File;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    48
import java.io.IOException;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    49
import java.util.ArrayList;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    50
import java.util.List;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    51
import java.util.Locale;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    52
import java.util.ResourceBundle;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    53
import java.util.regex.Matcher;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    54
import java.util.regex.Pattern;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    55
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    56
import javax.xml.parsers.ParserConfigurationException;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    57
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    58
import org.eclipse.core.resources.IFolder;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    59
import org.eclipse.core.resources.IProject;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    60
import org.eclipse.core.resources.ProjectScope;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    61
import org.eclipse.core.runtime.preferences.DefaultScope;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    62
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    63
import org.eclipse.core.runtime.preferences.IScopeContext;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    64
import org.eclipse.core.runtime.preferences.InstanceScope;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    65
import org.eclipse.swt.widgets.Display;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    66
import org.xml.sax.SAXException;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    67
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    68
import com.symbian.smt.gui.Activator;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    69
import com.symbian.smt.gui.Logger;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    70
import com.symbian.smt.gui.PersistentDataStore;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    71
import com.symbian.smt.gui.SystemDefinition;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    72
import com.symbian.smt.gui.SystemDefinitionValidationException;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    73
import com.symbian.smt.gui.SystemDefinitionValidationFatalException;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    74
import com.symbian.smt.gui.views.ConsoleOutput;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    75
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    76
public class SMTCommand {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    77
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    78
	private static String SMG_FOLDER = ""; // The location of the System Model
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    79
											// Generator
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    80
	private static String SMT_COMMAND = ""; // The perl script to run for the
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    81
											// System Model Generator
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    82
	final static String TEMP_FOLDER = ".svg_temp"; // Folder names stating with
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    83
													// a . will not be displayed
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    84
													// in the project navigator
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    85
	private IFolder svgTempFolder;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    86
	private IProject project;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    87
	private ArrayList<String> command = new ArrayList<String>();;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    88
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    89
	private PersistentDataStore defaultStore;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    90
	private PersistentDataStore instanceStore;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    91
	private PersistentDataStore projectStore;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    92
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    93
	private Pattern ampersandPattern = Pattern.compile("&",
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    94
			Pattern.CASE_INSENSITIVE);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    95
	private Pattern lessThanPattern = Pattern.compile("<",
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    96
			Pattern.CASE_INSENSITIVE);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    97
	private Pattern greaterThanPattern = Pattern.compile(">",
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    98
			Pattern.CASE_INSENSITIVE);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
    99
	private Pattern singleQuotePattern = Pattern.compile("'",
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   100
			Pattern.CASE_INSENSITIVE);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   101
	private Pattern doubleQuotePattern = Pattern.compile("\"",
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   102
			Pattern.CASE_INSENSITIVE);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   103
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   104
	public SMTCommand(IProject project) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   105
		this.project = project;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   106
		svgTempFolder = project.getFolder(TEMP_FOLDER);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   107
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   108
		final ResourceBundle resourceBundle = ResourceBundle.getBundle(
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   109
				"location", Locale.getDefault(), this.getClass()
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   110
						.getClassLoader());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   111
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   112
		SMG_FOLDER = resourceBundle.getString("location");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   113
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   114
		try {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   115
			SMT_COMMAND = new File(SMG_FOLDER + File.separator + "SysModGen.pl")
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   116
					.getCanonicalPath();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   117
		} catch (IOException e) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   118
			Logger.log(e.getMessage(), e);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   119
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   120
	}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   121
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   122
	/**
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   123
	 * Generates the command line string for the System Model Toolkit
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   124
	 * 
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   125
	 * @return List<String> Arguments for the CLI
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   126
	 */
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   127
	public List<String> generateCommand() {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   128
		// Set up access to the persistent data stores
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   129
		IScopeContext defaultScope = new DefaultScope();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   130
		IEclipsePreferences defaultNode = defaultScope
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   131
				.getNode(Activator.PLUGIN_ID);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   132
		defaultStore = new PersistentDataStore(defaultNode);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   133
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   134
		IScopeContext instanceScope = new InstanceScope();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   135
		IEclipsePreferences instanceNode = instanceScope
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   136
				.getNode(Activator.PLUGIN_ID);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   137
		instanceStore = new PersistentDataStore(instanceNode, defaultNode);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   138
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   139
		IScopeContext projectScope = new ProjectScope(project);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   140
		IEclipsePreferences projectNode = projectScope
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   141
				.getNode(Activator.PLUGIN_ID);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   142
		projectStore = new PersistentDataStore(projectNode);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   143
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   144
		// Required to use the SMT script
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   145
		command.add("perl");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   146
		command.add(SMT_COMMAND);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   147
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   148
		// Add the system definition files
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   149
		String[] sysDefFiles = projectStore.getSystemDefinitionFiles();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   150
		
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   151
		// The while loop below protects against concurrency conditions which
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   152
		// are encountered when the sys def file is a URL resource and
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   153
		// when we are creating a new project via the NewSMTProjectWizard.
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   154
		while (sysDefFiles.length == 0) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   155
			try {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   156
				Thread.sleep(10);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   157
			} catch (InterruptedException ignore) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   158
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   159
			
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   160
			sysDefFiles = projectStore.getSystemDefinitionFiles();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   161
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   162
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   163
		command.add(SYSTEM_DEFINITION_FILES.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   164
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   165
		// Check that the system definition files are valid
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   166
		// Only fatal errors cause the build attempt to be aborted.
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   167
		//
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   168
		for (String filename : sysDefFiles) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   169
			try {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   170
				SystemDefinition.checkValidSystemDefinitionFile(filename);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   171
			} catch (SystemDefinitionValidationFatalException e1) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   172
				writeToConsoleOutput("Error: " + filename
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   173
						+ " is not a valid system definition file:\n"
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   174
						+ e1.getMessage());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   175
				Logger.log("Validation of system definition file ("+filename+") failed.", e1);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   176
				return null;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   177
			} catch (SystemDefinitionValidationException e1) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   178
				Logger.log("Validation of system definition file ("+filename+") failed.", e1);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   179
			} 
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   180
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   181
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   182
		// There may be multiple system definition files, if there are they need
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   183
		// to be joined with a ,
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   184
		if (sysDefFiles.length == 1) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   185
			command.add(prepareArg(sysDefFiles[0]));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   186
		} else {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   187
			StringBuilder sysDefJoined = new StringBuilder();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   188
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   189
			for (String file : sysDefFiles) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   190
				sysDefJoined.append(file);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   191
				sysDefJoined.append(",");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   192
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   193
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   194
			command.add(prepareArg(sysDefJoined.toString()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   195
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   196
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   197
		// Add the resources
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   198
		// Default files in this context mean file the user selected
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   199
		handleResource(SHAPES_FILES, projectStore.getSelectedShapesFiles());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   200
		handleResource(LEVELS_FILES, projectStore.getSelectedLevelsFiles());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   201
		handleResource(SYSTEM_INFO_FILES, projectStore
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   202
				.getSelectedSystemInfoFiles());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   203
		handleResource(DEPENDENCIES_FILES, projectStore
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   204
				.getSelectedDependenciesFiles());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   205
		handleResource(COLOURS_FILES, projectStore.getSelectedColoursFiles());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   206
		handleResource(BORDER_SHAPES_FILES, projectStore
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   207
				.getSelectedBorderShapesFiles());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   208
		handleResource(PATTERNS_FILES, projectStore.getSelectedPatternsFiles());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   209
		handleResource(LOCALISATION_FILES, projectStore
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   210
				.getSelectedLocalisationFiles());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   211
		handleResource(BORDER_STYLES_FILES, projectStore
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   212
				.getSelectedBorderStylesFiles());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   213
		handleResource(S12_XML_FILES, projectStore.getSelectedS12XmlFiles());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   214
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   215
		// Add the model labels
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   216
		command.add(COPYRIGHT_TEXT.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   217
		command.add(prepareArg(projectStore.getCopyrightText()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   218
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   219
		command.add(SYSTEM_NAME.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   220
		command.add(prepareArg(projectStore.getSystemName()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   221
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   222
		command.add(DISTRIBUTION_TEXT.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   223
		command.add(prepareArg(projectStore.getSelectedDistributionText()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   224
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   225
		command.add(MODEL_NAME.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   226
		command.add(prepareArg(projectStore.getModelName()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   227
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   228
		command.add(MODEL_VERSION.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   229
		command.add(prepareArg(projectStore.getModelVersion()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   230
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   231
		command.add(MODEL_VERSION_TEXT.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   232
		command.add(prepareArg(projectStore.getSelectedModelVersionText()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   233
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   234
		command.add(SYSTEM_VERSION.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   235
		command.add(prepareArg(projectStore.getSystemVersion()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   236
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   237
		// Add the model control settings
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   238
		command.add(HIGHTLIGHT_CORE_OS.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   239
		if (projectStore.getHighlightCoreOS().toString().equalsIgnoreCase(
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   240
				"true")) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   241
			command.add("on");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   242
		} else {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   243
			command.add("false");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   244
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   245
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   246
		command.add(LEVEL_OF_DETAIL.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   247
		command.add(prepareArg(projectStore.getLevelOfDetail()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   248
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   249
		String dpi = projectStore.getSelectedPrintedDpi();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   250
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   251
		// The dpi option is to be added only if the user
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   252
		// selected or typed in an option other than ""
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   253
		if ((dpi != null) && (!dpi.equals(""))) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   254
			command.add(PRINTED_DPI.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   255
			command.add(prepareArg(dpi));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   256
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   257
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   258
		if (projectStore.getSuppressMouseOverEffect()) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   259
			command.add(SUPPRESS_MOUSE_OVER_EFFECT.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   260
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   261
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   262
		// The fix item size option is to be added only if the user
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   263
		// checked the corresponding check box
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   264
		if (projectStore.getFixItemSize()) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   265
			command.add(FIX_ITEM_SIZE.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   266
			command.add("fixed");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   267
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   268
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   269
		// Filter has Items
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   270
		command.add(FILTER_HAS_ITEMS.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   271
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   272
		String[] filterHasItems = projectStore.getFilterHasItems();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   273
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   274
		// No command line argument if there are no filter-has keywords
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   275
		// If there are multiple filter has items, they need to be joined with a
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   276
		// ,
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   277
		if (filterHasItems.length > 0) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   278
			if (filterHasItems.length == 1) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   279
				command.add(prepareArg(filterHasItems[0]));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   280
			} else {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   281
				StringBuilder filterItemsJoined = new StringBuilder();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   282
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   283
				for (String filter : filterHasItems) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   284
					filterItemsJoined.append(filter);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   285
					filterItemsJoined.append(",");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   286
				}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   287
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   288
				filterItemsJoined.deleteCharAt(filterItemsJoined.length() - 1);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   289
				command.add(prepareArg(filterItemsJoined.toString()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   290
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   291
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   292
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   293
		// Ignore Items
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   294
		List<String[]> ignoreItems = projectStore.getIgnoreItems();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   295
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   296
		StringBuilder ignoreItemsJoined = new StringBuilder();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   297
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   298
		for (String[] ignoreItem : ignoreItems) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   299
			ignoreItemsJoined.append(ignoreItem[0]);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   300
			ignoreItemsJoined.append(":");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   301
			ignoreItemsJoined.append(ignoreItem[1]);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   302
			ignoreItemsJoined.append(";");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   303
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   304
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   305
		command.add(IGNORE_ITEMS.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   306
		command.add(prepareArg(ignoreItemsJoined.toString()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   307
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   308
		// Set the temp folder to use
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   309
		command.add(TEMPDIR.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   310
		command.add(prepareArg(svgTempFolder.getLocation().toString()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   311
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   312
		// Set the warning level
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   313
		command.add(WARNING_LEVEL.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   314
		command.add(instanceStore.getWarningLevel());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   315
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   316
		// Set the output name
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   317
		command.add(OUTPUT_FILE.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   318
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   319
		File file = new File(project.getLocationURI().getPath());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   320
		command.add(file.getAbsolutePath() + File.separator
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   321
				+ projectStore.getOutputFilename());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   322
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   323
		// Advanced Options
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   324
		// They are added at the very end of the command line and only if
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   325
		// defined by the user.
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   326
		String[] options = projectStore.getAdvancedOptions();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   327
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   328
		if ((options != null) && (options.length > 0)) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   329
			for (String option : options) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   330
				command.addAll(prepareAdvancedOption(option.trim()));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   331
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   332
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   333
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   334
		return command;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   335
	}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   336
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   337
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   338
	private List<String> prepareAdvancedOption(String option) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   339
		List<String> options = new ArrayList<String>();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   340
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   341
		String optionValue = null;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   342
		String argumentValue = null;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   343
		
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   344
		if (option.indexOf(" ") > 0) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   345
			optionValue = option.substring(0, option.indexOf(" "));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   346
			argumentValue = option.substring(option.indexOf(" ")).trim();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   347
		} else {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   348
			optionValue = option;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   349
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   350
		
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   351
		while (optionValue.startsWith("-")) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   352
			optionValue = optionValue.substring(1);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   353
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   354
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   355
		options.add("--" + optionValue);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   356
		
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   357
		if (argumentValue != null && argumentValue.length() != 0) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   358
			options.add(argumentValue);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   359
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   360
		
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   361
		return options;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   362
	}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   363
	
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   364
	private void handleResource(SystemModelGeneratorEnumsForCLI option,
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   365
			String[] selectedFiles) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   366
		// In the cases below where we have no selected files, we need to define
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   367
		// a "" string for compatibility with SMG, which does not like an empty array.
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   368
		switch (option) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   369
		case BORDER_SHAPES_FILES:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   370
		case BORDER_STYLES_FILES:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   371
		case COLOURS_FILES:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   372
		case LOCALISATION_FILES:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   373
		case PATTERNS_FILES:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   374
		case SHAPES_FILES:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   375
		case SYSTEM_INFO_FILES:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   376
			if (selectedFiles.length == 0) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   377
				selectedFiles = new String[1];
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   378
				selectedFiles[0] = "\"\"";
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   379
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   380
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   381
			break;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   382
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   383
		case LEVELS_FILES:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   384
			if (selectedFiles.length == 0) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   385
				selectedFiles = new String[1];
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   386
				selectedFiles[0] = "\"\"";
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   387
			} else {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   388
				if (selectedFiles[0].equals("Auto")) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   389
					selectedFiles = new String[] {};
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   390
				}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   391
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   392
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   393
			break;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   394
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   395
		case DEPENDENCIES_FILES:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   396
		case S12_XML_FILES:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   397
			if (selectedFiles.length == 0) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   398
				selectedFiles = new String[] {};
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   399
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   400
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   401
			break;
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   402
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   403
		default:
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   404
			throw new IllegalArgumentException("Unknown option [" + option
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   405
					+ "]");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   406
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   407
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   408
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   409
		for (String file : selectedFiles) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   410
			command.add(option.arg());
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   411
			command.add((file.equals("\"\"")) ? file : prepareArg(file));
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   412
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   413
	}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   414
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   415
	private String prepareArg(String arg) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   416
		// Escape any XML entities
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   417
		arg = replace(arg, ampersandPattern.matcher(arg), "&amp;");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   418
		arg = replace(arg, lessThanPattern.matcher(arg), "&lt;");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   419
		arg = replace(arg, greaterThanPattern.matcher(arg), "&gt;");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   420
		arg = replace(arg, singleQuotePattern.matcher(arg), "&apos;");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   421
		arg = replace(arg, doubleQuotePattern.matcher(arg), "&quot;");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   422
		arg = arg.trim();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   423
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   424
		// Escape any unicode characters
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   425
		StringBuffer result = new StringBuffer();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   426
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   427
		// Get chars as characters may be multibyte
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   428
		for (char theChar : arg.toCharArray()) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   429
			if ((int) theChar > 127) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   430
				// Turn into XML unicode entity
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   431
				result.append("&#x" + Integer.toHexString((int) theChar) + ";");
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   432
			} else {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   433
				// Characters < 128 should be the same in all code pages, we
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   434
				// don't escape these for aesthetic reasons
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   435
				result.append(theChar);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   436
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   437
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   438
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   439
		return "\"" + result.toString() + "\"";
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   440
	}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   441
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   442
	private String replace(String arg, Matcher m, String replacement) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   443
		m.reset();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   444
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   445
		StringBuffer result = new StringBuffer();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   446
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   447
		while (m.find()) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   448
			m.appendReplacement(result, replacement);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   449
		}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   450
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   451
		m.appendTail(result);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   452
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   453
		return result.toString();
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   454
	}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   455
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   456
	private void writeToConsoleOutput(final String string) {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   457
		// Writes a string to the console output view
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   458
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   459
		Display.getDefault().asyncExec(new Runnable() {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   460
			public void run() {
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   461
				ConsoleOutput.addText(string);
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   462
			}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   463
		});
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   464
	}
522a326673b6 Moved swconfigapps content under oss repository.
terytkon
parents:
diff changeset
   465
}