<html>
<head>
<title>BPEL Designer Update Site</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="web/site.css" type="text/css"/>

<script type="text/javascript">
	var returnval = 0;
	var stylesheet, xmlFile, cache, doc;
	function init(){
		// NSCP 7.1+ / Mozilla 1.4.1+ / Safari
		// Use the standard DOM Level 2 technique, if it is supported
		if (document.implementation && document.implementation.createDocument) {
			xmlFile = document.implementation.createDocument("", "", null);
			stylesheet = document.implementation.createDocument("", "", null);
			if (xmlFile.load){
				xmlFile.load("site.xml");
				stylesheet.load("web/site.xsl");
			} else {
				alert("Document could not be loaded by browser.");
			}
			xmlFile.addEventListener("load", transform, false);
			stylesheet.addEventListener("load", transform, false);
		}
		//IE 6.0+ solution
		else if (window.ActiveXObject) {
			xmlFile = new ActiveXObject("msxml2.DOMDocument.3.0");
			xmlFile.async = false;
			xmlFile.load("site.xml");
			stylesheet = new ActiveXObject("msxml2.FreeThreadedDOMDocument.3.0");
			stylesheet.async = false;
			stylesheet.load("web/site.xsl");
			cache = new ActiveXObject("msxml2.XSLTemplate.3.0");
			cache.stylesheet = stylesheet;
			transformData();
		}
	}
	// separate transformation function for IE 6.0+
	function transformData(){
		var processor = cache.createProcessor();
		processor.input = xmlFile;
		processor.transform();
		data.innerHTML = processor.output;
	}
	// separate transformation function for NSCP 7.1+ and Mozilla 1.4.1+ 
	function transform(){
		returnval+=1;
		if (returnval==2){
			var processor = new XSLTProcessor();
			processor.importStylesheet(stylesheet); 
			doc = processor.transformToDocument(xmlFile);
			document.getElementById("data").innerHTML = doc.documentElement.innerHTML;
		}
	}
</script>
</head>
<body xxxonload="init();">

<div style="float: right;">
<b>Last Modified:</b> <script>document.writeln(document.lastModified)</script>
</div>


<h1 class="main" style="clear: both;">Eclipse BPEL Designer Update Site</h1>

To simplest way to install the designer is through the Eclipse Update mechanism. You
can get to it from the eclipse <b>Help -&gt; Software Updates -&gt; Find and Install ...</b>
menu:

<div style="text-align: center;">
 <img src="web/install.gif">
</div>

You need a build of <b>3.6</b> (Helios) <a href="http://download.eclipse.org/">Eclipse SDK</a>
for your platform and that's it. Then define a new Eclipse update site with the 
following location:
<pre class="main">
	<b>http://download.eclipse.org/bpel/update-site/</b>
</pre>

Please note that the update from this location will include all the necessary 
Eclipse components that are needed to run the BPEL Designer. Things like EMF, GEF, JEM,
and WST. If you have these already installed then most likely nothing besides the BPEL
designer will be installed. 
<p>
Eclipse version 3.6 was used for the most recent build.
<p>

<div id="data"><!-- this is where the transformed data goes --></div>
</body>
</html>
