|  | <?php | 
|  | $ignoredWorkingSets = array('EXCLUDE', 'STEM-Data-EarthScience'); | 
|  |  | 
|  | define('DATA_BUILD_MAP_PATH', 'releng/org.eclipse.stem.releng/maps/stem.data.map'); | 
|  | define('BUILD_MAP_PATH', 'releng/org.eclipse.stem.releng/maps/stem.map'); | 
|  | define('BUILD_MAP_DIRECTORY_PATH', 'releng/org.eclipse.stem.releng/maps/directories.properties'); | 
|  |  | 
|  | define('WORKING_SET_MATCH', '!WS:'); | 
|  | define('MAP_ENTRY_REGEX', '(.*)@(.*)=(.*)'); | 
|  | define('MAP_ENTRY_PATH_PREFIX', "\${checkoutDir}"); | 
|  |  | 
|  | define('REPOSITORY_ROOT_SSH', 'svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.stem/'); | 
|  | define('REPOSITORY_ROOT_HTTP', 'http://dev.eclipse.org/svnroot/technology/org.eclipse.stem/'); | 
|  | define('REPOSITORY_ROOT_HTTPS', 'https://dev.eclipse.org/svnroot/technology/org.eclipse.stem/'); | 
|  |  | 
|  | define('PROVIDER_ID', 'org.tigris.subversion.subclipse.core.svnnature'); | 
|  | define('PROVIDER_ENTRY_TEMPLATE', '0.9.3,$PATH$,$NAME$'); | 
|  |  | 
|  | define('RELENG_WS_ENTRY', '!WS:STEM-Releng'); | 
|  | define('RELENG_PROJECT_ENTRY', 'resource@org.eclipse.stem.releng=COPY,${source.path.releng},org.eclipse.stem.releng'); | 
|  | define('TARGETPLATFORM_PROJECT_ENTRY', 'resource@org.eclipse.stem.releng.targetplatforms=COPY,${source.path.releng},org.eclipse.stem.releng.targetplatforms'); | 
|  |  | 
|  |  | 
|  | $workingSetEntryTemplates = array(); | 
|  | $workingSetEntryTemplates['default'] = array('factoryID'=>'org.eclipse.ui.internal.model.ResourceFactory','path'=>'$NAME$','type'=>'4'); | 
|  | $workingSetEntryTemplates['plugin'] = array('factoryID'=>'org.eclipse.jdt.ui.PersistableJavaElementFactory', 'elementID'=>'=$NAME$'); | 
|  | $workingSetEntryTemplates['fragment'] = $workingSetEntryTemplates['plugin']; | 
|  |  | 
|  | function getBuildDirectoryMapUrl() | 
|  | { | 
|  | $repositoryRoot = getRepositoryRoot(true); | 
|  | return $repositoryRoot .'/'. BUILD_MAP_DIRECTORY_PATH; | 
|  | } | 
|  |  | 
|  |  | 
|  | function getBuildDirectoryMap() | 
|  | { | 
|  | $directoryMapData = @file(getBuildDirectoryMapUrl()); | 
|  | if (!$directoryMapData) { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | $repositoryRoot = getRepositoryRoot(); | 
|  |  | 
|  | $data = array(); | 
|  | foreach ($directoryMapData as $line) { | 
|  | $tokens = explode("=", $line); | 
|  | if (is_array($tokens) && sizeof($tokens) == 2) { | 
|  |  | 
|  | $name = $tokens[0]; | 
|  | $path = $tokens[1]; | 
|  |  | 
|  | if ($name == "source.path") { | 
|  | $path = $repositoryRoot; | 
|  | $data[$name] = trim($path); | 
|  | } else { | 
|  | if (@eregi('^\$\{(.*)\}\/(.*)$', $path, $t2)) { | 
|  | $path = $data[$t2[1]] . '/'. $t2[2]; | 
|  | $data[$name] = trim($path); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  | } | 
|  | } | 
|  |  | 
|  | return $data; | 
|  |  | 
|  | } | 
|  |  | 
|  | function getBuildMapUrl() | 
|  | { | 
|  | $repositoryRoot = getRepositoryRoot(true); | 
|  | return $repositoryRoot .'/'. BUILD_MAP_PATH; | 
|  | } | 
|  |  | 
|  | function getDataBuildMapUrl() | 
|  | { | 
|  | $repositoryRoot = getRepositoryRoot(true); | 
|  | return $repositoryRoot .'/'. DATA_BUILD_MAP_PATH; | 
|  | } | 
|  |  | 
|  | function getRepositoryRoot($forceHttp = false) | 
|  | { | 
|  | if (!$forceHttp && isset($_REQUEST['r']) && $_REQUEST['r'] == "ssh") { | 
|  | $path = REPOSITORY_ROOT_SSH; | 
|  | } else if (!$forceHttp && isset($_REQUEST['r']) && $_REQUEST['r'] == "https") { | 
|  | $path = REPOSITORY_ROOT_HTTPS; | 
|  | }  else { | 
|  | $path = REPOSITORY_ROOT_HTTP; | 
|  | } | 
|  |  | 
|  | if (isset($_REQUEST['branch'])) { | 
|  | $path .= "branches/". $_REQUEST['branch']; | 
|  | } else if (isset($_REQUEST['tag'])) { | 
|  | $path .= "tags/". $_REQUEST['tag']; | 
|  | } else { | 
|  | $path .= "trunk"; | 
|  | } | 
|  |  | 
|  | return $path; | 
|  | } | 
|  |  | 
|  | function processMapEntry($line, $dirMap) | 
|  | { | 
|  | $repositoryRoot = getRepositoryRoot(); | 
|  |  | 
|  | $data = array(); | 
|  | $data['line'] = $line; | 
|  |  | 
|  | //feature@org.eclipse.stem.feature=COPY,${checkoutDir}/features,org.eclipse.stem.feature | 
|  | if (@eregi(MAP_ENTRY_REGEX, $line, $tokens)) { | 
|  |  | 
|  |  | 
|  | //COPY,${checkoutDir}/features,org.	eclipse.stem.feature | 
|  | $pathTokens = explode(",", $tokens[3]); | 
|  | if ($pathTokens[0] == "COPY") { | 
|  |  | 
|  | $dirKey = trim($pathTokens[1]); | 
|  | $dirKey = substr($dirKey, 2, $dirKey-1); | 
|  |  | 
|  | if (!array_key_exists($dirKey, $dirMap)) { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | $path = $dirMap[$dirKey]; | 
|  |  | 
|  | // Local entry | 
|  |  | 
|  | $data['path'] = $path . '/' . $pathTokens[2]; | 
|  |  | 
|  | //$data['path'] = str_replace(MAP_ENTRY_PATH_PREFIX, $repositoryRoot, $pathTokens[1]) ."/". $tokens[2]; | 
|  | } | 
|  |  | 
|  | $data['type'] = $tokens[1]; | 
|  | $data['name'] = $tokens[2]; | 
|  | } | 
|  |  | 
|  | return $data; | 
|  | } | 
|  |  | 
|  | function processMapFile($lines) | 
|  | { | 
|  | $data = array(); | 
|  |  | 
|  | $buildDirMap = getBuildDirectoryMap(); | 
|  |  | 
|  |  | 
|  | $currentWorkingSet = "EXCLUDE"; | 
|  |  | 
|  | foreach ($lines as $line) { | 
|  | $line = trim($line); | 
|  | if ($line != "") { | 
|  | if ($line{0} == "!" || $line{0} == "#") { | 
|  | // comment line | 
|  | $lineMatch = strstr($line, WORKING_SET_MATCH); | 
|  | // Matched a working set string | 
|  | if ($lineMatch !== FALSE) { | 
|  | $currentWorkingSet = str_replace(WORKING_SET_MATCH, "", $lineMatch); | 
|  | } | 
|  | } else { | 
|  | if ($currentWorkingSet === false) { | 
|  | continue; | 
|  | } | 
|  |  | 
|  |  | 
|  | $entry = processMapEntry($line, $buildDirMap); | 
|  | if (!$entry) { | 
|  | continue; | 
|  | } | 
|  | $data[$currentWorkingSet][] = $entry; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | return $data; | 
|  | } | 
|  |  | 
|  |  | 
|  | function buildProviderDOM($xml, $workingSets) | 
|  | { | 
|  | global $ignoredWorkingSets; | 
|  |  | 
|  |  | 
|  | $xml = createElementDOM($xml, "provider"); | 
|  | createAttributeDOM($xml, "id", PROVIDER_ID); | 
|  |  | 
|  | foreach ($workingSets as $workingSetName => $workingSetEntries) { | 
|  | if (!isExcludedWorkingSet($workingSetName)) { | 
|  | // Not an ignored working set.  Process. | 
|  |  | 
|  | foreach ($workingSetEntries as $workingSetEntry) { | 
|  | $projectRef = createElementDOM($xml,"project"); | 
|  |  | 
|  | if (!isset($workingSetEntry['path'])) { | 
|  | continue; | 
|  | } | 
|  |  | 
|  |  | 
|  | $entryString = PROVIDER_ENTRY_TEMPLATE; | 
|  | $entryString = str_replace("\$PATH\$", $workingSetEntry['path'], $entryString); | 
|  | $entryString = str_replace("\$NAME\$", $workingSetEntry['name'], $entryString); | 
|  |  | 
|  | createAttributeDOM($projectRef, "reference", $entryString); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | function isExcludedWorkingSet($wsName) | 
|  | { | 
|  | global $ignoredWorkingSets; | 
|  | $ws = false; | 
|  | if (isset($_REQUEST['ws'])) { | 
|  | return !($_REQUEST['ws'] == $wsName); | 
|  | } | 
|  |  | 
|  | return in_array($wsName, $ignoredWorkingSets); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** | 
|  | <workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1310766141425_10" label="STEM-Tests" name="STEM-Tests"> | 
|  | <item elementID="=org.eclipse.stem.tests.automaticexperiment" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/> | 
|  | <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.stem.core.feature" type="4"/> | 
|  | </workingSets> | 
|  | */ | 
|  | function addWorkingSetEntryDOM($wsXML, $workingSetEntry) | 
|  | { | 
|  | if (!isset($workingSetEntry['path'])) { | 
|  | return; | 
|  | } | 
|  |  | 
|  |  | 
|  | global $workingSetEntryTemplates; | 
|  |  | 
|  | $itemXML = createElementDOM($wsXML, "item"); | 
|  |  | 
|  | if (array_key_exists($workingSetEntry['type'],$workingSetEntryTemplates)) { | 
|  | $attributes = $workingSetEntryTemplates[$workingSetEntry['type']]; | 
|  | } else { | 
|  | $attributes = $workingSetEntryTemplates['default']; | 
|  | } | 
|  |  | 
|  | foreach ($attributes as $attributeName => $attributeValue) { | 
|  | $attributeValue = str_replace("\$PATH\$", $workingSetEntry['path'], $attributeValue); | 
|  | $attributeValue = str_replace("\$NAME\$", $workingSetEntry['name'], $attributeValue); | 
|  | createAttributeDOM($itemXML, $attributeName, $attributeValue); | 
|  | } | 
|  | } | 
|  |  | 
|  | function buildWorkingSetDOM($rootXML, $workingSets) | 
|  | { | 
|  | global $ignoredWorkingSets; | 
|  |  | 
|  | $seq = 0; | 
|  |  | 
|  | foreach ($workingSets as $workingSetName => $workingSetEntries) { | 
|  | if (!isExcludedWorkingSet($workingSetName)) { | 
|  | $wsXML = createElementDOM($rootXML, "workingSets"); | 
|  | createAttributeDOM($wsXML, "editPageId", "org.eclipse.jdt.ui.JavaWorkingSetPage"); | 
|  | createAttributeDOM($wsXML, "id", time() ."_". $seq++); | 
|  | createAttributeDOM($wsXML, "label", $workingSetName); | 
|  | createAttributeDOM($wsXML, "name", $workingSetName); | 
|  |  | 
|  | foreach ($workingSetEntries as $workingSetEntry) { | 
|  | addWorkingSetEntryDOM($wsXML, $workingSetEntry); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | function buildProjectSetDOM($data) | 
|  | { | 
|  | $doc = new DOMDocument('1.0'); | 
|  | $doc->formatOutput = true; | 
|  |  | 
|  |  | 
|  | $root = createElementDOM($doc, "psf"); | 
|  | createAttributeDOM($root, "version", "2.0"); | 
|  |  | 
|  |  | 
|  | buildProviderDOM($root, $data); | 
|  | buildWorkingSetDOM($root, $data); | 
|  | return $doc; | 
|  | } | 
|  |  | 
|  | function createElementDOM($root, $name) | 
|  | { | 
|  | if ($root->ownerDocument != NULL) { | 
|  | $element = $root->ownerDocument->createElement($name); | 
|  | } else { | 
|  | $element = $root->createElement($name); | 
|  | } | 
|  |  | 
|  | $root->appendChild($element); | 
|  |  | 
|  | return $element; | 
|  | } | 
|  |  | 
|  | function createAttributeDOM($root, $name, $value) | 
|  | { | 
|  | $attr = $root->ownerDocument->createAttribute($name); | 
|  | $attr->value = $value; | 
|  | $root->appendChild($attr); | 
|  | } | 
|  |  | 
|  |  | 
|  | function addRelengProjects($buildMapData) | 
|  | { | 
|  | $buildMapData[] = RELENG_WS_ENTRY; | 
|  | $buildMapData[] = RELENG_PROJECT_ENTRY; | 
|  | $buildMapData[] = TARGETPLATFORM_PROJECT_ENTRY; | 
|  |  | 
|  | return $buildMapData; | 
|  | } | 
|  |  | 
|  |  | 
|  | function getBuildMap() | 
|  | { | 
|  | $dataBuildMap = @file(getDataBuildMapUrl()); | 
|  | $coreBuildMap = @file(getBuildMapUrl()); | 
|  |  | 
|  | $buildMapData = array_merge($coreBuildMap, $dataBuildMap); | 
|  | if (!$buildMapData) { | 
|  | return false; | 
|  | } | 
|  |  | 
|  |  | 
|  | //$buildMapData = @file(getBuildMapUrl()); | 
|  |  | 
|  | $buildMapData = addRelengProjects($buildMapData); | 
|  | return $buildMapData; | 
|  | } | 
|  |  | 
|  |  | 
|  | $buildMapData = getBuildMap(); | 
|  | if (!$buildMapData) { | 
|  | echo "Error:  Cannot get project set data.  Check that the branch or tag exists.  Only branches from STEM 1.2.1 and newer are compatible."; | 
|  | exit(); | 
|  | } | 
|  |  | 
|  |  | 
|  | $data = processMapFile($buildMapData); | 
|  | //echo "<pre>"; | 
|  | //print_r($data); | 
|  | //echo "</pre>"; | 
|  |  | 
|  | $xml = buildProjectSetDOM($data); | 
|  |  | 
|  | Header("Content-type: text/xml"); | 
|  | echo $xml->saveXML(); | 
|  | exit(); | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** | 
|  |  | 
|  |  | 
|  | function buildWorkingSetXML($rootXML, $workingSets) | 
|  | { | 
|  | global $ignoredWorkingSets; | 
|  |  | 
|  | $seq = 0; | 
|  |  | 
|  | foreach ($workingSets as $workingSetName => $workingSetEntries) { | 
|  | if (!in_array($workingSetName, $ignoredWorkingSets)) { | 
|  | $wsXML = $rootXML->addChild("workingSets"); | 
|  | $wsXML->addAttribute("editPageId", "org.eclipse.jdt.ui.JavaWorkingSetPage"); | 
|  | $wsXML->addAttribute("id", time() ."_". $seq++); | 
|  | $wsXML->addAttribute("label", $workingSetName); | 
|  | $wsXML->addAttribute("name", $workingSetName); | 
|  |  | 
|  | foreach ($workingSetEntries as $workingSetEntry) { | 
|  | addWorkingSetEntry($wsXML, $workingSetEntry); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | function buildProjectSetXML($data) | 
|  | { | 
|  | $root = new SimpleXMLElement("<psf/>"); | 
|  | $root->addAttribute("version", "2.0"); | 
|  | buildProviderXML($root, $data); | 
|  | buildWorkingSetXML($root, $data); | 
|  | return $root; | 
|  | } | 
|  |  | 
|  | function buildProviderXML($xml, $workingSets) | 
|  | { | 
|  |  | 
|  |  | 
|  | $xml = $xml->addChild("provider"); | 
|  | $xml->addAttribute("id", PROVIDER_ID); | 
|  |  | 
|  | foreach ($workingSets as $workingSetName => $workingSetEntries) { | 
|  | if (!in_array($workingSetName, $ignoredWorkingSets)) { | 
|  | // Not an ignored working set.  Process. | 
|  |  | 
|  | foreach ($workingSetEntries as $workingSetEntry) { | 
|  | $projectRef = $xml->addChild("project"); | 
|  |  | 
|  | $entryString = PROVIDER_ENTRY_TEMPLATE; | 
|  | $entryString = str_replace("\$PATH\$", $workingSetEntry['path'], $entryString); | 
|  | $entryString = str_replace("\$NAME\$", $workingSetEntry['name'], $entryString); | 
|  |  | 
|  | $projectRef->addAttribute("reference", $entryString); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | function addWorkingSetEntry($wsXML, $workingSetEntry) | 
|  | { | 
|  | global $workingSetEntryTemplates; | 
|  |  | 
|  | $itemRef = $wsXML->addChild("item"); | 
|  |  | 
|  | if (array_key_exists($workingSetEntry['type'],$workingSetEntryTemplates)) { | 
|  | $attributes = $workingSetEntryTemplates[$workingSetEntry['type']]; | 
|  | } else { | 
|  | $attributes = $workingSetEntryTemplates['default']; | 
|  | } | 
|  |  | 
|  | foreach ($attributes as $attributeName => $attributeValue) { | 
|  | $attributeValue = str_replace("\$PATH\$", $workingSetEntry['path'], $attributeValue); | 
|  | $attributeValue = str_replace("\$NAME\$", $workingSetEntry['name'], $attributeValue); | 
|  | $itemRef->addAttribute($attributeName, $attributeValue); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  | */ | 
|  | ?> |