<br style="clear:both;height:1em;">
	<div id="leftcol">
		<div class="nav-logo">
			<a href="index.php"><img src="logo.png" style="margin-left:10px; width:155px"/></a>
		</div>
		<ul id="leftnav">
		<li class="partentry" >
		Documentation
		</li>
		<li class="separator"><div class="separator">
		<img src="triangle.gif" style="height:12px; margin-right: 2px; display:none"  /><img src="triangle-90.gif" style="display:none; margin-right: 2px" height="12px" />
		<a href="01-Introduction.php">Introduction</a></div>
		</li>
		<li class="separator"><div class="separator">
		<img src="triangle.gif" style="height:12px; margin-right: 2px; "  /><img src="triangle-90.gif" style="display:none; margin-right: 2px" height="12px" />
		<a href="02-GettingStarted.php">Getting Started</a></div>
		<ul style="display: none;" id="subToc_02-GettingStarted.html">
		<li id="02-GettingStarted.html#Installation.html" ><a href="02-GettingStarted.php#Installation.php" >Installation</a></li>
		<li id="02-GettingStarted.html#FirstExample.html" ><a href="02-GettingStarted.php#FirstExample.php" >First Example</a></li>
		<li id="02-GettingStarted.html#RCPMail.html" ><a href="02-GettingStarted.php#RCPMail.php" >RCP Mail Example</a></li>
		</ul>
		</li>
		<li class="separator"><div class="separator">
		<img src="triangle.gif" style="height:12px; margin-right: 2px; "  /><img src="triangle-90.gif" style="display:none; margin-right: 2px" height="12px" />
		<a href="03-Components.php">Components</a></div>
		<ul style="display: none;" id="subToc_03-Components.html">
		<li id="03-Components.html#FormComponent.html" ><a href="03-Components.php#FormComponent.php" >Form Component</a></li>
		<li id="03-Components.html#TreeComponent.html" ><a href="03-Components.php#TreeComponent.php" >Tree Component</a></li>
		<li id="03-Components.html#TreeFormComponent.html" ><a href="03-Components.php#TreeFormComponent.php" >Tree Form Component</a></li>
		<li id="03-Components.html#TableComponent.html" ><a href="03-Components.php#TableComponent.php" >Table Component</a></li>
		</ul>
		</li>
		<li class="separator"><div class="separator">
		<img src="triangle.gif" style="height:12px; margin-right: 2px; "  /><img src="triangle-90.gif" style="display:none; margin-right: 2px" height="12px" />
		<a href="04-Customization.php">Customization</a></div>
		<ul style="display: none;" id="subToc_04-Customization.html">
		<li id="04-Customization.html#ResourceManagers.html" ><a href="04-Customization.php#ResourceManagers.php" >Managing Resources</a></li>
		<li id="04-Customization.html#Providers.html" ><a href="04-Customization.php#Providers.php" >Providers</a></li>
		<li id="04-Customization.html#SelectionAndMenu.html" ><a href="04-Customization.php#SelectionAndMenu.php" >Selection And Menu</a></li>
		<li id="04-Customization.html#Builders.html" ><a href="04-Customization.php#Builders.php" >Builders</a></li>
		<li id="04-Customization.html#Factories.html" ><a href="04-Customization.php#Factories.php" >Factories</a></li>
		<li id="04-Customization.html#Viewers.html" ><a href="04-Customization.php#Viewers.php" >Viewers</a></li>
		</ul>
		</li>
		<li class="separator"><div class="separator">
		<img src="triangle.gif" style="height:12px; margin-right: 2px; "  /><img src="triangle-90.gif" style="display:none; margin-right: 2px" height="12px" />
		<a href="05-DSL.php">EMF Parsley DSL</a></div>
		<ul style="display: none;" id="subToc_05-DSL.html">
		<li id="05-DSL.html#xbase.html" ><a href="05-DSL.php#xbase.php" >Xbase features</a></li>
		</ul>
		</li>
		<li class="separator"><div class="separator">
		<img src="triangle.gif" style="height:12px; margin-right: 2px; display:none"  /><img src="triangle-90.gif" style="display:none; margin-right: 2px" height="12px" />
		<a href="06-AdvancedComponents.php">Advanced Components</a></div>
		</li>
		<li class="separator"><div class="separator">
		<img src="triangle.gif" style="height:12px; margin-right: 2px; "  /><img src="triangle-90.gif" style="display:none; margin-right: 2px" height="12px" />
		<a href="07-Eclipse4.php">Eclipse 4</a></div>
		<ul style="display: none;" id="subToc_07-Eclipse4.html">
		<li id="07-Eclipse4.html#GetFirstExample.html" ><a href="07-Eclipse4.php#GetFirstExample.php" >First Example Setup</a></li>
		<li id="07-Eclipse4.html#PrepareForEclipse4Application.html" ><a href="07-Eclipse4.php#PrepareForEclipse4Application.php" >Preparing for a pure Eclipse 4 Application</a></li>
		<li id="07-Eclipse4.html#CreateEclipse4Application.html" ><a href="07-Eclipse4.php#CreateEclipse4Application.php" >Create an Eclipse 4 Application</a></li>
		<li id="07-Eclipse4.html#Eclipse4ApplicationAndEMFParsley.html" ><a href="07-Eclipse4.php#Eclipse4ApplicationAndEMFParsley.php" >Using an EMF Parsley TreeComposite into an Eclipse 4 Part</a></li>
		<li id="07-Eclipse4.html#Eclipse4Save.html" ><a href="07-Eclipse4.php#Eclipse4Save.php" >Adding the dirty state and Save command</a></li>
		</ul>
		</li>
		<li class="partentry" >
		Appendix
		</li>
		<li class="separator"><div class="separator">
		<img src="triangle.gif" style="height:12px; margin-right: 2px; display:none"  /><img src="triangle-90.gif" style="display:none; margin-right: 2px" height="12px" />
		<a href="GettingSources.php">Getting Sources</a></div>
		</li>
		<li class="separator"><div class="separator">
		<img src="triangle.gif" style="height:12px; margin-right: 2px; display:none"  /><img src="triangle-90.gif" style="display:none; margin-right: 2px" height="12px" />
		<a href="Downloads.php">EMF Parsley - Downloads</a></div>
		</li>
		</ul>
	</div>
	<div id="midcolumn">
		<a name="GettingSources" ></a>
		<h1>Getting Sources</h1>
				
		<p>
		If you want to get the sources of EMF Parsley,
		for instance, to contribute new features and patches, you can get them
		via Git.
		</p>
		<p>
		Note that you need two different workspaces (and two different target platforms)
		if you want to materialize also the workspace for developing the <a href="http://eclipse.org/rap/" >RAP</a>
		version of Emf Parsley (see below).
		</p>
		<p>
		In both cases, you need a <a href="http://www.eclipse.org/Xtext/download.html" >"Full eclipse"</a> 
		from Xtext website or use the <a href="http://www.eclipse.org/downloads/" >eclipse DSL Package</a>
		(we use Xtend for many source files, and we do not put the generated files
		in the repository).
		</p>
		<p>
		We use <a href="http://www.eclipse.org/buckminster/" >Buckminster</a> as the
		building and materialization infrastructure.
		We provide an <a href="http://git.eclipse.org/c/emf-parsley/org.eclipse.emf-parsley.git/plain/devtools/org.eclipse.emf.parsley.contributor/workspace.ant" >ant script</a> which installs and runs Buckminster. 
		This will automatically materialize the sources in the workspace and setup
		the target platform, so that you will have everything that is necessary
		to have a working workspace with EMF Parsley sources.
		</p>
		<p>
		What this ant script will do in detail:
		</p>
		<p>
		<ul>
		  <li>installs Buckminster headless if not found;
		  	default path: <em>${user.home}/buckminster.parsley</em>.
		  	It can be changed by passing a path for the variable
		  	<em>buckminster.home</em>.</li>
		  <li>creates an eclipse workspace; 
		  	default: <em>${user.home}/workspaces/emf-parsley-sources</em>
		  	or <em>${user.home}/workspaces/emf-parsley-rap-sources</em>
		  	for target <em>materialize.workspace.rap</em>.
		  	It can be changed by passing a path for the 
		  	variable <em>WORKSPACE</em></li>
		  <li>clones the Emf Parsley git repository;
		  	default: <em>${user.home}/git/org.eclipse.emf-parsley</em>.
		  	It can be changed by passing a full path for the
		  	variable <em>git.clone.dest</em>.  Note that the repository will
		  	be cloned only if it is not found in the given path.</li>
		  <li>creates and sets a target platform</li>
		  <li>imports necessary projects in the created workspace</li>
		  <li>runs the MWE2 workflow for generating Xtext language infrastructure for the DSL 
		  	(in this phase, you should ignore possible Java compilation errors you see in the
		  	console)</li>
		  <li>sets some important workspace settings</li>
		</ul>
		</p>
		<p>
		Especially the first time (for cloning and materializing the target platform)
		the script might take several minutes.  (Target platform materialization
		might also fail due to network problems; in that case, try and run the
		script again).
		</p>
		<p>
		Run the ant script located <a href="http://git.eclipse.org/c/emf-parsley/org.eclipse.emf-parsley.git/plain/devtools/org.eclipse.emf.parsley.contributor/workspace.ant" >here</a>. 
		In unix you can use following command: 
		</p>
		<p>
		<div class="literallayout">
			<div class="incode">
				<p class="code">
					wget&nbsp;-N&nbsp;http:<span class="comment">//git.eclipse.org/c/emf-parsley/org.eclipse.emf-parsley.git/plain/devtools/org.eclipse.emf.parsley.contributor/workspace.ant</span>
				</p>
			</div>
		</div>
		</p>
		<p>
		and then run the script:
		</p>
		<p>
		<div class="literallayout">
			<div class="incode">
				<p class="code">
					ant&nbsp;-f&nbsp;workspace.ant
				</p>
			</div>
		</div>
		</p>
		<p>
		If you want the workspace for RAP version of Emf Parsley, run the script as
		follows:
		</p>
		<p>
		<div class="literallayout">
			<div class="incode">
				<p class="code">
					ant&nbsp;-f&nbsp;workspace.ant&nbsp;materialize.workspace.rap
				</p>
			</div>
		</div>
		</p>
		<p>
		You can pass custom path using the variables defined above; for instance
		</p>
		<p>
		<div class="literallayout">
			<div class="incode">
				<p class="code">
					ant&nbsp;-Dgit.clone.dest=/myrepos/emf-parsley&nbsp;-DWORKSPACE=/myworkspaces/parsley&nbsp;-f&nbsp;workspace.ant
				</p>
			</div>
		</div>
		</p>
		<p>
		After the script terminates successfully, you can open the materialized
		workspace with Eclipse (an automatic build will also start for compiling
		Xtend files).  The workspace is already setup with the correct target platform.
		</p>
		<div id="disqus_thread"></div>
		<script type="text/javascript" src="documentationRoot.js"></script>
		<script type="text/javascript">
		    /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
		    var disqus_shortname = 'xtext'; // required: replace example with your forum shortname
		
		    // The following are highly recommended additional parameters. Remove the slashes in front to use.
		    var disqus_identifier = 'GettingSources';
		    var disqus_url = documentationRoot+'GettingSources.php';
		
		    /* * * DON'T EDIT BELOW THIS LINE * * */
		    (function() {
		        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
		        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
		        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
		    })();
		</script>
 		<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
	</div>
	<br style="clear:both;height:1em;">
