<?php
/*******************************************************************************
 * Copyright (c) 2008 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Eclipse Foundation - Initial API and implementation
 *    Motoki MORT mori-m@mxa.nes.nec.co.jp - patch, bug 227366
 *    Kit Lo (IBM) - patch, bug 217339, generate pseudo translations language packs
 *    Kit Lo (IBM) - patch, bug 234430, need language packs by means of other than update site
 *    Kit Lo (IBM) - patch, bug 251536, newline char missing after copyright comment on first line
 *    Kit Lo (IBM) - patch, bug 238580, language packs should not include strings that are marked "non-translatable"
 *    Kit Lo (IBM) - patch, bug 252140, Illegal token characters in babel fragment names
 *    Antoine Toulme (Intalio, Inc) - patch, bug 256430, Fragments with no host jeopardize Eclipse installation
 *    Kit Lo (IBM) - patch, bug 261739, Inconsistent use of language names
 *    Sean Flanigan (Red Hat) - patch, bug 261584, wrong output folder
 *    Kit Lo (IBM) - patch, bug 270456, Unable to use Babel PTT to verify PDE in the eclipse SDK
 *    Kit Lo (IBM) - Bug 299402, Extract properties files from Eclipse project update sites for translation
 *    Kit Lo (IBM) - Bug 276306, Re-enable p2 repository
 *    Kit Lo (IBM) - Bug 310135, Babel p2 update site not using mirrors
 *    Kit Lo (IBM) - [289376] Need to start up a Helios build
 *    Kit Lo (IBM) - [344764] Translation fragments discard the plug-in's directory structure
 *    Kit Lo (IBM) - [330735] Generate a better id for the categories
 *    Kit Lo (IBM) - [313310] Support Eclipse-PlatformFilter for fragment of fragment
 *******************************************************************************/

/*
 * Documentation: http://wiki.eclipse.org/Babel_/_Server_Tool_Specification#Outputs
 */
define("METADATA_GENERATOR_LOCATION", "/home/genie/eclipse"); // you might want to read this value from a config file. Not sure yet.

ini_set("memory_limit", "512M");
require(dirname(__FILE__) . "/../system/backend_functions.php");
require(dirname(__FILE__) . "/../system/dbconnection.class.php");

# Get all release trains
$dbc = new DBConnection();
$dbh = $dbc->connect();
$result = mysql_query("SELECT * FROM release_trains ORDER BY train_version DESC");
$train_result = array();
while ($train_row = mysql_fetch_assoc($result)) {
  $train_result[$train_row['train_id']] = $train_row['train_version'];
}

# Command-line parameter for the release train
# bug 272958
# b: build id
# t: (optional: train id) 

$options = getopt("b:t:");
$argv_train = "";
if(isset($options['t'])) {
	$argv_train = $options['t'];
	if(array_key_exists($argv_train, $train_result)) {
		# Picked a valid train .. remove all others
		foreach ($train_result as $train_id => $train_version) {
			if($train_id != $argv_train) {
				unset($train_result[$train_id]);
			}
		}
	}
}

$build_id = "";
if(!isset($options['b'])) {
	usage();
	exit();
}
else {
	$build_id = $options['b'];
}

$release_id = "0.9.0";

$work_dir = $addon->callHook('babel_working');

global $addon;
$context = $addon->callHook('context');

$work_context_dir = $work_dir . $context . "/";
$tmp_dir = $work_context_dir . "tmp/";
$babel_language_packs_dir = $work_context_dir . "babel_language_packs/";
$output_dir = $work_context_dir . "update-site/";
$source_files_dir = dirname(__FILE__) . "/source_files_for_generate/";

$leader = ". . ";
$timestamp = date("Ymdhis");

$rm_command = "rm -rf $tmp_dir; rm -rf $babel_language_packs_dir; rm -rf $output_dir";
exec($rm_command);
exec("mkdir -p $output_dir");

echo "Requested builds: ";
foreach ($train_result as $train_id => $train_version) {
	echo $train_id . " ";
}
echo "\n";

# Loop through the trains
foreach ($train_result as $train_id => $train_version) {
	echo "Generating update site for: $train_id\n";
	
	/*
	 * Create language pack links file
	 */
	$babel_language_packs_dir_for_train = $babel_language_packs_dir . $train_id . "/";
	exec("mkdir -p $babel_language_packs_dir_for_train");
	$language_pack_links_file = fopen("${babel_language_packs_dir_for_train}${train_id}.php", "w");
	fwrite($language_pack_links_file, "<?php\n");
	# Uncomment if each train is in its own directory: fwrite($language_pack_links_file, "\$language_pack_leader = \"${train_id}\";\n");
	fwrite($language_pack_links_file, "\$language_pack_leader = \".\";\n");
	fwrite($language_pack_links_file, "?>\n");
	# copy page_header.html here 
	$header = file_get_contents("${source_files_dir}page_header.html");
	fwrite($language_pack_links_file, $header);
	fwrite($language_pack_links_file, "\n\t<h1>Babel Language Packs for " . ucfirst($train_id) . "</h1>" .
		"\n\t<h2>Build ID: $build_id</h2>" .
		"\n\t<p>The following language packs are based on the community translations entered into the <a href='http://babel.eclipse.org/'>Babel Translation Tool</a>, and may not be complete or entirely accurate.  If you find missing or incorrect translations, please use the <a href='http://babel.eclipse.org/'>Babel Translation Tool</a> to update them." .   
		"\n\tAll downloads are provided under the terms and conditions of the <a href='http://www.eclipse.org/legal/epl/notice.php'>Eclipse Foundation Software User Agreement</a> unless otherwise specified.</p>" .
		"\n\t<p>Go to: ");

	$train_version_timestamp = "$train_version.v$timestamp";
	$language_pack_links_file_buffer = "";
	$site_xml = "";

	$output_dir_for_train = $output_dir . $train_id . "/";
	exec("mkdir $output_dir_for_train");
	exec("mkdir ${output_dir_for_train}features/");
	exec("mkdir ${output_dir_for_train}plugins/");

	$sql = "SELECT language_id, iso_code, IF(locale <> '', CONCAT(CONCAT(CONCAT(name, ' ('), locale), ')'), name) as name, is_active, IF(language_id = 1,1,0) AS sorthack FROM languages ORDER BY sorthack, name ASC";
	$language_result = mysql_query($sql);
	if($language_result === FALSE) {
		# we may have lost the database connection with our shell-outs
		# bug 271685
		$dbh = $dbc->connect();
		$language_result = mysql_query($sql);
	}
	while (($language_row = mysql_fetch_assoc($language_result)) != null) {
		$language_name = $language_row['name'];
		$language_iso = $language_row['iso_code'];
		$language_id = $language_row['language_id'];
		if (strcmp($language_iso, "en") == 0) {
			$language_name = "Pseudo Translations";
			$language_iso = "en_AA";
		}

		echo "${leader}Generating language pack for $train_id - $language_name ($language_iso) (language_id=" . $language_id . ")\n";

		/*
		 * Determine which plug-ins need to be in this language pack.
		 */
		if (strcmp($language_iso, "en_AA") == 0) {
			$file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
				FROM files AS f
				INNER JOIN strings AS s ON f.file_id = s.file_id
				INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
				WHERE f.is_active
				AND v.train_id = '" . $train_id . "'");
		} else {
			$file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
				FROM files AS f
				INNER JOIN strings AS s ON f.file_id = s.file_id
				INNER JOIN translations AS t ON (s.string_id = t.string_id AND t.is_active)
				INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
				WHERE t.language_id = " . $language_id . "
				AND f.is_active
				AND v.train_id = '" . $train_id . "'");
		}

		$plugins = array();
		$projects = array();
		$project_versions = array();
		$pseudo_translations_indexes = array();
		while (($file_row = mysql_fetch_assoc($file_result)) != null) {
			# save original filename
			$file_row['origname'] = $file_row['name'];

			# remove optional outer dirs, e.g. 'pde/ui/'
			$pos = strripos($file_row['name'], 'org.');
			if ($pos !== false) {
				$file_row['name'] = substr($file_row['name'], $pos);
			}
			$pos = strripos($file_row['name'], 'com.');
			if ($pos !== false) {
				$file_row['name'] = substr($file_row['name'], $pos);
			}

			$pattern = 
				'/^
				(.*?)?					# $1 plugin name
				\/						# slash
				(.*?\/)?				# $2 dir name
				([^\/]+[.]properties)	# $3 file name
				$/ix';
			$plugin_name_string = preg_replace($pattern, '$1', $file_row['name']);
			$dir_name_string = preg_replace($pattern, '$2', $file_row['name']);
			$file_name_string = preg_replace($pattern, '$3', $file_row['name']);

			# remove optional source dir, e.g. 'src' or 'src_ant'
			$pos = stripos($dir_name_string, 'org/');
			if ($pos !== false) {
				$dir_name_string = substr($dir_name_string, $pos);
			}
			$pos = strripos($dir_name_string, 'com/');
			if ($pos !== false) {
				$dir_name_string = substr($dir_name_string, $pos);
			}

			$file_row['plugin_name'] = $plugin_name_string;
			$file_row['dir_name'] = $dir_name_string;
			$file_row['file_name'] = $file_name_string;

			$plugins[$plugin_name_string][] = $file_row;
		}

		/*
		 * Generate one plug-in fragment for each plug-in
		 */
		ksort($plugins);
		foreach ($plugins as $plugin_name => $plugin_row) {
			echo "${leader}${leader}Generating plug-in fragment $plugin_name\n";
			/*
			 * Clean and create the temporary directory
			 */
			if (file_exists($tmp_dir)) {
				exec("rm -rf $tmp_dir; mkdir $tmp_dir");
			} else {
				exec("mkdir $tmp_dir");
			}
			/*
			 * Generate each *.properties file
			 */
			foreach ($plugin_row as $properties_file) {
				/*
				 * Convert the filename to *_lang.properties, e.g., foo_fr.properties
				 */
				$filename = $properties_file['file_name'];
				if (preg_match( "/^(.*)\.properties$/", $filename, $matches)) {
					$filename = $matches[1] . '_' . $language_iso . '.properties';
				}
				echo "${leader}${leader}${leader}Generating properties file " . $properties_file['dir_name'] . $filename . " (file_id=" . $properties_file['file_id'] . ")\n";
				/*
				 * Create any needed sub-directories
				 */
				exec("mkdir -p \"" . $tmp_dir . $properties_file['dir_name'] . "\"");
				/*
				 * Start writing to the file
				 */
				$fullpath = $tmp_dir . $properties_file['dir_name'] . $filename;
				$outp = fopen($fullpath, "w");
				fwrite($outp, "# Copyright by many contributors; see http://babel.eclipse.org/");
				if (strcmp($language_iso, "en_AA") == 0) {
					$sql = "SELECT string_id, name, value FROM strings WHERE file_id = " . $properties_file['file_id'] .
						" AND is_active AND non_translatable = 0";
					$strings_result = mysql_query($sql);
					while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
						/* Check for value starting with form tag (bug 270456) */
						if (preg_match("/^(<form>)(.*)/i", $strings_row['value'], $matches)) {
							$pattern = "/^(<form>)(.*)/i";
							$replace = "$1" . "<p>" . $properties_file['project_id'] . $strings_row['string_id'] . ":" . "</p>" . "$2";
							$strings_row['value'] = preg_replace($pattern, $replace, $strings_row['value']);
							$outp_line = "\n" . $strings_row['name'] . "=" . $strings_row['value'];
						} else {
						        $outp_line = "\n" . $strings_row['name'] . "=" . $properties_file['project_id'] . $strings_row['string_id'] .
								":" . $strings_row['value'];
						}
						fwrite($outp, $outp_line);

						$value = htmlspecialchars($strings_row['value']);
						if (strlen($value) > 100) {
							$value = substr($value, 0, 100) . " ...";
						}
						$pseudo_translations_indexes[$properties_file['project_id']][] = "\n\t\t<li><a href=\"http://babel.eclipse.org/babel/translate.php?project=" .
						$properties_file['project_id'] . "&version=" . $properties_file['version'] . "&file=" .
						$properties_file['origname'] . "&string=" . $strings_row['name'] . "\">" .
						$properties_file['project_id'] . $strings_row['string_id'] . "</a>&nbsp;" . $value . "</li>";
					}
				} else {
					$sql = "SELECT
						strings.name AS 'key', 
						strings.value AS orig, 
						translations.value AS trans
						FROM strings, translations
						WHERE strings.string_id = translations.string_id
						AND strings.file_id = " . $properties_file['file_id'] . "
						AND strings.is_active
						AND strings.non_translatable = 0
						AND translations.language_id = " . $language_id . "
						AND translations.is_active";
					$strings_result = mysql_query($sql);
					while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
						fwrite($outp, "\n" . $strings_row['key'] . "=");
						# echo "${leader1S}${leaderS}${leaderS}${leaderS}" . $strings_row['key'] . "=";
						if ($strings_row['trans']) {
							# json_encode returns the string with quotes fore and aft.  Need to strip them.
							# $tr_string = preg_replace('/^"(.*)"$/', '${1}', json_encode($strings_row['trans']));
							# $tr_string = str_replace('\\\\', '\\', $tr_string);
							$tr_string = toescapedunicode($strings_row['trans']);
							fwrite($outp, $tr_string);
							# echo $strings_row['trans'];
						} else {
							fwrite($outp, $strings_row['orig']);
						}
					}
				}
				/*
				 * Finish the properties file
				 */
				fclose($outp);
				echo "${leader}${leader}${leader}Completed  properties file " . $properties_file['dir_name'] . $filename . "\n";
			}
			/*
			 * Copy in the various legal files
			 */
			exec("cp ${source_files_dir}about.html $tmp_dir");
			/*
			 * Generate the META-INF/MANIFEST.MF file
			 */
			$parent_plugin_id = $plugin_name;
			$project_id = $properties_file['project_id'];
			$fragment_id = "$parent_plugin_id.nl_$language_iso";
			$fragment_filename = "${fragment_id}_$train_version_timestamp.jar";

			$plugins[$plugin_name]['id'] = $fragment_id;
			$plugins[$plugin_name]['version'] = $train_version_timestamp;

			exec("mkdir $tmp_dir/META-INF" );
			$outp = fopen("$tmp_dir/META-INF/MANIFEST.MF", "w");
			fwrite($outp, "Manifest-Version: 1.0\n");
			fwrite($outp, "Bundle-Name: $parent_plugin_id $language_name NLS Support\n");
			fwrite($outp, "Bundle-SymbolicName: $fragment_id ;singleton=true\n");
			fwrite($outp, "Bundle-Version: $train_version_timestamp\n");
			fwrite($outp, "Bundle-Vendor: Eclipse.org\n");

			if (preg_match("/^org.eclipse.compare.win32$/", $plugin_name)) {
				$parent_plugin_id .= "\nEclipse-PlatformFilter: (osgi.os=win32)";
			}

			elseif (preg_match("/.cocoa.macosx.x86_64$/", $plugin_name)) {
				$arr = split(".cocoa.macosx.x86_64", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=x86_64))";
			}
			elseif (preg_match("/.gtk.aix.ppc$/", $plugin_name)) {
				$arr = split(".gtk.aix.ppc", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=aix) (osgi.arch=ppc))";
			}
			elseif (preg_match("/.gtk.aix.ppc64$/", $plugin_name)) {
				$arr = split(".gtk.aix.ppc64", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=aix) (osgi.arch=ppc64))";
			}
			elseif (preg_match("/.gtk.hpux.ia64_32$/", $plugin_name)) {
				$arr = split(".gtk.hpux.ia64_32", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=hpux) (osgi.arch=ia64_32))";
			}
			elseif (preg_match("/.gtk.linux.ppc64$/", $plugin_name)) {
				$arr = split(".gtk.linux.ppc64", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=ppc64))";
			}
			elseif (preg_match("/.gtk.linux.s390$/", $plugin_name)) {
				$arr = split(".gtk.linux.s390", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=s390))";
			}			
			elseif (preg_match("/.gtk.linux.s390x$/", $plugin_name)) {
				$arr = split(".gtk.linux.s390x", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=s390x))";
			}
			elseif (preg_match("/.gtk.linux.x86$/", $plugin_name)) {
				$arr = split(".gtk.linux.x86", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=x86))";
			}
			elseif (preg_match("/.gtk.linux.x86_64$/", $plugin_name)) {
				$arr = split(".gtk.linux.x86_64", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=x86_64))";
			}
			elseif (preg_match("/.gtk.solaris.sparc$/", $plugin_name)) {
				$arr = split(".gtk.solaris.sparc", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=solaris) (osgi.arch=sparc))";
			}
			elseif (preg_match("/.gtk.solaris.x86$/", $plugin_name)) {
				$arr = split(".gtk.solaris.x86", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=solaris) (osgi.arch=x86))";
			}
			elseif (preg_match("/.win32.win32.x86$/", $plugin_name)) {
				$arr = split(".win32.win32.x86", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))";
			}
			elseif (preg_match("/.win32.win32.x86_64$/", $plugin_name)) {
				$arr = split(".win32.win32.x86_64", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86_64))";
			}

			elseif (preg_match("/.aix.ppc$/", $plugin_name)) {
				$arr = split(".aix.ppc", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.os=aix) (osgi.arch=ppc))";
			}
			elseif (preg_match("/.carbon.macosx$/", $plugin_name)) {
				$arr = split(".carbon.macosx", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=carbon) (osgi.os=macosx))";
			}
			elseif (preg_match("/.cocoa.macosx$/", $plugin_name)) {
				$arr = split(".cocoa.macosx", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx))";
			}
			elseif (preg_match("/.hpux.ia64_32$/", $plugin_name)) {
				$arr = split(".hpux.ia64_32", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.os=hpux) (osgi.arch=ia64_32))";
			}
			elseif (preg_match("/.linux.x86$/", $plugin_name)) {
				$arr = split(".linux.x86", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=x86))";
			}
			elseif (preg_match("/.linux.x86_64$/", $plugin_name)) {
				$arr = split(".linux.x86_64", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=x86_64))";
			}
			elseif (preg_match("/.solaris.sparc$/", $plugin_name)) {
				$arr = split(".solaris.sparc", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.os=solaris) (osgi.arch=sparc))";
			}
			elseif (preg_match("/.win32.x86$/", $plugin_name)) {
				$arr = split(".win32.x86", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.os=win32) (osgi.arch=x86))";
			}
			elseif (preg_match("/.win32.x86_64$/", $plugin_name)) {
				$arr = split(".win32.x86_64", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (& (osgi.os=win32) (osgi.arch=x86_64))";
			}

			elseif (preg_match("/.carbon$/", $plugin_name)) {
				$arr = split(".carbon", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (osgi.ws=carbon)";
			}
			elseif (preg_match("/.cocoa$/", $plugin_name)) {
				$arr = split(".cocoa", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (osgi.ws=cocoa)";
			}
			elseif (preg_match("/.linux$/", $plugin_name)) {
				$arr = split(".linux", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (osgi.os=linux)";
			}
			elseif (preg_match("/.macosx$/", $plugin_name)) {
				$arr = split(".macosx", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (osgi.os=macosx)";
			}
			elseif (preg_match("/.win32$/", $plugin_name)) {
				$arr = split(".win32", $plugin_name);
				$parent_plugin_id = $arr[0] . "\nEclipse-PlatformFilter: (osgi.ws=win32)";
			}

			fwrite($outp, "Fragment-Host: $parent_plugin_id\n");
			fclose($outp);
			/*
			 * Jar up this directory as the fragment plug-in jar
			 */
			system("cd $tmp_dir; jar cfM ${output_dir_for_train}plugins/$fragment_filename .");
			echo "${leader}${leader}Completed  plug-in fragment $plugin_name\n";

			$projects[$project_id][] = $fragment_id;
			$project_versions[$project_id] = $properties_file['version'];
		}
		if (sizeof($projects) > 0) {
			$site_xml .= "\n\t<category-def name=\"lang_$language_iso\" label=\"Babel Language Packs in $language_name\">";
			$site_xml .= "\n\t\t<description>Babel Language Packs in $language_name</description>";
			$site_xml .= "\n\t</category-def>";

			fwrite($language_pack_links_file, "\n\t\t<a href='#$language_iso'>$language_name</a>");
			if (strcmp($language_iso, "en_AA") != 0) {
				fwrite($language_pack_links_file, ",");
			}
			$language_pack_links_file_buffer .= "\n\t<h4>Language: <a name='$language_iso'>$language_name</a></h4>";
			$language_pack_links_file_buffer .= "\n\t<ul>";
		}
		ksort($projects);
		foreach ($projects as $project_id => $fragment_ids) {
			/*
			 * Sort fragment names
			 */
			asort($fragment_ids);
			/*
			 * Create ${babel_language_packs_dir_for_train}tmp
			 */
			exec("mkdir -p ${babel_language_packs_dir_for_train}tmp/eclipse/features");
			exec("mkdir -p ${babel_language_packs_dir_for_train}tmp/eclipse/plugins");
			/*
			 * Clean and create the temporary directory
			 */
			if (file_exists($tmp_dir)) {
				exec("rm -rf $tmp_dir; mkdir $tmp_dir");
			} else {
				exec("mkdir $tmp_dir");
			}
			/*
			 * Create the feature.xml
			 *
			 * TODO <url><update label=... url=... and <url><discovery label=... url=... are not implemented
			 *
			 * <url>
			 *   <update label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
			 *   <discovery label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
			 * </url>
			 */
			$feature_id = "org.eclipse.babel.nls_${project_id}_$language_iso";
			$feature_filename = "${feature_id}_$train_version_timestamp.jar";

			if (strcmp($language_iso, "en_AA") == 0) {
				$project_pct_complete = 100;
				$site_xml .= "\n\t<category-def name=\"proj_$project_id\" label=\"Babel Language Packs for $project_id\">";
				$site_xml .= "\n\t\t<description>Babel Language Packs for $project_id</description>";
				$site_xml .= "\n\t</category-def>";
			} else {
				$project_version = $project_versions[$project_id];
				$sql = "SELECT pct_complete
					FROM project_progress
					WHERE project_id = \"$project_id\"
						AND version = \"$project_version\"
						AND language_id = $language_id";
				$project_pct_complete_result = mysql_query($sql);
				$project_pct_complete = mysql_result($project_pct_complete_result, 0);
			}

			$outp = fopen("$tmp_dir/feature.xml", "w");
			fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" .
				"\n<feature" .
				"\n\tid=\"$feature_id\"" .
				"\n\tlabel=\"Babel Language Pack for $project_id in $language_name ($project_pct_complete%)\"" .
				"\n\timage=\"eclipse_update_120.jpg\"" .
				"\n\tprovider-name=\"%providerName\"" .
				"\n\tversion=\"$train_version_timestamp\">" .
				"\n\t<copyright>\n\t\t%copyright\n\t</copyright>" .
				"\n\t<license url=\"%licenseURL\">\n\t\t%license\n\t</license>" .
				"\n\t<description>Babel Language Pack for $project_id in $language_name</description>" );
			foreach ($fragment_ids as $fragment_id) {
				$jar_name = "${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar";
				$size = filesize($jar_name);
				fwrite($outp, "\n\t<plugin fragment=\"true\" id=\"$fragment_id\" unpack=\"false\" " .
					"version=\"$train_version_timestamp\" download-size=\"$size\" install-size=\"$size\" />");
				/*
				 * Copy the plugin to ${babel_language_packs_dir_for_train}tmp
				 */
				exec("cp ${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar ${babel_language_packs_dir_for_train}tmp/eclipse/plugins");
			}
			fwrite($outp, "\n</feature>");
			fclose($outp);
			/*
			 * Copy in the various legal files
			 */
			exec("cp ${source_files_dir}about.html $tmp_dir");
			exec("cp ${source_files_dir}eclipse_update_120.jpg $tmp_dir");
			exec("cp ${source_files_dir}epl-v10.html $tmp_dir");
			exec("cp ${source_files_dir}feature.properties $tmp_dir");
			exec("cp ${source_files_dir}license.html $tmp_dir");
			/*
			 * Copy in the Babel Pseudo Translations Index file
			 */
			if (strcmp($language_iso, "en_AA") == 0) {
				$pseudo_translations_index_file = fopen("${output_dir}BabelPseudoTranslationsIndex-$project_id.html", "w");
				fwrite($pseudo_translations_index_file, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">" .
					"\n<html>\n<head>\n<title>Babel Pseudo Translations Index for $project_id</title>" .
					"\n<meta http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n</head>" .
					"\n<body>\n\t<h1>Babel Pseudo Translations Index for $project_id</h1>" .
					"\n\t<h2>Version: $train_version_timestamp</h2>\n\t<ul>");
				foreach ($pseudo_translations_indexes[$project_id] as $index) {
					fwrite($pseudo_translations_index_file, $index);
				}
				fwrite($pseudo_translations_index_file, "\n\t</ul>\n</div></div></body>\n</html>");
				fclose($pseudo_translations_index_file);
				exec("cp ${output_dir}BabelPseudoTranslationsIndex-$project_id.html $tmp_dir");
				exec("rm ${output_dir}BabelPseudoTranslationsIndex-$project_id.html");
			}
			/*
			 * Copy the feature to ${babel_language_packs_dir_for_train}tmp before jar'ing up
			 */
			exec("mkdir -p ${babel_language_packs_dir_for_train}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
			exec("cd $tmp_dir; cp * ${babel_language_packs_dir_for_train}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
			/*
			 * Zip up language pack
			 */
			$language_pack_name = "BabelLanguagePack-$project_id-${language_iso}_$train_version_timestamp.zip";
			exec("cd ${babel_language_packs_dir_for_train}tmp; zip -r $babel_language_packs_dir_for_train$language_pack_name eclipse");
			/*
			 * Clean up ${babel_language_packs_dir_for_train}tmp
			 */
			exec("rm -rf ${babel_language_packs_dir_for_train}tmp");
			/*
			 * Add project language pack link to language pack links file
			 */
			$language_pack_links_file_buffer .= "\n\t\t<li><a href=\"<?= \$language_pack_leader ?>/${language_pack_name}\">$language_pack_name ($project_pct_complete%)</a></li>";
			/*
			 * Jar up this directory as the feature jar
			 */
			system("cd $tmp_dir; jar cfM ${output_dir_for_train}features/$feature_filename .");
			/*
			 * Clean the temporary directory
			 */
			exec("rm -rf $tmp_dir");
			/*
			 * Register this feature with the site.xml
			 */
			$site_xml .= "\n\t<feature url=\"features/$feature_filename\" id=\"$feature_id\" version=\"$train_version_timestamp\">";
			$site_xml .= "\n\t\t<category name=\"proj_$project_id\"/>";
			$site_xml .= "\n\t\t<category name=\"lang_$language_iso\"/>";
			$site_xml .= "\n\t</feature>";
		}  /*  End: foreach project  */
		echo "${leader}Completed language pack for $language_name ($language_iso)\n";
		if (sizeof($projects) > 0) {
			$language_pack_links_file_buffer .= "\n\t</ul>";
		}
	}

	fwrite($language_pack_links_file, "\n\t</p>");
	fwrite($language_pack_links_file, $language_pack_links_file_buffer);
	
	fwrite($language_pack_links_file, "\n\t<br />\n</body>\n</html>");
	fclose($language_pack_links_file);
	
	$dbh = $dbc->disconnect();

	/*
	 * Generate and save site.xml/content.jar/artifacts.jar with mirrorsURL
	 */
	$outp = fopen("${output_dir_for_train}site.xml", "w");
	fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" .
		"\n<site pack200=\"true\" digestURL=\"http://download.eclipse.org/technology/babel/update-site/R$release_id/$train_id\"" .
		"\n\tmirrorsURL=\"http://www.eclipse.org/downloads/download.php?file=/technology/babel/update-site/R$release_id/$train_id/site.xml&amp;format=xml\">" .
		"\n\t<description url=\"http://babel.eclipse.org/\">" .
		"\n\t\tThis update site contains user-contributed translations of the strings in all Eclipse projects." .
		"\n\t\tPlease see the http://babel.eclipse.org/ Babel project web pages for a full how-to-use explanation of" .
		"\n\t\tthese translations as well as how you can contribute to the translations of this and future versions of Eclipse." .
		"\n\t</description>");
	fwrite($outp, $site_xml);
	fwrite($outp, "\n</site>");
	fclose($outp);

	/*
	 * Generate the metadata and add the non-greedy tags
	 * Note: Not needed for Europa and Ganymede because p2 repository was not supported
	 */
	exec("mkdir ${output_dir_for_train}mirrors/");
	if (file_exists(METADATA_GENERATOR_LOCATION) && strcmp($train_id, "europa") != 0 && strcmp($train_id, "ganymede") != 0) {
		echo "Running the Meta at " . dirname(__FILE__) . "/runMetadata.sh\n";
		system("/bin/sh " . dirname(__FILE__) . "/runMetadata.sh ". METADATA_GENERATOR_LOCATION . " $output_dir_for_train $train_version_timestamp");
		echo "Processing XML\n";
		system("xsltproc -o ${output_dir_for_train}content.xml ". dirname(__FILE__) . "/content.xsl ${output_dir_for_train}content.xml");
		system("cd ${output_dir_for_train} ; jar -fc content.jar content.xml ; jar -fc artifacts.jar artifacts.xml");
		system("cd ${output_dir_for_train} ; rm content.xml ; rm artifacts.xml");
		system("cd ${output_dir_for_train} ; mv content.jar mirrors/content.mirrors ; mv artifacts.jar mirrors/artifacts.mirrors");
	}
	system("cd ${output_dir_for_train} ; mv site.xml mirrors/site.mirrors");

	/*
	 * Generate normal site.xml/content.jar/artifacts.jar without mirrorsURL
	 */
	$outp = fopen("${output_dir_for_train}site.xml", "w");
	fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" .
		"\n<site>" .
		"\n\t<description url=\"http://babel.eclipse.org/\">" .
		"\n\t\tThis update site contains user-contributed translations of the strings in all Eclipse projects." .
		"\n\t\tPlease see the http://babel.eclipse.org/ Babel project web pages for a full how-to-use explanation of" .
		"\n\t\tthese translations as well as how you can contribute to the translations of this and future versions of Eclipse." .
		"\n\t</description>");
	fwrite($outp, $site_xml);
	fwrite($outp, "\n</site>");
	fclose($outp);

	/*
	 * Generate the metadata and add the non-greedy tags
	 * Note: Not needed for Europa and Ganymede because p2 repository was not supported
	 */
	if (file_exists(METADATA_GENERATOR_LOCATION) && strcmp($train_id, "europa") != 0 && strcmp($train_id, "ganymede") != 0) {
		echo "Running the Meta at " . dirname(__FILE__) . "/runMetadata.sh\n";
		system("/bin/sh " . dirname(__FILE__) . "/runMetadata.sh ". METADATA_GENERATOR_LOCATION . " $output_dir_for_train $train_version_timestamp");
		echo "Processing XML\n";
		system("xsltproc -o ${output_dir_for_train}content.xml ". dirname(__FILE__) . "/content.xsl ${output_dir_for_train}content.xml");
		system("cd ${output_dir_for_train} ; jar -fc content.jar content.xml ; jar -fc artifacts.jar artifacts.xml");
		system("cd ${output_dir_for_train} ; rm content.xml ; rm artifacts.xml");
		system("cd ${output_dir_for_train} ; mv site.xml mirrors/site.txt");
	} else {
		system("cd ${output_dir_for_train} ; cp site.xml mirrors/site.txt");
	}
}
echo "Completed generating update site\n";


/*
 2. what happens if the translation feature includes plug-in fragments for
 plug-ins that are not in the current image?
 does it load correctly and ignore those fragments? if so, good
 A: warnings appear in the run-time error log
 does it fail to load? if so, then we need to generate different features, perhaps
 one feature for each plug or else we need to know more about the project
 distro structure to know which plug-ins to put in each feature
 what happens if those plug-ins are later added - does it load the strings now?
 A: probably not
 3. need to handle different versions of each feature/plugin/platform; generate different
 language packs for each
 */

function usage() {
	echo "\n";
	echo "generate1.php -b <build_id> [-t <train_id>]\n";
	echo "  -b <build_id>: The Build ID for this build.\n";
	echo "  -t <train_id>: Optional: train to build (indigo, helios, galileo, ganymede, europa).";
	echo "\n";
}

?>
